Annotation of embedaddon/strongswan/src/libcharon/sa/task.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2007-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: /**
                     18:  * @defgroup task task
                     19:  * @{ @ingroup sa
                     20:  */
                     21: 
                     22: #ifndef TASK_H_
                     23: #define TASK_H_
                     24: 
                     25: #include <utils/utils.h>
                     26: 
                     27: typedef enum task_type_t task_type_t;
                     28: typedef struct task_t task_t;
                     29: 
                     30: #include <library.h>
                     31: #include <sa/ike_sa.h>
                     32: #include <encoding/message.h>
                     33: 
                     34: /**
                     35:  * Different kinds of tasks.
                     36:  */
                     37: enum task_type_t {
                     38:        /** establish an unauthenticated IKE_SA */
                     39:        TASK_IKE_INIT,
                     40:        /** detect NAT situation */
                     41:        TASK_IKE_NATD,
                     42:        /** handle MOBIKE stuff */
                     43:        TASK_IKE_MOBIKE,
                     44:        /** authenticate the initiated IKE_SA */
                     45:        TASK_IKE_AUTH,
                     46:        /** AUTH_LIFETIME negotiation, RFC4478 */
                     47:        TASK_IKE_AUTH_LIFETIME,
                     48:        /** certificate processing before authentication (certreqs, cert parsing) */
                     49:        TASK_IKE_CERT_PRE,
                     50:        /** certificate processing after authentication (certs payload generation) */
                     51:        TASK_IKE_CERT_POST,
                     52:        /** Configuration payloads, virtual IP and such */
                     53:        TASK_IKE_CONFIG,
                     54:        /** rekey an IKE_SA */
                     55:        TASK_IKE_REKEY,
                     56:        /** reestablish a complete IKE_SA, break-before-make */
                     57:        TASK_IKE_REAUTH,
                     58:        /** completion task for make-before-break IKE_SA re-authentication */
                     59:        TASK_IKE_REAUTH_COMPLETE,
                     60:        /** redirect an active IKE_SA */
                     61:        TASK_IKE_REDIRECT,
                     62:        /** verify a peer's certificate */
                     63:        TASK_IKE_VERIFY_PEER_CERT,
                     64:        /** synchronize message IDs, RFC6311 */
                     65:        TASK_IKE_MID_SYNC,
                     66:        /** delete an IKE_SA */
                     67:        TASK_IKE_DELETE,
                     68:        /** liveness check */
                     69:        TASK_IKE_DPD,
                     70:        /** Vendor ID processing */
                     71:        TASK_IKE_VENDOR,
                     72: #ifdef ME
                     73:        /** handle ME stuff */
                     74:        TASK_IKE_ME,
                     75: #endif /* ME */
                     76:        /** establish a CHILD_SA within an IKE_SA */
                     77:        TASK_CHILD_CREATE,
                     78:        /** delete an established CHILD_SA */
                     79:        TASK_CHILD_DELETE,
                     80:        /** rekey a CHILD_SA */
                     81:        TASK_CHILD_REKEY,
                     82:        /** IKEv1 main mode */
                     83:        TASK_MAIN_MODE,
                     84:        /** IKEv1 aggressive mode */
                     85:        TASK_AGGRESSIVE_MODE,
                     86:        /** IKEv1 informational exchange */
                     87:        TASK_INFORMATIONAL,
                     88:        /** IKEv1 delete using an informational */
                     89:        TASK_ISAKMP_DELETE,
                     90:        /** IKEv1 XAUTH authentication */
                     91:        TASK_XAUTH,
                     92:        /** IKEv1 Mode Config */
                     93:        TASK_MODE_CONFIG,
                     94:        /** IKEv1 quick mode */
                     95:        TASK_QUICK_MODE,
                     96:        /** IKEv1 delete of a quick mode SA */
                     97:        TASK_QUICK_DELETE,
                     98:        /** IKEv1 vendor ID payload handling */
                     99:        TASK_ISAKMP_VENDOR,
                    100:        /** IKEv1 NAT detection */
                    101:        TASK_ISAKMP_NATD,
                    102:        /** IKEv1 DPD */
                    103:        TASK_ISAKMP_DPD,
                    104:        /** IKEv1 pre-authentication certificate handling */
                    105:        TASK_ISAKMP_CERT_PRE,
                    106:        /** IKEv1 post-authentication certificate handling */
                    107:        TASK_ISAKMP_CERT_POST,
                    108: };
                    109: 
                    110: /**
                    111:  * enum names for task_type_t.
                    112:  */
                    113: extern enum_name_t *task_type_names;
                    114: 
                    115: /**
                    116:  * Interface for a task, an operation handled within exchanges.
                    117:  *
                    118:  * A task is an elementary operation. It may be handled by a single or by
                    119:  * multiple exchanges. An exchange may even complete multiple tasks.
                    120:  * A task has a build() and an process() operation. The build() operation
                    121:  * creates payloads and adds it to the message. The process() operation
                    122:  * inspects a message and handles its payloads. An initiator of an exchange
                    123:  * first calls build() to build the request, and processes the response message
                    124:  * with the process() method.
                    125:  * A responder does the opposite; it calls process() first to handle an incoming
                    126:  * request and secondly calls build() to build an appropriate response.
                    127:  * Both methods return either SUCCESS, NEED_MORE or FAILED. A SUCCESS indicates
                    128:  * that the task completed, even when the task completed unsuccessfully. The
                    129:  * manager then removes the task from the list. A NEED_MORE is returned when
                    130:  * the task needs further build()/process() calls to complete, the manager
                    131:  * leaves the task in the queue. A returned FAILED indicates a critical failure.
                    132:  * The manager closes the IKE_SA whenever a task returns FAILED.
                    133:  */
                    134: struct task_t {
                    135: 
                    136:        /**
                    137:         * Build a request or response message for this task.
                    138:         *
                    139:         * @param message               message to add payloads to
                    140:         * @return
                    141:         *                                              - FAILED if a critical error occurred
                    142:         *                                              - DESTROY_ME if IKE_SA has been properly deleted
                    143:         *                                              - NEED_MORE if another call to build/process needed
                    144:         *                                              - ALREADY_DONE to cancel task processing
                    145:         *                                              - SUCCESS if task completed
                    146:         */
                    147:        status_t (*build) (task_t *this, message_t *message);
                    148: 
                    149:        /**
                    150:         * Process a request or response message for this task.
                    151:         *
                    152:         * @param message               message to read payloads from
                    153:         * @return
                    154:         *                                              - FAILED if a critical error occurred
                    155:         *                                              - DESTROY_ME if IKE_SA has been properly deleted
                    156:         *                                              - NEED_MORE if another call to build/process needed
                    157:         *                                              - ALREADY_DONE to cancel task processing
                    158:         *                                              - SUCCESS if task completed
                    159:         */
                    160:        status_t (*process) (task_t *this, message_t *message);
                    161: 
                    162:        /**
                    163:         * Verify a message before processing it (optional to implement by tasks).
                    164:         *
                    165:         * @param message               message to verify
                    166:         * @return
                    167:         *                                              - FAILED if verification is not successful, the
                    168:         *                                                message will be silently discarded
                    169:         *                                              - DESTROY_ME if IKE_SA has to be destroyed
                    170:         *                                              - SUCCESS if verification is successful
                    171:         */
                    172:        status_t (*pre_process) (task_t *this, message_t *message);
                    173: 
                    174:        /**
                    175:         * Get the type of the task implementation.
                    176:         */
                    177:        task_type_t (*get_type) (task_t *this);
                    178: 
                    179:        /**
                    180:         * Migrate a task to a new IKE_SA.
                    181:         *
                    182:         * After migrating a task, it goes back to a state where it can be
                    183:         * used again to initiate an exchange. This is useful when a task
                    184:         * has to get migrated to a new IKE_SA.
                    185:         * A special usage is when a INVALID_KE_PAYLOAD is received. A call
                    186:         * to reset resets the task, but uses another DH group for the next
                    187:         * try.
                    188:         * The ike_sa is the new IKE_SA this task belongs to and operates on.
                    189:         *
                    190:         * @param ike_sa                new IKE_SA this task works for
                    191:         */
                    192:        void (*migrate) (task_t *this, ike_sa_t *ike_sa);
                    193: 
                    194:        /**
                    195:         * Destroys a task_t object.
                    196:         */
                    197:        void (*destroy) (task_t *this);
                    198: };
                    199: 
                    200: #endif /** TASK_H_ @}*/

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