1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
2 | #ifndef _UAPI_IPV6_H |
3 | #define _UAPI_IPV6_H |
4 | |
5 | #include <linux/libc-compat.h> |
6 | #include <linux/types.h> |
7 | #include <linux/stddef.h> |
8 | #include <linux/in6.h> |
9 | #include <asm/byteorder.h> |
10 | |
11 | /* The latest drafts declared increase in minimal mtu up to 1280. */ |
12 | |
13 | #define IPV6_MIN_MTU 1280 |
14 | |
15 | /* |
16 | * Advanced API |
17 | * source interface/address selection, source routing, etc... |
18 | * *under construction* |
19 | */ |
20 | |
21 | #if __UAPI_DEF_IN6_PKTINFO |
22 | struct in6_pktinfo { |
23 | struct in6_addr ipi6_addr; |
24 | int ipi6_ifindex; |
25 | }; |
26 | #endif |
27 | |
28 | #if __UAPI_DEF_IP6_MTUINFO |
29 | struct ip6_mtuinfo { |
30 | struct sockaddr_in6 ip6m_addr; |
31 | __u32 ip6m_mtu; |
32 | }; |
33 | #endif |
34 | |
35 | struct in6_ifreq { |
36 | struct in6_addr ifr6_addr; |
37 | __u32 ifr6_prefixlen; |
38 | int ifr6_ifindex; |
39 | }; |
40 | |
41 | #define IPV6_SRCRT_STRICT 0x01 /* Deprecated; will be removed */ |
42 | #define IPV6_SRCRT_TYPE_0 0 /* Deprecated; will be removed */ |
43 | #define IPV6_SRCRT_TYPE_2 2 /* IPv6 type 2 Routing Header */ |
44 | #define IPV6_SRCRT_TYPE_3 3 /* RPL Segment Routing with IPv6 */ |
45 | #define IPV6_SRCRT_TYPE_4 4 /* Segment Routing with IPv6 */ |
46 | |
47 | /* |
48 | * routing header |
49 | */ |
50 | struct ipv6_rt_hdr { |
51 | __u8 nexthdr; |
52 | __u8 hdrlen; |
53 | __u8 type; |
54 | __u8 segments_left; |
55 | |
56 | /* |
57 | * type specific data |
58 | * variable length field |
59 | */ |
60 | }; |
61 | |
62 | |
63 | struct ipv6_opt_hdr { |
64 | __u8 nexthdr; |
65 | __u8 hdrlen; |
66 | /* |
67 | * TLV encoded option data follows. |
68 | */ |
69 | } __attribute__((packed)); /* required for some archs */ |
70 | |
71 | #define ipv6_destopt_hdr ipv6_opt_hdr |
72 | #define ipv6_hopopt_hdr ipv6_opt_hdr |
73 | |
74 | /* Router Alert option values (RFC2711) */ |
75 | #define IPV6_OPT_ROUTERALERT_MLD 0x0000 /* MLD(RFC2710) */ |
76 | |
77 | /* |
78 | * routing header type 0 (used in cmsghdr struct) |
79 | */ |
80 | |
81 | struct rt0_hdr { |
82 | struct ipv6_rt_hdr rt_hdr; |
83 | __u32 reserved; |
84 | struct in6_addr addr[]; |
85 | |
86 | #define rt0_type rt_hdr.type |
87 | }; |
88 | |
89 | /* |
90 | * routing header type 2 |
91 | */ |
92 | |
93 | struct rt2_hdr { |
94 | struct ipv6_rt_hdr rt_hdr; |
95 | __u32 reserved; |
96 | struct in6_addr addr; |
97 | |
98 | #define rt2_type rt_hdr.type |
99 | }; |
100 | |
101 | /* |
102 | * home address option in destination options header |
103 | */ |
104 | |
105 | struct ipv6_destopt_hao { |
106 | __u8 type; |
107 | __u8 length; |
108 | struct in6_addr addr; |
109 | } __attribute__((packed)); |
110 | |
111 | /* |
112 | * IPv6 fixed header |
113 | * |
114 | * BEWARE, it is incorrect. The first 4 bits of flow_lbl |
115 | * are glued to priority now, forming "class". |
116 | */ |
117 | |
118 | struct ipv6hdr { |
119 | #if defined(__LITTLE_ENDIAN_BITFIELD) |
120 | __u8 priority:4, |
121 | version:4; |
122 | #elif defined(__BIG_ENDIAN_BITFIELD) |
123 | __u8 version:4, |
124 | priority:4; |
125 | #else |
126 | #error "Please fix <asm/byteorder.h>" |
127 | #endif |
128 | __u8 flow_lbl[3]; |
129 | |
130 | __be16 payload_len; |
131 | __u8 nexthdr; |
132 | __u8 hop_limit; |
133 | |
134 | __struct_group(/* no tag */, addrs, /* no attrs */, |
135 | struct in6_addr saddr; |
136 | struct in6_addr daddr; |
137 | ); |
138 | }; |
139 | |
140 | |
141 | /* index values for the variables in ipv6_devconf */ |
142 | enum { |
143 | DEVCONF_FORWARDING = 0, |
144 | DEVCONF_HOPLIMIT, |
145 | DEVCONF_MTU6, |
146 | DEVCONF_ACCEPT_RA, |
147 | DEVCONF_ACCEPT_REDIRECTS, |
148 | DEVCONF_AUTOCONF, |
149 | DEVCONF_DAD_TRANSMITS, |
150 | DEVCONF_RTR_SOLICITS, |
151 | DEVCONF_RTR_SOLICIT_INTERVAL, |
152 | DEVCONF_RTR_SOLICIT_DELAY, |
153 | DEVCONF_USE_TEMPADDR, |
154 | DEVCONF_TEMP_VALID_LFT, |
155 | DEVCONF_TEMP_PREFERED_LFT, |
156 | DEVCONF_REGEN_MAX_RETRY, |
157 | DEVCONF_MAX_DESYNC_FACTOR, |
158 | DEVCONF_MAX_ADDRESSES, |
159 | DEVCONF_FORCE_MLD_VERSION, |
160 | DEVCONF_ACCEPT_RA_DEFRTR, |
161 | DEVCONF_ACCEPT_RA_PINFO, |
162 | DEVCONF_ACCEPT_RA_RTR_PREF, |
163 | DEVCONF_RTR_PROBE_INTERVAL, |
164 | DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN, |
165 | DEVCONF_PROXY_NDP, |
166 | DEVCONF_OPTIMISTIC_DAD, |
167 | DEVCONF_ACCEPT_SOURCE_ROUTE, |
168 | DEVCONF_MC_FORWARDING, |
169 | DEVCONF_DISABLE_IPV6, |
170 | DEVCONF_ACCEPT_DAD, |
171 | DEVCONF_FORCE_TLLAO, |
172 | DEVCONF_NDISC_NOTIFY, |
173 | DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL, |
174 | DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL, |
175 | DEVCONF_SUPPRESS_FRAG_NDISC, |
176 | DEVCONF_ACCEPT_RA_FROM_LOCAL, |
177 | DEVCONF_USE_OPTIMISTIC, |
178 | DEVCONF_ACCEPT_RA_MTU, |
179 | DEVCONF_STABLE_SECRET, |
180 | DEVCONF_USE_OIF_ADDRS_ONLY, |
181 | DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT, |
182 | DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN, |
183 | DEVCONF_DROP_UNICAST_IN_L2_MULTICAST, |
184 | DEVCONF_DROP_UNSOLICITED_NA, |
185 | DEVCONF_KEEP_ADDR_ON_DOWN, |
186 | DEVCONF_RTR_SOLICIT_MAX_INTERVAL, |
187 | DEVCONF_SEG6_ENABLED, |
188 | DEVCONF_SEG6_REQUIRE_HMAC, |
189 | DEVCONF_ENHANCED_DAD, |
190 | DEVCONF_ADDR_GEN_MODE, |
191 | DEVCONF_DISABLE_POLICY, |
192 | DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN, |
193 | DEVCONF_NDISC_TCLASS, |
194 | DEVCONF_RPL_SEG_ENABLED, |
195 | DEVCONF_RA_DEFRTR_METRIC, |
196 | DEVCONF_IOAM6_ENABLED, |
197 | DEVCONF_IOAM6_ID, |
198 | DEVCONF_IOAM6_ID_WIDE, |
199 | DEVCONF_NDISC_EVICT_NOCARRIER, |
200 | DEVCONF_ACCEPT_UNTRACKED_NA, |
201 | DEVCONF_ACCEPT_RA_MIN_LFT, |
202 | DEVCONF_MAX |
203 | }; |
204 | |
205 | |
206 | #endif /* _UAPI_IPV6_H */ |
207 | |