in6_var.h (60938) | in6_var.h (62587) |
---|---|
1/* $FreeBSD: head/sys/netinet6/in6_var.h 62587 2000-07-04 16:35:15Z itojun $ */ 2/* $KAME: in6_var.h,v 1.33 2000/05/17 05:07:26 jinmei Exp $ */ 3 |
|
1/* 2 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 46 unchanged lines hidden (view full) --- 55 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 56 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 57 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 58 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 59 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 60 * SUCH DAMAGE. 61 * 62 * @(#)in_var.h 8.1 (Berkeley) 6/10/93 | 4/* 5 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright --- 46 unchanged lines hidden (view full) --- 58 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 59 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 60 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 61 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 62 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 63 * SUCH DAMAGE. 64 * 65 * @(#)in_var.h 8.1 (Berkeley) 6/10/93 |
63 * $FreeBSD: head/sys/netinet6/in6_var.h 60938 2000-05-26 02:09:24Z jake $ | |
64 */ 65 | 66 */ 67 |
66#ifndef _NETINET6_IN6_VAR_H_ 67#define _NETINET6_IN6_VAR_H_ | 68#ifndef _NETINET6_IN6_VAR_H_ 69#define _NETINET6_IN6_VAR_H_ |
68 69/* 70 * Interface address, Internet version. One of these structures 71 * is allocated for each interface with an Internet address. 72 * The ifaddr structure contains the protocol-independent part 73 * of the structure and is assumed to be first. 74 */ 75 76/* 77 * pltime/vltime are just for future reference (required to implements 2 78 * hour rule for hosts). they should never be modified by nd6_timeout or 79 * anywhere else. 80 * userland -> kernel: accept pltime/vltime 81 * kernel -> userland: throuw up everything 82 * in kernel: modify preferred/expire only 83 */ 84struct in6_addrlifetime { | 70 71/* 72 * Interface address, Internet version. One of these structures 73 * is allocated for each interface with an Internet address. 74 * The ifaddr structure contains the protocol-independent part 75 * of the structure and is assumed to be first. 76 */ 77 78/* 79 * pltime/vltime are just for future reference (required to implements 2 80 * hour rule for hosts). they should never be modified by nd6_timeout or 81 * anywhere else. 82 * userland -> kernel: accept pltime/vltime 83 * kernel -> userland: throuw up everything 84 * in kernel: modify preferred/expire only 85 */ 86struct in6_addrlifetime { |
85 time_t ia6t_expire; /* valid lifetime expiration time */ 86 time_t ia6t_preferred; /* preferred lifetime expiration time */ 87 u_int32_t ia6t_vltime; /* valid lifetime */ 88 u_int32_t ia6t_pltime; /* prefix lifetime */ | 87 time_t ia6t_expire; /* valid lifetime expiration time */ 88 time_t ia6t_preferred; /* preferred lifetime expiration time */ 89 u_int32_t ia6t_vltime; /* valid lifetime */ 90 u_int32_t ia6t_pltime; /* prefix lifetime */ |
89}; 90 91struct in6_ifaddr { 92 struct ifaddr ia_ifa; /* protocol-independent info */ 93#define ia_ifp ia_ifa.ifa_ifp | 91}; 92 93struct in6_ifaddr { 94 struct ifaddr ia_ifa; /* protocol-independent info */ 95#define ia_ifp ia_ifa.ifa_ifp |
94#define ia_flags ia_ifa.ifa_flags | 96#define ia_flags ia_ifa.ifa_flags |
95 struct sockaddr_in6 ia_addr; /* interface address */ 96 struct sockaddr_in6 ia_net; /* network number of interface */ 97 struct sockaddr_in6 ia_dstaddr; /* space for destination addr */ 98 struct sockaddr_in6 ia_prefixmask; /* prefix mask */ | 97 struct sockaddr_in6 ia_addr; /* interface address */ 98 struct sockaddr_in6 ia_net; /* network number of interface */ 99 struct sockaddr_in6 ia_dstaddr; /* space for destination addr */ 100 struct sockaddr_in6 ia_prefixmask; /* prefix mask */ |
99 u_int32_t ia_plen; /* prefix length */ | 101 u_int32_t ia_plen; /* prefix length */ |
100 struct in6_ifaddr *ia_next; /* next in6 list of IP6 addresses */ 101 int ia6_flags; 102 | 102 struct in6_ifaddr *ia_next; /* next in6 list of IP6 addresses */ 103 int ia6_flags; 104 |
103 struct in6_addrlifetime ia6_lifetime; /* NULL = infty */ 104 struct ifprefix *ia6_ifpr; /* back pointer to ifprefix */ | 105 struct in6_addrlifetime ia6_lifetime; /* NULL = infty */ 106 struct ifprefix *ia6_ifpr; /* back pointer to ifprefix */ |
105}; 106 107/* 108 * IPv6 interface statistics, as defined in RFC2465 Ipv6IfStatsEntry (p12). 109 */ 110struct in6_ifstat { | 107}; 108 109/* 110 * IPv6 interface statistics, as defined in RFC2465 Ipv6IfStatsEntry (p12). 111 */ 112struct in6_ifstat { |
111 u_int64_t ifs6_in_receive; /* # of total input datagram */ 112 u_int64_t ifs6_in_hdrerr; /* # of datagrams with invalid hdr */ 113 u_int64_t ifs6_in_toobig; /* # of datagrams exceeded MTU */ 114 u_int64_t ifs6_in_noroute; /* # of datagrams with no route */ 115 u_int64_t ifs6_in_addrerr; /* # of datagrams with invalid dst */ 116 u_int64_t ifs6_in_protounknown; /* # of datagrams with unknown proto */ | 113 u_quad_t ifs6_in_receive; /* # of total input datagram */ 114 u_quad_t ifs6_in_hdrerr; /* # of datagrams with invalid hdr */ 115 u_quad_t ifs6_in_toobig; /* # of datagrams exceeded MTU */ 116 u_quad_t ifs6_in_noroute; /* # of datagrams with no route */ 117 u_quad_t ifs6_in_addrerr; /* # of datagrams with invalid dst */ 118 u_quad_t ifs6_in_protounknown; /* # of datagrams with unknown proto */ |
117 /* NOTE: increment on final dst if */ | 119 /* NOTE: increment on final dst if */ |
118 u_int64_t ifs6_in_truncated; /* # of truncated datagrams */ 119 u_int64_t ifs6_in_discard; /* # of discarded datagrams */ | 120 u_quad_t ifs6_in_truncated; /* # of truncated datagrams */ 121 u_quad_t ifs6_in_discard; /* # of discarded datagrams */ |
120 /* NOTE: fragment timeout is not here */ | 122 /* NOTE: fragment timeout is not here */ |
121 u_int64_t ifs6_in_deliver; /* # of datagrams delivered to ULP */ | 123 u_quad_t ifs6_in_deliver; /* # of datagrams delivered to ULP */ |
122 /* NOTE: increment on final dst if */ | 124 /* NOTE: increment on final dst if */ |
123 u_int64_t ifs6_out_forward; /* # of datagrams forwarded */ | 125 u_quad_t ifs6_out_forward; /* # of datagrams forwarded */ |
124 /* NOTE: increment on outgoing if */ | 126 /* NOTE: increment on outgoing if */ |
125 u_int64_t ifs6_out_request; /* # of outgoing datagrams from ULP */ | 127 u_quad_t ifs6_out_request; /* # of outgoing datagrams from ULP */ |
126 /* NOTE: does not include forwrads */ | 128 /* NOTE: does not include forwrads */ |
127 u_int64_t ifs6_out_discard; /* # of discarded datagrams */ 128 u_int64_t ifs6_out_fragok; /* # of datagrams fragmented */ 129 u_int64_t ifs6_out_fragfail; /* # of datagrams failed on fragment */ 130 u_int64_t ifs6_out_fragcreat; /* # of fragment datagrams */ | 129 u_quad_t ifs6_out_discard; /* # of discarded datagrams */ 130 u_quad_t ifs6_out_fragok; /* # of datagrams fragmented */ 131 u_quad_t ifs6_out_fragfail; /* # of datagrams failed on fragment */ 132 u_quad_t ifs6_out_fragcreat; /* # of fragment datagrams */ |
131 /* NOTE: this is # after fragment */ | 133 /* NOTE: this is # after fragment */ |
132 u_int64_t ifs6_reass_reqd; /* # of incoming fragmented packets */ | 134 u_quad_t ifs6_reass_reqd; /* # of incoming fragmented packets */ |
133 /* NOTE: increment on final dst if */ | 135 /* NOTE: increment on final dst if */ |
134 u_int64_t ifs6_reass_ok; /* # of reassembled packets */ | 136 u_quad_t ifs6_reass_ok; /* # of reassembled packets */ |
135 /* NOTE: this is # after reass */ 136 /* NOTE: increment on final dst if */ | 137 /* NOTE: this is # after reass */ 138 /* NOTE: increment on final dst if */ |
137 u_int64_t ifs6_reass_fail; /* # of reass failures */ | 139 u_quad_t ifs6_reass_fail; /* # of reass failures */ |
138 /* NOTE: may not be packet count */ 139 /* NOTE: increment on final dst if */ | 140 /* NOTE: may not be packet count */ 141 /* NOTE: increment on final dst if */ |
140 u_int64_t ifs6_in_mcast; /* # of inbound multicast datagrams */ 141 u_int64_t ifs6_out_mcast; /* # of outbound multicast datagrams */ | 142 u_quad_t ifs6_in_mcast; /* # of inbound multicast datagrams */ 143 u_quad_t ifs6_out_mcast; /* # of outbound multicast datagrams */ |
142}; 143 144/* 145 * ICMPv6 interface statistics, as defined in RFC2466 Ipv6IfIcmpEntry. 146 * XXX: I'm not sure if this file is the right place for this structure... 147 */ 148struct icmp6_ifstat { 149 /* 150 * Input statistics 151 */ 152 /* ipv6IfIcmpInMsgs, total # of input messages */ | 144}; 145 146/* 147 * ICMPv6 interface statistics, as defined in RFC2466 Ipv6IfIcmpEntry. 148 * XXX: I'm not sure if this file is the right place for this structure... 149 */ 150struct icmp6_ifstat { 151 /* 152 * Input statistics 153 */ 154 /* ipv6IfIcmpInMsgs, total # of input messages */ |
153 u_int64_t ifs6_in_msg; | 155 u_quad_t ifs6_in_msg; |
154 /* ipv6IfIcmpInErrors, # of input error messages */ | 156 /* ipv6IfIcmpInErrors, # of input error messages */ |
155 u_int64_t ifs6_in_error; | 157 u_quad_t ifs6_in_error; |
156 /* ipv6IfIcmpInDestUnreachs, # of input dest unreach errors */ | 158 /* ipv6IfIcmpInDestUnreachs, # of input dest unreach errors */ |
157 u_int64_t ifs6_in_dstunreach; | 159 u_quad_t ifs6_in_dstunreach; |
158 /* ipv6IfIcmpInAdminProhibs, # of input administratively prohibited errs */ | 160 /* ipv6IfIcmpInAdminProhibs, # of input administratively prohibited errs */ |
159 u_int64_t ifs6_in_adminprohib; | 161 u_quad_t ifs6_in_adminprohib; |
160 /* ipv6IfIcmpInTimeExcds, # of input time exceeded errors */ | 162 /* ipv6IfIcmpInTimeExcds, # of input time exceeded errors */ |
161 u_int64_t ifs6_in_timeexceed; | 163 u_quad_t ifs6_in_timeexceed; |
162 /* ipv6IfIcmpInParmProblems, # of input parameter problem errors */ | 164 /* ipv6IfIcmpInParmProblems, # of input parameter problem errors */ |
163 u_int64_t ifs6_in_paramprob; | 165 u_quad_t ifs6_in_paramprob; |
164 /* ipv6IfIcmpInPktTooBigs, # of input packet too big errors */ | 166 /* ipv6IfIcmpInPktTooBigs, # of input packet too big errors */ |
165 u_int64_t ifs6_in_pkttoobig; | 167 u_quad_t ifs6_in_pkttoobig; |
166 /* ipv6IfIcmpInEchos, # of input echo requests */ | 168 /* ipv6IfIcmpInEchos, # of input echo requests */ |
167 u_int64_t ifs6_in_echo; | 169 u_quad_t ifs6_in_echo; |
168 /* ipv6IfIcmpInEchoReplies, # of input echo replies */ | 170 /* ipv6IfIcmpInEchoReplies, # of input echo replies */ |
169 u_int64_t ifs6_in_echoreply; | 171 u_quad_t ifs6_in_echoreply; |
170 /* ipv6IfIcmpInRouterSolicits, # of input router solicitations */ | 172 /* ipv6IfIcmpInRouterSolicits, # of input router solicitations */ |
171 u_int64_t ifs6_in_routersolicit; | 173 u_quad_t ifs6_in_routersolicit; |
172 /* ipv6IfIcmpInRouterAdvertisements, # of input router advertisements */ | 174 /* ipv6IfIcmpInRouterAdvertisements, # of input router advertisements */ |
173 u_int64_t ifs6_in_routeradvert; | 175 u_quad_t ifs6_in_routeradvert; |
174 /* ipv6IfIcmpInNeighborSolicits, # of input neighbor solicitations */ | 176 /* ipv6IfIcmpInNeighborSolicits, # of input neighbor solicitations */ |
175 u_int64_t ifs6_in_neighborsolicit; | 177 u_quad_t ifs6_in_neighborsolicit; |
176 /* ipv6IfIcmpInNeighborAdvertisements, # of input neighbor advertisements */ | 178 /* ipv6IfIcmpInNeighborAdvertisements, # of input neighbor advertisements */ |
177 u_int64_t ifs6_in_neighboradvert; | 179 u_quad_t ifs6_in_neighboradvert; |
178 /* ipv6IfIcmpInRedirects, # of input redirects */ | 180 /* ipv6IfIcmpInRedirects, # of input redirects */ |
179 u_int64_t ifs6_in_redirect; | 181 u_quad_t ifs6_in_redirect; |
180 /* ipv6IfIcmpInGroupMembQueries, # of input MLD queries */ | 182 /* ipv6IfIcmpInGroupMembQueries, # of input MLD queries */ |
181 u_int64_t ifs6_in_mldquery; | 183 u_quad_t ifs6_in_mldquery; |
182 /* ipv6IfIcmpInGroupMembResponses, # of input MLD reports */ | 184 /* ipv6IfIcmpInGroupMembResponses, # of input MLD reports */ |
183 u_int64_t ifs6_in_mldreport; | 185 u_quad_t ifs6_in_mldreport; |
184 /* ipv6IfIcmpInGroupMembReductions, # of input MLD done */ | 186 /* ipv6IfIcmpInGroupMembReductions, # of input MLD done */ |
185 u_int64_t ifs6_in_mlddone; | 187 u_quad_t ifs6_in_mlddone; |
186 187 /* 188 * Output statistics. We should solve unresolved routing problem... 189 */ 190 /* ipv6IfIcmpOutMsgs, total # of output messages */ | 188 189 /* 190 * Output statistics. We should solve unresolved routing problem... 191 */ 192 /* ipv6IfIcmpOutMsgs, total # of output messages */ |
191 u_int64_t ifs6_out_msg; | 193 u_quad_t ifs6_out_msg; |
192 /* ipv6IfIcmpOutErrors, # of output error messages */ | 194 /* ipv6IfIcmpOutErrors, # of output error messages */ |
193 u_int64_t ifs6_out_error; | 195 u_quad_t ifs6_out_error; |
194 /* ipv6IfIcmpOutDestUnreachs, # of output dest unreach errors */ | 196 /* ipv6IfIcmpOutDestUnreachs, # of output dest unreach errors */ |
195 u_int64_t ifs6_out_dstunreach; | 197 u_quad_t ifs6_out_dstunreach; |
196 /* ipv6IfIcmpOutAdminProhibs, # of output administratively prohibited errs */ | 198 /* ipv6IfIcmpOutAdminProhibs, # of output administratively prohibited errs */ |
197 u_int64_t ifs6_out_adminprohib; | 199 u_quad_t ifs6_out_adminprohib; |
198 /* ipv6IfIcmpOutTimeExcds, # of output time exceeded errors */ | 200 /* ipv6IfIcmpOutTimeExcds, # of output time exceeded errors */ |
199 u_int64_t ifs6_out_timeexceed; | 201 u_quad_t ifs6_out_timeexceed; |
200 /* ipv6IfIcmpOutParmProblems, # of output parameter problem errors */ | 202 /* ipv6IfIcmpOutParmProblems, # of output parameter problem errors */ |
201 u_int64_t ifs6_out_paramprob; | 203 u_quad_t ifs6_out_paramprob; |
202 /* ipv6IfIcmpOutPktTooBigs, # of output packet too big errors */ | 204 /* ipv6IfIcmpOutPktTooBigs, # of output packet too big errors */ |
203 u_int64_t ifs6_out_pkttoobig; | 205 u_quad_t ifs6_out_pkttoobig; |
204 /* ipv6IfIcmpOutEchos, # of output echo requests */ | 206 /* ipv6IfIcmpOutEchos, # of output echo requests */ |
205 u_int64_t ifs6_out_echo; | 207 u_quad_t ifs6_out_echo; |
206 /* ipv6IfIcmpOutEchoReplies, # of output echo replies */ | 208 /* ipv6IfIcmpOutEchoReplies, # of output echo replies */ |
207 u_int64_t ifs6_out_echoreply; | 209 u_quad_t ifs6_out_echoreply; |
208 /* ipv6IfIcmpOutRouterSolicits, # of output router solicitations */ | 210 /* ipv6IfIcmpOutRouterSolicits, # of output router solicitations */ |
209 u_int64_t ifs6_out_routersolicit; | 211 u_quad_t ifs6_out_routersolicit; |
210 /* ipv6IfIcmpOutRouterAdvertisements, # of output router advertisements */ | 212 /* ipv6IfIcmpOutRouterAdvertisements, # of output router advertisements */ |
211 u_int64_t ifs6_out_routeradvert; | 213 u_quad_t ifs6_out_routeradvert; |
212 /* ipv6IfIcmpOutNeighborSolicits, # of output neighbor solicitations */ | 214 /* ipv6IfIcmpOutNeighborSolicits, # of output neighbor solicitations */ |
213 u_int64_t ifs6_out_neighborsolicit; | 215 u_quad_t ifs6_out_neighborsolicit; |
214 /* ipv6IfIcmpOutNeighborAdvertisements, # of output neighbor advertisements */ | 216 /* ipv6IfIcmpOutNeighborAdvertisements, # of output neighbor advertisements */ |
215 u_int64_t ifs6_out_neighboradvert; | 217 u_quad_t ifs6_out_neighboradvert; |
216 /* ipv6IfIcmpOutRedirects, # of output redirects */ | 218 /* ipv6IfIcmpOutRedirects, # of output redirects */ |
217 u_int64_t ifs6_out_redirect; | 219 u_quad_t ifs6_out_redirect; |
218 /* ipv6IfIcmpOutGroupMembQueries, # of output MLD queries */ | 220 /* ipv6IfIcmpOutGroupMembQueries, # of output MLD queries */ |
219 u_int64_t ifs6_out_mldquery; | 221 u_quad_t ifs6_out_mldquery; |
220 /* ipv6IfIcmpOutGroupMembResponses, # of output MLD reports */ | 222 /* ipv6IfIcmpOutGroupMembResponses, # of output MLD reports */ |
221 u_int64_t ifs6_out_mldreport; | 223 u_quad_t ifs6_out_mldreport; |
222 /* ipv6IfIcmpOutGroupMembReductions, # of output MLD done */ | 224 /* ipv6IfIcmpOutGroupMembReductions, # of output MLD done */ |
223 u_int64_t ifs6_out_mlddone; | 225 u_quad_t ifs6_out_mlddone; |
224}; 225 226struct in6_ifreq { 227 char ifr_name[IFNAMSIZ]; 228 union { 229 struct sockaddr_in6 ifru_addr; 230 struct sockaddr_in6 ifru_dstaddr; 231 short ifru_flags; 232 int ifru_flags6; 233 int ifru_metric; 234 caddr_t ifru_data; | 226}; 227 228struct in6_ifreq { 229 char ifr_name[IFNAMSIZ]; 230 union { 231 struct sockaddr_in6 ifru_addr; 232 struct sockaddr_in6 ifru_dstaddr; 233 short ifru_flags; 234 int ifru_flags6; 235 int ifru_metric; 236 caddr_t ifru_data; |
235 struct in6_addrlifetime ifru_lifetime; 236 struct in6_ifstat ifru_stat; 237 struct icmp6_ifstat ifru_icmp6stat; | 237 struct in6_addrlifetime ifru_lifetime; 238 struct in6_ifstat ifru_stat; 239 struct icmp6_ifstat ifru_icmp6stat; 240 u_int32_t ifru_scope_id[16]; |
238 } ifr_ifru; 239}; 240 241struct in6_aliasreq { 242 char ifra_name[IFNAMSIZ]; 243 struct sockaddr_in6 ifra_addr; 244 struct sockaddr_in6 ifra_dstaddr; 245 struct sockaddr_in6 ifra_prefixmask; 246 int ifra_flags; | 241 } ifr_ifru; 242}; 243 244struct in6_aliasreq { 245 char ifra_name[IFNAMSIZ]; 246 struct sockaddr_in6 ifra_addr; 247 struct sockaddr_in6 ifra_dstaddr; 248 struct sockaddr_in6 ifra_prefixmask; 249 int ifra_flags; |
247 struct in6_addrlifetime ifra_lifetime; | 250 struct in6_addrlifetime ifra_lifetime; |
248}; 249 250/* prefix type macro */ | 251}; 252 253/* prefix type macro */ |
251#define IN6_PREFIX_ND 1 252#define IN6_PREFIX_RR 2 | 254#define IN6_PREFIX_ND 1 255#define IN6_PREFIX_RR 2 |
253 254/* 255 * prefix related flags passed between kernel(NDP related part) and 256 * user land command(ifconfig) and daemon(rtadvd). 257 */ 258struct in6_prflags { 259 struct prf_ra { | 256 257/* 258 * prefix related flags passed between kernel(NDP related part) and 259 * user land command(ifconfig) and daemon(rtadvd). 260 */ 261struct in6_prflags { 262 struct prf_ra { |
260 u_char onlink : 1; 261 u_char autonomous : 1; 262 u_char reserved : 6; | 263 u_char onlink : 1; 264 u_char autonomous : 1; 265 u_char reserved : 6; |
263 } prf_ra; | 266 } prf_ra; |
264 u_char prf_reserved1; 265 u_short prf_reserved2; | 267 u_char prf_reserved1; 268 u_short prf_reserved2; |
266 /* want to put this on 4byte offset */ 267 struct prf_rr { | 269 /* want to put this on 4byte offset */ 270 struct prf_rr { |
268 u_char decrvalid : 1; 269 u_char decrprefd : 1; 270 u_char reserved : 6; | 271 u_char decrvalid : 1; 272 u_char decrprefd : 1; 273 u_char reserved : 6; |
271 } prf_rr; | 274 } prf_rr; |
272 u_char prf_reserved3; 273 u_short prf_reserved4; | 275 u_char prf_reserved3; 276 u_short prf_reserved4; |
274}; 275 276struct in6_prefixreq { 277 char ipr_name[IFNAMSIZ]; 278 u_char ipr_origin; 279 u_char ipr_plen; | 277}; 278 279struct in6_prefixreq { 280 char ipr_name[IFNAMSIZ]; 281 u_char ipr_origin; 282 u_char ipr_plen; |
280 u_int32_t ipr_vltime; 281 u_int32_t ipr_pltime; 282 struct in6_prflags ipr_flags; | 283 u_int32_t ipr_vltime; 284 u_int32_t ipr_pltime; 285 struct in6_prflags ipr_flags; |
283 struct sockaddr_in6 ipr_prefix; 284}; 285 | 286 struct sockaddr_in6 ipr_prefix; 287}; 288 |
286#define PR_ORIG_RA 0 287#define PR_ORIG_RR 1 288#define PR_ORIG_STATIC 2 289#define PR_ORIG_KERNEL 3 | 289#define PR_ORIG_RA 0 290#define PR_ORIG_RR 1 291#define PR_ORIG_STATIC 2 292#define PR_ORIG_KERNEL 3 |
290 | 293 |
291#define ipr_raf_onlink ipr_flags.prf_ra.onlink 292#define ipr_raf_auto ipr_flags.prf_ra.autonomous | 294#define ipr_raf_onlink ipr_flags.prf_ra.onlink 295#define ipr_raf_auto ipr_flags.prf_ra.autonomous |
293 | 296 |
294#define ipr_statef_onlink ipr_flags.prf_state.onlink | 297#define ipr_statef_onlink ipr_flags.prf_state.onlink |
295 | 298 |
296#define ipr_rrf_decrvalid ipr_flags.prf_rr.decrvalid 297#define ipr_rrf_decrprefd ipr_flags.prf_rr.decrprefd | 299#define ipr_rrf_decrvalid ipr_flags.prf_rr.decrvalid 300#define ipr_rrf_decrprefd ipr_flags.prf_rr.decrprefd |
298 299struct in6_rrenumreq { 300 char irr_name[IFNAMSIZ]; 301 u_char irr_origin; 302 u_char irr_m_len; /* match len for matchprefix */ 303 u_char irr_m_minlen; /* minlen for matching prefix */ 304 u_char irr_m_maxlen; /* maxlen for matching prefix */ 305 u_char irr_u_uselen; /* uselen for adding prefix */ 306 u_char irr_u_keeplen; /* keeplen from matching prefix */ | 301 302struct in6_rrenumreq { 303 char irr_name[IFNAMSIZ]; 304 u_char irr_origin; 305 u_char irr_m_len; /* match len for matchprefix */ 306 u_char irr_m_minlen; /* minlen for matching prefix */ 307 u_char irr_m_maxlen; /* maxlen for matching prefix */ 308 u_char irr_u_uselen; /* uselen for adding prefix */ 309 u_char irr_u_keeplen; /* keeplen from matching prefix */ |
307 struct irr_raflagmask { 308 u_char onlink : 1; 309 u_char autonomous : 1; 310 u_char reserved : 6; | 310 struct irr_raflagmask { 311 u_char onlink : 1; 312 u_char autonomous : 1; 313 u_char reserved : 6; |
311 } irr_raflagmask; | 314 } irr_raflagmask; |
312 u_int32_t irr_vltime; 313 u_int32_t irr_pltime; 314 struct in6_prflags irr_flags; | 315 u_int32_t irr_vltime; 316 u_int32_t irr_pltime; 317 struct in6_prflags irr_flags; |
315 struct sockaddr_in6 irr_matchprefix; 316 struct sockaddr_in6 irr_useprefix; 317}; 318 | 318 struct sockaddr_in6 irr_matchprefix; 319 struct sockaddr_in6 irr_useprefix; 320}; 321 |
319#define irr_raf_mask_onlink irr_raflagmask.onlink 320#define irr_raf_mask_auto irr_raflagmask.autonomous 321#define irr_raf_mask_reserved irr_raflagmask.reserved | 322#define irr_raf_mask_onlink irr_raflagmask.onlink 323#define irr_raf_mask_auto irr_raflagmask.autonomous 324#define irr_raf_mask_reserved irr_raflagmask.reserved |
322 | 325 |
323#define irr_raf_onlink irr_flags.prf_ra.onlink 324#define irr_raf_auto irr_flags.prf_ra.autonomous | 326#define irr_raf_onlink irr_flags.prf_ra.onlink 327#define irr_raf_auto irr_flags.prf_ra.autonomous |
325 | 328 |
326#define irr_statef_onlink irr_flags.prf_state.onlink | 329#define irr_statef_onlink irr_flags.prf_state.onlink |
327 | 330 |
328#define irr_rrf irr_flags.prf_rr 329#define irr_rrf_decrvalid irr_flags.prf_rr.decrvalid 330#define irr_rrf_decrprefd irr_flags.prf_rr.decrprefd | 331#define irr_rrf irr_flags.prf_rr 332#define irr_rrf_decrvalid irr_flags.prf_rr.decrvalid 333#define irr_rrf_decrprefd irr_flags.prf_rr.decrprefd |
331 332/* 333 * Given a pointer to an in6_ifaddr (ifaddr), 334 * return a pointer to the addr as a sockaddr_in6 335 */ | 334 335/* 336 * Given a pointer to an in6_ifaddr (ifaddr), 337 * return a pointer to the addr as a sockaddr_in6 338 */ |
336#define IA6_IN6(ia) (&((ia)->ia_addr.sin6_addr)) 337#define IA6_DSTIN6(ia) (&((ia)->ia_dstaddr.sin6_addr)) 338#define IA6_MASKIN6(ia) (&((ia)->ia_prefixmask.sin6_addr)) 339#define IA6_SIN6(ia) (&((ia)->ia_addr)) 340#define IA6_DSTSIN6(ia) (&((ia)->ia_dstaddr)) 341#define IFA_IN6(x) (&((struct sockaddr_in6 *)((x)->ifa_addr))->sin6_addr) 342#define IFA_DSTIN6(x) (&((struct sockaddr_in6 *)((x)->ifa_dstaddr))->sin6_addr) | 339#define IA6_IN6(ia) (&((ia)->ia_addr.sin6_addr)) 340#define IA6_DSTIN6(ia) (&((ia)->ia_dstaddr.sin6_addr)) 341#define IA6_MASKIN6(ia) (&((ia)->ia_prefixmask.sin6_addr)) 342#define IA6_SIN6(ia) (&((ia)->ia_addr)) 343#define IA6_DSTSIN6(ia) (&((ia)->ia_dstaddr)) 344#define IFA_IN6(x) (&((struct sockaddr_in6 *)((x)->ifa_addr))->sin6_addr) 345#define IFA_DSTIN6(x) (&((struct sockaddr_in6 *)((x)->ifa_dstaddr))->sin6_addr) |
343 | 346 |
344#define IFPR_IN6(x) (&((struct sockaddr_in6 *)((x)->ifpr_prefix))->sin6_addr) | 347#define IFPR_IN6(x) (&((struct sockaddr_in6 *)((x)->ifpr_prefix))->sin6_addr) |
345 346#ifdef _KERNEL | 348 349#ifdef _KERNEL |
347#define IN6_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \ | 350#define IN6_ARE_MASKED_ADDR_EQUAL(d, a, m) ( \ |
348 (((d)->s6_addr32[0] ^ (a)->s6_addr32[0]) & (m)->s6_addr32[0]) == 0 && \ 349 (((d)->s6_addr32[1] ^ (a)->s6_addr32[1]) & (m)->s6_addr32[1]) == 0 && \ 350 (((d)->s6_addr32[2] ^ (a)->s6_addr32[2]) & (m)->s6_addr32[2]) == 0 && \ 351 (((d)->s6_addr32[3] ^ (a)->s6_addr32[3]) & (m)->s6_addr32[3]) == 0 ) 352#endif 353 | 351 (((d)->s6_addr32[0] ^ (a)->s6_addr32[0]) & (m)->s6_addr32[0]) == 0 && \ 352 (((d)->s6_addr32[1] ^ (a)->s6_addr32[1]) & (m)->s6_addr32[1]) == 0 && \ 353 (((d)->s6_addr32[2] ^ (a)->s6_addr32[2]) & (m)->s6_addr32[2]) == 0 && \ 354 (((d)->s6_addr32[3] ^ (a)->s6_addr32[3]) & (m)->s6_addr32[3]) == 0 ) 355#endif 356 |
354#define SIOCSIFADDR_IN6 _IOW('i', 12, struct in6_ifreq) 355#define SIOCGIFADDR_IN6 _IOWR('i', 33, struct in6_ifreq) 356#define SIOCSIFDSTADDR_IN6 _IOW('i', 14, struct in6_ifreq) 357#define SIOCGIFDSTADDR_IN6 _IOWR('i', 34, struct in6_ifreq) 358#define SIOCSIFNETMASK_IN6 _IOW('i', 22, struct in6_ifreq) 359#define SIOCGIFNETMASK_IN6 _IOWR('i', 37, struct in6_ifreq) | 357#define SIOCSIFADDR_IN6 _IOW('i', 12, struct in6_ifreq) 358#define SIOCGIFADDR_IN6 _IOWR('i', 33, struct in6_ifreq) |
360 | 359 |
361#define SIOCDIFADDR_IN6 _IOW('i', 25, struct in6_ifreq) 362#define SIOCAIFADDR_IN6 _IOW('i', 26, struct in6_aliasreq) | 360#ifdef _KERNEL 361/* 362 * SIOCSxxx ioctls should be unused (see comments in in6.c), but 363 * we do not shift numbers for binary compatibility. 364 */ 365#define SIOCSIFDSTADDR_IN6 _IOW('i', 14, struct in6_ifreq) 366#define SIOCSIFNETMASK_IN6 _IOW('i', 22, struct in6_ifreq) 367#endif |
363 | 368 |
364#define SIOCSIFPHYADDR_IN6 _IOW('i', 70, struct in6_aliasreq) | 369#define SIOCGIFDSTADDR_IN6 _IOWR('i', 34, struct in6_ifreq) 370#define SIOCGIFNETMASK_IN6 _IOWR('i', 37, struct in6_ifreq) 371 372#define SIOCDIFADDR_IN6 _IOW('i', 25, struct in6_ifreq) 373#define SIOCAIFADDR_IN6 _IOW('i', 26, struct in6_aliasreq) 374 375#define SIOCSIFPHYADDR_IN6 _IOW('i', 70, struct in6_aliasreq) |
365#define SIOCGIFPSRCADDR_IN6 _IOWR('i', 71, struct in6_ifreq) 366#define SIOCGIFPDSTADDR_IN6 _IOWR('i', 72, struct in6_ifreq) 367 | 376#define SIOCGIFPSRCADDR_IN6 _IOWR('i', 71, struct in6_ifreq) 377#define SIOCGIFPDSTADDR_IN6 _IOWR('i', 72, struct in6_ifreq) 378 |
368#define SIOCGIFAFLAG_IN6 _IOWR('i', 73, struct in6_ifreq) | 379#define SIOCGIFAFLAG_IN6 _IOWR('i', 73, struct in6_ifreq) |
369 | 380 |
370#define SIOCGDRLST_IN6 _IOWR('i', 74, struct in6_drlist) 371#define SIOCGPRLST_IN6 _IOWR('i', 75, struct in6_prlist) 372#define SIOCGIFINFO_IN6 _IOWR('i', 76, struct in6_ndireq) 373#define SIOCSNDFLUSH_IN6 _IOWR('i', 77, struct in6_ifreq) 374#define SIOCGNBRINFO_IN6 _IOWR('i', 78, struct in6_nbrinfo) 375#define SIOCSPFXFLUSH_IN6 _IOWR('i', 79, struct in6_ifreq) 376#define SIOCSRTRFLUSH_IN6 _IOWR('i', 80, struct in6_ifreq) | 381#define SIOCGDRLST_IN6 _IOWR('i', 74, struct in6_drlist) 382#define SIOCGPRLST_IN6 _IOWR('i', 75, struct in6_prlist) 383#define SIOCGIFINFO_IN6 _IOWR('i', 76, struct in6_ndireq) 384#define SIOCSNDFLUSH_IN6 _IOWR('i', 77, struct in6_ifreq) 385#define SIOCGNBRINFO_IN6 _IOWR('i', 78, struct in6_nbrinfo) 386#define SIOCSPFXFLUSH_IN6 _IOWR('i', 79, struct in6_ifreq) 387#define SIOCSRTRFLUSH_IN6 _IOWR('i', 80, struct in6_ifreq) |
377 | 388 |
378#define SIOCGIFALIFETIME_IN6 _IOWR('i', 81, struct in6_ifreq) 379#define SIOCSIFALIFETIME_IN6 _IOWR('i', 82, struct in6_ifreq) 380#define SIOCGIFSTAT_IN6 _IOWR('i', 83, struct in6_ifreq) 381#define SIOCGIFSTAT_ICMP6 _IOWR('i', 84, struct in6_ifreq) | 389#define SIOCGIFALIFETIME_IN6 _IOWR('i', 81, struct in6_ifreq) 390#define SIOCSIFALIFETIME_IN6 _IOWR('i', 82, struct in6_ifreq) 391#define SIOCGIFSTAT_IN6 _IOWR('i', 83, struct in6_ifreq) 392#define SIOCGIFSTAT_ICMP6 _IOWR('i', 84, struct in6_ifreq) |
382 | 393 |
383#define SIOCSIFPREFIX_IN6 _IOW('i', 100, struct in6_prefixreq) /* set */ 384#define SIOCGIFPREFIX_IN6 _IOWR('i', 101, struct in6_prefixreq) /* get */ 385#define SIOCDIFPREFIX_IN6 _IOW('i', 102, struct in6_prefixreq) /* del */ 386#define SIOCAIFPREFIX_IN6 _IOW('i', 103, struct in6_rrenumreq) /* add */ 387#define SIOCCIFPREFIX_IN6 _IOW('i', 104, \ | 394#define SIOCSDEFIFACE_IN6 _IOWR('i', 85, struct in6_ndifreq) 395#define SIOCGDEFIFACE_IN6 _IOWR('i', 86, struct in6_ndifreq) 396 397#define SIOCSIFINFO_FLAGS _IOWR('i', 87, struct in6_ndireq) /* XXX */ 398 399#define SIOCSSCOPE6 _IOW('i', 88, struct in6_ifreq) 400#define SIOCGSCOPE6 _IOWR('i', 89, struct in6_ifreq) 401#define SIOCGSCOPE6DEF _IOWR('i', 90, struct in6_ifreq) 402 403#define SIOCSIFPREFIX_IN6 _IOW('i', 100, struct in6_prefixreq) /* set */ 404#define SIOCGIFPREFIX_IN6 _IOWR('i', 101, struct in6_prefixreq) /* get */ 405#define SIOCDIFPREFIX_IN6 _IOW('i', 102, struct in6_prefixreq) /* del */ 406#define SIOCAIFPREFIX_IN6 _IOW('i', 103, struct in6_rrenumreq) /* add */ 407#define SIOCCIFPREFIX_IN6 _IOW('i', 104, \ |
388 struct in6_rrenumreq) /* change */ | 408 struct in6_rrenumreq) /* change */ |
389#define SIOCSGIFPREFIX_IN6 _IOW('i', 105, \ | 409#define SIOCSGIFPREFIX_IN6 _IOW('i', 105, \ |
390 struct in6_rrenumreq) /* set global */ 391 | 410 struct in6_rrenumreq) /* set global */ 411 |
392#define SIOCGETSGCNT_IN6 _IOWR('u', 106, \ | 412#define SIOCGETSGCNT_IN6 _IOWR('u', 106, \ |
393 struct sioc_sg_req6) /* get s,g pkt cnt */ | 413 struct sioc_sg_req6) /* get s,g pkt cnt */ |
394#define SIOCGETMIFCNT_IN6 _IOWR('u', 107, \ | 414#define SIOCGETMIFCNT_IN6 _IOWR('u', 107, \ |
395 struct sioc_mif_req6) /* get pkt cnt per if */ 396 | 415 struct sioc_mif_req6) /* get pkt cnt per if */ 416 |
397#define IN6_IFF_ANYCAST 0x01 /* anycast address */ 398#define IN6_IFF_TENTATIVE 0x02 /* tentative address */ 399#define IN6_IFF_DUPLICATED 0x04 /* DAD detected duplicate */ 400#define IN6_IFF_DETACHED 0x08 /* may be detached from the link */ 401#define IN6_IFF_DEPRECATED 0x10 /* deprecated address */ | 417#define IN6_IFF_ANYCAST 0x01 /* anycast address */ 418#define IN6_IFF_TENTATIVE 0x02 /* tentative address */ 419#define IN6_IFF_DUPLICATED 0x04 /* DAD detected duplicate */ 420#define IN6_IFF_DETACHED 0x08 /* may be detached from the link */ 421#define IN6_IFF_DEPRECATED 0x10 /* deprecated address */ |
402 403/* do not input/output */ | 422 423/* do not input/output */ |
404#define IN6_IFF_NOTREADY (IN6_IFF_TENTATIVE|IN6_IFF_DUPLICATED) | 424#define IN6_IFF_NOTREADY (IN6_IFF_TENTATIVE|IN6_IFF_DUPLICATED) |
405 406#ifdef _KERNEL | 425 426#ifdef _KERNEL |
407extern struct in6_ifaddr *in6_ifaddr; | 427#define IN6_ARE_SCOPE_CMP(a,b) ((a)-(b)) 428#define IN6_ARE_SCOPE_EQUAL(a,b) ((a)==(b)) 429#endif |
408 | 430 |
409extern struct in6_ifstat **in6_ifstat; 410extern size_t in6_ifstatmax; 411extern struct icmp6stat icmp6stat; 412extern struct icmp6_ifstat **icmp6_ifstat; 413extern size_t icmp6_ifstatmax; 414#define in6_ifstat_inc(ifp, tag) \ | 431#ifdef _KERNEL 432extern struct in6_ifaddr *in6_ifaddr; 433 434extern struct in6_ifstat **in6_ifstat; 435extern size_t in6_ifstatmax; 436extern struct icmp6stat icmp6stat; 437extern struct icmp6_ifstat **icmp6_ifstat; 438extern size_t icmp6_ifstatmax; 439#define in6_ifstat_inc(ifp, tag) \ |
415do { \ 416 if ((ifp) && (ifp)->if_index <= if_index \ 417 && (ifp)->if_index < in6_ifstatmax \ 418 && in6_ifstat && in6_ifstat[(ifp)->if_index]) { \ 419 in6_ifstat[(ifp)->if_index]->tag++; \ 420 } \ 421} while (0) 422 | 440do { \ 441 if ((ifp) && (ifp)->if_index <= if_index \ 442 && (ifp)->if_index < in6_ifstatmax \ 443 && in6_ifstat && in6_ifstat[(ifp)->if_index]) { \ 444 in6_ifstat[(ifp)->if_index]->tag++; \ 445 } \ 446} while (0) 447 |
423extern struct ifqueue ip6intrq; /* IP6 packet input queue */ 424extern struct in6_addr zeroin6_addr; 425extern u_char inet6ctlerrmap[]; 426extern u_long in6_maxmtu; | 448extern struct ifqueue ip6intrq; /* IP6 packet input queue */ 449extern struct in6_addr zeroin6_addr; 450extern u_char inet6ctlerrmap[]; 451extern unsigned long in6_maxmtu; |
427#ifdef MALLOC_DECLARE 428MALLOC_DECLARE(M_IPMADDR); | 452#ifdef MALLOC_DECLARE 453MALLOC_DECLARE(M_IPMADDR); |
429#endif /* MALLOC_DECLARE */ | 454#endif |
430 431/* 432 * Macro for finding the internet address structure (in6_ifaddr) corresponding 433 * to a given interface (ifnet structure). 434 */ | 455 456/* 457 * Macro for finding the internet address structure (in6_ifaddr) corresponding 458 * to a given interface (ifnet structure). 459 */ |
435#define IFP_TO_IA6(ifp, ia) \ | 460 461#define IFP_TO_IA6(ifp, ia) \ |
436/* struct ifnet *ifp; */ \ 437/* struct in6_ifaddr *ia; */ \ 438do { \ 439 struct ifaddr *ifa; \ | 462/* struct ifnet *ifp; */ \ 463/* struct in6_ifaddr *ia; */ \ 464do { \ 465 struct ifaddr *ifa; \ |
440 TAILQ_FOREACH(ifa, &(ifp)->if_addrlist, ifa_list) { \ | 466 for (ifa = (ifp)->if_addrlist.tqh_first; ifa; ifa = ifa->ifa_list.tqe_next) { \ |
441 if (!ifa->ifa_addr) \ 442 continue; \ 443 if (ifa->ifa_addr->sa_family == AF_INET6) \ 444 break; \ 445 } \ 446 (ia) = (struct in6_ifaddr *)ifa; \ 447} while (0) | 467 if (!ifa->ifa_addr) \ 468 continue; \ 469 if (ifa->ifa_addr->sa_family == AF_INET6) \ 470 break; \ 471 } \ 472 (ia) = (struct in6_ifaddr *)ifa; \ 473} while (0) |
474 |
|
448#endif /* _KERNEL */ 449 450/* 451 * Multi-cast membership entry. One for each group/ifp that a PCB 452 * belongs to. 453 */ 454struct in6_multi_mship { 455 struct in6_multi *i6mm_maddr; /* Multicast address pointer */ | 475#endif /* _KERNEL */ 476 477/* 478 * Multi-cast membership entry. One for each group/ifp that a PCB 479 * belongs to. 480 */ 481struct in6_multi_mship { 482 struct in6_multi *i6mm_maddr; /* Multicast address pointer */ |
456 LIST_ENTRY(in6_multi_mship) i6mm_chain; /* multicast options chain */ | 483 LIST_ENTRY(in6_multi_mship) i6mm_chain; /* multicast options chain */ |
457}; 458 459struct in6_multi { | 484}; 485 486struct in6_multi { |
460 LIST_ENTRY(in6_multi) in6m_entry; /* list glue */ | 487 LIST_ENTRY(in6_multi) in6m_entry; /* list glue */ |
461 struct in6_addr in6m_addr; /* IP6 multicast address */ 462 struct ifnet *in6m_ifp; /* back pointer to ifnet */ 463 struct ifmultiaddr *in6m_ifma; /* back pointer to ifmultiaddr */ 464 u_int in6m_refcount; /* # membership claims by sockets */ 465 u_int in6m_state; /* state of the membership */ 466 u_int in6m_timer; /* MLD6 listener report timer */ 467}; 468 469#ifdef _KERNEL | 488 struct in6_addr in6m_addr; /* IP6 multicast address */ 489 struct ifnet *in6m_ifp; /* back pointer to ifnet */ 490 struct ifmultiaddr *in6m_ifma; /* back pointer to ifmultiaddr */ 491 u_int in6m_refcount; /* # membership claims by sockets */ 492 u_int in6m_state; /* state of the membership */ 493 u_int in6m_timer; /* MLD6 listener report timer */ 494}; 495 496#ifdef _KERNEL |
470 471#ifdef SYSCTL_DECL 472SYSCTL_DECL(_net_inet6_ip6); 473#endif 474 | |
475extern LIST_HEAD(in6_multihead, in6_multi) in6_multihead; 476 477/* 478 * Structure used by macros below to remember position when stepping through 479 * all of eht in6_multi records. 480 */ 481struct in6_multistep { 482 struct in6_ifaddr *i_ia; 483 struct in6_multi *i_in6m; 484}; 485 486/* 487 * Macros for looking up the in6_multi record for a given IP6 multicast 488 * address on a given interface. If no matching record is found, "in6m" 489 * returns NLL. 490 */ 491 | 497extern LIST_HEAD(in6_multihead, in6_multi) in6_multihead; 498 499/* 500 * Structure used by macros below to remember position when stepping through 501 * all of eht in6_multi records. 502 */ 503struct in6_multistep { 504 struct in6_ifaddr *i_ia; 505 struct in6_multi *i_in6m; 506}; 507 508/* 509 * Macros for looking up the in6_multi record for a given IP6 multicast 510 * address on a given interface. If no matching record is found, "in6m" 511 * returns NLL. 512 */ 513 |
492#define IN6_LOOKUP_MULTI(addr, ifp, in6m) \ | 514#define IN6_LOOKUP_MULTI(addr, ifp, in6m) \ |
493/* struct in6_addr addr; */ \ 494/* struct ifnet *ifp; */ \ 495/* struct in6_multi *in6m; */ \ 496do { \ 497 register struct ifmultiaddr *ifma; \ 498 for (ifma = (ifp)->if_multiaddrs.lh_first; ifma; \ 499 ifma = ifma->ifma_link.le_next) { \ 500 if (ifma->ifma_addr->sa_family == AF_INET6 \ --- 6 unchanged lines hidden (view full) --- 507 508/* 509 * Macro to step through all of the in6_multi records, one at a time. 510 * The current position is remembered in "step", which the caller must 511 * provide. IN6_FIRST_MULTI(), below, must be called to initialize "step" 512 * and get the first record. Both macros return a NULL "in6m" when there 513 * are no remaining records. 514 */ | 515/* struct in6_addr addr; */ \ 516/* struct ifnet *ifp; */ \ 517/* struct in6_multi *in6m; */ \ 518do { \ 519 register struct ifmultiaddr *ifma; \ 520 for (ifma = (ifp)->if_multiaddrs.lh_first; ifma; \ 521 ifma = ifma->ifma_link.le_next) { \ 522 if (ifma->ifma_addr->sa_family == AF_INET6 \ --- 6 unchanged lines hidden (view full) --- 529 530/* 531 * Macro to step through all of the in6_multi records, one at a time. 532 * The current position is remembered in "step", which the caller must 533 * provide. IN6_FIRST_MULTI(), below, must be called to initialize "step" 534 * and get the first record. Both macros return a NULL "in6m" when there 535 * are no remaining records. 536 */ |
515#define IN6_NEXT_MULTI(step, in6m) \ | 537#define IN6_NEXT_MULTI(step, in6m) \ |
516/* struct in6_multistep step; */ \ 517/* struct in6_multi *in6m; */ \ 518do { \ 519 if (((in6m) = (step).i_in6m) != NULL) \ | 538/* struct in6_multistep step; */ \ 539/* struct in6_multi *in6m; */ \ 540do { \ 541 if (((in6m) = (step).i_in6m) != NULL) \ |
520 (step).i_in6m = LIST_NEXT((step).i_in6m, in6m_entry); \ | 542 (step).i_in6m = (step).i_in6m->in6m_entry.le_next; \ |
521} while(0) 522 | 543} while(0) 544 |
523#define IN6_FIRST_MULTI(step, in6m) \ | 545#define IN6_FIRST_MULTI(step, in6m) \ |
524/* struct in6_multistep step; */ \ 525/* struct in6_multi *in6m */ \ 526do { \ | 546/* struct in6_multistep step; */ \ 547/* struct in6_multi *in6m */ \ 548do { \ |
527 (step).i_in6m = LIST_FIRST(&in6_multihead); \ | 549 (step).i_in6m = in6_multihead.lh_first; \ |
528 IN6_NEXT_MULTI((step), (in6m)); \ 529} while(0) 530 | 550 IN6_NEXT_MULTI((step), (in6m)); \ 551} while(0) 552 |
531int in6_ifinit __P((struct ifnet *, | 553int in6_ifinit __P((struct ifnet *, |
532 struct in6_ifaddr *, struct sockaddr_in6 *, int)); | 554 struct in6_ifaddr *, struct sockaddr_in6 *, int)); |
533struct in6_multi *in6_addmulti __P((struct in6_addr *, struct ifnet *, | 555struct in6_multi *in6_addmulti __P((struct in6_addr *, struct ifnet *, |
534 int *)); | 556 int *)); |
535void in6_delmulti __P((struct in6_multi *)); 536void in6_ifscrub __P((struct ifnet *, struct in6_ifaddr *)); 537extern int in6_ifindex2scopeid __P((int)); 538extern int in6_mask2len __P((struct in6_addr *)); 539extern void in6_len2mask __P((struct in6_addr *, int)); 540int in6_control __P((struct socket *, 541 u_long, caddr_t, struct ifnet *, struct proc *)); 542void in6_savemkludge __P((struct in6_ifaddr *)); 543void in6_setmaxmtu __P((void)); 544void in6_restoremkludge __P((struct in6_ifaddr *, struct ifnet *)); 545struct in6_ifaddr *in6ifa_ifpforlinklocal __P((struct ifnet *)); 546struct in6_ifaddr *in6ifa_ifpwithaddr __P((struct ifnet *, | 557void in6_delmulti __P((struct in6_multi *)); 558void in6_ifscrub __P((struct ifnet *, struct in6_ifaddr *)); 559extern int in6_ifindex2scopeid __P((int)); 560extern int in6_mask2len __P((struct in6_addr *)); 561extern void in6_len2mask __P((struct in6_addr *, int)); 562int in6_control __P((struct socket *, 563 u_long, caddr_t, struct ifnet *, struct proc *)); 564void in6_purgeaddr __P((struct ifaddr *, struct ifnet *)); 565void in6_savemkludge __P((struct in6_ifaddr *)); 566void in6_setmaxmtu __P((void)); 567void in6_restoremkludge __P((struct in6_ifaddr *, struct ifnet *)); 568void in6_purgemkludge __P((struct ifnet *)); 569struct in6_ifaddr *in6ifa_ifpforlinklocal __P((struct ifnet *, int)); 570struct in6_ifaddr *in6ifa_ifpwithaddr __P((struct ifnet *, |
547 struct in6_addr *)); 548char *ip6_sprintf __P((struct in6_addr *)); | 571 struct in6_addr *)); 572char *ip6_sprintf __P((struct in6_addr *)); |
549int in6_matchlen __P((struct in6_addr *, struct in6_addr *)); 550int in6_are_prefix_equal __P((struct in6_addr *p1, struct in6_addr *p2, | 573int in6_addr2scopeid __P((struct ifnet *, struct in6_addr *)); 574int in6_matchlen __P((struct in6_addr *, struct in6_addr *)); 575int in6_are_prefix_equal __P((struct in6_addr *p1, struct in6_addr *p2, |
551 int len)); | 576 int len)); |
552void in6_prefixlen2mask __P((struct in6_addr *maskp, int len)); 553int in6_prefix_ioctl __P((struct socket *so, u_long cmd, caddr_t data, | 577void in6_prefixlen2mask __P((struct in6_addr *maskp, int len)); 578int in6_prefix_ioctl __P((struct socket *so, u_long cmd, caddr_t data, |
554 struct ifnet *ifp)); | 579 struct ifnet *ifp)); |
555int in6_prefix_add_ifid __P((int iilen, struct in6_ifaddr *ia)); 556void in6_prefix_remove_ifid __P((int iilen, struct in6_ifaddr *ia)); | 580int in6_prefix_add_ifid __P((int iilen, struct in6_ifaddr *ia)); 581void in6_prefix_remove_ifid __P((int iilen, struct in6_ifaddr *ia)); 582void in6_purgeprefix __P((struct ifnet *)); |
557#endif /* _KERNEL */ 558 559#endif /* _NETINET6_IN6_VAR_H_ */ | 583#endif /* _KERNEL */ 584 585#endif /* _NETINET6_IN6_VAR_H_ */ |