Annotation of embedaddon/strongswan/src/include/linux/xfrm.h, revision 1.1
1.1 ! misho 1: #ifndef _LINUX_XFRM_H
! 2: #define _LINUX_XFRM_H
! 3:
! 4: #include <linux/types.h>
! 5:
! 6: /* All of the structures in this file may not change size as they are
! 7: * passed into the kernel from userspace via netlink sockets.
! 8: */
! 9:
! 10: /* Structure to encapsulate addresses. I do not want to use
! 11: * "standard" structure. My apologies.
! 12: */
! 13: typedef union {
! 14: __be32 a4;
! 15: __be32 a6[4];
! 16: } xfrm_address_t;
! 17:
! 18: /* Ident of a specific xfrm_state. It is used on input to lookup
! 19: * the state by (spi,daddr,ah/esp) or to store information about
! 20: * spi, protocol and tunnel address on output.
! 21: */
! 22: struct xfrm_id {
! 23: xfrm_address_t daddr;
! 24: __be32 spi;
! 25: __u8 proto;
! 26: };
! 27:
! 28: struct xfrm_sec_ctx {
! 29: __u8 ctx_doi;
! 30: __u8 ctx_alg;
! 31: __u16 ctx_len;
! 32: __u32 ctx_sid;
! 33: char ctx_str[0];
! 34: };
! 35:
! 36: /* Security Context Domains of Interpretation */
! 37: #define XFRM_SC_DOI_RESERVED 0
! 38: #define XFRM_SC_DOI_LSM 1
! 39:
! 40: /* Security Context Algorithms */
! 41: #define XFRM_SC_ALG_RESERVED 0
! 42: #define XFRM_SC_ALG_SELINUX 1
! 43:
! 44: /* Selector, used as selector both on policy rules (SPD) and SAs. */
! 45:
! 46: struct xfrm_selector {
! 47: xfrm_address_t daddr;
! 48: xfrm_address_t saddr;
! 49: __be16 dport;
! 50: __be16 dport_mask;
! 51: __be16 sport;
! 52: __be16 sport_mask;
! 53: __u16 family;
! 54: __u8 prefixlen_d;
! 55: __u8 prefixlen_s;
! 56: __u8 proto;
! 57: int ifindex;
! 58: __kernel_uid32_t user;
! 59: };
! 60:
! 61: #define XFRM_INF (~(__u64)0)
! 62:
! 63: struct xfrm_lifetime_cfg {
! 64: __u64 soft_byte_limit;
! 65: __u64 hard_byte_limit;
! 66: __u64 soft_packet_limit;
! 67: __u64 hard_packet_limit;
! 68: __u64 soft_add_expires_seconds;
! 69: __u64 hard_add_expires_seconds;
! 70: __u64 soft_use_expires_seconds;
! 71: __u64 hard_use_expires_seconds;
! 72: };
! 73:
! 74: struct xfrm_lifetime_cur {
! 75: __u64 bytes;
! 76: __u64 packets;
! 77: __u64 add_time;
! 78: __u64 use_time;
! 79: };
! 80:
! 81: struct xfrm_replay_state {
! 82: __u32 oseq;
! 83: __u32 seq;
! 84: __u32 bitmap;
! 85: };
! 86:
! 87: #define XFRMA_REPLAY_ESN_MAX 4096
! 88:
! 89: struct xfrm_replay_state_esn {
! 90: unsigned int bmp_len;
! 91: __u32 oseq;
! 92: __u32 seq;
! 93: __u32 oseq_hi;
! 94: __u32 seq_hi;
! 95: __u32 replay_window;
! 96: __u32 bmp[0];
! 97: };
! 98:
! 99: struct xfrm_algo {
! 100: char alg_name[64];
! 101: unsigned int alg_key_len; /* in bits */
! 102: char alg_key[0];
! 103: };
! 104:
! 105: struct xfrm_algo_auth {
! 106: char alg_name[64];
! 107: unsigned int alg_key_len; /* in bits */
! 108: unsigned int alg_trunc_len; /* in bits */
! 109: char alg_key[0];
! 110: };
! 111:
! 112: struct xfrm_algo_aead {
! 113: char alg_name[64];
! 114: unsigned int alg_key_len; /* in bits */
! 115: unsigned int alg_icv_len; /* in bits */
! 116: char alg_key[0];
! 117: };
! 118:
! 119: struct xfrm_stats {
! 120: __u32 replay_window;
! 121: __u32 replay;
! 122: __u32 integrity_failed;
! 123: };
! 124:
! 125: enum {
! 126: XFRM_POLICY_TYPE_MAIN = 0,
! 127: XFRM_POLICY_TYPE_SUB = 1,
! 128: XFRM_POLICY_TYPE_MAX = 2,
! 129: XFRM_POLICY_TYPE_ANY = 255
! 130: };
! 131:
! 132: enum {
! 133: XFRM_POLICY_IN = 0,
! 134: XFRM_POLICY_OUT = 1,
! 135: XFRM_POLICY_FWD = 2,
! 136: XFRM_POLICY_MASK = 3,
! 137: XFRM_POLICY_MAX = 3
! 138: };
! 139:
! 140: enum {
! 141: XFRM_SHARE_ANY, /* No limitations */
! 142: XFRM_SHARE_SESSION, /* For this session only */
! 143: XFRM_SHARE_USER, /* For this user only */
! 144: XFRM_SHARE_UNIQUE /* Use once */
! 145: };
! 146:
! 147: #define XFRM_MODE_TRANSPORT 0
! 148: #define XFRM_MODE_TUNNEL 1
! 149: #define XFRM_MODE_ROUTEOPTIMIZATION 2
! 150: #define XFRM_MODE_IN_TRIGGER 3
! 151: #define XFRM_MODE_BEET 4
! 152: #define XFRM_MODE_MAX 5
! 153:
! 154: /* Netlink configuration messages. */
! 155: enum {
! 156: XFRM_MSG_BASE = 0x10,
! 157:
! 158: XFRM_MSG_NEWSA = 0x10,
! 159: #define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
! 160: XFRM_MSG_DELSA,
! 161: #define XFRM_MSG_DELSA XFRM_MSG_DELSA
! 162: XFRM_MSG_GETSA,
! 163: #define XFRM_MSG_GETSA XFRM_MSG_GETSA
! 164:
! 165: XFRM_MSG_NEWPOLICY,
! 166: #define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
! 167: XFRM_MSG_DELPOLICY,
! 168: #define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
! 169: XFRM_MSG_GETPOLICY,
! 170: #define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
! 171:
! 172: XFRM_MSG_ALLOCSPI,
! 173: #define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
! 174: XFRM_MSG_ACQUIRE,
! 175: #define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
! 176: XFRM_MSG_EXPIRE,
! 177: #define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
! 178:
! 179: XFRM_MSG_UPDPOLICY,
! 180: #define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
! 181: XFRM_MSG_UPDSA,
! 182: #define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
! 183:
! 184: XFRM_MSG_POLEXPIRE,
! 185: #define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
! 186:
! 187: XFRM_MSG_FLUSHSA,
! 188: #define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
! 189: XFRM_MSG_FLUSHPOLICY,
! 190: #define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
! 191:
! 192: XFRM_MSG_NEWAE,
! 193: #define XFRM_MSG_NEWAE XFRM_MSG_NEWAE
! 194: XFRM_MSG_GETAE,
! 195: #define XFRM_MSG_GETAE XFRM_MSG_GETAE
! 196:
! 197: XFRM_MSG_REPORT,
! 198: #define XFRM_MSG_REPORT XFRM_MSG_REPORT
! 199:
! 200: XFRM_MSG_MIGRATE,
! 201: #define XFRM_MSG_MIGRATE XFRM_MSG_MIGRATE
! 202:
! 203: XFRM_MSG_NEWSADINFO,
! 204: #define XFRM_MSG_NEWSADINFO XFRM_MSG_NEWSADINFO
! 205: XFRM_MSG_GETSADINFO,
! 206: #define XFRM_MSG_GETSADINFO XFRM_MSG_GETSADINFO
! 207:
! 208: XFRM_MSG_NEWSPDINFO,
! 209: #define XFRM_MSG_NEWSPDINFO XFRM_MSG_NEWSPDINFO
! 210: XFRM_MSG_GETSPDINFO,
! 211: #define XFRM_MSG_GETSPDINFO XFRM_MSG_GETSPDINFO
! 212:
! 213: XFRM_MSG_MAPPING,
! 214: #define XFRM_MSG_MAPPING XFRM_MSG_MAPPING
! 215: __XFRM_MSG_MAX
! 216: };
! 217: #define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
! 218:
! 219: #define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
! 220:
! 221: /*
! 222: * Generic LSM security context for communicating to user space
! 223: * NOTE: Same format as sadb_x_sec_ctx
! 224: */
! 225: struct xfrm_user_sec_ctx {
! 226: __u16 len;
! 227: __u16 exttype;
! 228: __u8 ctx_alg; /* LSMs: e.g., selinux == 1 */
! 229: __u8 ctx_doi;
! 230: __u16 ctx_len;
! 231: };
! 232:
! 233: struct xfrm_user_tmpl {
! 234: struct xfrm_id id;
! 235: __u16 family;
! 236: xfrm_address_t saddr;
! 237: __u32 reqid;
! 238: __u8 mode;
! 239: __u8 share;
! 240: __u8 optional;
! 241: __u32 aalgos;
! 242: __u32 ealgos;
! 243: __u32 calgos;
! 244: };
! 245:
! 246: struct xfrm_encap_tmpl {
! 247: __u16 encap_type;
! 248: __be16 encap_sport;
! 249: __be16 encap_dport;
! 250: xfrm_address_t encap_oa;
! 251: };
! 252:
! 253: /* AEVENT flags */
! 254: enum xfrm_ae_ftype_t {
! 255: XFRM_AE_UNSPEC,
! 256: XFRM_AE_RTHR=1, /* replay threshold*/
! 257: XFRM_AE_RVAL=2, /* replay value */
! 258: XFRM_AE_LVAL=4, /* lifetime value */
! 259: XFRM_AE_ETHR=8, /* expiry timer threshold */
! 260: XFRM_AE_CR=16, /* Event cause is replay update */
! 261: XFRM_AE_CE=32, /* Event cause is timer expiry */
! 262: XFRM_AE_CU=64, /* Event cause is policy update */
! 263: __XFRM_AE_MAX
! 264:
! 265: #define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
! 266: };
! 267:
! 268: struct xfrm_userpolicy_type {
! 269: __u8 type;
! 270: __u16 reserved1;
! 271: __u8 reserved2;
! 272: };
! 273:
! 274: /* Netlink message attributes. */
! 275: enum xfrm_attr_type_t {
! 276: XFRMA_UNSPEC,
! 277: XFRMA_ALG_AUTH, /* struct xfrm_algo */
! 278: XFRMA_ALG_CRYPT, /* struct xfrm_algo */
! 279: XFRMA_ALG_COMP, /* struct xfrm_algo */
! 280: XFRMA_ENCAP, /* struct xfrm_algo + struct xfrm_encap_tmpl */
! 281: XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */
! 282: XFRMA_SA, /* struct xfrm_usersa_info */
! 283: XFRMA_POLICY, /*struct xfrm_userpolicy_info */
! 284: XFRMA_SEC_CTX, /* struct xfrm_sec_ctx */
! 285: XFRMA_LTIME_VAL,
! 286: XFRMA_REPLAY_VAL,
! 287: XFRMA_REPLAY_THRESH,
! 288: XFRMA_ETIMER_THRESH,
! 289: XFRMA_SRCADDR, /* xfrm_address_t */
! 290: XFRMA_COADDR, /* xfrm_address_t */
! 291: XFRMA_LASTUSED, /* unsigned long */
! 292: XFRMA_POLICY_TYPE, /* struct xfrm_userpolicy_type */
! 293: XFRMA_MIGRATE,
! 294: XFRMA_ALG_AEAD, /* struct xfrm_algo_aead */
! 295: XFRMA_KMADDRESS, /* struct xfrm_user_kmaddress */
! 296: XFRMA_ALG_AUTH_TRUNC, /* struct xfrm_algo_auth */
! 297: XFRMA_MARK, /* struct xfrm_mark */
! 298: XFRMA_TFCPAD, /* __u32 */
! 299: XFRMA_REPLAY_ESN_VAL, /* struct xfrm_replay_state_esn */
! 300: XFRMA_SA_EXTRA_FLAGS, /* __u32 */
! 301: XFRMA_PROTO, /* __u8 */
! 302: XFRMA_ADDRESS_FILTER, /* struct xfrm_address_filter */
! 303: XFRMA_PAD,
! 304: XFRMA_OFFLOAD_DEV, /* struct xfrm_state_offload */
! 305: XFRMA_SET_MARK, /* __u32 */
! 306: XFRMA_SET_MARK_MASK, /* __u32 */
! 307: XFRMA_IF_ID, /* __u32 */
! 308: __XFRMA_MAX
! 309:
! 310: #define XFRMA_OUTPUT_MARK XFRMA_SET_MARK /* Compatibility */
! 311: #define XFRMA_MAX (__XFRMA_MAX - 1)
! 312: };
! 313:
! 314: struct xfrm_mark {
! 315: __u32 v; /* value */
! 316: __u32 m; /* mask */
! 317: };
! 318:
! 319: enum xfrm_sadattr_type_t {
! 320: XFRMA_SAD_UNSPEC,
! 321: XFRMA_SAD_CNT,
! 322: XFRMA_SAD_HINFO,
! 323: __XFRMA_SAD_MAX
! 324:
! 325: #define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
! 326: };
! 327:
! 328: struct xfrmu_sadhinfo {
! 329: __u32 sadhcnt; /* current hash bkts */
! 330: __u32 sadhmcnt; /* max allowed hash bkts */
! 331: };
! 332:
! 333: enum xfrm_spdattr_type_t {
! 334: XFRMA_SPD_UNSPEC,
! 335: XFRMA_SPD_INFO,
! 336: XFRMA_SPD_HINFO,
! 337: XFRMA_SPD_IPV4_HTHRESH,
! 338: XFRMA_SPD_IPV6_HTHRESH,
! 339: __XFRMA_SPD_MAX
! 340:
! 341: #define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
! 342: };
! 343:
! 344: struct xfrmu_spdinfo {
! 345: __u32 incnt;
! 346: __u32 outcnt;
! 347: __u32 fwdcnt;
! 348: __u32 inscnt;
! 349: __u32 outscnt;
! 350: __u32 fwdscnt;
! 351: };
! 352:
! 353: struct xfrmu_spdhinfo {
! 354: __u32 spdhcnt;
! 355: __u32 spdhmcnt;
! 356: };
! 357:
! 358: struct xfrmu_spdhthresh {
! 359: __u8 lbits;
! 360: __u8 rbits;
! 361: };
! 362:
! 363: struct xfrm_usersa_info {
! 364: struct xfrm_selector sel;
! 365: struct xfrm_id id;
! 366: xfrm_address_t saddr;
! 367: struct xfrm_lifetime_cfg lft;
! 368: struct xfrm_lifetime_cur curlft;
! 369: struct xfrm_stats stats;
! 370: __u32 seq;
! 371: __u32 reqid;
! 372: __u16 family;
! 373: __u8 mode; /* XFRM_MODE_xxx */
! 374: __u8 replay_window;
! 375: __u8 flags;
! 376: #define XFRM_STATE_NOECN 1
! 377: #define XFRM_STATE_DECAP_DSCP 2
! 378: #define XFRM_STATE_NOPMTUDISC 4
! 379: #define XFRM_STATE_WILDRECV 8
! 380: #define XFRM_STATE_ICMP 16
! 381: #define XFRM_STATE_AF_UNSPEC 32
! 382: #define XFRM_STATE_ALIGN4 64
! 383: #define XFRM_STATE_ESN 128
! 384: };
! 385:
! 386: #define XFRM_SA_XFLAG_DONT_ENCAP_DSCP 1
! 387:
! 388: struct xfrm_usersa_id {
! 389: xfrm_address_t daddr;
! 390: __be32 spi;
! 391: __u16 family;
! 392: __u8 proto;
! 393: };
! 394:
! 395: struct xfrm_aevent_id {
! 396: struct xfrm_usersa_id sa_id;
! 397: xfrm_address_t saddr;
! 398: __u32 flags;
! 399: __u32 reqid;
! 400: };
! 401:
! 402: struct xfrm_userspi_info {
! 403: struct xfrm_usersa_info info;
! 404: __u32 min;
! 405: __u32 max;
! 406: };
! 407:
! 408: struct xfrm_userpolicy_info {
! 409: struct xfrm_selector sel;
! 410: struct xfrm_lifetime_cfg lft;
! 411: struct xfrm_lifetime_cur curlft;
! 412: __u32 priority;
! 413: __u32 index;
! 414: __u8 dir;
! 415: __u8 action;
! 416: #define XFRM_POLICY_ALLOW 0
! 417: #define XFRM_POLICY_BLOCK 1
! 418: __u8 flags;
! 419: #define XFRM_POLICY_LOCALOK 1 /* Allow user to override global policy */
! 420: /* Automatically expand selector to include matching ICMP payloads. */
! 421: #define XFRM_POLICY_ICMP 2
! 422: __u8 share;
! 423: };
! 424:
! 425: struct xfrm_userpolicy_id {
! 426: struct xfrm_selector sel;
! 427: __u32 index;
! 428: __u8 dir;
! 429: };
! 430:
! 431: struct xfrm_user_acquire {
! 432: struct xfrm_id id;
! 433: xfrm_address_t saddr;
! 434: struct xfrm_selector sel;
! 435: struct xfrm_userpolicy_info policy;
! 436: __u32 aalgos;
! 437: __u32 ealgos;
! 438: __u32 calgos;
! 439: __u32 seq;
! 440: };
! 441:
! 442: struct xfrm_user_expire {
! 443: struct xfrm_usersa_info state;
! 444: __u8 hard;
! 445: };
! 446:
! 447: struct xfrm_user_polexpire {
! 448: struct xfrm_userpolicy_info pol;
! 449: __u8 hard;
! 450: };
! 451:
! 452: struct xfrm_usersa_flush {
! 453: __u8 proto;
! 454: };
! 455:
! 456: struct xfrm_user_report {
! 457: __u8 proto;
! 458: struct xfrm_selector sel;
! 459: };
! 460:
! 461: /* Used by MIGRATE to pass addresses IKE should use to perform
! 462: * SA negotiation with the peer */
! 463: struct xfrm_user_kmaddress {
! 464: xfrm_address_t local;
! 465: xfrm_address_t remote;
! 466: __u32 reserved;
! 467: __u16 family;
! 468: };
! 469:
! 470: struct xfrm_user_migrate {
! 471: xfrm_address_t old_daddr;
! 472: xfrm_address_t old_saddr;
! 473: xfrm_address_t new_daddr;
! 474: xfrm_address_t new_saddr;
! 475: __u8 proto;
! 476: __u8 mode;
! 477: __u16 reserved;
! 478: __u32 reqid;
! 479: __u16 old_family;
! 480: __u16 new_family;
! 481: };
! 482:
! 483: struct xfrm_user_mapping {
! 484: struct xfrm_usersa_id id;
! 485: __u32 reqid;
! 486: xfrm_address_t old_saddr;
! 487: xfrm_address_t new_saddr;
! 488: __be16 old_sport;
! 489: __be16 new_sport;
! 490: };
! 491:
! 492: struct xfrm_address_filter {
! 493: xfrm_address_t saddr;
! 494: xfrm_address_t daddr;
! 495: __u16 family;
! 496: __u8 splen;
! 497: __u8 dplen;
! 498: };
! 499:
! 500: struct xfrm_user_offload {
! 501: int ifindex;
! 502: __u8 flags;
! 503: };
! 504: #define XFRM_OFFLOAD_IPV6 1
! 505: #define XFRM_OFFLOAD_INBOUND 2
! 506:
! 507: #ifndef __KERNEL__
! 508: /* backwards compatibility for userspace */
! 509: #define XFRMGRP_ACQUIRE 1
! 510: #define XFRMGRP_EXPIRE 2
! 511: #define XFRMGRP_SA 4
! 512: #define XFRMGRP_POLICY 8
! 513: #define XFRMGRP_REPORT 0x20
! 514: #endif
! 515:
! 516: enum xfrm_nlgroups {
! 517: XFRMNLGRP_NONE,
! 518: #define XFRMNLGRP_NONE XFRMNLGRP_NONE
! 519: XFRMNLGRP_ACQUIRE,
! 520: #define XFRMNLGRP_ACQUIRE XFRMNLGRP_ACQUIRE
! 521: XFRMNLGRP_EXPIRE,
! 522: #define XFRMNLGRP_EXPIRE XFRMNLGRP_EXPIRE
! 523: XFRMNLGRP_SA,
! 524: #define XFRMNLGRP_SA XFRMNLGRP_SA
! 525: XFRMNLGRP_POLICY,
! 526: #define XFRMNLGRP_POLICY XFRMNLGRP_POLICY
! 527: XFRMNLGRP_AEVENTS,
! 528: #define XFRMNLGRP_AEVENTS XFRMNLGRP_AEVENTS
! 529: XFRMNLGRP_REPORT,
! 530: #define XFRMNLGRP_REPORT XFRMNLGRP_REPORT
! 531: XFRMNLGRP_MIGRATE,
! 532: #define XFRMNLGRP_MIGRATE XFRMNLGRP_MIGRATE
! 533: XFRMNLGRP_MAPPING,
! 534: #define XFRMNLGRP_MAPPING XFRMNLGRP_MAPPING
! 535: __XFRMNLGRP_MAX
! 536: };
! 537: #define XFRMNLGRP_MAX (__XFRMNLGRP_MAX - 1)
! 538:
! 539: #endif /* _LINUX_XFRM_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>