aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorNeil Horman <nhorman@tuxdriver.com>2007-04-25 20:08:10 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:23:43 -0400
commit95c385b4d5a71b8ad552aecaa968ea46d7da2f6a (patch)
tree49d8e60418cb4eeb0c9ed79fd095af50f6ec6623 /include
parent502b093569e48db264831be7966e1c447de2f52f (diff)
[IPV6] ADDRCONF: Optimistic Duplicate Address Detection (RFC 4429) Support.
Nominally an autoconfigured IPv6 address is added to an interface in the Tentative state (as per RFC 2462). Addresses in this state remain in this state while the Duplicate Address Detection process operates on them to determine their uniqueness on the network. During this period, these tentative addresses may not be used for communication, increasing the time before a node may be able to communicate on a network. Using Optimistic Duplicate Address Detection, autoconfigured addresses may be used immediately for communication on the network, as long as certain rules are followed to avoid conflicts with other nodes during the Duplicate Address Detection process. Signed-off-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/if_addr.h1
-rw-r--r--include/linux/ipv6.h4
-rw-r--r--include/net/addrconf.h4
3 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/if_addr.h b/include/linux/if_addr.h
index d557e4ce9b6b..43f3bedaafd3 100644
--- a/include/linux/if_addr.h
+++ b/include/linux/if_addr.h
@@ -39,6 +39,7 @@ enum
39#define IFA_F_TEMPORARY IFA_F_SECONDARY 39#define IFA_F_TEMPORARY IFA_F_SECONDARY
40 40
41#define IFA_F_NODAD 0x02 41#define IFA_F_NODAD 0x02
42#define IFA_F_OPTIMISTIC 0x04
42#define IFA_F_HOMEADDRESS 0x10 43#define IFA_F_HOMEADDRESS 0x10
43#define IFA_F_DEPRECATED 0x20 44#define IFA_F_DEPRECATED 0x20
44#define IFA_F_TENTATIVE 0x40 45#define IFA_F_TENTATIVE 0x40
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index 713eb5eaa81f..e046b22a2222 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -178,6 +178,9 @@ struct ipv6_devconf {
178#endif 178#endif
179 __s32 proxy_ndp; 179 __s32 proxy_ndp;
180 __s32 accept_source_route; 180 __s32 accept_source_route;
181#ifdef CONFIG_IPV6_OPTIMISTIC_DAD
182 __s32 optimistic_dad;
183#endif
181 void *sysctl; 184 void *sysctl;
182}; 185};
183 186
@@ -208,6 +211,7 @@ enum {
208 DEVCONF_PROXY_NDP, 211 DEVCONF_PROXY_NDP,
209 __DEVCONF_OPTIMISTIC_DAD, 212 __DEVCONF_OPTIMISTIC_DAD,
210 DEVCONF_ACCEPT_SOURCE_ROUTE, 213 DEVCONF_ACCEPT_SOURCE_ROUTE,
214 DEVCONF_OPTIMISTIC_DAD,
211 DEVCONF_MAX 215 DEVCONF_MAX
212}; 216};
213 217
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index 88df8fc814e4..f3531d0bcd05 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -73,7 +73,9 @@ extern int ipv6_get_saddr(struct dst_entry *dst,
73extern int ipv6_dev_get_saddr(struct net_device *dev, 73extern int ipv6_dev_get_saddr(struct net_device *dev,
74 struct in6_addr *daddr, 74 struct in6_addr *daddr,
75 struct in6_addr *saddr); 75 struct in6_addr *saddr);
76extern int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *); 76extern int ipv6_get_lladdr(struct net_device *dev,
77 struct in6_addr *addr,
78 unsigned char banned_flags);
77extern int ipv6_rcv_saddr_equal(const struct sock *sk, 79extern int ipv6_rcv_saddr_equal(const struct sock *sk,
78 const struct sock *sk2); 80 const struct sock *sk2);
79extern void addrconf_join_solict(struct net_device *dev, 81extern void addrconf_join_solict(struct net_device *dev,