xref: /aosp_15_r20/external/musl/include/netinet/ip6.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
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