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