1*c9945492SAndroid Build Coastguard Worker #ifndef _NETINET_IP6_H 2*c9945492SAndroid Build Coastguard Worker #define _NETINET_IP6_H 3*c9945492SAndroid Build Coastguard Worker 4*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus 5*c9945492SAndroid Build Coastguard Worker extern "C" { 6*c9945492SAndroid Build Coastguard Worker #endif 7*c9945492SAndroid Build Coastguard Worker 8*c9945492SAndroid Build Coastguard Worker #include <stdint.h> 9*c9945492SAndroid Build Coastguard Worker #include <netinet/in.h> 10*c9945492SAndroid Build Coastguard Worker 11*c9945492SAndroid Build Coastguard Worker struct ip6_hdr { 12*c9945492SAndroid Build Coastguard Worker union { 13*c9945492SAndroid Build Coastguard Worker struct ip6_hdrctl { 14*c9945492SAndroid Build Coastguard Worker uint32_t ip6_un1_flow; 15*c9945492SAndroid Build Coastguard Worker uint16_t ip6_un1_plen; 16*c9945492SAndroid Build Coastguard Worker uint8_t ip6_un1_nxt; 17*c9945492SAndroid Build Coastguard Worker uint8_t ip6_un1_hlim; 18*c9945492SAndroid Build Coastguard Worker } ip6_un1; 19*c9945492SAndroid Build Coastguard Worker uint8_t ip6_un2_vfc; 20*c9945492SAndroid Build Coastguard Worker } ip6_ctlun; 21*c9945492SAndroid Build Coastguard Worker struct in6_addr ip6_src; 22*c9945492SAndroid Build Coastguard Worker struct in6_addr ip6_dst; 23*c9945492SAndroid Build Coastguard Worker }; 24*c9945492SAndroid Build Coastguard Worker 25*c9945492SAndroid Build Coastguard Worker #define ip6_vfc ip6_ctlun.ip6_un2_vfc 26*c9945492SAndroid Build Coastguard Worker #define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow 27*c9945492SAndroid Build Coastguard Worker #define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen 28*c9945492SAndroid Build Coastguard Worker #define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt 29*c9945492SAndroid Build Coastguard Worker #define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim 30*c9945492SAndroid Build Coastguard Worker #define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim 31*c9945492SAndroid Build Coastguard Worker 32*c9945492SAndroid Build Coastguard Worker struct ip6_ext { 33*c9945492SAndroid Build Coastguard Worker uint8_t ip6e_nxt; 34*c9945492SAndroid Build Coastguard Worker uint8_t ip6e_len; 35*c9945492SAndroid Build Coastguard Worker }; 36*c9945492SAndroid Build Coastguard Worker 37*c9945492SAndroid Build Coastguard Worker struct ip6_hbh { 38*c9945492SAndroid Build Coastguard Worker uint8_t ip6h_nxt; 39*c9945492SAndroid Build Coastguard Worker uint8_t ip6h_len; 40*c9945492SAndroid Build Coastguard Worker }; 41*c9945492SAndroid Build Coastguard Worker 42*c9945492SAndroid Build Coastguard Worker struct ip6_dest { 43*c9945492SAndroid Build Coastguard Worker uint8_t ip6d_nxt; 44*c9945492SAndroid Build Coastguard Worker uint8_t ip6d_len; 45*c9945492SAndroid Build Coastguard Worker }; 46*c9945492SAndroid Build Coastguard Worker 47*c9945492SAndroid Build Coastguard Worker struct ip6_rthdr { 48*c9945492SAndroid Build Coastguard Worker uint8_t ip6r_nxt; 49*c9945492SAndroid Build Coastguard Worker uint8_t ip6r_len; 50*c9945492SAndroid Build Coastguard Worker uint8_t ip6r_type; 51*c9945492SAndroid Build Coastguard Worker uint8_t ip6r_segleft; 52*c9945492SAndroid Build Coastguard Worker }; 53*c9945492SAndroid Build Coastguard Worker 54*c9945492SAndroid Build Coastguard Worker struct ip6_rthdr0 { 55*c9945492SAndroid Build Coastguard Worker uint8_t ip6r0_nxt; 56*c9945492SAndroid Build Coastguard Worker uint8_t ip6r0_len; 57*c9945492SAndroid Build Coastguard Worker uint8_t ip6r0_type; 58*c9945492SAndroid Build Coastguard Worker uint8_t ip6r0_segleft; 59*c9945492SAndroid Build Coastguard Worker uint8_t ip6r0_reserved; 60*c9945492SAndroid Build Coastguard Worker uint8_t ip6r0_slmap[3]; 61*c9945492SAndroid Build Coastguard Worker struct in6_addr ip6r0_addr[]; 62*c9945492SAndroid Build Coastguard Worker }; 63*c9945492SAndroid Build Coastguard Worker 64*c9945492SAndroid Build Coastguard Worker struct ip6_frag { 65*c9945492SAndroid Build Coastguard Worker uint8_t ip6f_nxt; 66*c9945492SAndroid Build Coastguard Worker uint8_t ip6f_reserved; 67*c9945492SAndroid Build Coastguard Worker uint16_t ip6f_offlg; 68*c9945492SAndroid Build Coastguard Worker uint32_t ip6f_ident; 69*c9945492SAndroid Build Coastguard Worker }; 70*c9945492SAndroid Build Coastguard Worker 71*c9945492SAndroid Build Coastguard Worker #if __BYTE_ORDER == __BIG_ENDIAN 72*c9945492SAndroid Build Coastguard Worker #define IP6F_OFF_MASK 0xfff8 73*c9945492SAndroid Build Coastguard Worker #define IP6F_RESERVED_MASK 0x0006 74*c9945492SAndroid Build Coastguard Worker #define IP6F_MORE_FRAG 0x0001 75*c9945492SAndroid Build Coastguard Worker #else 76*c9945492SAndroid Build Coastguard Worker #define IP6F_OFF_MASK 0xf8ff 77*c9945492SAndroid Build Coastguard Worker #define IP6F_RESERVED_MASK 0x0600 78*c9945492SAndroid Build Coastguard Worker #define IP6F_MORE_FRAG 0x0100 79*c9945492SAndroid Build Coastguard Worker #endif 80*c9945492SAndroid Build Coastguard Worker 81*c9945492SAndroid Build Coastguard Worker struct ip6_opt { 82*c9945492SAndroid Build Coastguard Worker uint8_t ip6o_type; 83*c9945492SAndroid Build Coastguard Worker uint8_t ip6o_len; 84*c9945492SAndroid Build Coastguard Worker }; 85*c9945492SAndroid Build Coastguard Worker 86*c9945492SAndroid Build Coastguard Worker #define IP6OPT_TYPE(o) ((o) & 0xc0) 87*c9945492SAndroid Build Coastguard Worker #define IP6OPT_TYPE_SKIP 0x00 88*c9945492SAndroid Build Coastguard Worker #define IP6OPT_TYPE_DISCARD 0x40 89*c9945492SAndroid Build Coastguard Worker #define IP6OPT_TYPE_FORCEICMP 0x80 90*c9945492SAndroid Build Coastguard Worker #define IP6OPT_TYPE_ICMP 0xc0 91*c9945492SAndroid Build Coastguard Worker #define IP6OPT_TYPE_MUTABLE 0x20 92*c9945492SAndroid Build Coastguard Worker 93*c9945492SAndroid Build Coastguard Worker #define IP6OPT_PAD1 0 94*c9945492SAndroid Build Coastguard Worker #define IP6OPT_PADN 1 95*c9945492SAndroid Build Coastguard Worker 96*c9945492SAndroid Build Coastguard Worker #define IP6OPT_JUMBO 0xc2 97*c9945492SAndroid Build Coastguard Worker #define IP6OPT_NSAP_ADDR 0xc3 98*c9945492SAndroid Build Coastguard Worker #define IP6OPT_TUNNEL_LIMIT 0x04 99*c9945492SAndroid Build Coastguard Worker #define IP6OPT_ROUTER_ALERT 0x05 100*c9945492SAndroid Build Coastguard Worker 101*c9945492SAndroid Build Coastguard Worker struct ip6_opt_jumbo { 102*c9945492SAndroid Build Coastguard Worker uint8_t ip6oj_type; 103*c9945492SAndroid Build Coastguard Worker uint8_t ip6oj_len; 104*c9945492SAndroid Build Coastguard Worker uint8_t ip6oj_jumbo_len[4]; 105*c9945492SAndroid Build Coastguard Worker }; 106*c9945492SAndroid Build Coastguard Worker #define IP6OPT_JUMBO_LEN 6 107*c9945492SAndroid Build Coastguard Worker 108*c9945492SAndroid Build Coastguard Worker struct ip6_opt_nsap { 109*c9945492SAndroid Build Coastguard Worker uint8_t ip6on_type; 110*c9945492SAndroid Build Coastguard Worker uint8_t ip6on_len; 111*c9945492SAndroid Build Coastguard Worker uint8_t ip6on_src_nsap_len; 112*c9945492SAndroid Build Coastguard Worker uint8_t ip6on_dst_nsap_len; 113*c9945492SAndroid Build Coastguard Worker }; 114*c9945492SAndroid Build Coastguard Worker 115*c9945492SAndroid Build Coastguard Worker struct ip6_opt_tunnel { 116*c9945492SAndroid Build Coastguard Worker uint8_t ip6ot_type; 117*c9945492SAndroid Build Coastguard Worker uint8_t ip6ot_len; 118*c9945492SAndroid Build Coastguard Worker uint8_t ip6ot_encap_limit; 119*c9945492SAndroid Build Coastguard Worker }; 120*c9945492SAndroid Build Coastguard Worker 121*c9945492SAndroid Build Coastguard Worker struct ip6_opt_router { 122*c9945492SAndroid Build Coastguard Worker uint8_t ip6or_type; 123*c9945492SAndroid Build Coastguard Worker uint8_t ip6or_len; 124*c9945492SAndroid Build Coastguard Worker uint8_t ip6or_value[2]; 125*c9945492SAndroid Build Coastguard Worker }; 126*c9945492SAndroid Build Coastguard Worker 127*c9945492SAndroid Build Coastguard Worker #if __BYTE_ORDER == __BIG_ENDIAN 128*c9945492SAndroid Build Coastguard Worker #define IP6_ALERT_MLD 0x0000 129*c9945492SAndroid Build Coastguard Worker #define IP6_ALERT_RSVP 0x0001 130*c9945492SAndroid Build Coastguard Worker #define IP6_ALERT_AN 0x0002 131*c9945492SAndroid Build Coastguard Worker #else 132*c9945492SAndroid Build Coastguard Worker #define IP6_ALERT_MLD 0x0000 133*c9945492SAndroid Build Coastguard Worker #define IP6_ALERT_RSVP 0x0100 134*c9945492SAndroid Build Coastguard Worker #define IP6_ALERT_AN 0x0200 135*c9945492SAndroid Build Coastguard Worker #endif 136*c9945492SAndroid Build Coastguard Worker 137*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus 138*c9945492SAndroid Build Coastguard Worker } 139*c9945492SAndroid Build Coastguard Worker #endif 140*c9945492SAndroid Build Coastguard Worker 141*c9945492SAndroid Build Coastguard Worker #endif 142