Annotation of embedaddon/strongswan/src/stroke/stroke_msg.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2015 Tobias Brunner
3: * Copyright (C) 2006 Martin Willi
4: * HSR Hochschule fuer Technik Rapperswil
5: *
6: * This program is free software; you can redistribute it and/or modify it
7: * under the terms of the GNU General Public License as published by the
8: * Free Software Foundation; either version 2 of the License, or (at your
9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14: * for more details.
15: */
16:
17: #ifndef STROKE_MSG_H_
18: #define STROKE_MSG_H_
19:
20: #include <sys/types.h>
21:
22: #include <library.h>
23:
24: /**
25: * Socket which is used to communicate between charon and stroke
26: */
27: #define STROKE_SOCKET IPSEC_PIDDIR "/charon.ctl"
28:
29: /**
30: * Number of bytes by which the buffer is increased as needed
31: */
32: #define STROKE_BUF_LEN_INC 1024
33:
34: typedef enum list_flag_t list_flag_t;
35:
36: /**
37: * Definition of the LIST flags, used for
38: * the various stroke list* commands.
39: */
40: enum list_flag_t {
41: /** don't list anything */
42: LIST_NONE = 0x0000,
43: /** list all raw public keys */
44: LIST_PUBKEYS = 0x0001,
45: /** list all host/user certs */
46: LIST_CERTS = 0x0002,
47: /** list all ca certs */
48: LIST_CACERTS = 0x0004,
49: /** list all ocsp signer certs */
50: LIST_OCSPCERTS = 0x0008,
51: /** list all aa certs */
52: LIST_AACERTS = 0x0010,
53: /** list all attribute certs */
54: LIST_ACERTS = 0x0020,
55: /** list all access control groups */
56: LIST_GROUPS = 0x0040,
57: /** list all ca information records */
58: LIST_CAINFOS = 0x0080,
59: /** list all crls */
60: LIST_CRLS = 0x0100,
61: /** list all ocsp cache entries */
62: LIST_OCSP = 0x0200,
63: /** list all supported algorithms */
64: LIST_ALGS = 0x0400,
65: /** list plugin information */
66: LIST_PLUGINS = 0x0800,
67: /** all list options */
68: LIST_ALL = 0x0FFF,
69: };
70:
71: typedef enum reread_flag_t reread_flag_t;
72:
73: /**
74: * Definition of the REREAD flags, used for
75: * the various stroke reread* commands.
76: */
77: enum reread_flag_t {
78: /** don't reread anything */
79: REREAD_NONE = 0x0000,
80: /** reread all secret keys */
81: REREAD_SECRETS = 0x0001,
82: /** reread all ca certs */
83: REREAD_CACERTS = 0x0002,
84: /** reread all ocsp signer certs */
85: REREAD_OCSPCERTS = 0x0004,
86: /** reread all aa certs */
87: REREAD_AACERTS = 0x0008,
88: /** reread all attribute certs */
89: REREAD_ACERTS = 0x0010,
90: /** reread all crls */
91: REREAD_CRLS = 0x0020,
92: /** all reread options */
93: REREAD_ALL = 0x003F,
94: };
95:
96: typedef enum purge_flag_t purge_flag_t;
97:
98: /**
99: * Definition of the PURGE flags, currently used for
100: * the stroke purgeocsp command.
101: */
102: enum purge_flag_t {
103: /** don't purge anything */
104: PURGE_NONE = 0x0000,
105: /** purge ocsp cache entries */
106: PURGE_OCSP = 0x0001,
107: /** purge CRL cache entries */
108: PURGE_CRLS = 0x0002,
109: /** purge X509 cache entries */
110: PURGE_CERTS = 0x0004,
111: /** purge IKE_SAs without a CHILD_SA */
112: PURGE_IKE = 0x0008,
113: };
114:
115: typedef enum export_flag_t export_flag_t;
116:
117: /**
118: * Definition of the export flags
119: */
120: enum export_flag_t {
121: /** export an X509 certificate */
122: EXPORT_X509 = 0x0001,
123: /** export an X509 end entity certificate for a connection */
124: EXPORT_CONN_CERT = 0x0002,
125: /** export the complete trust chain of a connection */
126: EXPORT_CONN_CHAIN = 0x0004,
127: };
128:
129: /**
130: * CRL certificate validation policy
131: */
132: typedef enum {
133: CRL_STRICT_NO,
134: CRL_STRICT_YES,
135: CRL_STRICT_IFURI,
136: } crl_policy_t;
137:
138:
139: typedef struct stroke_end_t stroke_end_t;
140:
141: /**
142: * definition of a peer in a stroke message
143: */
144: struct stroke_end_t {
145: char *auth;
146: char *auth2;
147: char *id;
148: char *id2;
149: char *eap_id;
150: char *rsakey;
151: char *cert;
152: char *cert2;
153: char *ca;
154: char *ca2;
155: char *groups;
156: char *groups2;
157: char *cert_policy;
158: char *updown;
159: char *address;
160: uint16_t ikeport;
161: char *sourceip;
162: char *dns;
163: char *subnets;
164: int sendcert;
165: int hostaccess;
166: int tohost;
167: int allow_any;
168: uint8_t protocol;
169: uint16_t from_port;
170: uint16_t to_port;
171: };
172:
173: typedef struct stroke_msg_t stroke_msg_t;
174:
175: /**
176: * @brief A stroke message sent over the unix socket.
177: */
178: struct stroke_msg_t {
179: /* length of this message with all strings */
180: uint16_t length;
181:
182: /* type of the message */
183: enum {
184: /* initiate a connection */
185: STR_INITIATE,
186: /* install SPD entries for a policy */
187: STR_ROUTE,
188: /* uninstall SPD entries for a policy */
189: STR_UNROUTE,
190: /* add a connection */
191: STR_ADD_CONN,
192: /* delete a connection */
193: STR_DEL_CONN,
194: /* terminate connection */
195: STR_TERMINATE,
196: /* terminate connection by peers srcip/virtual ip */
197: STR_TERMINATE_SRCIP,
198: /* rekey a connection */
199: STR_REKEY,
200: /* show connection status */
201: STR_STATUS,
202: /* show verbose connection status */
203: STR_STATUS_ALL,
204: /* show verbose connection status, non-blocking variant */
205: STR_STATUS_ALL_NOBLK,
206: /* add a ca information record */
207: STR_ADD_CA,
208: /* delete ca information record */
209: STR_DEL_CA,
210: /* set a log type to log/not log */
211: STR_LOGLEVEL,
212: /* configure global options for stroke */
213: STR_CONFIG,
214: /* list various objects */
215: STR_LIST,
216: /* reread various objects */
217: STR_REREAD,
218: /* purge various objects */
219: STR_PURGE,
220: /* show pool leases */
221: STR_LEASES,
222: /* export credentials */
223: STR_EXPORT,
224: /* print memory usage details */
225: STR_MEMUSAGE,
226: /* set username and password for a connection */
227: STR_USER_CREDS,
228: /* print/reset counters */
229: STR_COUNTERS,
230: /* more to come */
231: } type;
232:
233: /* verbosity of output returned from charon (-from -1=silent to 4=private)*/
234: int output_verbosity;
235:
236: union {
237: /* data for STR_INITIATE, STR_ROUTE, STR_UP, STR_DOWN, ... */
238: struct {
239: char *name;
240: } initiate, route, unroute, terminate, rekey, status, del_conn, del_ca;
241:
242: /* data for STR_TERMINATE_SRCIP */
243: struct {
244: char *start;
245: char *end;
246: } terminate_srcip;
247:
248: /* data for STR_ADD_CONN */
249: struct {
250: char *name;
251: int version;
252: char *eap_identity;
253: char *aaa_identity;
254: char *xauth_identity;
255: int mode;
256: int mobike;
257: int aggressive;
258: int pushmode;
259: int force_encap;
260: int fragmentation;
261: int ipcomp;
262: time_t inactivity;
263: int proxy_mode;
264: int install_policy;
265: int close_action;
266: uint32_t reqid;
267: uint32_t tfc;
268: uint8_t ikedscp;
269:
270: crl_policy_t crl_policy;
271: int unique;
272: struct {
273: char *ike;
274: char *esp;
275: char *ah;
276: } algorithms;
277: struct {
278: int reauth;
279: time_t ipsec_lifetime;
280: time_t ike_lifetime;
281: time_t margin;
282: uint64_t life_bytes;
283: uint64_t margin_bytes;
284: uint64_t life_packets;
285: uint64_t margin_packets;
286: unsigned long tries;
287: unsigned long fuzz;
288: } rekey;
289: struct {
290: time_t delay;
291: time_t timeout;
292: int action;
293: } dpd;
294: struct {
295: int mediation;
296: char *mediated_by;
297: char *peerid;
298: } ikeme;
299: struct {
300: uint32_t value;
301: uint32_t mask;
302: } mark_in, mark_out;
303: stroke_end_t me, other;
304: uint32_t replay_window;
305: bool sha256_96;
306: } add_conn;
307:
308: /* data for STR_ADD_CA */
309: struct {
310: char *name;
311: char *cacert;
312: char *crluri;
313: char *crluri2;
314: char *ocspuri;
315: char *ocspuri2;
316: char *certuribase;
317: } add_ca;
318:
319: /* data for STR_LOGLEVEL */
320: struct {
321: char *type;
322: int level;
323: } loglevel;
324:
325: /* data for STR_CONFIG */
326: struct {
327: int cachecrl;
328: } config;
329:
330: /* data for STR_LIST */
331: struct {
332: list_flag_t flags;
333: int utc;
334: } list;
335:
336: /* data for STR_REREAD */
337: struct {
338: reread_flag_t flags;
339: } reread;
340:
341: /* data for STR_PURGE */
342: struct {
343: purge_flag_t flags;
344: } purge;
345:
346: /* data for STR_EXPORT */
347: struct {
348: export_flag_t flags;
349: char *selector;
350: } export;
351:
352: /* data for STR_LEASES */
353: struct {
354: char *pool;
355: char *address;
356: } leases;
357:
358: /* data for STR_USER_CREDS */
359: struct {
360: char *name;
361: char *username;
362: char *password;
363: } user_creds;
364:
365: /* data for STR_COUNTERS */
366: struct {
367: /* reset or print counters? */
368: int reset;
369: char *name;
370: } counters;
371: };
372: /* length of the string buffer */
373: uint16_t buflen;
374: /* string buffer */
375: char buffer[];
376: };
377:
378: #endif /* STROKE_MSG_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>