linux/include/uapi/linux/xfrm.h
<<
>>
Prefs
   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 */
  13typedef 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 */
  22struct xfrm_id {
  23        xfrm_address_t  daddr;
  24        __be32          spi;
  25        __u8            proto;
  26};
  27
  28struct 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
  46struct 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
  63struct 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
  74struct xfrm_lifetime_cur {
  75        __u64   bytes;
  76        __u64   packets;
  77        __u64   add_time;
  78        __u64   use_time;
  79};
  80
  81struct xfrm_replay_state {
  82        __u32   oseq;
  83        __u32   seq;
  84        __u32   bitmap;
  85};
  86
  87#define XFRMA_REPLAY_ESN_MAX    4096
  88
  89struct 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
  99struct xfrm_algo {
 100        char            alg_name[64];
 101        unsigned int    alg_key_len;    /* in bits */
 102        char            alg_key[0];
 103};
 104
 105struct 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
 112struct 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
 119struct xfrm_stats {
 120        __u32   replay_window;
 121        __u32   replay;
 122        __u32   integrity_failed;
 123};
 124
 125enum {
 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
 132enum {
 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
 140enum {
 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.  */
 155enum {
 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 comunicating to user space
 223 * NOTE: Same format as sadb_x_sec_ctx
 224 */
 225struct 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
 233struct 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
 246struct 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  */
 254enum 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
 268struct xfrm_userpolicy_type {
 269        __u8            type;
 270        __u16           reserved1;
 271        __u8            reserved2;
 272};
 273
 274/* Netlink message attributes.  */
 275enum 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_esn */
 300        __XFRMA_MAX
 301
 302#define XFRMA_MAX (__XFRMA_MAX - 1)
 303};
 304
 305struct xfrm_mark {
 306        __u32           v; /* value */
 307        __u32           m; /* mask */
 308};
 309
 310enum xfrm_sadattr_type_t {
 311        XFRMA_SAD_UNSPEC,
 312        XFRMA_SAD_CNT,
 313        XFRMA_SAD_HINFO,
 314        __XFRMA_SAD_MAX
 315
 316#define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
 317};
 318
 319struct xfrmu_sadhinfo {
 320        __u32 sadhcnt; /* current hash bkts */
 321        __u32 sadhmcnt; /* max allowed hash bkts */
 322};
 323
 324enum xfrm_spdattr_type_t {
 325        XFRMA_SPD_UNSPEC,
 326        XFRMA_SPD_INFO,
 327        XFRMA_SPD_HINFO,
 328        __XFRMA_SPD_MAX
 329
 330#define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
 331};
 332
 333struct xfrmu_spdinfo {
 334        __u32 incnt;
 335        __u32 outcnt;
 336        __u32 fwdcnt;
 337        __u32 inscnt;
 338        __u32 outscnt;
 339        __u32 fwdscnt;
 340};
 341
 342struct xfrmu_spdhinfo {
 343        __u32 spdhcnt;
 344        __u32 spdhmcnt;
 345};
 346
 347struct xfrm_usersa_info {
 348        struct xfrm_selector            sel;
 349        struct xfrm_id                  id;
 350        xfrm_address_t                  saddr;
 351        struct xfrm_lifetime_cfg        lft;
 352        struct xfrm_lifetime_cur        curlft;
 353        struct xfrm_stats               stats;
 354        __u32                           seq;
 355        __u32                           reqid;
 356        __u16                           family;
 357        __u8                            mode;           /* XFRM_MODE_xxx */
 358        __u8                            replay_window;
 359        __u8                            flags;
 360#define XFRM_STATE_NOECN        1
 361#define XFRM_STATE_DECAP_DSCP   2
 362#define XFRM_STATE_NOPMTUDISC   4
 363#define XFRM_STATE_WILDRECV     8
 364#define XFRM_STATE_ICMP         16
 365#define XFRM_STATE_AF_UNSPEC    32
 366#define XFRM_STATE_ALIGN4       64
 367#define XFRM_STATE_ESN          128
 368};
 369
 370struct xfrm_usersa_id {
 371        xfrm_address_t                  daddr;
 372        __be32                          spi;
 373        __u16                           family;
 374        __u8                            proto;
 375};
 376
 377struct xfrm_aevent_id {
 378        struct xfrm_usersa_id           sa_id;
 379        xfrm_address_t                  saddr;
 380        __u32                           flags;
 381        __u32                           reqid;
 382};
 383
 384struct xfrm_userspi_info {
 385        struct xfrm_usersa_info         info;
 386        __u32                           min;
 387        __u32                           max;
 388};
 389
 390struct xfrm_userpolicy_info {
 391        struct xfrm_selector            sel;
 392        struct xfrm_lifetime_cfg        lft;
 393        struct xfrm_lifetime_cur        curlft;
 394        __u32                           priority;
 395        __u32                           index;
 396        __u8                            dir;
 397        __u8                            action;
 398#define XFRM_POLICY_ALLOW       0
 399#define XFRM_POLICY_BLOCK       1
 400        __u8                            flags;
 401#define XFRM_POLICY_LOCALOK     1       /* Allow user to override global policy */
 402        /* Automatically expand selector to include matching ICMP payloads. */
 403#define XFRM_POLICY_ICMP        2
 404        __u8                            share;
 405};
 406
 407struct xfrm_userpolicy_id {
 408        struct xfrm_selector            sel;
 409        __u32                           index;
 410        __u8                            dir;
 411};
 412
 413struct xfrm_user_acquire {
 414        struct xfrm_id                  id;
 415        xfrm_address_t                  saddr;
 416        struct xfrm_selector            sel;
 417        struct xfrm_userpolicy_info     policy;
 418        __u32                           aalgos;
 419        __u32                           ealgos;
 420        __u32                           calgos;
 421        __u32                           seq;
 422};
 423
 424struct xfrm_user_expire {
 425        struct xfrm_usersa_info         state;
 426        __u8                            hard;
 427};
 428
 429struct xfrm_user_polexpire {
 430        struct xfrm_userpolicy_info     pol;
 431        __u8                            hard;
 432};
 433
 434struct xfrm_usersa_flush {
 435        __u8                            proto;
 436};
 437
 438struct xfrm_user_report {
 439        __u8                            proto;
 440        struct xfrm_selector            sel;
 441};
 442
 443/* Used by MIGRATE to pass addresses IKE should use to perform
 444 * SA negotiation with the peer */
 445struct xfrm_user_kmaddress {
 446        xfrm_address_t                  local;
 447        xfrm_address_t                  remote;
 448        __u32                           reserved;
 449        __u16                           family;
 450};
 451
 452struct xfrm_user_migrate {
 453        xfrm_address_t                  old_daddr;
 454        xfrm_address_t                  old_saddr;
 455        xfrm_address_t                  new_daddr;
 456        xfrm_address_t                  new_saddr;
 457        __u8                            proto;
 458        __u8                            mode;
 459        __u16                           reserved;
 460        __u32                           reqid;
 461        __u16                           old_family;
 462        __u16                           new_family;
 463};
 464
 465struct xfrm_user_mapping {
 466        struct xfrm_usersa_id           id;
 467        __u32                           reqid;
 468        xfrm_address_t                  old_saddr;
 469        xfrm_address_t                  new_saddr;
 470        __be16                          old_sport;
 471        __be16                          new_sport;
 472};
 473
 474#ifndef __KERNEL__
 475/* backwards compatibility for userspace */
 476#define XFRMGRP_ACQUIRE         1
 477#define XFRMGRP_EXPIRE          2
 478#define XFRMGRP_SA              4
 479#define XFRMGRP_POLICY          8
 480#define XFRMGRP_REPORT          0x20
 481#endif
 482
 483enum xfrm_nlgroups {
 484        XFRMNLGRP_NONE,
 485#define XFRMNLGRP_NONE          XFRMNLGRP_NONE
 486        XFRMNLGRP_ACQUIRE,
 487#define XFRMNLGRP_ACQUIRE       XFRMNLGRP_ACQUIRE
 488        XFRMNLGRP_EXPIRE,
 489#define XFRMNLGRP_EXPIRE        XFRMNLGRP_EXPIRE
 490        XFRMNLGRP_SA,
 491#define XFRMNLGRP_SA            XFRMNLGRP_SA
 492        XFRMNLGRP_POLICY,
 493#define XFRMNLGRP_POLICY        XFRMNLGRP_POLICY
 494        XFRMNLGRP_AEVENTS,
 495#define XFRMNLGRP_AEVENTS       XFRMNLGRP_AEVENTS
 496        XFRMNLGRP_REPORT,
 497#define XFRMNLGRP_REPORT        XFRMNLGRP_REPORT
 498        XFRMNLGRP_MIGRATE,
 499#define XFRMNLGRP_MIGRATE       XFRMNLGRP_MIGRATE
 500        XFRMNLGRP_MAPPING,
 501#define XFRMNLGRP_MAPPING       XFRMNLGRP_MAPPING
 502        __XFRMNLGRP_MAX
 503};
 504#define XFRMNLGRP_MAX   (__XFRMNLGRP_MAX - 1)
 505
 506#endif /* _LINUX_XFRM_H */
 507