1 /*
2  * This file is auto-generated. Modifications will be lost.
3  *
4  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5  * for more information.
6  */
7 #ifndef _LINUX_XFRM_H
8 #define _LINUX_XFRM_H
9 #include <linux/in6.h>
10 #include <linux/types.h>
11 #include <linux/stddef.h>
12 typedef union {
13   __be32 a4;
14   __be32 a6[4];
15   struct in6_addr in6;
16 } xfrm_address_t;
17 struct xfrm_id {
18   xfrm_address_t daddr;
19   __be32 spi;
20   __u8 proto;
21 };
22 struct xfrm_sec_ctx {
23   __u8 ctx_doi;
24   __u8 ctx_alg;
25   __u16 ctx_len;
26   __u32 ctx_sid;
27   char ctx_str[] __counted_by(ctx_len);
28 };
29 #define XFRM_SC_DOI_RESERVED 0
30 #define XFRM_SC_DOI_LSM 1
31 #define XFRM_SC_ALG_RESERVED 0
32 #define XFRM_SC_ALG_SELINUX 1
33 struct xfrm_selector {
34   xfrm_address_t daddr;
35   xfrm_address_t saddr;
36   __be16 dport;
37   __be16 dport_mask;
38   __be16 sport;
39   __be16 sport_mask;
40   __u16 family;
41   __u8 prefixlen_d;
42   __u8 prefixlen_s;
43   __u8 proto;
44   int ifindex;
45   __kernel_uid32_t user;
46 };
47 #define XFRM_INF (~(__u64) 0)
48 struct xfrm_lifetime_cfg {
49   __u64 soft_byte_limit;
50   __u64 hard_byte_limit;
51   __u64 soft_packet_limit;
52   __u64 hard_packet_limit;
53   __u64 soft_add_expires_seconds;
54   __u64 hard_add_expires_seconds;
55   __u64 soft_use_expires_seconds;
56   __u64 hard_use_expires_seconds;
57 };
58 struct xfrm_lifetime_cur {
59   __u64 bytes;
60   __u64 packets;
61   __u64 add_time;
62   __u64 use_time;
63 };
64 struct xfrm_replay_state {
65   __u32 oseq;
66   __u32 seq;
67   __u32 bitmap;
68 };
69 #define XFRMA_REPLAY_ESN_MAX 4096
70 struct xfrm_replay_state_esn {
71   unsigned int bmp_len;
72   __u32 oseq;
73   __u32 seq;
74   __u32 oseq_hi;
75   __u32 seq_hi;
76   __u32 replay_window;
77   __u32 bmp[];
78 };
79 struct xfrm_algo {
80   char alg_name[64];
81   unsigned int alg_key_len;
82   char alg_key[];
83 };
84 struct xfrm_algo_auth {
85   char alg_name[64];
86   unsigned int alg_key_len;
87   unsigned int alg_trunc_len;
88   char alg_key[];
89 };
90 struct xfrm_algo_aead {
91   char alg_name[64];
92   unsigned int alg_key_len;
93   unsigned int alg_icv_len;
94   char alg_key[];
95 };
96 struct xfrm_stats {
97   __u32 replay_window;
98   __u32 replay;
99   __u32 integrity_failed;
100 };
101 enum {
102   XFRM_POLICY_TYPE_MAIN = 0,
103   XFRM_POLICY_TYPE_SUB = 1,
104   XFRM_POLICY_TYPE_MAX = 2,
105   XFRM_POLICY_TYPE_ANY = 255
106 };
107 enum {
108   XFRM_POLICY_IN = 0,
109   XFRM_POLICY_OUT = 1,
110   XFRM_POLICY_FWD = 2,
111   XFRM_POLICY_MASK = 3,
112   XFRM_POLICY_MAX = 3
113 };
114 enum xfrm_sa_dir {
115   XFRM_SA_DIR_IN = 1,
116   XFRM_SA_DIR_OUT = 2
117 };
118 enum {
119   XFRM_SHARE_ANY,
120   XFRM_SHARE_SESSION,
121   XFRM_SHARE_USER,
122   XFRM_SHARE_UNIQUE
123 };
124 #define XFRM_MODE_TRANSPORT 0
125 #define XFRM_MODE_TUNNEL 1
126 #define XFRM_MODE_ROUTEOPTIMIZATION 2
127 #define XFRM_MODE_IN_TRIGGER 3
128 #define XFRM_MODE_BEET 4
129 #define XFRM_MODE_MAX 5
130 enum {
131   XFRM_MSG_BASE = 0x10,
132   XFRM_MSG_NEWSA = 0x10,
133 #define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
134   XFRM_MSG_DELSA,
135 #define XFRM_MSG_DELSA XFRM_MSG_DELSA
136   XFRM_MSG_GETSA,
137 #define XFRM_MSG_GETSA XFRM_MSG_GETSA
138   XFRM_MSG_NEWPOLICY,
139 #define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
140   XFRM_MSG_DELPOLICY,
141 #define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
142   XFRM_MSG_GETPOLICY,
143 #define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
144   XFRM_MSG_ALLOCSPI,
145 #define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
146   XFRM_MSG_ACQUIRE,
147 #define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
148   XFRM_MSG_EXPIRE,
149 #define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
150   XFRM_MSG_UPDPOLICY,
151 #define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
152   XFRM_MSG_UPDSA,
153 #define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
154   XFRM_MSG_POLEXPIRE,
155 #define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
156   XFRM_MSG_FLUSHSA,
157 #define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
158   XFRM_MSG_FLUSHPOLICY,
159 #define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
160   XFRM_MSG_NEWAE,
161 #define XFRM_MSG_NEWAE XFRM_MSG_NEWAE
162   XFRM_MSG_GETAE,
163 #define XFRM_MSG_GETAE XFRM_MSG_GETAE
164   XFRM_MSG_REPORT,
165 #define XFRM_MSG_REPORT XFRM_MSG_REPORT
166   XFRM_MSG_MIGRATE,
167 #define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE
168   XFRM_MSG_NEWSADINFO,
169 #define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO
170   XFRM_MSG_GETSADINFO,
171 #define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO
172   XFRM_MSG_NEWSPDINFO,
173 #define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO
174   XFRM_MSG_GETSPDINFO,
175 #define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO
176   XFRM_MSG_MAPPING,
177 #define XFRM_MSG_MAPPING XFRM_MSG_MAPPING
178   XFRM_MSG_SETDEFAULT,
179 #define XFRM_MSG_SETDEFAULT XFRM_MSG_SETDEFAULT
180   XFRM_MSG_GETDEFAULT,
181 #define XFRM_MSG_GETDEFAULT XFRM_MSG_GETDEFAULT
182   __XFRM_MSG_MAX
183 };
184 #define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
185 #define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
186 struct xfrm_user_sec_ctx {
187   __u16 len;
188   __u16 exttype;
189   __u8 ctx_alg;
190   __u8 ctx_doi;
191   __u16 ctx_len;
192 };
193 struct xfrm_user_tmpl {
194   struct xfrm_id id;
195   __u16 family;
196   xfrm_address_t saddr;
197   __u32 reqid;
198   __u8 mode;
199   __u8 share;
200   __u8 optional;
201   __u32 aalgos;
202   __u32 ealgos;
203   __u32 calgos;
204 };
205 struct xfrm_encap_tmpl {
206   __u16 encap_type;
207   __be16 encap_sport;
208   __be16 encap_dport;
209   xfrm_address_t encap_oa;
210 };
211 enum xfrm_ae_ftype_t {
212   XFRM_AE_UNSPEC,
213   XFRM_AE_RTHR = 1,
214   XFRM_AE_RVAL = 2,
215   XFRM_AE_LVAL = 4,
216   XFRM_AE_ETHR = 8,
217   XFRM_AE_CR = 16,
218   XFRM_AE_CE = 32,
219   XFRM_AE_CU = 64,
220   __XFRM_AE_MAX
221 #define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
222 };
223 struct xfrm_userpolicy_type {
224   __u8 type;
225   __u16 reserved1;
226   __u8 reserved2;
227 };
228 enum xfrm_attr_type_t {
229   XFRMA_UNSPEC,
230   XFRMA_ALG_AUTH,
231   XFRMA_ALG_CRYPT,
232   XFRMA_ALG_COMP,
233   XFRMA_ENCAP,
234   XFRMA_TMPL,
235   XFRMA_SA,
236   XFRMA_POLICY,
237   XFRMA_SEC_CTX,
238   XFRMA_LTIME_VAL,
239   XFRMA_REPLAY_VAL,
240   XFRMA_REPLAY_THRESH,
241   XFRMA_ETIMER_THRESH,
242   XFRMA_SRCADDR,
243   XFRMA_COADDR,
244   XFRMA_LASTUSED,
245   XFRMA_POLICY_TYPE,
246   XFRMA_MIGRATE,
247   XFRMA_ALG_AEAD,
248   XFRMA_KMADDRESS,
249   XFRMA_ALG_AUTH_TRUNC,
250   XFRMA_MARK,
251   XFRMA_TFCPAD,
252   XFRMA_REPLAY_ESN_VAL,
253   XFRMA_SA_EXTRA_FLAGS,
254   XFRMA_PROTO,
255   XFRMA_ADDRESS_FILTER,
256   XFRMA_PAD,
257   XFRMA_OFFLOAD_DEV,
258   XFRMA_SET_MARK,
259   XFRMA_SET_MARK_MASK,
260   XFRMA_IF_ID,
261   XFRMA_MTIMER_THRESH,
262   XFRMA_SA_DIR,
263   XFRMA_NAT_KEEPALIVE_INTERVAL,
264   __XFRMA_MAX
265 #define XFRMA_OUTPUT_MARK XFRMA_SET_MARK
266 #define XFRMA_MAX (__XFRMA_MAX - 1)
267 };
268 struct xfrm_mark {
269   __u32 v;
270   __u32 m;
271 };
272 enum xfrm_sadattr_type_t {
273   XFRMA_SAD_UNSPEC,
274   XFRMA_SAD_CNT,
275   XFRMA_SAD_HINFO,
276   __XFRMA_SAD_MAX
277 #define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
278 };
279 struct xfrmu_sadhinfo {
280   __u32 sadhcnt;
281   __u32 sadhmcnt;
282 };
283 enum xfrm_spdattr_type_t {
284   XFRMA_SPD_UNSPEC,
285   XFRMA_SPD_INFO,
286   XFRMA_SPD_HINFO,
287   XFRMA_SPD_IPV4_HTHRESH,
288   XFRMA_SPD_IPV6_HTHRESH,
289   __XFRMA_SPD_MAX
290 #define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
291 };
292 struct xfrmu_spdinfo {
293   __u32 incnt;
294   __u32 outcnt;
295   __u32 fwdcnt;
296   __u32 inscnt;
297   __u32 outscnt;
298   __u32 fwdscnt;
299 };
300 struct xfrmu_spdhinfo {
301   __u32 spdhcnt;
302   __u32 spdhmcnt;
303 };
304 struct xfrmu_spdhthresh {
305   __u8 lbits;
306   __u8 rbits;
307 };
308 struct xfrm_usersa_info {
309   struct xfrm_selector sel;
310   struct xfrm_id id;
311   xfrm_address_t saddr;
312   struct xfrm_lifetime_cfg lft;
313   struct xfrm_lifetime_cur curlft;
314   struct xfrm_stats stats;
315   __u32 seq;
316   __u32 reqid;
317   __u16 family;
318   __u8 mode;
319   __u8 replay_window;
320   __u8 flags;
321 #define XFRM_STATE_NOECN 1
322 #define XFRM_STATE_DECAP_DSCP 2
323 #define XFRM_STATE_NOPMTUDISC 4
324 #define XFRM_STATE_WILDRECV 8
325 #define XFRM_STATE_ICMP 16
326 #define XFRM_STATE_AF_UNSPEC 32
327 #define XFRM_STATE_ALIGN4 64
328 #define XFRM_STATE_ESN 128
329 };
330 #define XFRM_SA_XFLAG_DONT_ENCAP_DSCP 1
331 #define XFRM_SA_XFLAG_OSEQ_MAY_WRAP 2
332 struct xfrm_usersa_id {
333   xfrm_address_t daddr;
334   __be32 spi;
335   __u16 family;
336   __u8 proto;
337 };
338 struct xfrm_aevent_id {
339   struct xfrm_usersa_id sa_id;
340   xfrm_address_t saddr;
341   __u32 flags;
342   __u32 reqid;
343 };
344 struct xfrm_userspi_info {
345   struct xfrm_usersa_info info;
346   __u32 min;
347   __u32 max;
348 };
349 struct xfrm_userpolicy_info {
350   struct xfrm_selector sel;
351   struct xfrm_lifetime_cfg lft;
352   struct xfrm_lifetime_cur curlft;
353   __u32 priority;
354   __u32 index;
355   __u8 dir;
356   __u8 action;
357 #define XFRM_POLICY_ALLOW 0
358 #define XFRM_POLICY_BLOCK 1
359   __u8 flags;
360 #define XFRM_POLICY_LOCALOK 1
361 #define XFRM_POLICY_ICMP 2
362   __u8 share;
363 };
364 struct xfrm_userpolicy_id {
365   struct xfrm_selector sel;
366   __u32 index;
367   __u8 dir;
368 };
369 struct xfrm_user_acquire {
370   struct xfrm_id id;
371   xfrm_address_t saddr;
372   struct xfrm_selector sel;
373   struct xfrm_userpolicy_info policy;
374   __u32 aalgos;
375   __u32 ealgos;
376   __u32 calgos;
377   __u32 seq;
378 };
379 struct xfrm_user_expire {
380   struct xfrm_usersa_info state;
381   __u8 hard;
382 };
383 struct xfrm_user_polexpire {
384   struct xfrm_userpolicy_info pol;
385   __u8 hard;
386 };
387 struct xfrm_usersa_flush {
388   __u8 proto;
389 };
390 struct xfrm_user_report {
391   __u8 proto;
392   struct xfrm_selector sel;
393 };
394 struct xfrm_user_kmaddress {
395   xfrm_address_t local;
396   xfrm_address_t remote;
397   __u32 reserved;
398   __u16 family;
399 };
400 struct xfrm_user_migrate {
401   xfrm_address_t old_daddr;
402   xfrm_address_t old_saddr;
403   xfrm_address_t new_daddr;
404   xfrm_address_t new_saddr;
405   __u8 proto;
406   __u8 mode;
407   __u16 reserved;
408   __u32 reqid;
409   __u16 old_family;
410   __u16 new_family;
411 };
412 struct xfrm_user_mapping {
413   struct xfrm_usersa_id id;
414   __u32 reqid;
415   xfrm_address_t old_saddr;
416   xfrm_address_t new_saddr;
417   __be16 old_sport;
418   __be16 new_sport;
419 };
420 struct xfrm_address_filter {
421   xfrm_address_t saddr;
422   xfrm_address_t daddr;
423   __u16 family;
424   __u8 splen;
425   __u8 dplen;
426 };
427 struct xfrm_user_offload {
428   int ifindex;
429   __u8 flags;
430 };
431 #define XFRM_OFFLOAD_IPV6 1
432 #define XFRM_OFFLOAD_INBOUND 2
433 #define XFRM_OFFLOAD_PACKET 4
434 struct xfrm_userpolicy_default {
435 #define XFRM_USERPOLICY_UNSPEC 0
436 #define XFRM_USERPOLICY_BLOCK 1
437 #define XFRM_USERPOLICY_ACCEPT 2
438   __u8 in;
439   __u8 fwd;
440   __u8 out;
441 };
442 #define XFRMGRP_ACQUIRE 1
443 #define XFRMGRP_EXPIRE 2
444 #define XFRMGRP_SA 4
445 #define XFRMGRP_POLICY 8
446 #define XFRMGRP_REPORT 0x20
447 enum xfrm_nlgroups {
448   XFRMNLGRP_NONE,
449 #define XFRMNLGRP_NONE XFRMNLGRP_NONE
450   XFRMNLGRP_ACQUIRE,
451 #define XFRMNLGRP_ACQUIRE XFRMNLGRP_ACQUIRE
452   XFRMNLGRP_EXPIRE,
453 #define XFRMNLGRP_EXPIRE XFRMNLGRP_EXPIRE
454   XFRMNLGRP_SA,
455 #define XFRMNLGRP_SA XFRMNLGRP_SA
456   XFRMNLGRP_POLICY,
457 #define XFRMNLGRP_POLICY XFRMNLGRP_POLICY
458   XFRMNLGRP_AEVENTS,
459 #define XFRMNLGRP_AEVENTS XFRMNLGRP_AEVENTS
460   XFRMNLGRP_REPORT,
461 #define XFRMNLGRP_REPORT XFRMNLGRP_REPORT
462   XFRMNLGRP_MIGRATE,
463 #define XFRMNLGRP_MIGRATE XFRMNLGRP_MIGRATE
464   XFRMNLGRP_MAPPING,
465 #define XFRMNLGRP_MAPPING XFRMNLGRP_MAPPING
466   __XFRMNLGRP_MAX
467 };
468 #define XFRMNLGRP_MAX (__XFRMNLGRP_MAX - 1)
469 #endif
470