confread.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. /* strongSwan IPsec config file parser
  2. * Copyright (C) 2001-2002 Mathieu Lafon
  3. * Arkoon Network Security
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of the GNU General Public License as published by the
  7. * Free Software Foundation; either version 2 of the License, or (at your
  8. * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
  9. *
  10. * This program is distributed in the hope that it will be useful, but
  11. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  12. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  13. * for more details.
  14. */
  15. #ifndef _IPSEC_CONFREAD_H_
  16. #define _IPSEC_CONFREAD_H_
  17. #include <kernel/kernel_ipsec.h>
  18. typedef enum {
  19. STARTUP_NO,
  20. STARTUP_ADD,
  21. STARTUP_ROUTE,
  22. STARTUP_START
  23. } startup_t;
  24. typedef enum {
  25. STATE_IGNORE,
  26. STATE_TO_ADD,
  27. STATE_ADDED,
  28. STATE_REPLACED,
  29. STATE_INVALID
  30. } starter_state_t;
  31. typedef enum {
  32. /* shared with ike_version_t */
  33. KEY_EXCHANGE_IKE = 0,
  34. KEY_EXCHANGE_IKEV1 = 1,
  35. KEY_EXCHANGE_IKEV2 = 2,
  36. } keyexchange_t;
  37. typedef enum {
  38. STRICT_NO,
  39. STRICT_YES,
  40. STRICT_IFURI,
  41. } strict_t;
  42. typedef enum {
  43. CERT_ALWAYS_SEND,
  44. CERT_SEND_IF_ASKED,
  45. CERT_NEVER_SEND,
  46. CERT_YES_SEND, /* synonym for CERT_ALWAYS_SEND */
  47. CERT_NO_SEND, /* synonym for CERT_NEVER_SEND */
  48. } certpolicy_t;
  49. typedef enum {
  50. DPD_ACTION_NONE,
  51. DPD_ACTION_CLEAR,
  52. DPD_ACTION_HOLD,
  53. DPD_ACTION_RESTART,
  54. DPD_ACTION_UNKNOW,
  55. } dpd_action_t;
  56. typedef enum {
  57. /* same as in ike_cfg.h */
  58. FRAGMENTATION_NO,
  59. FRAGMENTATION_ACCEPT,
  60. FRAGMENTATION_YES,
  61. FRAGMENTATION_FORCE,
  62. } fragmentation_t;
  63. typedef enum {
  64. /* IPsec options */
  65. SA_OPTION_COMPRESS = 1 << 1, /* use IPComp */
  66. /* IKE and other other options */
  67. SA_OPTION_DONT_REKEY = 1 << 2, /* don't rekey state either Phase */
  68. SA_OPTION_DONT_REAUTH = 1 << 3, /* don't reauthenticate on rekeying, IKEv2 only */
  69. SA_OPTION_MODECFG_PUSH = 1 << 4, /* is modecfg pushed by server? */
  70. SA_OPTION_XAUTH_SERVER = 1 << 5, /* are we an XAUTH server? */
  71. SA_OPTION_MOBIKE = 1 << 6, /* enable MOBIKE for IKEv2 */
  72. SA_OPTION_FORCE_ENCAP = 1 << 7, /* force UDP encapsulation */
  73. } sa_option_t;
  74. typedef struct starter_end starter_end_t;
  75. struct starter_end {
  76. char *auth;
  77. char *auth2;
  78. char *id;
  79. char *id2;
  80. char *rsakey;
  81. char *cert;
  82. char *cert2;
  83. char *ca;
  84. char *ca2;
  85. char *groups;
  86. char *groups2;
  87. char *cert_policy;
  88. char *host;
  89. u_int ikeport;
  90. char *subnet;
  91. bool modecfg;
  92. certpolicy_t sendcert;
  93. bool firewall;
  94. bool hostaccess;
  95. bool allow_any;
  96. char *updown;
  97. uint16_t from_port;
  98. uint16_t to_port;
  99. uint8_t protocol;
  100. char *sourceip;
  101. char *dns;
  102. };
  103. typedef struct starter_conn starter_conn_t;
  104. struct starter_conn {
  105. char *name;
  106. startup_t startup;
  107. starter_state_t state;
  108. keyexchange_t keyexchange;
  109. char *eap_identity;
  110. char *aaa_identity;
  111. char *xauth_identity;
  112. char *authby;
  113. ipsec_mode_t mode;
  114. bool proxy_mode;
  115. fragmentation_t fragmentation;
  116. u_int ikedscp;
  117. sa_option_t options;
  118. time_t sa_ike_life_seconds;
  119. time_t sa_ipsec_life_seconds;
  120. time_t sa_rekey_margin;
  121. uint64_t sa_ipsec_life_bytes;
  122. uint64_t sa_ipsec_margin_bytes;
  123. uint64_t sa_ipsec_life_packets;
  124. uint64_t sa_ipsec_margin_packets;
  125. unsigned long sa_keying_tries;
  126. unsigned long sa_rekey_fuzz;
  127. uint32_t reqid;
  128. mark_t mark_in;
  129. mark_t mark_out;
  130. uint32_t replay_window;
  131. uint32_t tfc;
  132. bool install_policy;
  133. bool aggressive;
  134. starter_end_t left, right;
  135. unsigned long id;
  136. char *esp;
  137. char *ah;
  138. char *ike;
  139. time_t dpd_delay;
  140. time_t dpd_timeout;
  141. dpd_action_t dpd_action;
  142. int dpd_count;
  143. dpd_action_t close_action;
  144. bool sha256_96;
  145. time_t inactivity;
  146. bool me_mediation;
  147. char *me_mediated_by;
  148. char *me_peerid;
  149. starter_conn_t *next;
  150. };
  151. typedef struct starter_ca starter_ca_t;
  152. struct starter_ca {
  153. char *name;
  154. startup_t startup;
  155. starter_state_t state;
  156. char *cacert;
  157. char *crluri;
  158. char *crluri2;
  159. char *ocspuri;
  160. char *ocspuri2;
  161. char *certuribase;
  162. bool strict;
  163. starter_ca_t *next;
  164. };
  165. typedef struct starter_config starter_config_t;
  166. struct starter_config {
  167. struct {
  168. char *charondebug;
  169. bool uniqueids;
  170. bool cachecrls;
  171. strict_t strictcrlpolicy;
  172. } setup;
  173. /* number of encountered parsing errors */
  174. u_int err;
  175. u_int non_fatal_err;
  176. /* connections list */
  177. starter_ca_t *ca_first, *ca_last;
  178. /* connections list */
  179. starter_conn_t *conn_first, *conn_last;
  180. };
  181. starter_config_t *confread_load(const char *file);
  182. void confread_free(starter_config_t *cfg);
  183. #endif /* _IPSEC_CONFREAD_H_ */