Blame view
include/net/ndisc.h
4.42 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 */ |
1da177e4c Linux-2.6.12-rc2 |
37 38 39 40 41 42 43 |
__ND_OPT_MAX }; #define MAX_RTR_SOLICITATION_DELAY HZ #define ND_REACHABLE_TIME (30*HZ) #define ND_RETRANS_TIMER HZ |
14c850212 [INET_SOCK]: Move... |
44 |
#include <linux/compiler.h> |
1da177e4c Linux-2.6.12-rc2 |
45 |
#include <linux/icmpv6.h> |
14c850212 [INET_SOCK]: Move... |
46 47 |
#include <linux/in6.h> #include <linux/types.h> |
1da177e4c Linux-2.6.12-rc2 |
48 |
#include <net/neighbour.h> |
14c850212 [INET_SOCK]: Move... |
49 50 |
struct ctl_table; |
14c850212 [INET_SOCK]: Move... |
51 52 53 54 |
struct inet6_dev; struct net_device; struct net_proto_family; struct sk_buff; |
1da177e4c Linux-2.6.12-rc2 |
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
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... |
71 72 |
__be32 reachable_time; __be32 retrans_timer; |
1da177e4c Linux-2.6.12-rc2 |
73 74 75 76 77 |
}; struct nd_opt_hdr { __u8 nd_opt_type; __u8 nd_opt_len; |
bc10502db net: use __packed... |
78 |
} __packed; |
1da177e4c Linux-2.6.12-rc2 |
79 |
|
2c2aba6c5 ipv6: Use univers... |
80 81 82 83 84 85 86 87 88 |
static inline u32 ndisc_hashfn(const void *pkey, const struct net_device *dev, __u32 *hash_rnd) { const u32 *p32 = pkey; return (((p32[0] ^ dev->ifindex) * hash_rnd[0]) + (p32[1] * hash_rnd[1]) + (p32[2] * hash_rnd[2]) + (p32[3] * hash_rnd[3])); } |
1da177e4c Linux-2.6.12-rc2 |
89 |
|
f83c7790d ipv6: Create fast... |
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
static inline struct neighbour *__ipv6_neigh_lookup(struct neigh_table *tbl, struct net_device *dev, const void *pkey) { struct neigh_hash_table *nht; const u32 *p32 = pkey; struct neighbour *n; u32 hash_val; rcu_read_lock_bh(); nht = rcu_dereference_bh(tbl->nht); hash_val = ndisc_hashfn(pkey, dev, nht->hash_rnd) >> (32 - nht->hash_shift); for (n = rcu_dereference_bh(nht->hash_buckets[hash_val]); n != NULL; n = rcu_dereference_bh(n->next)) { u32 *n32 = (u32 *) n->primary_key; if (n->dev == dev && ((n32[0] ^ p32[0]) | (n32[1] ^ p32[1]) | (n32[2] ^ p32[2]) | (n32[3] ^ p32[3])) == 0) { if (!atomic_inc_not_zero(&n->refcnt)) n = NULL; break; } } rcu_read_unlock_bh(); return n; } |
9b0f976f2 [INET]: Remove st... |
116 |
extern int ndisc_init(void); |
1da177e4c Linux-2.6.12-rc2 |
117 118 119 120 121 122 123 |
extern void ndisc_cleanup(void); extern int ndisc_rcv(struct sk_buff *skb); extern void ndisc_send_ns(struct net_device *dev, struct neighbour *neigh, |
9acd9f3ae [IPV6]: Make addr... |
124 125 126 |
const struct in6_addr *solicit, const struct in6_addr *daddr, const struct in6_addr *saddr); |
1da177e4c Linux-2.6.12-rc2 |
127 128 |
extern void ndisc_send_rs(struct net_device *dev, |
9acd9f3ae [IPV6]: Make addr... |
129 130 |
const struct in6_addr *saddr, const struct in6_addr *daddr); |
1da177e4c Linux-2.6.12-rc2 |
131 |
|
1da177e4c Linux-2.6.12-rc2 |
132 133 |
extern void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, |
9acd9f3ae [IPV6]: Make addr... |
134 |
const struct in6_addr *target); |
1da177e4c Linux-2.6.12-rc2 |
135 |
|
b71d1d426 inet: constify ip... |
136 137 |
extern int ndisc_mc_map(const struct in6_addr *addr, char *buf, struct net_device *dev, int dir); |
1da177e4c Linux-2.6.12-rc2 |
138 |
|
305d552ac bonding: send IPv... |
139 140 141 142 143 144 145 146 147 148 149 150 151 |
extern struct sk_buff *ndisc_build_skb(struct net_device *dev, const struct in6_addr *daddr, const struct in6_addr *saddr, struct icmp6hdr *icmp6h, const struct in6_addr *target, int llinfo); extern void ndisc_send_skb(struct sk_buff *skb, struct net_device *dev, struct neighbour *neigh, const struct in6_addr *daddr, const struct in6_addr *saddr, struct icmp6hdr *icmp6h); |
1da177e4c Linux-2.6.12-rc2 |
152 |
|
1da177e4c Linux-2.6.12-rc2 |
153 154 155 156 |
/* * IGMP */ |
9b0f976f2 [INET]: Remove st... |
157 |
extern int igmp6_init(void); |
1da177e4c Linux-2.6.12-rc2 |
158 159 160 161 162 163 |
extern void igmp6_cleanup(void); extern int igmp6_event_query(struct sk_buff *skb); extern int igmp6_event_report(struct sk_buff *skb); |
1da177e4c Linux-2.6.12-rc2 |
164 165 |
#ifdef CONFIG_SYSCTL |
14c850212 [INET_SOCK]: Move... |
166 |
extern int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, |
1da177e4c Linux-2.6.12-rc2 |
167 |
int write, |
1da177e4c Linux-2.6.12-rc2 |
168 169 170 |
void __user *buffer, size_t *lenp, loff_t *ppos); |
f221e726b sysctl: simplify ... |
171 172 |
int ndisc_ifinfo_sysctl_strategy(ctl_table *ctl, void __user *oldval, size_t __user *oldlenp, |
0686caa35 ndisc: Add missin... |
173 |
void __user *newval, size_t newlen); |
1da177e4c Linux-2.6.12-rc2 |
174 175 176 177 |
#endif extern void inet6_ifinfo_notify(int event, struct inet6_dev *idev); |
1da177e4c Linux-2.6.12-rc2 |
178 |
#endif |