Annotation of embedaddon/strongswan/src/libcharon/encoding/payloads/ike_header.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2007 Tobias Brunner
                      3:  * Copyright (C) 2005-2011 Martin Willi
                      4:  * Copyright (C) 2005 Jan Hutter
                      5:  * HSR Hochschule fuer Technik Rapperswil
                      6:  *
                      7:  * This program is free software; you can redistribute it and/or modify it
                      8:  * under the terms of the GNU General Public License as published by the
                      9:  * Free Software Foundation; either version 2 of the License, or (at your
                     10:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                     11:  *
                     12:  * This program is distributed in the hope that it will be useful, but
                     13:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     14:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     15:  * for more details.
                     16:  */
                     17: 
                     18: /**
                     19:  * @defgroup ike_header ike_header
                     20:  * @{ @ingroup payloads
                     21:  */
                     22: 
                     23: #ifndef IKE_HEADER_H_
                     24: #define IKE_HEADER_H_
                     25: 
                     26: typedef enum exchange_type_t exchange_type_t;
                     27: typedef struct ike_header_t ike_header_t;
                     28: 
                     29: #include <library.h>
                     30: #include <encoding/payloads/payload.h>
                     31: 
                     32: /**
                     33:  * Major Version of IKEv1 we implement.
                     34:  */
                     35: #define IKEV1_MAJOR_VERSION 1
                     36: 
                     37: /**
                     38:  * Minor Version of IKEv1 we implement.
                     39:  */
                     40: #define IKEV1_MINOR_VERSION 0
                     41: 
                     42: /**
                     43:  * Major Version of IKEv2 we implement.
                     44:  */
                     45: #define IKEV2_MAJOR_VERSION 2
                     46: 
                     47: /**
                     48:  * Minor Version of IKEv2 we implement.
                     49:  */
                     50: #define IKEV2_MINOR_VERSION 0
                     51: 
                     52: /**
                     53:  * Length of IKE Header in Bytes.
                     54:  */
                     55: #define IKE_HEADER_LENGTH 28
                     56: 
                     57: /**
                     58:  * Different types of IKE-Exchanges.
                     59:  *
                     60:  * See RFC for different types.
                     61:  */
                     62: enum exchange_type_t{
                     63: 
                     64:        /**
                     65:         * Identity Protection (Main mode).
                     66:         */
                     67:        ID_PROT = 2,
                     68: 
                     69:        /**
                     70:         * Authentication Only.
                     71:         */
                     72:        AUTH_ONLY = 3,
                     73: 
                     74:        /**
                     75:         * Aggressive (Aggressive mode)
                     76:         */
                     77:        AGGRESSIVE = 4,
                     78: 
                     79:        /**
                     80:         * Informational in IKEv1
                     81:         */
                     82:        INFORMATIONAL_V1 = 5,
                     83: 
                     84:        /**
                     85:         * Transaction (ISAKMP Cfg Mode "draft-ietf-ipsec-isakmp-mode-cfg-05")
                     86:         */
                     87:        TRANSACTION = 6,
                     88: 
                     89:        /**
                     90:         * Quick Mode
                     91:         */
                     92:        QUICK_MODE = 32,
                     93: 
                     94:        /**
                     95:         * New Group Mode
                     96:         */
                     97:        NEW_GROUP_MODE = 33,
                     98: 
                     99:        /**
                    100:         * IKE_SA_INIT.
                    101:         */
                    102:        IKE_SA_INIT = 34,
                    103: 
                    104:        /**
                    105:         * IKE_AUTH.
                    106:         */
                    107:        IKE_AUTH = 35,
                    108: 
                    109:        /**
                    110:         * CREATE_CHILD_SA.
                    111:         */
                    112:        CREATE_CHILD_SA = 36,
                    113: 
                    114:        /**
                    115:         * INFORMATIONAL in IKEv2.
                    116:         */
                    117:        INFORMATIONAL = 37,
                    118: 
                    119:        /**
                    120:         * IKE_SESSION_RESUME (RFC 5723).
                    121:         */
                    122:        IKE_SESSION_RESUME = 38,
                    123: 
                    124: #ifdef ME
                    125:        /**
                    126:         * ME_CONNECT
                    127:         */
                    128:        ME_CONNECT = 240,
                    129: #endif /* ME */
                    130: 
                    131:        /**
                    132:         * Undefined exchange type, in private space.
                    133:         */
                    134:        EXCHANGE_TYPE_UNDEFINED = 255,
                    135: };
                    136: 
                    137: /**
                    138:  * enum name for exchange_type_t
                    139:  */
                    140: extern enum_name_t *exchange_type_names;
                    141: 
                    142: /**
                    143:  * An object of this type represents an IKE header of either IKEv1 or IKEv2.
                    144:  */
                    145: struct ike_header_t {
                    146:        /**
                    147:         * The payload_t interface.
                    148:         */
                    149:        payload_t payload_interface;
                    150: 
                    151:        /**
                    152:         * Get the initiator spi.
                    153:         *
                    154:         * @return                              initiator_spi
                    155:         */
                    156:        uint64_t (*get_initiator_spi) (ike_header_t *this);
                    157: 
                    158:        /**
                    159:         * Set the initiator spi.
                    160:         *
                    161:         * @param initiator_spi initiator_spi
                    162:         */
                    163:        void (*set_initiator_spi) (ike_header_t *this, uint64_t initiator_spi);
                    164: 
                    165:        /**
                    166:         * Get the responder spi.
                    167:         *
                    168:         * @return                              responder_spi
                    169:         */
                    170:        uint64_t (*get_responder_spi) (ike_header_t *this);
                    171: 
                    172:        /**
                    173:         * Set the responder spi.
                    174:         *
                    175:         * @param responder_spi responder_spi
                    176:         */
                    177:        void (*set_responder_spi) (ike_header_t *this, uint64_t responder_spi);
                    178: 
                    179:        /**
                    180:         * Get the major version.
                    181:         *
                    182:         * @return                              major version
                    183:         */
                    184:        uint8_t (*get_maj_version) (ike_header_t *this);
                    185: 
                    186:        /**
                    187:         * Set the major version.
                    188:         *
                    189:         * @param major                 major version
                    190:         */
                    191:        void (*set_maj_version) (ike_header_t *this, uint8_t major);
                    192: 
                    193:        /**
                    194:         * Get the minor version.
                    195:         *
                    196:         * @return                              minor version
                    197:         */
                    198:        uint8_t (*get_min_version) (ike_header_t *this);
                    199: 
                    200:        /**
                    201:         * Set the minor version.
                    202:         *
                    203:         * @param minor                 minor version
                    204:         */
                    205:        void (*set_min_version) (ike_header_t *this, uint8_t minor);
                    206: 
                    207:        /**
                    208:         * Get the response flag.
                    209:         *
                    210:         * @return                              response flag
                    211:         */
                    212:        bool (*get_response_flag) (ike_header_t *this);
                    213: 
                    214:        /**
                    215:         * Set the response flag-
                    216:         *
                    217:         * @param response              response flag
                    218:         */
                    219:        void (*set_response_flag) (ike_header_t *this, bool response);
                    220: 
                    221:        /**
                    222:         * Get "higher version supported"-flag.
                    223:         *
                    224:         * @return                              version flag
                    225:         */
                    226:        bool (*get_version_flag) (ike_header_t *this);
                    227: 
                    228:        /**
                    229:         * Set the "higher version supported"-flag.
                    230:         *
                    231:         * @param version               flag value
                    232:         */
                    233:        void (*set_version_flag)(ike_header_t *this, bool version);
                    234: 
                    235:        /**
                    236:         * Get the initiator flag.
                    237:         *
                    238:         * @return                              initiator flag
                    239:         */
                    240:        bool (*get_initiator_flag) (ike_header_t *this);
                    241: 
                    242:        /**
                    243:         * Set the initiator flag.
                    244:         *
                    245:         * @param initiator             initiator flag
                    246:         */
                    247:        void (*set_initiator_flag) (ike_header_t *this, bool initiator);
                    248: 
                    249:        /**
                    250:         * Get the encryption flag.
                    251:         *
                    252:         * @return                              encryption flag
                    253:         */
                    254:        bool (*get_encryption_flag) (ike_header_t *this);
                    255: 
                    256:        /**
                    257:         * Set the encryption flag.
                    258:         *
                    259:         * @param encryption            encryption flag
                    260:         */
                    261:        void (*set_encryption_flag) (ike_header_t *this, bool encryption);
                    262: 
                    263:        /**
                    264:         * Get the commit flag.
                    265:         *
                    266:         * @return                              commit flag
                    267:         */
                    268:        bool (*get_commit_flag) (ike_header_t *this);
                    269: 
                    270:        /**
                    271:         * Set the commit flag.
                    272:         *
                    273:         * @param commit                commit flag
                    274:         */
                    275:        void (*set_commit_flag) (ike_header_t *this, bool commit);
                    276: 
                    277:        /**
                    278:         * Get the authentication only flag.
                    279:         *
                    280:         * @return                              authonly flag
                    281:         */
                    282:        bool (*get_authonly_flag) (ike_header_t *this);
                    283: 
                    284:        /**
                    285:         * Set the authentication only flag.
                    286:         *
                    287:         * @param authonly              authonly flag
                    288:         */
                    289:        void (*set_authonly_flag) (ike_header_t *this, bool authonly);
                    290: 
                    291:        /**
                    292:         * Get the exchange type.
                    293:         *
                    294:         * @return                              exchange type
                    295:         */
                    296:        uint8_t (*get_exchange_type) (ike_header_t *this);
                    297: 
                    298:        /**
                    299:         * Set the  exchange type.
                    300:         *
                    301:         * @param exchange_type exchange type
                    302:         */
                    303:        void (*set_exchange_type) (ike_header_t *this, uint8_t exchange_type);
                    304: 
                    305:        /**
                    306:         * Get the message id.
                    307:         *
                    308:         * @return                              message id
                    309:         */
                    310:        uint32_t (*get_message_id) (ike_header_t *this);
                    311: 
                    312:        /**
                    313:         * Set the message id.
                    314:         *
                    315:         * @param initiator_spi message id
                    316:         */
                    317:        void (*set_message_id) (ike_header_t *this, uint32_t message_id);
                    318: 
                    319:        /**
                    320:         * Destroys a ike_header_t object.
                    321:         */
                    322:        void (*destroy) (ike_header_t *this);
                    323: };
                    324: 
                    325: /**
                    326:  * Create an empty ike_header_t object.
                    327:  *
                    328:  * @return ike_header_t object
                    329:  */
                    330: ike_header_t *ike_header_create(void);
                    331: 
                    332: /**
                    333:  * Create an ike_header_t object for a specific major/minor version
                    334:  *
                    335:  * @return ike_header_t object
                    336:  */
                    337: ike_header_t *ike_header_create_version(int major, int minor);
                    338: 
                    339: #endif /** IKE_HEADER_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>