xref: /aosp_15_r20/prebuilts/build-tools/sysroots/arm-unknown-linux-musleabihf/include/netinet/ip6.h (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
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