Root/
1 | #ifndef _NDISC_H |
2 | #define _NDISC_H |
3 | |
4 | /* |
5 | * ICMP codes for neighbour discovery messages |
6 | */ |
7 | |
8 | #define NDISC_ROUTER_SOLICITATION 133 |
9 | #define NDISC_ROUTER_ADVERTISEMENT 134 |
10 | #define NDISC_NEIGHBOUR_SOLICITATION 135 |
11 | #define NDISC_NEIGHBOUR_ADVERTISEMENT 136 |
12 | #define NDISC_REDIRECT 137 |
13 | |
14 | /* |
15 | * Router type: cross-layer information from link-layer to |
16 | * IPv6 layer reported by certain link types (e.g., RFC4214). |
17 | */ |
18 | #define NDISC_NODETYPE_UNSPEC 0 /* unspecified (default) */ |
19 | #define NDISC_NODETYPE_HOST 1 /* host or unauthorized router */ |
20 | #define NDISC_NODETYPE_NODEFAULT 2 /* non-default router */ |
21 | #define NDISC_NODETYPE_DEFAULT 3 /* default router */ |
22 | |
23 | /* |
24 | * ndisc options |
25 | */ |
26 | |
27 | enum { |
28 | __ND_OPT_PREFIX_INFO_END = 0, |
29 | ND_OPT_SOURCE_LL_ADDR = 1, /* RFC2461 */ |
30 | ND_OPT_TARGET_LL_ADDR = 2, /* RFC2461 */ |
31 | ND_OPT_PREFIX_INFO = 3, /* RFC2461 */ |
32 | ND_OPT_REDIRECT_HDR = 4, /* RFC2461 */ |
33 | ND_OPT_MTU = 5, /* RFC2461 */ |
34 | __ND_OPT_ARRAY_MAX, |
35 | ND_OPT_ROUTE_INFO = 24, /* RFC4191 */ |
36 | ND_OPT_RDNSS = 25, /* RFC5006 */ |
37 | __ND_OPT_MAX |
38 | }; |
39 | |
40 | #define MAX_RTR_SOLICITATION_DELAY HZ |
41 | |
42 | #define ND_REACHABLE_TIME (30*HZ) |
43 | #define ND_RETRANS_TIMER HZ |
44 | |
45 | #define ND_MIN_RANDOM_FACTOR (1/2) |
46 | #define ND_MAX_RANDOM_FACTOR (3/2) |
47 | |
48 | #ifdef __KERNEL__ |
49 | |
50 | #include <linux/compiler.h> |
51 | #include <linux/icmpv6.h> |
52 | #include <linux/in6.h> |
53 | #include <linux/types.h> |
54 | |
55 | #include <net/neighbour.h> |
56 | |
57 | struct ctl_table; |
58 | struct inet6_dev; |
59 | struct net_device; |
60 | struct net_proto_family; |
61 | struct sk_buff; |
62 | |
63 | extern struct neigh_table nd_tbl; |
64 | |
65 | struct nd_msg { |
66 | struct icmp6hdr icmph; |
67 | struct in6_addr target; |
68 | __u8 opt[0]; |
69 | }; |
70 | |
71 | struct rs_msg { |
72 | struct icmp6hdr icmph; |
73 | __u8 opt[0]; |
74 | }; |
75 | |
76 | struct ra_msg { |
77 | struct icmp6hdr icmph; |
78 | __be32 reachable_time; |
79 | __be32 retrans_timer; |
80 | }; |
81 | |
82 | struct nd_opt_hdr { |
83 | __u8 nd_opt_type; |
84 | __u8 nd_opt_len; |
85 | } __attribute__((__packed__)); |
86 | |
87 | |
88 | extern int ndisc_init(void); |
89 | |
90 | extern void ndisc_cleanup(void); |
91 | |
92 | extern int ndisc_rcv(struct sk_buff *skb); |
93 | |
94 | extern void ndisc_send_ns(struct net_device *dev, |
95 | struct neighbour *neigh, |
96 | const struct in6_addr *solicit, |
97 | const struct in6_addr *daddr, |
98 | const struct in6_addr *saddr); |
99 | |
100 | extern void ndisc_send_rs(struct net_device *dev, |
101 | const struct in6_addr *saddr, |
102 | const struct in6_addr *daddr); |
103 | |
104 | extern void ndisc_send_redirect(struct sk_buff *skb, |
105 | struct neighbour *neigh, |
106 | const struct in6_addr *target); |
107 | |
108 | extern int ndisc_mc_map(struct in6_addr *addr, char *buf, struct net_device *dev, int dir); |
109 | |
110 | extern struct sk_buff *ndisc_build_skb(struct net_device *dev, |
111 | const struct in6_addr *daddr, |
112 | const struct in6_addr *saddr, |
113 | struct icmp6hdr *icmp6h, |
114 | const struct in6_addr *target, |
115 | int llinfo); |
116 | |
117 | extern void ndisc_send_skb(struct sk_buff *skb, |
118 | struct net_device *dev, |
119 | struct neighbour *neigh, |
120 | const struct in6_addr *daddr, |
121 | const struct in6_addr *saddr, |
122 | struct icmp6hdr *icmp6h); |
123 | |
124 | |
125 | |
126 | /* |
127 | * IGMP |
128 | */ |
129 | extern int igmp6_init(void); |
130 | |
131 | extern void igmp6_cleanup(void); |
132 | |
133 | extern int igmp6_event_query(struct sk_buff *skb); |
134 | |
135 | extern int igmp6_event_report(struct sk_buff *skb); |
136 | |
137 | |
138 | #ifdef CONFIG_SYSCTL |
139 | extern int ndisc_ifinfo_sysctl_change(struct ctl_table *ctl, |
140 | int write, |
141 | void __user *buffer, |
142 | size_t *lenp, |
143 | loff_t *ppos); |
144 | int ndisc_ifinfo_sysctl_strategy(ctl_table *ctl, |
145 | void __user *oldval, size_t __user *oldlenp, |
146 | void __user *newval, size_t newlen); |
147 | #endif |
148 | |
149 | extern void inet6_ifinfo_notify(int event, |
150 | struct inet6_dev *idev); |
151 | |
152 | static inline struct neighbour * ndisc_get_neigh(struct net_device *dev, const struct in6_addr *addr) |
153 | { |
154 | |
155 | if (dev) |
156 | return __neigh_lookup_errno(&nd_tbl, addr, dev); |
157 | |
158 | return ERR_PTR(-ENODEV); |
159 | } |
160 | |
161 | |
162 | #endif /* __KERNEL__ */ |
163 | |
164 | |
165 | #endif |
166 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9