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