home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / linux / xfrm.h < prev   
Encoding:
C/C++ Source or Header  |  2008-11-13  |  9.3 KB  |  460 lines

  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. {
  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.  */
  23. struct xfrm_id
  24. {
  25.     xfrm_address_t    daddr;
  26.     __be32        spi;
  27.     __u8        proto;
  28. };
  29.  
  30. struct 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.  
  48. struct 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.  
  66. struct 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.  
  78. struct xfrm_lifetime_cur
  79. {
  80.     __u64    bytes;
  81.     __u64    packets;
  82.     __u64    add_time;
  83.     __u64    use_time;
  84. };
  85.  
  86. struct xfrm_replay_state
  87. {
  88.     __u32    oseq;
  89.     __u32    seq;
  90.     __u32    bitmap;
  91. };
  92.  
  93. struct xfrm_algo {
  94.     char        alg_name[64];
  95.     unsigned int    alg_key_len;    /* in bits */
  96.     char        alg_key[0];
  97. };
  98.  
  99. struct 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.  
  106. struct xfrm_stats {
  107.     __u32    replay_window;
  108.     __u32    replay;
  109.     __u32    integrity_failed;
  110. };
  111.  
  112. enum
  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.  
  120. enum
  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.  
  129. enum
  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.  */
  145. enum {
  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.  */
  212. struct 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.  
  220. struct 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.  
  233. struct 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  */
  241. enum 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.  
  255. struct xfrm_userpolicy_type {
  256.     __u8        type;
  257.     __u16        reserved1;
  258.     __u8        reserved2;
  259. };
  260.  
  261. /* Netlink message attributes.  */
  262. enum 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_MAX
  283.  
  284. #define XFRMA_MAX (__XFRMA_MAX - 1)
  285. };
  286.  
  287. enum xfrm_sadattr_type_t {
  288.     XFRMA_SAD_UNSPEC,
  289.     XFRMA_SAD_CNT,
  290.     XFRMA_SAD_HINFO,
  291.     __XFRMA_SAD_MAX
  292.  
  293. #define XFRMA_SAD_MAX (__XFRMA_SAD_MAX - 1)
  294. };
  295.  
  296. struct xfrmu_sadhinfo {
  297.     __u32 sadhcnt; /* current hash bkts */
  298.     __u32 sadhmcnt; /* max allowed hash bkts */
  299. };
  300.  
  301. enum xfrm_spdattr_type_t {
  302.     XFRMA_SPD_UNSPEC,
  303.     XFRMA_SPD_INFO,
  304.     XFRMA_SPD_HINFO,
  305.     __XFRMA_SPD_MAX
  306.  
  307. #define XFRMA_SPD_MAX (__XFRMA_SPD_MAX - 1)
  308. };
  309.  
  310. struct xfrmu_spdinfo {
  311.     __u32 incnt;
  312.     __u32 outcnt;
  313.     __u32 fwdcnt;
  314.     __u32 inscnt;
  315.     __u32 outscnt;
  316.     __u32 fwdscnt;
  317. };
  318.  
  319. struct xfrmu_spdhinfo {
  320.     __u32 spdhcnt;
  321.     __u32 spdhmcnt;
  322. };
  323.  
  324. struct xfrm_usersa_info {
  325.     struct xfrm_selector        sel;
  326.     struct xfrm_id            id;
  327.     xfrm_address_t            saddr;
  328.     struct xfrm_lifetime_cfg    lft;
  329.     struct xfrm_lifetime_cur    curlft;
  330.     struct xfrm_stats        stats;
  331.     __u32                seq;
  332.     __u32                reqid;
  333.     __u16                family;
  334.     __u8                mode;        /* XFRM_MODE_xxx */
  335.     __u8                replay_window;
  336.     __u8                flags;
  337. #define XFRM_STATE_NOECN    1
  338. #define XFRM_STATE_DECAP_DSCP    2
  339. #define XFRM_STATE_NOPMTUDISC    4
  340. #define XFRM_STATE_WILDRECV    8
  341. #define XFRM_STATE_ICMP        16
  342. #define XFRM_STATE_AF_UNSPEC    32
  343. };
  344.  
  345. struct xfrm_usersa_id {
  346.     xfrm_address_t            daddr;
  347.     __be32                spi;
  348.     __u16                family;
  349.     __u8                proto;
  350. };
  351.  
  352. struct xfrm_aevent_id {
  353.     struct xfrm_usersa_id        sa_id;
  354.     xfrm_address_t            saddr;
  355.     __u32                flags;
  356.     __u32                reqid;
  357. };
  358.  
  359. struct xfrm_userspi_info {
  360.     struct xfrm_usersa_info        info;
  361.     __u32                min;
  362.     __u32                max;
  363. };
  364.  
  365. struct xfrm_userpolicy_info {
  366.     struct xfrm_selector        sel;
  367.     struct xfrm_lifetime_cfg    lft;
  368.     struct xfrm_lifetime_cur    curlft;
  369.     __u32                priority;
  370.     __u32                index;
  371.     __u8                dir;
  372.     __u8                action;
  373. #define XFRM_POLICY_ALLOW    0
  374. #define XFRM_POLICY_BLOCK    1
  375.     __u8                flags;
  376. #define XFRM_POLICY_LOCALOK    1    /* Allow user to override global policy */
  377.     /* Automatically expand selector to include matching ICMP payloads. */
  378. #define XFRM_POLICY_ICMP    2
  379.     __u8                share;
  380. };
  381.  
  382. struct xfrm_userpolicy_id {
  383.     struct xfrm_selector        sel;
  384.     __u32                index;
  385.     __u8                dir;
  386. };
  387.  
  388. struct xfrm_user_acquire {
  389.     struct xfrm_id            id;
  390.     xfrm_address_t            saddr;
  391.     struct xfrm_selector        sel;
  392.     struct xfrm_userpolicy_info    policy;
  393.     __u32                aalgos;
  394.     __u32                ealgos;
  395.     __u32                calgos;
  396.     __u32                seq;
  397. };
  398.  
  399. struct xfrm_user_expire {
  400.     struct xfrm_usersa_info        state;
  401.     __u8                hard;
  402. };
  403.  
  404. struct xfrm_user_polexpire {
  405.     struct xfrm_userpolicy_info    pol;
  406.     __u8                hard;
  407. };
  408.  
  409. struct xfrm_usersa_flush {
  410.     __u8                proto;
  411. };
  412.  
  413. struct xfrm_user_report {
  414.     __u8                proto;
  415.     struct xfrm_selector        sel;
  416. };
  417.  
  418. struct xfrm_user_migrate {
  419.     xfrm_address_t            old_daddr;
  420.     xfrm_address_t            old_saddr;
  421.     xfrm_address_t            new_daddr;
  422.     xfrm_address_t            new_saddr;
  423.     __u8                proto;
  424.     __u8                mode;
  425.     __u16                reserved;
  426.     __u32                reqid;
  427.     __u16                old_family;
  428.     __u16                new_family;
  429. };
  430.  
  431. /* backwards compatibility for userspace */
  432. #define XFRMGRP_ACQUIRE        1
  433. #define XFRMGRP_EXPIRE        2
  434. #define XFRMGRP_SA        4
  435. #define XFRMGRP_POLICY        8
  436. #define XFRMGRP_REPORT        0x20
  437.  
  438. enum xfrm_nlgroups {
  439.     XFRMNLGRP_NONE,
  440. #define XFRMNLGRP_NONE        XFRMNLGRP_NONE
  441.     XFRMNLGRP_ACQUIRE,
  442. #define XFRMNLGRP_ACQUIRE    XFRMNLGRP_ACQUIRE
  443.     XFRMNLGRP_EXPIRE,
  444. #define XFRMNLGRP_EXPIRE    XFRMNLGRP_EXPIRE
  445.     XFRMNLGRP_SA,
  446. #define XFRMNLGRP_SA        XFRMNLGRP_SA
  447.     XFRMNLGRP_POLICY,
  448. #define XFRMNLGRP_POLICY    XFRMNLGRP_POLICY
  449.     XFRMNLGRP_AEVENTS,
  450. #define XFRMNLGRP_AEVENTS    XFRMNLGRP_AEVENTS
  451.     XFRMNLGRP_REPORT,
  452. #define XFRMNLGRP_REPORT    XFRMNLGRP_REPORT
  453.     XFRMNLGRP_MIGRATE,
  454. #define XFRMNLGRP_MIGRATE    XFRMNLGRP_MIGRATE
  455.     __XFRMNLGRP_MAX
  456. };
  457. #define XFRMNLGRP_MAX    (__XFRMNLGRP_MAX - 1)
  458.  
  459. #endif /* _LINUX_XFRM_H */
  460.