xfrm.h
上传用户:szlgq88
上传日期:2009-04-28
资源大小:48287k
文件大小:6k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. #ifndef _LINUX_XFRM_H
  2. #define _LINUX_XFRM_H
  3. #include <linux/types.h>
  4. /* All of the structures in this file may not change size as they are
  5.  * passed into the kernel from userspace via netlink sockets.
  6.  */
  7. /* Structure to encapsulate addresses. I do not want to use
  8.  * "standard" structure. My apologies.
  9.  */
  10. typedef union
  11. {
  12. __u32 a4;
  13. __u32 a6[4];
  14. } xfrm_address_t;
  15. /* Ident of a specific xfrm_state. It is used on input to lookup
  16.  * the state by (spi,daddr,ah/esp) or to store information about
  17.  * spi, protocol and tunnel address on output.
  18.  */
  19. struct xfrm_id
  20. {
  21. xfrm_address_t daddr;
  22. __u32 spi;
  23. __u8 proto;
  24. };
  25. /* Selector, used as selector both on policy rules (SPD) and SAs. */
  26. struct xfrm_selector
  27. {
  28. xfrm_address_t daddr;
  29. xfrm_address_t saddr;
  30. __u16 dport;
  31. __u16 dport_mask;
  32. __u16 sport;
  33. __u16 sport_mask;
  34. __u16 family;
  35. __u8 prefixlen_d;
  36. __u8 prefixlen_s;
  37. __u8 proto;
  38. int ifindex;
  39. uid_t user;
  40. };
  41. #define XFRM_INF (~(__u64)0)
  42. struct xfrm_lifetime_cfg
  43. {
  44. __u64 soft_byte_limit;
  45. __u64 hard_byte_limit;
  46. __u64 soft_packet_limit;
  47. __u64 hard_packet_limit;
  48. __u64 soft_add_expires_seconds;
  49. __u64 hard_add_expires_seconds;
  50. __u64 soft_use_expires_seconds;
  51. __u64 hard_use_expires_seconds;
  52. };
  53. struct xfrm_lifetime_cur
  54. {
  55. __u64 bytes;
  56. __u64 packets;
  57. __u64 add_time;
  58. __u64 use_time;
  59. };
  60. struct xfrm_replay_state
  61. {
  62. __u32 oseq;
  63. __u32 seq;
  64. __u32 bitmap;
  65. };
  66. struct xfrm_algo {
  67. char alg_name[64];
  68. int alg_key_len;    /* in bits */
  69. char alg_key[0];
  70. };
  71. struct xfrm_stats {
  72. __u32 replay_window;
  73. __u32 replay;
  74. __u32 integrity_failed;
  75. };
  76. enum
  77. {
  78. XFRM_POLICY_IN = 0,
  79. XFRM_POLICY_OUT = 1,
  80. XFRM_POLICY_FWD = 2,
  81. XFRM_POLICY_MAX = 3
  82. };
  83. enum
  84. {
  85. XFRM_SHARE_ANY, /* No limitations */
  86. XFRM_SHARE_SESSION, /* For this session only */
  87. XFRM_SHARE_USER, /* For this user only */
  88. XFRM_SHARE_UNIQUE /* Use once */
  89. };
  90. /* Netlink configuration messages.  */
  91. enum {
  92. XFRM_MSG_BASE = 0x10,
  93. XFRM_MSG_NEWSA = 0x10,
  94. #define XFRM_MSG_NEWSA XFRM_MSG_NEWSA
  95. XFRM_MSG_DELSA,
  96. #define XFRM_MSG_DELSA XFRM_MSG_DELSA
  97. XFRM_MSG_GETSA,
  98. #define XFRM_MSG_GETSA XFRM_MSG_GETSA
  99. XFRM_MSG_NEWPOLICY,
  100. #define XFRM_MSG_NEWPOLICY XFRM_MSG_NEWPOLICY
  101. XFRM_MSG_DELPOLICY,
  102. #define XFRM_MSG_DELPOLICY XFRM_MSG_DELPOLICY
  103. XFRM_MSG_GETPOLICY,
  104. #define XFRM_MSG_GETPOLICY XFRM_MSG_GETPOLICY
  105. XFRM_MSG_ALLOCSPI,
  106. #define XFRM_MSG_ALLOCSPI XFRM_MSG_ALLOCSPI
  107. XFRM_MSG_ACQUIRE,
  108. #define XFRM_MSG_ACQUIRE XFRM_MSG_ACQUIRE
  109. XFRM_MSG_EXPIRE,
  110. #define XFRM_MSG_EXPIRE XFRM_MSG_EXPIRE
  111. XFRM_MSG_UPDPOLICY,
  112. #define XFRM_MSG_UPDPOLICY XFRM_MSG_UPDPOLICY
  113. XFRM_MSG_UPDSA,
  114. #define XFRM_MSG_UPDSA XFRM_MSG_UPDSA
  115. XFRM_MSG_POLEXPIRE,
  116. #define XFRM_MSG_POLEXPIRE XFRM_MSG_POLEXPIRE
  117. XFRM_MSG_FLUSHSA,
  118. #define XFRM_MSG_FLUSHSA XFRM_MSG_FLUSHSA
  119. XFRM_MSG_FLUSHPOLICY,
  120. #define XFRM_MSG_FLUSHPOLICY XFRM_MSG_FLUSHPOLICY
  121. __XFRM_MSG_MAX
  122. };
  123. #define XFRM_MSG_MAX (__XFRM_MSG_MAX - 1)
  124. #define XFRM_NR_MSGTYPES (XFRM_MSG_MAX + 1 - XFRM_MSG_BASE)
  125. struct xfrm_user_tmpl {
  126. struct xfrm_id id;
  127. __u16 family;
  128. xfrm_address_t saddr;
  129. __u32 reqid;
  130. __u8 mode;
  131. __u8 share;
  132. __u8 optional;
  133. __u32 aalgos;
  134. __u32 ealgos;
  135. __u32 calgos;
  136. };
  137. struct xfrm_encap_tmpl {
  138. __u16 encap_type;
  139. __u16 encap_sport;
  140. __u16 encap_dport;
  141. xfrm_address_t encap_oa;
  142. };
  143. /* Netlink message attributes.  */
  144. enum xfrm_attr_type_t {
  145. XFRMA_UNSPEC,
  146. XFRMA_ALG_AUTH, /* struct xfrm_algo */
  147. XFRMA_ALG_CRYPT, /* struct xfrm_algo */
  148. XFRMA_ALG_COMP, /* struct xfrm_algo */
  149. XFRMA_ENCAP, /* struct xfrm_algo + struct xfrm_encap_tmpl */
  150. XFRMA_TMPL, /* 1 or more struct xfrm_user_tmpl */
  151. XFRMA_SA,
  152. XFRMA_POLICY,
  153. __XFRMA_MAX
  154. #define XFRMA_MAX (__XFRMA_MAX - 1)
  155. };
  156. struct xfrm_usersa_info {
  157. struct xfrm_selector sel;
  158. struct xfrm_id id;
  159. xfrm_address_t saddr;
  160. struct xfrm_lifetime_cfg lft;
  161. struct xfrm_lifetime_cur curlft;
  162. struct xfrm_stats stats;
  163. __u32 seq;
  164. __u32 reqid;
  165. __u16 family;
  166. __u8 mode; /* 0=transport,1=tunnel */
  167. __u8 replay_window;
  168. __u8 flags;
  169. #define XFRM_STATE_NOECN 1
  170. #define XFRM_STATE_DECAP_DSCP 2
  171. #define XFRM_STATE_NOPMTUDISC 4
  172. };
  173. struct xfrm_usersa_id {
  174. xfrm_address_t daddr;
  175. __u32 spi;
  176. __u16 family;
  177. __u8 proto;
  178. };
  179. struct xfrm_userspi_info {
  180. struct xfrm_usersa_info info;
  181. __u32 min;
  182. __u32 max;
  183. };
  184. struct xfrm_userpolicy_info {
  185. struct xfrm_selector sel;
  186. struct xfrm_lifetime_cfg lft;
  187. struct xfrm_lifetime_cur curlft;
  188. __u32 priority;
  189. __u32 index;
  190. __u8 dir;
  191. __u8 action;
  192. #define XFRM_POLICY_ALLOW 0
  193. #define XFRM_POLICY_BLOCK 1
  194. __u8 flags;
  195. #define XFRM_POLICY_LOCALOK 1 /* Allow user to override global policy */
  196. __u8 share;
  197. };
  198. struct xfrm_userpolicy_id {
  199. struct xfrm_selector sel;
  200. __u32 index;
  201. __u8 dir;
  202. };
  203. struct xfrm_user_acquire {
  204. struct xfrm_id id;
  205. xfrm_address_t saddr;
  206. struct xfrm_selector sel;
  207. struct xfrm_userpolicy_info policy;
  208. __u32 aalgos;
  209. __u32 ealgos;
  210. __u32 calgos;
  211. __u32 seq;
  212. };
  213. struct xfrm_user_expire {
  214. struct xfrm_usersa_info state;
  215. __u8 hard;
  216. };
  217. struct xfrm_user_polexpire {
  218. struct xfrm_userpolicy_info pol;
  219. __u8 hard;
  220. };
  221. struct xfrm_usersa_flush {
  222. __u8 proto;
  223. };
  224. #ifndef __KERNEL__
  225. /* backwards compatibility for userspace */
  226. #define XFRMGRP_ACQUIRE 1
  227. #define XFRMGRP_EXPIRE 2
  228. #define XFRMGRP_SA 4
  229. #define XFRMGRP_POLICY 8
  230. #endif
  231. enum xfrm_nlgroups {
  232. XFRMNLGRP_NONE,
  233. #define XFRMNLGRP_NONE XFRMNLGRP_NONE
  234. XFRMNLGRP_ACQUIRE,
  235. #define XFRMNLGRP_ACQUIRE XFRMNLGRP_ACQUIRE
  236. XFRMNLGRP_EXPIRE,
  237. #define XFRMNLGRP_EXPIRE XFRMNLGRP_EXPIRE
  238. XFRMNLGRP_SA,
  239. #define XFRMNLGRP_SA XFRMNLGRP_SA
  240. XFRMNLGRP_POLICY,
  241. #define XFRMNLGRP_POLICY XFRMNLGRP_POLICY
  242. __XFRMNLGRP_MAX
  243. };
  244. #define XFRMNLGRP_MAX (__XFRMNLGRP_MAX - 1)
  245. #endif /* _LINUX_XFRM_H */