1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991-1997,2000,2006 Free Software Foundation, Inc. 2*53ee8cc1Swenshuai.xi This file is part of the GNU C Library. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi The GNU C Library is free software; you can redistribute it and/or 5*53ee8cc1Swenshuai.xi modify it under the terms of the GNU Lesser General Public 6*53ee8cc1Swenshuai.xi License as published by the Free Software Foundation; either 7*53ee8cc1Swenshuai.xi version 2.1 of the License, or (at your option) any later version. 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi The GNU C Library is distributed in the hope that it will be useful, 10*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 11*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12*53ee8cc1Swenshuai.xi Lesser General Public License for more details. 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi You should have received a copy of the GNU Lesser General Public 15*53ee8cc1Swenshuai.xi License along with the GNU C Library; if not, write to the Free 16*53ee8cc1Swenshuai.xi Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17*53ee8cc1Swenshuai.xi 02111-1307 USA. */ 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi #ifndef _NETINET_ICMP6_H 20*53ee8cc1Swenshuai.xi #define _NETINET_ICMP6_H 1 21*53ee8cc1Swenshuai.xi 22*53ee8cc1Swenshuai.xi #include <inttypes.h> 23*53ee8cc1Swenshuai.xi #include <string.h> 24*53ee8cc1Swenshuai.xi #include <sys/types.h> 25*53ee8cc1Swenshuai.xi #include <netinet/in.h> 26*53ee8cc1Swenshuai.xi 27*53ee8cc1Swenshuai.xi #define ICMP6_FILTER 1 28*53ee8cc1Swenshuai.xi 29*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_BLOCK 1 30*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_PASS 2 31*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_BLOCKOTHERS 3 32*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_PASSONLY 4 33*53ee8cc1Swenshuai.xi 34*53ee8cc1Swenshuai.xi struct icmp6_filter 35*53ee8cc1Swenshuai.xi { 36*53ee8cc1Swenshuai.xi uint32_t icmp6_filt[8]; 37*53ee8cc1Swenshuai.xi }; 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi struct icmp6_hdr 40*53ee8cc1Swenshuai.xi { 41*53ee8cc1Swenshuai.xi uint8_t icmp6_type; /* type field */ 42*53ee8cc1Swenshuai.xi uint8_t icmp6_code; /* code field */ 43*53ee8cc1Swenshuai.xi uint16_t icmp6_cksum; /* checksum field */ 44*53ee8cc1Swenshuai.xi union 45*53ee8cc1Swenshuai.xi { 46*53ee8cc1Swenshuai.xi uint32_t icmp6_un_data32[1]; /* type-specific field */ 47*53ee8cc1Swenshuai.xi uint16_t icmp6_un_data16[2]; /* type-specific field */ 48*53ee8cc1Swenshuai.xi uint8_t icmp6_un_data8[4]; /* type-specific field */ 49*53ee8cc1Swenshuai.xi } icmp6_dataun; 50*53ee8cc1Swenshuai.xi }; 51*53ee8cc1Swenshuai.xi 52*53ee8cc1Swenshuai.xi #define icmp6_data32 icmp6_dataun.icmp6_un_data32 53*53ee8cc1Swenshuai.xi #define icmp6_data16 icmp6_dataun.icmp6_un_data16 54*53ee8cc1Swenshuai.xi #define icmp6_data8 icmp6_dataun.icmp6_un_data8 55*53ee8cc1Swenshuai.xi #define icmp6_pptr icmp6_data32[0] /* parameter prob */ 56*53ee8cc1Swenshuai.xi #define icmp6_mtu icmp6_data32[0] /* packet too big */ 57*53ee8cc1Swenshuai.xi #define icmp6_id icmp6_data16[0] /* echo request/reply */ 58*53ee8cc1Swenshuai.xi #define icmp6_seq icmp6_data16[1] /* echo request/reply */ 59*53ee8cc1Swenshuai.xi #define icmp6_maxdelay icmp6_data16[0] /* mcast group membership */ 60*53ee8cc1Swenshuai.xi 61*53ee8cc1Swenshuai.xi #define ICMP6_DST_UNREACH 1 62*53ee8cc1Swenshuai.xi #define ICMP6_PACKET_TOO_BIG 2 63*53ee8cc1Swenshuai.xi #define ICMP6_TIME_EXCEEDED 3 64*53ee8cc1Swenshuai.xi #define ICMP6_PARAM_PROB 4 65*53ee8cc1Swenshuai.xi 66*53ee8cc1Swenshuai.xi #define ICMP6_INFOMSG_MASK 0x80 /* all informational messages */ 67*53ee8cc1Swenshuai.xi 68*53ee8cc1Swenshuai.xi #define ICMP6_ECHO_REQUEST 128 69*53ee8cc1Swenshuai.xi #define ICMP6_ECHO_REPLY 129 70*53ee8cc1Swenshuai.xi #define MLD_LISTENER_QUERY 130 71*53ee8cc1Swenshuai.xi #define MLD_LISTENER_REPORT 131 72*53ee8cc1Swenshuai.xi #define MLD_LISTENER_REDUCTION 132 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi #define ICMP6_DST_UNREACH_NOROUTE 0 /* no route to destination */ 75*53ee8cc1Swenshuai.xi #define ICMP6_DST_UNREACH_ADMIN 1 /* communication with destination */ 76*53ee8cc1Swenshuai.xi /* administratively prohibited */ 77*53ee8cc1Swenshuai.xi #define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */ 78*53ee8cc1Swenshuai.xi #define ICMP6_DST_UNREACH_ADDR 3 /* address unreachable */ 79*53ee8cc1Swenshuai.xi #define ICMP6_DST_UNREACH_NOPORT 4 /* bad port */ 80*53ee8cc1Swenshuai.xi 81*53ee8cc1Swenshuai.xi #define ICMP6_TIME_EXCEED_TRANSIT 0 /* Hop Limit == 0 in transit */ 82*53ee8cc1Swenshuai.xi #define ICMP6_TIME_EXCEED_REASSEMBLY 1 /* Reassembly time out */ 83*53ee8cc1Swenshuai.xi 84*53ee8cc1Swenshuai.xi #define ICMP6_PARAMPROB_HEADER 0 /* erroneous header field */ 85*53ee8cc1Swenshuai.xi #define ICMP6_PARAMPROB_NEXTHEADER 1 /* unrecognized Next Header */ 86*53ee8cc1Swenshuai.xi #define ICMP6_PARAMPROB_OPTION 2 /* unrecognized IPv6 option */ 87*53ee8cc1Swenshuai.xi 88*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_WILLPASS(type, filterp) \ 89*53ee8cc1Swenshuai.xi ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0) 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_WILLBLOCK(type, filterp) \ 92*53ee8cc1Swenshuai.xi ((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0) 93*53ee8cc1Swenshuai.xi 94*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_SETPASS(type, filterp) \ 95*53ee8cc1Swenshuai.xi ((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31)))) 96*53ee8cc1Swenshuai.xi 97*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_SETBLOCK(type, filterp) \ 98*53ee8cc1Swenshuai.xi ((((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31)))) 99*53ee8cc1Swenshuai.xi 100*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_SETPASSALL(filterp) \ 101*53ee8cc1Swenshuai.xi memset (filterp, 0, sizeof (struct icmp6_filter)); 102*53ee8cc1Swenshuai.xi 103*53ee8cc1Swenshuai.xi #define ICMP6_FILTER_SETBLOCKALL(filterp) \ 104*53ee8cc1Swenshuai.xi memset (filterp, 0xFF, sizeof (struct icmp6_filter)); 105*53ee8cc1Swenshuai.xi 106*53ee8cc1Swenshuai.xi #define ND_ROUTER_SOLICIT 133 107*53ee8cc1Swenshuai.xi #define ND_ROUTER_ADVERT 134 108*53ee8cc1Swenshuai.xi #define ND_NEIGHBOR_SOLICIT 135 109*53ee8cc1Swenshuai.xi #define ND_NEIGHBOR_ADVERT 136 110*53ee8cc1Swenshuai.xi #define ND_REDIRECT 137 111*53ee8cc1Swenshuai.xi 112*53ee8cc1Swenshuai.xi struct nd_router_solicit /* router solicitation */ 113*53ee8cc1Swenshuai.xi { 114*53ee8cc1Swenshuai.xi struct icmp6_hdr nd_rs_hdr; 115*53ee8cc1Swenshuai.xi /* could be followed by options */ 116*53ee8cc1Swenshuai.xi }; 117*53ee8cc1Swenshuai.xi 118*53ee8cc1Swenshuai.xi #define nd_rs_type nd_rs_hdr.icmp6_type 119*53ee8cc1Swenshuai.xi #define nd_rs_code nd_rs_hdr.icmp6_code 120*53ee8cc1Swenshuai.xi #define nd_rs_cksum nd_rs_hdr.icmp6_cksum 121*53ee8cc1Swenshuai.xi #define nd_rs_reserved nd_rs_hdr.icmp6_data32[0] 122*53ee8cc1Swenshuai.xi 123*53ee8cc1Swenshuai.xi struct nd_router_advert /* router advertisement */ 124*53ee8cc1Swenshuai.xi { 125*53ee8cc1Swenshuai.xi struct icmp6_hdr nd_ra_hdr; 126*53ee8cc1Swenshuai.xi uint32_t nd_ra_reachable; /* reachable time */ 127*53ee8cc1Swenshuai.xi uint32_t nd_ra_retransmit; /* retransmit timer */ 128*53ee8cc1Swenshuai.xi /* could be followed by options */ 129*53ee8cc1Swenshuai.xi }; 130*53ee8cc1Swenshuai.xi 131*53ee8cc1Swenshuai.xi #define nd_ra_type nd_ra_hdr.icmp6_type 132*53ee8cc1Swenshuai.xi #define nd_ra_code nd_ra_hdr.icmp6_code 133*53ee8cc1Swenshuai.xi #define nd_ra_cksum nd_ra_hdr.icmp6_cksum 134*53ee8cc1Swenshuai.xi #define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0] 135*53ee8cc1Swenshuai.xi #define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1] 136*53ee8cc1Swenshuai.xi #define ND_RA_FLAG_MANAGED 0x80 137*53ee8cc1Swenshuai.xi #define ND_RA_FLAG_OTHER 0x40 138*53ee8cc1Swenshuai.xi #define ND_RA_FLAG_HOME_AGENT 0x20 139*53ee8cc1Swenshuai.xi #define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1] 140*53ee8cc1Swenshuai.xi 141*53ee8cc1Swenshuai.xi struct nd_neighbor_solicit /* neighbor solicitation */ 142*53ee8cc1Swenshuai.xi { 143*53ee8cc1Swenshuai.xi struct icmp6_hdr nd_ns_hdr; 144*53ee8cc1Swenshuai.xi struct in6_addr nd_ns_target; /* target address */ 145*53ee8cc1Swenshuai.xi /* could be followed by options */ 146*53ee8cc1Swenshuai.xi }; 147*53ee8cc1Swenshuai.xi 148*53ee8cc1Swenshuai.xi #define nd_ns_type nd_ns_hdr.icmp6_type 149*53ee8cc1Swenshuai.xi #define nd_ns_code nd_ns_hdr.icmp6_code 150*53ee8cc1Swenshuai.xi #define nd_ns_cksum nd_ns_hdr.icmp6_cksum 151*53ee8cc1Swenshuai.xi #define nd_ns_reserved nd_ns_hdr.icmp6_data32[0] 152*53ee8cc1Swenshuai.xi 153*53ee8cc1Swenshuai.xi struct nd_neighbor_advert /* neighbor advertisement */ 154*53ee8cc1Swenshuai.xi { 155*53ee8cc1Swenshuai.xi struct icmp6_hdr nd_na_hdr; 156*53ee8cc1Swenshuai.xi struct in6_addr nd_na_target; /* target address */ 157*53ee8cc1Swenshuai.xi /* could be followed by options */ 158*53ee8cc1Swenshuai.xi }; 159*53ee8cc1Swenshuai.xi 160*53ee8cc1Swenshuai.xi #define nd_na_type nd_na_hdr.icmp6_type 161*53ee8cc1Swenshuai.xi #define nd_na_code nd_na_hdr.icmp6_code 162*53ee8cc1Swenshuai.xi #define nd_na_cksum nd_na_hdr.icmp6_cksum 163*53ee8cc1Swenshuai.xi #define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0] 164*53ee8cc1Swenshuai.xi #if BYTE_ORDER == BIG_ENDIAN 165*53ee8cc1Swenshuai.xi #define ND_NA_FLAG_ROUTER 0x80000000 166*53ee8cc1Swenshuai.xi #define ND_NA_FLAG_SOLICITED 0x40000000 167*53ee8cc1Swenshuai.xi #define ND_NA_FLAG_OVERRIDE 0x20000000 168*53ee8cc1Swenshuai.xi #else /* BYTE_ORDER == LITTLE_ENDIAN */ 169*53ee8cc1Swenshuai.xi #define ND_NA_FLAG_ROUTER 0x00000080 170*53ee8cc1Swenshuai.xi #define ND_NA_FLAG_SOLICITED 0x00000040 171*53ee8cc1Swenshuai.xi #define ND_NA_FLAG_OVERRIDE 0x00000020 172*53ee8cc1Swenshuai.xi #endif 173*53ee8cc1Swenshuai.xi 174*53ee8cc1Swenshuai.xi struct nd_redirect /* redirect */ 175*53ee8cc1Swenshuai.xi { 176*53ee8cc1Swenshuai.xi struct icmp6_hdr nd_rd_hdr; 177*53ee8cc1Swenshuai.xi struct in6_addr nd_rd_target; /* target address */ 178*53ee8cc1Swenshuai.xi struct in6_addr nd_rd_dst; /* destination address */ 179*53ee8cc1Swenshuai.xi /* could be followed by options */ 180*53ee8cc1Swenshuai.xi }; 181*53ee8cc1Swenshuai.xi 182*53ee8cc1Swenshuai.xi #define nd_rd_type nd_rd_hdr.icmp6_type 183*53ee8cc1Swenshuai.xi #define nd_rd_code nd_rd_hdr.icmp6_code 184*53ee8cc1Swenshuai.xi #define nd_rd_cksum nd_rd_hdr.icmp6_cksum 185*53ee8cc1Swenshuai.xi #define nd_rd_reserved nd_rd_hdr.icmp6_data32[0] 186*53ee8cc1Swenshuai.xi 187*53ee8cc1Swenshuai.xi struct nd_opt_hdr /* Neighbor discovery option header */ 188*53ee8cc1Swenshuai.xi { 189*53ee8cc1Swenshuai.xi uint8_t nd_opt_type; 190*53ee8cc1Swenshuai.xi uint8_t nd_opt_len; /* in units of 8 octets */ 191*53ee8cc1Swenshuai.xi /* followed by option specific data */ 192*53ee8cc1Swenshuai.xi }; 193*53ee8cc1Swenshuai.xi 194*53ee8cc1Swenshuai.xi #define ND_OPT_SOURCE_LINKADDR 1 195*53ee8cc1Swenshuai.xi #define ND_OPT_TARGET_LINKADDR 2 196*53ee8cc1Swenshuai.xi #define ND_OPT_PREFIX_INFORMATION 3 197*53ee8cc1Swenshuai.xi #define ND_OPT_REDIRECTED_HEADER 4 198*53ee8cc1Swenshuai.xi #define ND_OPT_MTU 5 199*53ee8cc1Swenshuai.xi #define ND_OPT_RTR_ADV_INTERVAL 7 200*53ee8cc1Swenshuai.xi #define ND_OPT_HOME_AGENT_INFO 8 201*53ee8cc1Swenshuai.xi 202*53ee8cc1Swenshuai.xi struct nd_opt_prefix_info /* prefix information */ 203*53ee8cc1Swenshuai.xi { 204*53ee8cc1Swenshuai.xi uint8_t nd_opt_pi_type; 205*53ee8cc1Swenshuai.xi uint8_t nd_opt_pi_len; 206*53ee8cc1Swenshuai.xi uint8_t nd_opt_pi_prefix_len; 207*53ee8cc1Swenshuai.xi uint8_t nd_opt_pi_flags_reserved; 208*53ee8cc1Swenshuai.xi uint32_t nd_opt_pi_valid_time; 209*53ee8cc1Swenshuai.xi uint32_t nd_opt_pi_preferred_time; 210*53ee8cc1Swenshuai.xi uint32_t nd_opt_pi_reserved2; 211*53ee8cc1Swenshuai.xi struct in6_addr nd_opt_pi_prefix; 212*53ee8cc1Swenshuai.xi }; 213*53ee8cc1Swenshuai.xi 214*53ee8cc1Swenshuai.xi #define ND_OPT_PI_FLAG_ONLINK 0x80 215*53ee8cc1Swenshuai.xi #define ND_OPT_PI_FLAG_AUTO 0x40 216*53ee8cc1Swenshuai.xi #define ND_OPT_PI_FLAG_RADDR 0x20 217*53ee8cc1Swenshuai.xi 218*53ee8cc1Swenshuai.xi struct nd_opt_rd_hdr /* redirected header */ 219*53ee8cc1Swenshuai.xi { 220*53ee8cc1Swenshuai.xi uint8_t nd_opt_rh_type; 221*53ee8cc1Swenshuai.xi uint8_t nd_opt_rh_len; 222*53ee8cc1Swenshuai.xi uint16_t nd_opt_rh_reserved1; 223*53ee8cc1Swenshuai.xi uint32_t nd_opt_rh_reserved2; 224*53ee8cc1Swenshuai.xi /* followed by IP header and data */ 225*53ee8cc1Swenshuai.xi }; 226*53ee8cc1Swenshuai.xi 227*53ee8cc1Swenshuai.xi struct nd_opt_mtu /* MTU option */ 228*53ee8cc1Swenshuai.xi { 229*53ee8cc1Swenshuai.xi uint8_t nd_opt_mtu_type; 230*53ee8cc1Swenshuai.xi uint8_t nd_opt_mtu_len; 231*53ee8cc1Swenshuai.xi uint16_t nd_opt_mtu_reserved; 232*53ee8cc1Swenshuai.xi uint32_t nd_opt_mtu_mtu; 233*53ee8cc1Swenshuai.xi }; 234*53ee8cc1Swenshuai.xi 235*53ee8cc1Swenshuai.xi struct mld_hdr 236*53ee8cc1Swenshuai.xi { 237*53ee8cc1Swenshuai.xi struct icmp6_hdr mld_icmp6_hdr; 238*53ee8cc1Swenshuai.xi struct in6_addr mld_addr; /* multicast address */ 239*53ee8cc1Swenshuai.xi }; 240*53ee8cc1Swenshuai.xi 241*53ee8cc1Swenshuai.xi #define mld_type mld_icmp6_hdr.icmp6_type 242*53ee8cc1Swenshuai.xi #define mld_code mld_icmp6_hdr.icmp6_code 243*53ee8cc1Swenshuai.xi #define mld_cksum mld_icmp6_hdr.icmp6_cksum 244*53ee8cc1Swenshuai.xi #define mld_maxdelay mld_icmp6_hdr.icmp6_data16[0] 245*53ee8cc1Swenshuai.xi #define mld_reserved mld_icmp6_hdr.icmp6_data16[1] 246*53ee8cc1Swenshuai.xi 247*53ee8cc1Swenshuai.xi #define ICMP6_ROUTER_RENUMBERING 138 248*53ee8cc1Swenshuai.xi 249*53ee8cc1Swenshuai.xi struct icmp6_router_renum /* router renumbering header */ 250*53ee8cc1Swenshuai.xi { 251*53ee8cc1Swenshuai.xi struct icmp6_hdr rr_hdr; 252*53ee8cc1Swenshuai.xi uint8_t rr_segnum; 253*53ee8cc1Swenshuai.xi uint8_t rr_flags; 254*53ee8cc1Swenshuai.xi uint16_t rr_maxdelay; 255*53ee8cc1Swenshuai.xi uint32_t rr_reserved; 256*53ee8cc1Swenshuai.xi }; 257*53ee8cc1Swenshuai.xi 258*53ee8cc1Swenshuai.xi #define rr_type rr_hdr.icmp6_type 259*53ee8cc1Swenshuai.xi #define rr_code rr_hdr.icmp6_code 260*53ee8cc1Swenshuai.xi #define rr_cksum rr_hdr.icmp6_cksum 261*53ee8cc1Swenshuai.xi #define rr_seqnum rr_hdr.icmp6_data32[0] 262*53ee8cc1Swenshuai.xi 263*53ee8cc1Swenshuai.xi /* Router renumbering flags */ 264*53ee8cc1Swenshuai.xi #define ICMP6_RR_FLAGS_TEST 0x80 265*53ee8cc1Swenshuai.xi #define ICMP6_RR_FLAGS_REQRESULT 0x40 266*53ee8cc1Swenshuai.xi #define ICMP6_RR_FLAGS_FORCEAPPLY 0x20 267*53ee8cc1Swenshuai.xi #define ICMP6_RR_FLAGS_SPECSITE 0x10 268*53ee8cc1Swenshuai.xi #define ICMP6_RR_FLAGS_PREVDONE 0x08 269*53ee8cc1Swenshuai.xi 270*53ee8cc1Swenshuai.xi struct rr_pco_match /* match prefix part */ 271*53ee8cc1Swenshuai.xi { 272*53ee8cc1Swenshuai.xi uint8_t rpm_code; 273*53ee8cc1Swenshuai.xi uint8_t rpm_len; 274*53ee8cc1Swenshuai.xi uint8_t rpm_ordinal; 275*53ee8cc1Swenshuai.xi uint8_t rpm_matchlen; 276*53ee8cc1Swenshuai.xi uint8_t rpm_minlen; 277*53ee8cc1Swenshuai.xi uint8_t rpm_maxlen; 278*53ee8cc1Swenshuai.xi uint16_t rpm_reserved; 279*53ee8cc1Swenshuai.xi struct in6_addr rpm_prefix; 280*53ee8cc1Swenshuai.xi }; 281*53ee8cc1Swenshuai.xi 282*53ee8cc1Swenshuai.xi /* PCO code values */ 283*53ee8cc1Swenshuai.xi #define RPM_PCO_ADD 1 284*53ee8cc1Swenshuai.xi #define RPM_PCO_CHANGE 2 285*53ee8cc1Swenshuai.xi #define RPM_PCO_SETGLOBAL 3 286*53ee8cc1Swenshuai.xi 287*53ee8cc1Swenshuai.xi struct rr_pco_use /* use prefix part */ 288*53ee8cc1Swenshuai.xi { 289*53ee8cc1Swenshuai.xi uint8_t rpu_uselen; 290*53ee8cc1Swenshuai.xi uint8_t rpu_keeplen; 291*53ee8cc1Swenshuai.xi uint8_t rpu_ramask; 292*53ee8cc1Swenshuai.xi uint8_t rpu_raflags; 293*53ee8cc1Swenshuai.xi uint32_t rpu_vltime; 294*53ee8cc1Swenshuai.xi uint32_t rpu_pltime; 295*53ee8cc1Swenshuai.xi uint32_t rpu_flags; 296*53ee8cc1Swenshuai.xi struct in6_addr rpu_prefix; 297*53ee8cc1Swenshuai.xi }; 298*53ee8cc1Swenshuai.xi 299*53ee8cc1Swenshuai.xi #define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x20 300*53ee8cc1Swenshuai.xi #define ICMP6_RR_PCOUSE_RAFLAGS_AUTO 0x10 301*53ee8cc1Swenshuai.xi 302*53ee8cc1Swenshuai.xi #if BYTE_ORDER == BIG_ENDIAN 303*53ee8cc1Swenshuai.xi # define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000 304*53ee8cc1Swenshuai.xi # define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000 305*53ee8cc1Swenshuai.xi #elif BYTE_ORDER == LITTLE_ENDIAN 306*53ee8cc1Swenshuai.xi # define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80 307*53ee8cc1Swenshuai.xi # define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40 308*53ee8cc1Swenshuai.xi #endif 309*53ee8cc1Swenshuai.xi 310*53ee8cc1Swenshuai.xi struct rr_result /* router renumbering result message */ 311*53ee8cc1Swenshuai.xi { 312*53ee8cc1Swenshuai.xi uint16_t rrr_flags; 313*53ee8cc1Swenshuai.xi uint8_t rrr_ordinal; 314*53ee8cc1Swenshuai.xi uint8_t rrr_matchedlen; 315*53ee8cc1Swenshuai.xi uint32_t rrr_ifid; 316*53ee8cc1Swenshuai.xi struct in6_addr rrr_prefix; 317*53ee8cc1Swenshuai.xi }; 318*53ee8cc1Swenshuai.xi 319*53ee8cc1Swenshuai.xi #if BYTE_ORDER == BIG_ENDIAN 320*53ee8cc1Swenshuai.xi # define ICMP6_RR_RESULT_FLAGS_OOB 0x0002 321*53ee8cc1Swenshuai.xi # define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0001 322*53ee8cc1Swenshuai.xi #elif BYTE_ORDER == LITTLE_ENDIAN 323*53ee8cc1Swenshuai.xi # define ICMP6_RR_RESULT_FLAGS_OOB 0x0200 324*53ee8cc1Swenshuai.xi # define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100 325*53ee8cc1Swenshuai.xi #endif 326*53ee8cc1Swenshuai.xi 327*53ee8cc1Swenshuai.xi /* Mobile IPv6 extension: Advertisement Interval. */ 328*53ee8cc1Swenshuai.xi struct nd_opt_adv_interval 329*53ee8cc1Swenshuai.xi { 330*53ee8cc1Swenshuai.xi uint8_t nd_opt_adv_interval_type; 331*53ee8cc1Swenshuai.xi uint8_t nd_opt_adv_interval_len; 332*53ee8cc1Swenshuai.xi uint16_t nd_opt_adv_interval_reserved; 333*53ee8cc1Swenshuai.xi uint32_t nd_opt_adv_interval_ival; 334*53ee8cc1Swenshuai.xi }; 335*53ee8cc1Swenshuai.xi 336*53ee8cc1Swenshuai.xi /* Mobile IPv6 extension: Home Agent Info. */ 337*53ee8cc1Swenshuai.xi struct nd_opt_home_agent_info 338*53ee8cc1Swenshuai.xi { 339*53ee8cc1Swenshuai.xi uint8_t nd_opt_home_agent_info_type; 340*53ee8cc1Swenshuai.xi uint8_t nd_opt_home_agent_info_len; 341*53ee8cc1Swenshuai.xi uint16_t nd_opt_home_agent_info_reserved; 342*53ee8cc1Swenshuai.xi int16_t nd_opt_home_agent_info_preference; 343*53ee8cc1Swenshuai.xi uint16_t nd_opt_home_agent_info_lifetime; 344*53ee8cc1Swenshuai.xi }; 345*53ee8cc1Swenshuai.xi 346*53ee8cc1Swenshuai.xi #endif /* netinet/icmpv6.h */ 347