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>