home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / xfrm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  6.9 KB  |  344 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.     __u32        a4;
  16.     __u32        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.     __u32        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.     __u16    dport;
  53.     __u16    dport_mask;
  54.     __u16    sport;
  55.     __u16    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.     int    alg_key_len;    /* in bits */
  96.     char    alg_key[0];
  97. };
  98.  
  99. struct xfrm_stats {
  100.     __u32    replay_window;
  101.     __u32    replay;
  102.     __u32    integrity_failed;
  103. };
  104.  
  105. enum
  106. {
  107.     XFRM_POLICY_IN    = 0,
  108.     XFRM_POLICY_OUT    = 1,
  109.     XFRM_POLICY_FWD    = 2,
  110.     XFRM_POLICY_MAX    = 3
  111. };
  112.  
  113. enum
  114. {
  115.     XFRM_SHARE_ANY,        /* No limitations */
  116.     XFRM_SHARE_SESSION,    /* For this session only */
  117.     XFRM_SHARE_USER,    /* For this user only */
  118.     XFRM_SHARE_UNIQUE    /* Use once */
  119. };
  120.  
  121. /* Netlink configuration messages.  */
  122. enum {
  123.     XFRM_MSG_BASE = 0x10,
  124.  
  125.     XFRM_MSG_NEWSA = 0x10,
  126. #define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
  127.     XFRM_MSG_DELSA,
  128. #define XFRM_MSG_DELSA XFRM_MSG_DELSA
  129.     XFRM_MSG_GETSA,
  130. #define XFRM_MSG_GETSA XFRM_MSG_GETSA
  131.  
  132.     XFRM_MSG_NEWPOLICY,
  133. #define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
  134.     XFRM_MSG_DELPOLICY,
  135. #define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
  136.     XFRM_MSG_GETPOLICY,
  137. #define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
  138.  
  139.     XFRM_MSG_ALLOCSPI,
  140. #define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
  141.     XFRM_MSG_ACQUIRE,
  142. #define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
  143.     XFRM_MSG_EXPIRE,
  144. #define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
  145.  
  146.     XFRM_MSG_UPDPOLICY,
  147. #define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
  148.     XFRM_MSG_UPDSA,
  149. #define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
  150.  
  151.     XFRM_MSG_POLEXPIRE,
  152. #define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
  153.  
  154.     XFRM_MSG_FLUSHSA,
  155. #define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
  156.     XFRM_MSG_FLUSHPOLICY,
  157. #define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
  158.  
  159.     XFRM_MSG_NEWAE,
  160. #define XFRM_MSG_NEWAE XFRM_MSG_NEWAE
  161.     XFRM_MSG_GETAE,
  162. #define XFRM_MSG_GETAE XFRM_MSG_GETAE
  163.     __XFRM_MSG_MAX
  164. };
  165. #define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
  166.  
  167. #define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
  168.  
  169. /*
  170.  * Generic LSM security context for comunicating to user space
  171.  * NOTE: Same format as sadb_x_sec_ctx
  172.  */
  173. struct xfrm_user_sec_ctx {
  174.     __u16            len;
  175.     __u16            exttype;
  176.     __u8            ctx_alg;  /* LSMs: e.g., selinux == 1 */
  177.     __u8            ctx_doi;
  178.     __u16            ctx_len;
  179. };
  180.  
  181. struct xfrm_user_tmpl {
  182.     struct xfrm_id        id;
  183.     __u16            family;
  184.     xfrm_address_t        saddr;
  185.     __u32            reqid;
  186.     __u8            mode;
  187.     __u8            share;
  188.     __u8            optional;
  189.     __u32            aalgos;
  190.     __u32            ealgos;
  191.     __u32            calgos;
  192. };
  193.  
  194. struct xfrm_encap_tmpl {
  195.     __u16        encap_type;
  196.     __u16        encap_sport;
  197.     __u16        encap_dport;
  198.     xfrm_address_t    encap_oa;
  199. };
  200.  
  201. /* AEVENT flags  */
  202. enum xfrm_ae_ftype_t {
  203.     XFRM_AE_UNSPEC,
  204.     XFRM_AE_RTHR=1,    /* replay threshold*/
  205.     XFRM_AE_RVAL=2, /* replay value */
  206.     XFRM_AE_LVAL=4, /* lifetime value */
  207.     XFRM_AE_ETHR=8, /* expiry timer threshold */
  208.     XFRM_AE_CR=16, /* Event cause is replay update */
  209.     XFRM_AE_CE=32, /* Event cause is timer expiry */
  210.     XFRM_AE_CU=64, /* Event cause is policy update */
  211.     __XFRM_AE_MAX
  212.  
  213. #define XFRM_AE_MAX (__XFRM_AE_MAX - 1)
  214. };
  215.  
  216. /* Netlink message attributes.  */
  217. enum xfrm_attr_type_t {
  218.     XFRMA_UNSPEC,
  219.     XFRMA_ALG_AUTH,        /* struct xfrm_algo */
  220.     XFRMA_ALG_CRYPT,    /* struct xfrm_algo */
  221.     XFRMA_ALG_COMP,        /* struct xfrm_algo */
  222.     XFRMA_ENCAP,        /* struct xfrm_algo + struct xfrm_encap_tmpl */
  223.     XFRMA_TMPL,        /* 1 or more struct xfrm_user_tmpl */
  224.     XFRMA_SA,
  225.     XFRMA_POLICY,
  226.     XFRMA_SEC_CTX,        /* struct xfrm_sec_ctx */
  227.     XFRMA_LTIME_VAL,
  228.     XFRMA_REPLAY_VAL,
  229.     XFRMA_REPLAY_THRESH,
  230.     XFRMA_ETIMER_THRESH,
  231.     __XFRMA_MAX
  232.  
  233. #define XFRMA_MAX (__XFRMA_MAX - 1)
  234. };
  235.  
  236. struct xfrm_usersa_info {
  237.     struct xfrm_selector        sel;
  238.     struct xfrm_id            id;
  239.     xfrm_address_t            saddr;
  240.     struct xfrm_lifetime_cfg    lft;
  241.     struct xfrm_lifetime_cur    curlft;
  242.     struct xfrm_stats        stats;
  243.     __u32                seq;
  244.     __u32                reqid;
  245.     __u16                family;
  246.     __u8                mode; /* 0=transport,1=tunnel */
  247.     __u8                replay_window;
  248.     __u8                flags;
  249. #define XFRM_STATE_NOECN    1
  250. #define XFRM_STATE_DECAP_DSCP    2
  251. #define XFRM_STATE_NOPMTUDISC    4
  252. };
  253.  
  254. struct xfrm_usersa_id {
  255.     xfrm_address_t            daddr;
  256.     __u32                spi;
  257.     __u16                family;
  258.     __u8                proto;
  259. };
  260.  
  261. struct xfrm_aevent_id {
  262.     struct xfrm_usersa_id        sa_id;
  263.     __u32                flags;
  264. };
  265.  
  266. struct xfrm_userspi_info {
  267.     struct xfrm_usersa_info        info;
  268.     __u32                min;
  269.     __u32                max;
  270. };
  271.  
  272. struct xfrm_userpolicy_info {
  273.     struct xfrm_selector        sel;
  274.     struct xfrm_lifetime_cfg    lft;
  275.     struct xfrm_lifetime_cur    curlft;
  276.     __u32                priority;
  277.     __u32                index;
  278.     __u8                dir;
  279.     __u8                action;
  280. #define XFRM_POLICY_ALLOW    0
  281. #define XFRM_POLICY_BLOCK    1
  282.     __u8                flags;
  283. #define XFRM_POLICY_LOCALOK    1    /* Allow user to override global policy */
  284.     __u8                share;
  285. };
  286.  
  287. struct xfrm_userpolicy_id {
  288.     struct xfrm_selector        sel;
  289.     __u32                index;
  290.     __u8                dir;
  291. };
  292.  
  293. struct xfrm_user_acquire {
  294.     struct xfrm_id            id;
  295.     xfrm_address_t            saddr;
  296.     struct xfrm_selector        sel;
  297.     struct xfrm_userpolicy_info    policy;
  298.     __u32                aalgos;
  299.     __u32                ealgos;
  300.     __u32                calgos;
  301.     __u32                seq;
  302. };
  303.  
  304. struct xfrm_user_expire {
  305.     struct xfrm_usersa_info        state;
  306.     __u8                hard;
  307. };
  308.  
  309. struct xfrm_user_polexpire {
  310.     struct xfrm_userpolicy_info    pol;
  311.     __u8                hard;
  312. };
  313.  
  314. struct xfrm_usersa_flush {
  315.     __u8                proto;
  316. };
  317.  
  318. #ifndef __KERNEL__
  319. /* backwards compatibility for userspace */
  320. #define XFRMGRP_ACQUIRE        1
  321. #define XFRMGRP_EXPIRE        2
  322. #define XFRMGRP_SA        4
  323. #define XFRMGRP_POLICY        8
  324. #endif
  325.  
  326. enum xfrm_nlgroups {
  327.     XFRMNLGRP_NONE,
  328. #define XFRMNLGRP_NONE        XFRMNLGRP_NONE
  329.     XFRMNLGRP_ACQUIRE,
  330. #define XFRMNLGRP_ACQUIRE    XFRMNLGRP_ACQUIRE
  331.     XFRMNLGRP_EXPIRE,
  332. #define XFRMNLGRP_EXPIRE    XFRMNLGRP_EXPIRE
  333.     XFRMNLGRP_SA,
  334. #define XFRMNLGRP_SA        XFRMNLGRP_SA
  335.     XFRMNLGRP_POLICY,
  336. #define XFRMNLGRP_POLICY    XFRMNLGRP_POLICY
  337.     XFRMNLGRP_AEVENTS,
  338. #define XFRMNLGRP_AEVENTS    XFRMNLGRP_AEVENTS
  339.     __XFRMNLGRP_MAX
  340. };
  341. #define XFRMNLGRP_MAX    (__XFRMNLGRP_MAX - 1)
  342.  
  343. #endif /* _LINUX_XFRM_H */
  344.