Annotation of embedaddon/strongswan/src/include/linux/xfrm.h, revision 1.1.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>