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