summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorHannes Frederic Sowa <hannes@stressinduktion.org>2013-06-23 18:39:01 +0200
committerDavid S. Miller <davem@davemloft.net>2013-06-25 16:23:03 -0700
commitb7b1bfce0bb68bd8f6e62a28295922785cc63781 (patch)
tree212102b875b453496d86f8c448892bd90eb58c92 /include
parent51151a16a60f0a886a0b1e4a0697001198af50c4 (diff)
downloadlinux-b7b1bfce0bb68bd8f6e62a28295922785cc63781.tar.gz
linux-b7b1bfce0bb68bd8f6e62a28295922785cc63781.tar.bz2
linux-b7b1bfce0bb68bd8f6e62a28295922785cc63781.zip
ipv6: split duplicate address detection and router solicitation timer
This patch splits the timers for duplicate address detection and router solicitations apart. The router solicitations timer goes into inet6_dev and the dad timer stays in inet6_ifaddr. The reason behind this patch is to reduce the number of unneeded router solicitations send out by the host if additional link-local addresses are created. Currently we send out RS for every link-local address on an interface. If the RS timer fires we pick a source address with ipv6_get_lladdr. This change could hurt people adding additional link-local addresses and specifying these addresses in the radvd clients section because we no longer guarantee that we use every ll address as source address in router solicitations. Cc: Flavio Leitner <fleitner@redhat.com> Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org> Cc: David Stevens <dlstevens@us.ibm.com> Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Reviewed-by: Flavio Leitner <fbl@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/if_inet6.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index e07feb456d19..e4c5a2d2ba34 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -50,7 +50,7 @@ struct inet6_ifaddr {
int state;
- __u8 probes;
+ __u8 dad_probes;
__u8 flags;
__u16 scope;
@@ -58,7 +58,7 @@ struct inet6_ifaddr {
unsigned long cstamp; /* created timestamp */
unsigned long tstamp; /* updated timestamp */
- struct timer_list timer;
+ struct timer_list dad_timer;
struct inet6_dev *idev;
struct rt6_info *rt;
@@ -195,6 +195,10 @@ struct inet6_dev {
struct neigh_parms *nd_parms;
struct ipv6_devconf cnf;
struct ipv6_devstat stats;
+
+ struct timer_list rs_timer;
+ __u8 rs_probes;
+
unsigned long tstamp; /* ipv6InterfaceTable update timestamp */
struct rcu_head rcu;
};