Blame view
include/net/ndisc.h
5.43 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#ifndef _NDISC_H #define _NDISC_H /* * ICMP codes for neighbour discovery messages */ #define NDISC_ROUTER_SOLICITATION 133 #define NDISC_ROUTER_ADVERTISEMENT 134 #define NDISC_NEIGHBOUR_SOLICITATION 135 #define NDISC_NEIGHBOUR_ADVERTISEMENT 136 #define NDISC_REDIRECT 137 /* |
fadf6bf06 [IPV6] SIT: Add P... |
15 16 17 18 19 20 21 22 23 |
* Router type: cross-layer information from link-layer to * IPv6 layer reported by certain link types (e.g., RFC4214). */ #define NDISC_NODETYPE_UNSPEC 0 /* unspecified (default) */ #define NDISC_NODETYPE_HOST 1 /* host or unauthorized router */ #define NDISC_NODETYPE_NODEFAULT 2 /* non-default router */ #define NDISC_NODETYPE_DEFAULT 3 /* default router */ /* |
1da177e4c Linux-2.6.12-rc2 |
24 25 26 27 28 29 30 31 32 33 |
* ndisc options */ enum { __ND_OPT_PREFIX_INFO_END = 0, ND_OPT_SOURCE_LL_ADDR = 1, /* RFC2461 */ ND_OPT_TARGET_LL_ADDR = 2, /* RFC2461 */ ND_OPT_PREFIX_INFO = 3, /* RFC2461 */ ND_OPT_REDIRECT_HDR = 4, /* RFC2461 */ ND_OPT_MTU = 5, /* RFC2461 */ |
70ceb4f53 [IPV6]: ROUTE: Ad... |
34 35 |
__ND_OPT_ARRAY_MAX, ND_OPT_ROUTE_INFO = 24, /* RFC4191 */ |
31910575a [IPv6]: Export us... |
36 |
ND_OPT_RDNSS = 25, /* RFC5006 */ |
e35f30c13 Treat ND option 3... |
37 |
ND_OPT_DNSSL = 31, /* RFC6106 */ |
1da177e4c Linux-2.6.12-rc2 |
38 39 40 41 42 43 44 |
__ND_OPT_MAX }; #define MAX_RTR_SOLICITATION_DELAY HZ #define ND_REACHABLE_TIME (30*HZ) #define ND_RETRANS_TIMER HZ |
14c850212 [INET_SOCK]: Move... |
45 |
#include <linux/compiler.h> |
1da177e4c Linux-2.6.12-rc2 |
46 |
#include <linux/icmpv6.h> |
14c850212 [INET_SOCK]: Move... |
47 48 |
#include <linux/in6.h> #include <linux/types.h> |
30f2a5f37 ipv6: Export ndis... |
49 50 |
#include <linux/if_arp.h> #include <linux/netdevice.h> |
b14f243a4 net: Dont use ifi... |
51 |
#include <linux/hash.h> |
14c850212 [INET_SOCK]: Move... |
52 |
|
1da177e4c Linux-2.6.12-rc2 |
53 |
#include <net/neighbour.h> |
14c850212 [INET_SOCK]: Move... |
54 55 |
struct ctl_table; |
14c850212 [INET_SOCK]: Move... |
56 57 58 59 |
struct inet6_dev; struct net_device; struct net_proto_family; struct sk_buff; |
1da177e4c Linux-2.6.12-rc2 |
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
extern struct neigh_table nd_tbl; struct nd_msg { struct icmp6hdr icmph; struct in6_addr target; __u8 opt[0]; }; struct rs_msg { struct icmp6hdr icmph; __u8 opt[0]; }; struct ra_msg { struct icmp6hdr icmph; |
e69a4adc6 [IPV6]: Misc endi... |
76 77 |
__be32 reachable_time; __be32 retrans_timer; |
1da177e4c Linux-2.6.12-rc2 |
78 |
}; |
093d04d42 ipv6: Change skb-... |
79 80 81 82 83 84 |
struct rd_msg { struct icmp6hdr icmph; struct in6_addr target; struct in6_addr dest; __u8 opt[0]; }; |
1da177e4c Linux-2.6.12-rc2 |
85 86 87 |
struct nd_opt_hdr { __u8 nd_opt_type; __u8 nd_opt_len; |
bc10502db net: use __packed... |
88 |
} __packed; |
1da177e4c Linux-2.6.12-rc2 |
89 |
|
30f2a5f37 ipv6: Export ndis... |
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
/* ND options */ struct ndisc_options { struct nd_opt_hdr *nd_opt_array[__ND_OPT_ARRAY_MAX]; #ifdef CONFIG_IPV6_ROUTE_INFO struct nd_opt_hdr *nd_opts_ri; struct nd_opt_hdr *nd_opts_ri_end; #endif struct nd_opt_hdr *nd_useropts; struct nd_opt_hdr *nd_useropts_end; }; #define nd_opts_src_lladdr nd_opt_array[ND_OPT_SOURCE_LL_ADDR] #define nd_opts_tgt_lladdr nd_opt_array[ND_OPT_TARGET_LL_ADDR] #define nd_opts_pi nd_opt_array[ND_OPT_PREFIX_INFO] #define nd_opts_pi_end nd_opt_array[__ND_OPT_PREFIX_INFO_END] #define nd_opts_rh nd_opt_array[ND_OPT_REDIRECT_HDR] #define nd_opts_mtu nd_opt_array[ND_OPT_MTU] #define NDISC_OPT_SPACE(len) (((len)+2+7)&~7) |
3cc818a27 ndisc.h: Remove e... |
109 110 |
struct ndisc_options *ndisc_parse_options(u8 *opt, int opt_len, struct ndisc_options *ndopts); |
30f2a5f37 ipv6: Export ndis... |
111 112 113 114 115 116 117 |
/* * Return the padding between the option length and the start of the * link addr. Currently only IP-over-InfiniBand needs this, although * if RFC 3831 IPv6-over-Fibre Channel is ever implemented it may * also need a pad of 2. */ |
d9d10a309 ndisc: Add missin... |
118 |
static inline int ndisc_addr_option_pad(unsigned short type) |
30f2a5f37 ipv6: Export ndis... |
119 120 121 122 123 124 |
{ switch (type) { case ARPHRD_INFINIBAND: return 2; default: return 0; } } |
c558e9fca ndisc: Move ndisc... |
125 126 127 128 129 |
static inline int ndisc_opt_addr_space(struct net_device *dev) { return NDISC_OPT_SPACE(dev->addr_len + ndisc_addr_option_pad(dev->type)); } |
30f2a5f37 ipv6: Export ndis... |
130 131 132 133 134 135 |
static inline u8 *ndisc_opt_addr_data(struct nd_opt_hdr *p, struct net_device *dev) { u8 *lladdr = (u8 *)(p + 1); int lladdrlen = p->nd_opt_len << 3; int prepad = ndisc_addr_option_pad(dev->type); |
c558e9fca ndisc: Move ndisc... |
136 |
if (lladdrlen != ndisc_opt_addr_space(dev)) |
30f2a5f37 ipv6: Export ndis... |
137 138 139 |
return NULL; return lladdr + prepad; } |
2c2aba6c5 ipv6: Use univers... |
140 141 142 |
static inline u32 ndisc_hashfn(const void *pkey, const struct net_device *dev, __u32 *hash_rnd) { const u32 *p32 = pkey; |
b14f243a4 net: Dont use ifi... |
143 |
return (((p32[0] ^ hash32_ptr(dev)) * hash_rnd[0]) + |
2c2aba6c5 ipv6: Use univers... |
144 145 146 147 |
(p32[1] * hash_rnd[1]) + (p32[2] * hash_rnd[2]) + (p32[3] * hash_rnd[3])); } |
1da177e4c Linux-2.6.12-rc2 |
148 |
|
ac3175fe7 ndisc: Introduce ... |
149 |
static inline struct neighbour *__ipv6_neigh_lookup_noref(struct net_device *dev, const void *pkey) |
f83c7790d ipv6: Create fast... |
150 |
{ |
60395a20f neigh: Factor out... |
151 |
return ___neigh_lookup_noref(&nd_tbl, neigh_key_eq128, ndisc_hashfn, pkey, dev); |
ac3175fe7 ndisc: Introduce ... |
152 153 154 155 156 157 158 159 160 161 |
} static inline struct neighbour *__ipv6_neigh_lookup(struct net_device *dev, const void *pkey) { struct neighbour *n; rcu_read_lock_bh(); n = __ipv6_neigh_lookup_noref(dev, pkey); if (n && !atomic_inc_not_zero(&n->refcnt)) n = NULL; |
f83c7790d ipv6: Create fast... |
162 163 164 165 |
rcu_read_unlock_bh(); return n; } |
3cc818a27 ndisc.h: Remove e... |
166 167 |
int ndisc_init(void); int ndisc_late_init(void); |
1da177e4c Linux-2.6.12-rc2 |
168 |
|
3cc818a27 ndisc.h: Remove e... |
169 170 |
void ndisc_late_cleanup(void); void ndisc_cleanup(void); |
1da177e4c Linux-2.6.12-rc2 |
171 |
|
3cc818a27 ndisc.h: Remove e... |
172 |
int ndisc_rcv(struct sk_buff *skb); |
1da177e4c Linux-2.6.12-rc2 |
173 |
|
38cf595b1 ipv6: remove unus... |
174 |
void ndisc_send_ns(struct net_device *dev, const struct in6_addr *solicit, |
304d888b2 Revert "ipv6: ndi... |
175 |
const struct in6_addr *daddr, const struct in6_addr *saddr); |
1da177e4c Linux-2.6.12-rc2 |
176 |
|
3cc818a27 ndisc.h: Remove e... |
177 178 |
void ndisc_send_rs(struct net_device *dev, const struct in6_addr *saddr, const struct in6_addr *daddr); |
38cf595b1 ipv6: remove unus... |
179 |
void ndisc_send_na(struct net_device *dev, const struct in6_addr *daddr, |
3cc818a27 ndisc.h: Remove e... |
180 181 |
const struct in6_addr *solicited_addr, bool router, bool solicited, bool override, bool inc_opt); |
1da177e4c Linux-2.6.12-rc2 |
182 |
|
3cc818a27 ndisc.h: Remove e... |
183 |
void ndisc_send_redirect(struct sk_buff *skb, const struct in6_addr *target); |
1da177e4c Linux-2.6.12-rc2 |
184 |
|
3cc818a27 ndisc.h: Remove e... |
185 186 |
int ndisc_mc_map(const struct in6_addr *addr, char *buf, struct net_device *dev, int dir); |
1da177e4c Linux-2.6.12-rc2 |
187 |
|
1da177e4c Linux-2.6.12-rc2 |
188 189 190 191 |
/* * IGMP */ |
3cc818a27 ndisc.h: Remove e... |
192 |
int igmp6_init(void); |
1da177e4c Linux-2.6.12-rc2 |
193 |
|
3cc818a27 ndisc.h: Remove e... |
194 |
void igmp6_cleanup(void); |
1da177e4c Linux-2.6.12-rc2 |
195 |
|
3cc818a27 ndisc.h: Remove e... |
196 |
int igmp6_event_query(struct sk_buff *skb); |
1da177e4c Linux-2.6.12-rc2 |
197 |
|
3cc818a27 ndisc.h: Remove e... |
198 |
int igmp6_event_report(struct sk_buff *skb); |
1da177e4c Linux-2.6.12-rc2 |
199 |
|
1da177e4c Linux-2.6.12-rc2 |
200 201 |
#ifdef CONFIG_SYSCTL |
3cc818a27 ndisc.h: Remove e... |
202 203 |
int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, int write, void __user *buffer, size_t *lenp, loff_t *ppos); |
fedaf4ffc ndisc: Convert us... |
204 |
int ndisc_ifinfo_sysctl_strategy(struct ctl_table *ctl, |
f221e726b sysctl: simplify ... |
205 |
void __user *oldval, size_t __user *oldlenp, |
0686caa35 ndisc: Add missin... |
206 |
void __user *newval, size_t newlen); |
1da177e4c Linux-2.6.12-rc2 |
207 |
#endif |
3cc818a27 ndisc.h: Remove e... |
208 |
void inet6_ifinfo_notify(int event, struct inet6_dev *idev); |
1da177e4c Linux-2.6.12-rc2 |
209 |
|
1da177e4c Linux-2.6.12-rc2 |
210 |
#endif |