1*8d67ca89SAndroid Build Coastguard Worker /* $NetBSD: icmp6.h,v 1.47 2013/07/01 12:43:15 christos Exp $ */ 2*8d67ca89SAndroid Build Coastguard Worker /* $KAME: icmp6.h,v 1.84 2003/04/23 10:26:51 itojun Exp $ */ 3*8d67ca89SAndroid Build Coastguard Worker 4*8d67ca89SAndroid Build Coastguard Worker 5*8d67ca89SAndroid Build Coastguard Worker /* 6*8d67ca89SAndroid Build Coastguard Worker * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 7*8d67ca89SAndroid Build Coastguard Worker * All rights reserved. 8*8d67ca89SAndroid Build Coastguard Worker * 9*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 10*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 11*8d67ca89SAndroid Build Coastguard Worker * are met: 12*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 13*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 14*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 15*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 16*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 17*8d67ca89SAndroid Build Coastguard Worker * 3. Neither the name of the project nor the names of its contributors 18*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 19*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 20*8d67ca89SAndroid Build Coastguard Worker * 21*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 22*8d67ca89SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23*8d67ca89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24*8d67ca89SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 25*8d67ca89SAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26*8d67ca89SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27*8d67ca89SAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28*8d67ca89SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29*8d67ca89SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30*8d67ca89SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 32*8d67ca89SAndroid Build Coastguard Worker */ 33*8d67ca89SAndroid Build Coastguard Worker 34*8d67ca89SAndroid Build Coastguard Worker /* 35*8d67ca89SAndroid Build Coastguard Worker * Copyright (c) 1982, 1986, 1993 36*8d67ca89SAndroid Build Coastguard Worker * The Regents of the University of California. All rights reserved. 37*8d67ca89SAndroid Build Coastguard Worker * 38*8d67ca89SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 39*8d67ca89SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 40*8d67ca89SAndroid Build Coastguard Worker * are met: 41*8d67ca89SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 42*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 43*8d67ca89SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 44*8d67ca89SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 45*8d67ca89SAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 46*8d67ca89SAndroid Build Coastguard Worker * 3. Neither the name of the University nor the names of its contributors 47*8d67ca89SAndroid Build Coastguard Worker * may be used to endorse or promote products derived from this software 48*8d67ca89SAndroid Build Coastguard Worker * without specific prior written permission. 49*8d67ca89SAndroid Build Coastguard Worker * 50*8d67ca89SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 51*8d67ca89SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 52*8d67ca89SAndroid Build Coastguard Worker * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 53*8d67ca89SAndroid Build Coastguard Worker * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 54*8d67ca89SAndroid Build Coastguard Worker * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 55*8d67ca89SAndroid Build Coastguard Worker * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 56*8d67ca89SAndroid Build Coastguard Worker * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 57*8d67ca89SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 58*8d67ca89SAndroid Build Coastguard Worker * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 59*8d67ca89SAndroid Build Coastguard Worker * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 60*8d67ca89SAndroid Build Coastguard Worker * SUCH DAMAGE. 61*8d67ca89SAndroid Build Coastguard Worker * 62*8d67ca89SAndroid Build Coastguard Worker * @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93 63*8d67ca89SAndroid Build Coastguard Worker */ 64*8d67ca89SAndroid Build Coastguard Worker 65*8d67ca89SAndroid Build Coastguard Worker #ifndef _NETINET_ICMP6_H_ 66*8d67ca89SAndroid Build Coastguard Worker #define _NETINET_ICMP6_H_ 67*8d67ca89SAndroid Build Coastguard Worker 68*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h> 69*8d67ca89SAndroid Build Coastguard Worker 70*8d67ca89SAndroid Build Coastguard Worker #include <netinet/in.h> /* android-added: glibc source compatibility. */ 71*8d67ca89SAndroid Build Coastguard Worker 72*8d67ca89SAndroid Build Coastguard Worker #define ICMPV6_PLD_MAXLEN 1232 /* IPV6_MMTU - sizeof(struct ip6_hdr) 73*8d67ca89SAndroid Build Coastguard Worker - sizeof(struct icmp6_hdr) */ 74*8d67ca89SAndroid Build Coastguard Worker 75*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr { 76*8d67ca89SAndroid Build Coastguard Worker u_int8_t icmp6_type; /* type field */ 77*8d67ca89SAndroid Build Coastguard Worker u_int8_t icmp6_code; /* code field */ 78*8d67ca89SAndroid Build Coastguard Worker u_int16_t icmp6_cksum; /* checksum field */ 79*8d67ca89SAndroid Build Coastguard Worker union { 80*8d67ca89SAndroid Build Coastguard Worker u_int32_t icmp6_un_data32[1]; /* type-specific field */ 81*8d67ca89SAndroid Build Coastguard Worker u_int16_t icmp6_un_data16[2]; /* type-specific field */ 82*8d67ca89SAndroid Build Coastguard Worker u_int8_t icmp6_un_data8[4]; /* type-specific field */ 83*8d67ca89SAndroid Build Coastguard Worker } icmp6_dataun; 84*8d67ca89SAndroid Build Coastguard Worker } __packed; 85*8d67ca89SAndroid Build Coastguard Worker 86*8d67ca89SAndroid Build Coastguard Worker #define icmp6_data32 icmp6_dataun.icmp6_un_data32 87*8d67ca89SAndroid Build Coastguard Worker #define icmp6_data16 icmp6_dataun.icmp6_un_data16 88*8d67ca89SAndroid Build Coastguard Worker #define icmp6_data8 icmp6_dataun.icmp6_un_data8 89*8d67ca89SAndroid Build Coastguard Worker #define icmp6_pptr icmp6_data32[0] /* parameter prob */ 90*8d67ca89SAndroid Build Coastguard Worker #define icmp6_mtu icmp6_data32[0] /* packet too big */ 91*8d67ca89SAndroid Build Coastguard Worker #define icmp6_id icmp6_data16[0] /* echo request/reply */ 92*8d67ca89SAndroid Build Coastguard Worker #define icmp6_seq icmp6_data16[1] /* echo request/reply */ 93*8d67ca89SAndroid Build Coastguard Worker #define icmp6_maxdelay icmp6_data16[0] /* mcast group membership */ 94*8d67ca89SAndroid Build Coastguard Worker 95*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH 1 /* dest unreachable, codes: */ 96*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_PACKET_TOO_BIG 2 /* packet too big */ 97*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_TIME_EXCEEDED 3 /* time exceeded, code: */ 98*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_PARAM_PROB 4 /* ip6 header bad */ 99*8d67ca89SAndroid Build Coastguard Worker 100*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_ECHO_REQUEST 128 /* echo service */ 101*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_ECHO_REPLY 129 /* echo reply */ 102*8d67ca89SAndroid Build Coastguard Worker #define MLD_LISTENER_QUERY 130 /* multicast listener query */ 103*8d67ca89SAndroid Build Coastguard Worker #define MLD_LISTENER_REPORT 131 /* multicast listener report */ 104*8d67ca89SAndroid Build Coastguard Worker #define MLD_LISTENER_DONE 132 /* multicast listener done */ 105*8d67ca89SAndroid Build Coastguard Worker #define MLD_LISTENER_REDUCTION MLD_LISTENER_DONE /* RFC3542 definition */ 106*8d67ca89SAndroid Build Coastguard Worker 107*8d67ca89SAndroid Build Coastguard Worker /* RFC2292 decls */ 108*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_MEMBERSHIP_QUERY 130 /* group membership query */ 109*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_MEMBERSHIP_REPORT 131 /* group membership report */ 110*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_MEMBERSHIP_REDUCTION 132 /* group membership termination */ 111*8d67ca89SAndroid Build Coastguard Worker 112*8d67ca89SAndroid Build Coastguard Worker #define ND_ROUTER_SOLICIT 133 /* router solicitation */ 113*8d67ca89SAndroid Build Coastguard Worker #define ND_ROUTER_ADVERT 134 /* router advertisement */ 114*8d67ca89SAndroid Build Coastguard Worker #define ND_NEIGHBOR_SOLICIT 135 /* neighbor solicitation */ 115*8d67ca89SAndroid Build Coastguard Worker #define ND_NEIGHBOR_ADVERT 136 /* neighbor advertisement */ 116*8d67ca89SAndroid Build Coastguard Worker #define ND_REDIRECT 137 /* redirect */ 117*8d67ca89SAndroid Build Coastguard Worker 118*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_ROUTER_RENUMBERING 138 /* router renumbering */ 119*8d67ca89SAndroid Build Coastguard Worker 120*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_WRUREQUEST 139 /* who are you request */ 121*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_WRUREPLY 140 /* who are you reply */ 122*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FQDN_QUERY 139 /* FQDN query */ 123*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FQDN_REPLY 140 /* FQDN reply */ 124*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_QUERY 139 /* node information request */ 125*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_REPLY 140 /* node information reply */ 126*8d67ca89SAndroid Build Coastguard Worker #define MLDV2_LISTENER_REPORT 143 /* RFC3810 listener report */ 127*8d67ca89SAndroid Build Coastguard Worker 128*8d67ca89SAndroid Build Coastguard Worker /* The definitions below are experimental. TBA */ 129*8d67ca89SAndroid Build Coastguard Worker #define MLD_MTRACE_RESP 200 /* mtrace response(to sender) */ 130*8d67ca89SAndroid Build Coastguard Worker #define MLD_MTRACE 201 /* mtrace messages */ 131*8d67ca89SAndroid Build Coastguard Worker 132*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_MAXTYPE 201 133*8d67ca89SAndroid Build Coastguard Worker 134*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_NOROUTE 0 /* no route to destination */ 135*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_ADMIN 1 /* administratively prohibited */ 136*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_NOTNEIGHBOR 2 /* not a neighbor(obsolete) */ 137*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */ 138*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_ADDR 3 /* address unreachable */ 139*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_NOPORT 4 /* port unreachable */ 140*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_POLICY 5 /* source address failed ingress/egress policy */ 141*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_REJROUTE 6 /* reject route to destination */ 142*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_DST_UNREACH_SOURCERT 7 /* error in source routing header */ 143*8d67ca89SAndroid Build Coastguard Worker 144*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_TIME_EXCEED_TRANSIT 0 /* ttl==0 in transit */ 145*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_TIME_EXCEED_REASSEMBLY 1 /* ttl==0 in reass */ 146*8d67ca89SAndroid Build Coastguard Worker 147*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_PARAMPROB_HEADER 0 /* erroneous header field */ 148*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_PARAMPROB_NEXTHEADER 1 /* unrecognized next header */ 149*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_PARAMPROB_OPTION 2 /* unrecognized option */ 150*8d67ca89SAndroid Build Coastguard Worker 151*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_INFOMSG_MASK 0x80 /* all informational messages */ 152*8d67ca89SAndroid Build Coastguard Worker 153*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_SUBJ_IPV6 0 /* Query Subject is an IPv6 address */ 154*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_SUBJ_FQDN 1 /* Query Subject is a Domain name */ 155*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_SUBJ_IPV4 2 /* Query Subject is an IPv4 address */ 156*8d67ca89SAndroid Build Coastguard Worker 157*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_SUCCESS 0 /* node information successful reply */ 158*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_REFUSED 1 /* node information request is refused */ 159*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_NI_UNKNOWN 2 /* unknown Qtype */ 160*8d67ca89SAndroid Build Coastguard Worker 161*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_ROUTER_RENUMBERING_COMMAND 0 /* rr command */ 162*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_ROUTER_RENUMBERING_RESULT 1 /* rr result */ 163*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 255 /* rr seq num reset */ 164*8d67ca89SAndroid Build Coastguard Worker 165*8d67ca89SAndroid Build Coastguard Worker /* Used in kernel only */ 166*8d67ca89SAndroid Build Coastguard Worker #define ND_REDIRECT_ONLINK 0 /* redirect to an on-link node */ 167*8d67ca89SAndroid Build Coastguard Worker #define ND_REDIRECT_ROUTER 1 /* redirect to a better router */ 168*8d67ca89SAndroid Build Coastguard Worker 169*8d67ca89SAndroid Build Coastguard Worker /* 170*8d67ca89SAndroid Build Coastguard Worker * Multicast Listener Discovery 171*8d67ca89SAndroid Build Coastguard Worker */ 172*8d67ca89SAndroid Build Coastguard Worker struct mld_hdr { 173*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr mld_icmp6_hdr; 174*8d67ca89SAndroid Build Coastguard Worker struct in6_addr mld_addr; /* multicast address */ 175*8d67ca89SAndroid Build Coastguard Worker } __packed; 176*8d67ca89SAndroid Build Coastguard Worker 177*8d67ca89SAndroid Build Coastguard Worker /* shortcut macro definitions */ 178*8d67ca89SAndroid Build Coastguard Worker #define mld_type mld_icmp6_hdr.icmp6_type 179*8d67ca89SAndroid Build Coastguard Worker #define mld_code mld_icmp6_hdr.icmp6_code 180*8d67ca89SAndroid Build Coastguard Worker #define mld_cksum mld_icmp6_hdr.icmp6_cksum 181*8d67ca89SAndroid Build Coastguard Worker #define mld_maxdelay mld_icmp6_hdr.icmp6_data16[0] 182*8d67ca89SAndroid Build Coastguard Worker #define mld_reserved mld_icmp6_hdr.icmp6_data16[1] 183*8d67ca89SAndroid Build Coastguard Worker 184*8d67ca89SAndroid Build Coastguard Worker #define MLD_MINLEN 24 185*8d67ca89SAndroid Build Coastguard Worker 186*8d67ca89SAndroid Build Coastguard Worker /* 187*8d67ca89SAndroid Build Coastguard Worker * Neighbor Discovery 188*8d67ca89SAndroid Build Coastguard Worker */ 189*8d67ca89SAndroid Build Coastguard Worker 190*8d67ca89SAndroid Build Coastguard Worker struct nd_router_solicit { /* router solicitation */ 191*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr nd_rs_hdr; 192*8d67ca89SAndroid Build Coastguard Worker /* could be followed by options */ 193*8d67ca89SAndroid Build Coastguard Worker } __packed; 194*8d67ca89SAndroid Build Coastguard Worker 195*8d67ca89SAndroid Build Coastguard Worker #define nd_rs_type nd_rs_hdr.icmp6_type 196*8d67ca89SAndroid Build Coastguard Worker #define nd_rs_code nd_rs_hdr.icmp6_code 197*8d67ca89SAndroid Build Coastguard Worker #define nd_rs_cksum nd_rs_hdr.icmp6_cksum 198*8d67ca89SAndroid Build Coastguard Worker #define nd_rs_reserved nd_rs_hdr.icmp6_data32[0] 199*8d67ca89SAndroid Build Coastguard Worker 200*8d67ca89SAndroid Build Coastguard Worker struct nd_router_advert { /* router advertisement */ 201*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr nd_ra_hdr; 202*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_ra_reachable; /* reachable time */ 203*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_ra_retransmit; /* retransmit timer */ 204*8d67ca89SAndroid Build Coastguard Worker /* could be followed by options */ 205*8d67ca89SAndroid Build Coastguard Worker } __packed; 206*8d67ca89SAndroid Build Coastguard Worker 207*8d67ca89SAndroid Build Coastguard Worker #define nd_ra_type nd_ra_hdr.icmp6_type 208*8d67ca89SAndroid Build Coastguard Worker #define nd_ra_code nd_ra_hdr.icmp6_code 209*8d67ca89SAndroid Build Coastguard Worker #define nd_ra_cksum nd_ra_hdr.icmp6_cksum 210*8d67ca89SAndroid Build Coastguard Worker #define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0] 211*8d67ca89SAndroid Build Coastguard Worker #define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1] 212*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_MANAGED 0x80 213*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_OTHER 0x40 214*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_HOME_AGENT 0x20 215*8d67ca89SAndroid Build Coastguard Worker 216*8d67ca89SAndroid Build Coastguard Worker /* 217*8d67ca89SAndroid Build Coastguard Worker * Router preference values based on RFC4191. 218*8d67ca89SAndroid Build Coastguard Worker */ 219*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_RTPREF_MASK 0x18 /* 00011000 */ 220*8d67ca89SAndroid Build Coastguard Worker 221*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_RTPREF_HIGH 0x08 /* 00001000 */ 222*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_RTPREF_MEDIUM 0x00 /* 00000000 */ 223*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_RTPREF_LOW 0x18 /* 00011000 */ 224*8d67ca89SAndroid Build Coastguard Worker #define ND_RA_FLAG_RTPREF_RSV 0x10 /* 00010000 */ 225*8d67ca89SAndroid Build Coastguard Worker 226*8d67ca89SAndroid Build Coastguard Worker #define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1] 227*8d67ca89SAndroid Build Coastguard Worker 228*8d67ca89SAndroid Build Coastguard Worker struct nd_neighbor_solicit { /* neighbor solicitation */ 229*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr nd_ns_hdr; 230*8d67ca89SAndroid Build Coastguard Worker struct in6_addr nd_ns_target; /*target address */ 231*8d67ca89SAndroid Build Coastguard Worker /* could be followed by options */ 232*8d67ca89SAndroid Build Coastguard Worker } __packed; 233*8d67ca89SAndroid Build Coastguard Worker 234*8d67ca89SAndroid Build Coastguard Worker #define nd_ns_type nd_ns_hdr.icmp6_type 235*8d67ca89SAndroid Build Coastguard Worker #define nd_ns_code nd_ns_hdr.icmp6_code 236*8d67ca89SAndroid Build Coastguard Worker #define nd_ns_cksum nd_ns_hdr.icmp6_cksum 237*8d67ca89SAndroid Build Coastguard Worker #define nd_ns_reserved nd_ns_hdr.icmp6_data32[0] 238*8d67ca89SAndroid Build Coastguard Worker 239*8d67ca89SAndroid Build Coastguard Worker struct nd_neighbor_advert { /* neighbor advertisement */ 240*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr nd_na_hdr; 241*8d67ca89SAndroid Build Coastguard Worker struct in6_addr nd_na_target; /* target address */ 242*8d67ca89SAndroid Build Coastguard Worker /* could be followed by options */ 243*8d67ca89SAndroid Build Coastguard Worker } __packed; 244*8d67ca89SAndroid Build Coastguard Worker 245*8d67ca89SAndroid Build Coastguard Worker #define nd_na_type nd_na_hdr.icmp6_type 246*8d67ca89SAndroid Build Coastguard Worker #define nd_na_code nd_na_hdr.icmp6_code 247*8d67ca89SAndroid Build Coastguard Worker #define nd_na_cksum nd_na_hdr.icmp6_cksum 248*8d67ca89SAndroid Build Coastguard Worker #define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0] 249*8d67ca89SAndroid Build Coastguard Worker #define ND_NA_FLAG_ROUTER 0x80 250*8d67ca89SAndroid Build Coastguard Worker #define ND_NA_FLAG_SOLICITED 0x40 251*8d67ca89SAndroid Build Coastguard Worker #define ND_NA_FLAG_OVERRIDE 0x20 252*8d67ca89SAndroid Build Coastguard Worker 253*8d67ca89SAndroid Build Coastguard Worker struct nd_redirect { /* redirect */ 254*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr nd_rd_hdr; 255*8d67ca89SAndroid Build Coastguard Worker struct in6_addr nd_rd_target; /* target address */ 256*8d67ca89SAndroid Build Coastguard Worker struct in6_addr nd_rd_dst; /* destination address */ 257*8d67ca89SAndroid Build Coastguard Worker /* could be followed by options */ 258*8d67ca89SAndroid Build Coastguard Worker } __packed; 259*8d67ca89SAndroid Build Coastguard Worker 260*8d67ca89SAndroid Build Coastguard Worker #define nd_rd_type nd_rd_hdr.icmp6_type 261*8d67ca89SAndroid Build Coastguard Worker #define nd_rd_code nd_rd_hdr.icmp6_code 262*8d67ca89SAndroid Build Coastguard Worker #define nd_rd_cksum nd_rd_hdr.icmp6_cksum 263*8d67ca89SAndroid Build Coastguard Worker #define nd_rd_reserved nd_rd_hdr.icmp6_data32[0] 264*8d67ca89SAndroid Build Coastguard Worker 265*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_hdr { /* Neighbor discovery option header */ 266*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_type; 267*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_len; 268*8d67ca89SAndroid Build Coastguard Worker /* followed by option specific data*/ 269*8d67ca89SAndroid Build Coastguard Worker } __packed; 270*8d67ca89SAndroid Build Coastguard Worker 271*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_SOURCE_LINKADDR 1 272*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_TARGET_LINKADDR 2 273*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_PREFIX_INFORMATION 3 274*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_REDIRECTED_HEADER 4 275*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_MTU 5 276*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_ADVINTERVAL 7 277*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_HOMEAGENT_INFO 8 278*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_SOURCE_ADDRLIST 9 279*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_TARGET_ADDRLIST 10 280*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_MAP 23 /* RFC 5380 */ 281*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_ROUTE_INFO 24 /* RFC 4191 */ 282*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_RDNSS 25 /* RFC 6016 */ 283*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_DNSSL 31 /* RFC 6016 */ 284*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_CAPTIVE_PORTAL 37 /* RFC 7710 */ 285*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_PREF64 38 /* RFC-ietf-6man-ra-pref64-09 */ 286*8d67ca89SAndroid Build Coastguard Worker 287*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_route_info { /* route info */ 288*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rti_type; 289*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rti_len; 290*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rti_prefixlen; 291*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rti_flags; 292*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_rti_lifetime; 293*8d67ca89SAndroid Build Coastguard Worker /* prefix follows */ 294*8d67ca89SAndroid Build Coastguard Worker }; 295*8d67ca89SAndroid Build Coastguard Worker 296*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_prefix_info { /* prefix information */ 297*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_pi_type; 298*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_pi_len; 299*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_pi_prefix_len; 300*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_pi_flags_reserved; 301*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_pi_valid_time; 302*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_pi_preferred_time; 303*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_pi_reserved2; 304*8d67ca89SAndroid Build Coastguard Worker struct in6_addr nd_opt_pi_prefix; 305*8d67ca89SAndroid Build Coastguard Worker } __packed; 306*8d67ca89SAndroid Build Coastguard Worker 307*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_PI_FLAG_ONLINK 0x80 308*8d67ca89SAndroid Build Coastguard Worker #define ND_OPT_PI_FLAG_AUTO 0x40 309*8d67ca89SAndroid Build Coastguard Worker 310*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_rd_hdr { /* redirected header */ 311*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rh_type; 312*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rh_len; 313*8d67ca89SAndroid Build Coastguard Worker u_int16_t nd_opt_rh_reserved1; 314*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_rh_reserved2; 315*8d67ca89SAndroid Build Coastguard Worker /* followed by IP header and data */ 316*8d67ca89SAndroid Build Coastguard Worker } __packed; 317*8d67ca89SAndroid Build Coastguard Worker 318*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_mtu { /* MTU option */ 319*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_mtu_type; 320*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_mtu_len; 321*8d67ca89SAndroid Build Coastguard Worker u_int16_t nd_opt_mtu_reserved; 322*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_mtu_mtu; 323*8d67ca89SAndroid Build Coastguard Worker } __packed; 324*8d67ca89SAndroid Build Coastguard Worker 325*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_rdnss { /* RDNSS option RFC 6106 */ 326*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rdnss_type; 327*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_rdnss_len; 328*8d67ca89SAndroid Build Coastguard Worker u_int16_t nd_opt_rdnss_reserved; 329*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_rdnss_lifetime; 330*8d67ca89SAndroid Build Coastguard Worker /* followed by list of IP prefixes */ 331*8d67ca89SAndroid Build Coastguard Worker } __packed; 332*8d67ca89SAndroid Build Coastguard Worker 333*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_dnssl { /* DNSSL option RFC 6106 */ 334*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_dnssl_type; 335*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_dnssl_len; 336*8d67ca89SAndroid Build Coastguard Worker u_int16_t nd_opt_dnssl_reserved; 337*8d67ca89SAndroid Build Coastguard Worker u_int32_t nd_opt_dnssl_lifetime; 338*8d67ca89SAndroid Build Coastguard Worker /* followed by list of IP prefixes */ 339*8d67ca89SAndroid Build Coastguard Worker } __packed; 340*8d67ca89SAndroid Build Coastguard Worker 341*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_captive_portal { /* CAPTIVE PORTAL option RFC 7710 */ 342*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_captive_portal_type; // ND_OPT_CAPTIVE_PORTAL 343*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_captive_portal_len; // in 8 byte units 344*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_captive_portal_uri[]; // 6 + n*8 bytes 345*8d67ca89SAndroid Build Coastguard Worker } __packed; 346*8d67ca89SAndroid Build Coastguard Worker 347*8d67ca89SAndroid Build Coastguard Worker struct nd_opt_pref64 { /* PREF64 option RFC-ietf-6man-ra-pref64-09 */ 348*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_pref64_type; // ND_OPT_PREF64 349*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_pref64_len; // 8 byte units, thus '2' 350*8d67ca89SAndroid Build Coastguard Worker u_int16_t nd_opt_pref64_lifetime_plc; // net endian, 13 + 3 bits 351*8d67ca89SAndroid Build Coastguard Worker u_int8_t nd_opt_pref64_prefix[12]; // top 96 bits 352*8d67ca89SAndroid Build Coastguard Worker } __packed; 353*8d67ca89SAndroid Build Coastguard Worker 354*8d67ca89SAndroid Build Coastguard Worker /* 355*8d67ca89SAndroid Build Coastguard Worker * icmp6 namelookup 356*8d67ca89SAndroid Build Coastguard Worker */ 357*8d67ca89SAndroid Build Coastguard Worker 358*8d67ca89SAndroid Build Coastguard Worker struct icmp6_namelookup { 359*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr icmp6_nl_hdr; 360*8d67ca89SAndroid Build Coastguard Worker u_int8_t icmp6_nl_nonce[8]; 361*8d67ca89SAndroid Build Coastguard Worker int32_t icmp6_nl_ttl; 362*8d67ca89SAndroid Build Coastguard Worker #if 0 363*8d67ca89SAndroid Build Coastguard Worker u_int8_t icmp6_nl_len; 364*8d67ca89SAndroid Build Coastguard Worker u_int8_t icmp6_nl_name[3]; 365*8d67ca89SAndroid Build Coastguard Worker #endif 366*8d67ca89SAndroid Build Coastguard Worker /* could be followed by options */ 367*8d67ca89SAndroid Build Coastguard Worker } __packed; 368*8d67ca89SAndroid Build Coastguard Worker 369*8d67ca89SAndroid Build Coastguard Worker /* 370*8d67ca89SAndroid Build Coastguard Worker * icmp6 node information 371*8d67ca89SAndroid Build Coastguard Worker */ 372*8d67ca89SAndroid Build Coastguard Worker struct icmp6_nodeinfo { 373*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr icmp6_ni_hdr; 374*8d67ca89SAndroid Build Coastguard Worker u_int8_t icmp6_ni_nonce[8]; 375*8d67ca89SAndroid Build Coastguard Worker /* could be followed by reply data */ 376*8d67ca89SAndroid Build Coastguard Worker } __packed; 377*8d67ca89SAndroid Build Coastguard Worker 378*8d67ca89SAndroid Build Coastguard Worker /* 379*8d67ca89SAndroid Build Coastguard Worker * BEGIN android-removed: glibc doesn't have these, and external/ping declares them itself. 380*8d67ca89SAndroid Build Coastguard Worker #define ni_type icmp6_ni_hdr.icmp6_type 381*8d67ca89SAndroid Build Coastguard Worker #define ni_code icmp6_ni_hdr.icmp6_code 382*8d67ca89SAndroid Build Coastguard Worker #define ni_cksum icmp6_ni_hdr.icmp6_cksum 383*8d67ca89SAndroid Build Coastguard Worker #define ni_qtype icmp6_ni_hdr.icmp6_data16[0] 384*8d67ca89SAndroid Build Coastguard Worker #define ni_flags icmp6_ni_hdr.icmp6_data16[1] 385*8d67ca89SAndroid Build Coastguard Worker * END android-removed 386*8d67ca89SAndroid Build Coastguard Worker */ 387*8d67ca89SAndroid Build Coastguard Worker 388*8d67ca89SAndroid Build Coastguard Worker #define NI_QTYPE_NOOP 0 /* NOOP */ 389*8d67ca89SAndroid Build Coastguard Worker #define NI_QTYPE_SUPTYPES 1 /* Supported Qtypes */ 390*8d67ca89SAndroid Build Coastguard Worker #define NI_QTYPE_FQDN 2 /* FQDN (draft 04) */ 391*8d67ca89SAndroid Build Coastguard Worker #define NI_QTYPE_DNSNAME 2 /* DNS Name */ 392*8d67ca89SAndroid Build Coastguard Worker #define NI_QTYPE_NODEADDR 3 /* Node Addresses */ 393*8d67ca89SAndroid Build Coastguard Worker #define NI_QTYPE_IPV4ADDR 4 /* IPv4 Addresses */ 394*8d67ca89SAndroid Build Coastguard Worker 395*8d67ca89SAndroid Build Coastguard Worker #define NI_SUPTYPE_FLAG_COMPRESS 0x0100 396*8d67ca89SAndroid Build Coastguard Worker #define NI_FQDN_FLAG_VALIDTTL 0x0100 397*8d67ca89SAndroid Build Coastguard Worker 398*8d67ca89SAndroid Build Coastguard Worker #ifdef NAME_LOOKUPS_04 399*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_LINKLOCAL 0x0100 400*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_SITELOCAL 0x0200 401*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_GLOBAL 0x0400 402*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_ALL 0x0800 403*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_TRUNCATE 0x1000 404*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_ANYCAST 0x2000 /* just experimental. not in spec */ 405*8d67ca89SAndroid Build Coastguard Worker #else /* draft-ietf-ipngwg-icmp-name-lookups-05 (and later?) */ 406*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_TRUNCATE 0x0100 407*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_ALL 0x0200 408*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_COMPAT 0x0400 409*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_LINKLOCAL 0x0800 410*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_SITELOCAL 0x1000 411*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_GLOBAL 0x2000 412*8d67ca89SAndroid Build Coastguard Worker #define NI_NODEADDR_FLAG_ANYCAST 0x4000 /* just experimental. not in spec */ 413*8d67ca89SAndroid Build Coastguard Worker #endif 414*8d67ca89SAndroid Build Coastguard Worker 415*8d67ca89SAndroid Build Coastguard Worker struct ni_reply_fqdn { 416*8d67ca89SAndroid Build Coastguard Worker u_int32_t ni_fqdn_ttl; /* TTL */ 417*8d67ca89SAndroid Build Coastguard Worker u_int8_t ni_fqdn_namelen; /* length in octets of the FQDN */ 418*8d67ca89SAndroid Build Coastguard Worker u_int8_t ni_fqdn_name[3]; /* XXX: alignment */ 419*8d67ca89SAndroid Build Coastguard Worker } __packed; 420*8d67ca89SAndroid Build Coastguard Worker 421*8d67ca89SAndroid Build Coastguard Worker /* 422*8d67ca89SAndroid Build Coastguard Worker * Router Renumbering. as router-renum-08.txt 423*8d67ca89SAndroid Build Coastguard Worker */ 424*8d67ca89SAndroid Build Coastguard Worker struct icmp6_router_renum { /* router renumbering header */ 425*8d67ca89SAndroid Build Coastguard Worker struct icmp6_hdr rr_hdr; 426*8d67ca89SAndroid Build Coastguard Worker u_int8_t rr_segnum; 427*8d67ca89SAndroid Build Coastguard Worker u_int8_t rr_flags; 428*8d67ca89SAndroid Build Coastguard Worker u_int16_t rr_maxdelay; 429*8d67ca89SAndroid Build Coastguard Worker u_int32_t rr_reserved; 430*8d67ca89SAndroid Build Coastguard Worker } __packed; 431*8d67ca89SAndroid Build Coastguard Worker 432*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_FLAGS_TEST 0x80 433*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_FLAGS_REQRESULT 0x40 434*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_FLAGS_FORCEAPPLY 0x20 435*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_FLAGS_SPECSITE 0x10 436*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_FLAGS_PREVDONE 0x08 437*8d67ca89SAndroid Build Coastguard Worker 438*8d67ca89SAndroid Build Coastguard Worker #define rr_type rr_hdr.icmp6_type 439*8d67ca89SAndroid Build Coastguard Worker #define rr_code rr_hdr.icmp6_code 440*8d67ca89SAndroid Build Coastguard Worker #define rr_cksum rr_hdr.icmp6_cksum 441*8d67ca89SAndroid Build Coastguard Worker #define rr_seqnum rr_hdr.icmp6_data32[0] 442*8d67ca89SAndroid Build Coastguard Worker 443*8d67ca89SAndroid Build Coastguard Worker struct rr_pco_match { /* match prefix part */ 444*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpm_code; 445*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpm_len; 446*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpm_ordinal; 447*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpm_matchlen; 448*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpm_minlen; 449*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpm_maxlen; 450*8d67ca89SAndroid Build Coastguard Worker u_int16_t rpm_reserved; 451*8d67ca89SAndroid Build Coastguard Worker struct in6_addr rpm_prefix; 452*8d67ca89SAndroid Build Coastguard Worker } __packed; 453*8d67ca89SAndroid Build Coastguard Worker 454*8d67ca89SAndroid Build Coastguard Worker #define RPM_PCO_ADD 1 455*8d67ca89SAndroid Build Coastguard Worker #define RPM_PCO_CHANGE 2 456*8d67ca89SAndroid Build Coastguard Worker #define RPM_PCO_SETGLOBAL 3 457*8d67ca89SAndroid Build Coastguard Worker #define RPM_PCO_MAX 4 458*8d67ca89SAndroid Build Coastguard Worker 459*8d67ca89SAndroid Build Coastguard Worker struct rr_pco_use { /* use prefix part */ 460*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpu_uselen; 461*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpu_keeplen; 462*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpu_ramask; 463*8d67ca89SAndroid Build Coastguard Worker u_int8_t rpu_raflags; 464*8d67ca89SAndroid Build Coastguard Worker u_int32_t rpu_vltime; 465*8d67ca89SAndroid Build Coastguard Worker u_int32_t rpu_pltime; 466*8d67ca89SAndroid Build Coastguard Worker u_int32_t rpu_flags; 467*8d67ca89SAndroid Build Coastguard Worker struct in6_addr rpu_prefix; 468*8d67ca89SAndroid Build Coastguard Worker } __packed; 469*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x80 470*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_PCOUSE_RAFLAGS_AUTO 0x40 471*8d67ca89SAndroid Build Coastguard Worker 472*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80 473*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40 474*8d67ca89SAndroid Build Coastguard Worker 475*8d67ca89SAndroid Build Coastguard Worker struct rr_result { /* router renumbering result message */ 476*8d67ca89SAndroid Build Coastguard Worker u_int16_t rrr_flags; 477*8d67ca89SAndroid Build Coastguard Worker u_int8_t rrr_ordinal; 478*8d67ca89SAndroid Build Coastguard Worker u_int8_t rrr_matchedlen; 479*8d67ca89SAndroid Build Coastguard Worker u_int32_t rrr_ifid; 480*8d67ca89SAndroid Build Coastguard Worker struct in6_addr rrr_prefix; 481*8d67ca89SAndroid Build Coastguard Worker } __packed; 482*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_RESULT_FLAGS_OOB 0x0200 483*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100 484*8d67ca89SAndroid Build Coastguard Worker 485*8d67ca89SAndroid Build Coastguard Worker /* 486*8d67ca89SAndroid Build Coastguard Worker * icmp6 filter structures. 487*8d67ca89SAndroid Build Coastguard Worker */ 488*8d67ca89SAndroid Build Coastguard Worker 489*8d67ca89SAndroid Build Coastguard Worker struct icmp6_filter { 490*8d67ca89SAndroid Build Coastguard Worker u_int32_t icmp6_filt[8]; 491*8d67ca89SAndroid Build Coastguard Worker }; 492*8d67ca89SAndroid Build Coastguard Worker 493*8d67ca89SAndroid Build Coastguard Worker /* 494*8d67ca89SAndroid Build Coastguard Worker * BEGIN android-changed 495*8d67ca89SAndroid Build Coastguard Worker * Linux and *BSD kernels use opposite values to indicate pass/block in ICMPv6 496*8d67ca89SAndroid Build Coastguard Worker * filters, and assign a different value to the ICMP6_FILTER sockopt. 497*8d67ca89SAndroid Build Coastguard Worker */ 498*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FILTER 1 499*8d67ca89SAndroid Build Coastguard Worker 500*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FILTER_SETPASSALL(filterp) \ 501*8d67ca89SAndroid Build Coastguard Worker (void)memset(filterp, 0x00, sizeof(struct icmp6_filter)) 502*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FILTER_SETBLOCKALL(filterp) \ 503*8d67ca89SAndroid Build Coastguard Worker (void)memset(filterp, 0xff, sizeof(struct icmp6_filter)) 504*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FILTER_SETPASS(type, filterp) \ 505*8d67ca89SAndroid Build Coastguard Worker (((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31))) 506*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FILTER_SETBLOCK(type, filterp) \ 507*8d67ca89SAndroid Build Coastguard Worker (((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31))) 508*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FILTER_WILLPASS(type, filterp) \ 509*8d67ca89SAndroid Build Coastguard Worker ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0) 510*8d67ca89SAndroid Build Coastguard Worker #define ICMP6_FILTER_WILLBLOCK(type, filterp) \ 511*8d67ca89SAndroid Build Coastguard Worker ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0) 512*8d67ca89SAndroid Build Coastguard Worker /* 513*8d67ca89SAndroid Build Coastguard Worker * END android-changed 514*8d67ca89SAndroid Build Coastguard Worker */ 515*8d67ca89SAndroid Build Coastguard Worker 516*8d67ca89SAndroid Build Coastguard Worker #endif /* !_NETINET_ICMP6_H_ */ 517