Support multiple virtual IPs on peer_cfg and ike_sa classes
[strongswan.git] / src / libcharon / sa / ike_sa.h
index 0644bab..d2a394b 100644 (file)
@@ -43,6 +43,7 @@ typedef struct ike_sa_t ike_sa_t;
 #include <config/peer_cfg.h>
 #include <config/ike_cfg.h>
 #include <credentials/auth_cfg.h>
+#include <utils/packet.h>
 
 /**
  * Timeout in seconds after that a half open IKE_SA gets deleted.
@@ -113,6 +114,11 @@ enum ike_extension_t {
         * peer supports DPD detection, RFC 3706 (or IKEv2)
         */
        EXT_DPD = (1<<8),
+
+       /**
+        * peer supports Cisco Unity configuration attributes
+        */
+       EXT_CISCO_UNITY = (1<<9),
 };
 
 /**
@@ -695,6 +701,15 @@ struct ike_sa_t {
                                                  traffic_selector_t *tsr);
 
        /**
+        * Retry initiation of this IKE_SA after it got deferred previously.
+        *
+        * @return
+        *                                              - SUCCESS if initiation deferred or started
+        *                                              - DESTROY_ME if initiation failed
+        */
+       status_t (*retry_initiate) (ike_sa_t *this);
+
+       /**
         * Initiates the deletion of an IKE_SA.
         *
         * Sends a delete message to the remote peer and waits for
@@ -916,7 +931,7 @@ struct ike_sa_t {
        status_t (*set_auth_lifetime)(ike_sa_t *this, u_int32_t lifetime);
 
        /**
-        * Set the virtual IP to use for this IKE_SA and its children.
+        * Add a virtual IP to use for this IKE_SA and its children.
         *
         * The virtual IP is assigned per IKE_SA, not per CHILD_SA. It has the same
         * lifetime as the IKE_SA.
@@ -924,15 +939,15 @@ struct ike_sa_t {
         * @param local                 TRUE to set local address, FALSE for remote
         * @param ip                    IP to set as virtual IP
         */
-       void (*set_virtual_ip) (ike_sa_t *this, bool local, host_t *ip);
+       void (*add_virtual_ip) (ike_sa_t *this, bool local, host_t *ip);
 
        /**
-        * Get the virtual IP configured.
+        * Create an enumerator over virtual IPs.
         *
         * @param local                 TRUE to get local virtual IP, FALSE for remote
-        * @return                              host_t *virtual IP
+        * @return                              enumerator over host_t*
         */
-       host_t* (*get_virtual_ip) (ike_sa_t *this, bool local);
+       enumerator_t* (*create_virtual_ip_enumerator) (ike_sa_t *this, bool local);
 
        /**
         * Register a configuration attribute to the IKE_SA.
@@ -969,6 +984,13 @@ struct ike_sa_t {
        enumerator_t* (*create_task_enumerator)(ike_sa_t *this, task_queue_t queue);
 
        /**
+        * Flush a task queue, cancelling all tasks in it.
+        *
+        * @param queue                 queue type to flush
+        */
+       void (*flush_queue)(ike_sa_t *this, task_queue_t queue);
+
+       /**
         * Queue a task for initiaton to the task manager.
         *
         * @param task                  task to queue