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