add priority management for kernel policy
[strongswan.git] / src / charon / sa / ike_sa_manager.h
index f327be0..db2efe5 100644 (file)
@@ -69,18 +69,22 @@ struct ike_sa_manager_t {
        ike_sa_t* (*checkout) (ike_sa_manager_t* this, ike_sa_id_t *sa_id);
        
        /**
-        * @brief Checkout an IKE_SA by two identifications.
+        * @brief Checkout an existing IKE_SA by hosts and identifications.
         *
-        * Allows the lookup of an IKE_SA by two user IDs. It returns the
-        * first found occurence, if there are multiple canddates. Supplied IDs
-        * may contain wildcards. If no IKE_SA is found, a new one is created.
+        * Allows the lookup of an IKE_SA by user IDs and hosts. It returns the
+        * first found occurence, if there are multiple candidates. Supplied IDs
+        * may contain wildcards, hosts may be %any. 
+        * If no IKE_SA is found, a new one is created.
         *
         * @param this                          the manager object
+        * @param my_host                       address of our host
+        * @param other_id                      address of remote host
         * @param my_id                         ID used by us
-        * @param other_id                      ID used by other
+        * @param other_id                      ID used by remote
         * @return                                      checked out/created IKE_SA
         */
-       ike_sa_t* (*checkout_by_ids) (ike_sa_manager_t* this,
+       ike_sa_t* (*checkout_by_id) (ike_sa_manager_t* this,
+                                                                 host_t *my_host, host_t* other_host,
                                                                  identification_t *my_id, 
                                                                  identification_t *other_id);
        
@@ -113,15 +117,6 @@ struct ike_sa_manager_t {
        linked_list_t *(*get_ike_sa_list) (ike_sa_manager_t* this);
        
        /**
-        * @brief Get a list of all IKE_SA SAs currently set up specified
-        * by the connections name.
-        * 
-        * @param this                          the manager object
-        * @return                                      a list with ike_sa_id_t s
-        */
-       linked_list_t *(*get_ike_sa_list_by_name) (ike_sa_manager_t* this, const char *name);
-       
-       /**
         * @brief Log the status of the IKE_SA's in the manager.
         *
         * A informational log is done to the supplied logger. If logger is 
@@ -168,6 +163,29 @@ struct ike_sa_manager_t {
        status_t (*delete) (ike_sa_manager_t* this, ike_sa_id_t *ike_sa_id);
        
        /**
+        * @brief Delete a SA identified by its name, which was not checked out.
+        *
+        * Using delete_by_name allows the delete of IKE_SAs and CHILD_SAs.
+        * The supplied name may have one of the following format:
+        *
+        * name{x}              => delete IKE_SA with "name" and unique id "x"
+        * name{}               => delete all IKE_SAs with "name"
+        * name[x]              => delete CHILD_SA with "name" and unique id "x"
+        * name[]               => delete all CHILD_SAs with "name"
+        * name                 => delete all CHILD_SAs or IKE_SAs with "name"
+        *
+        * @warning do not use this when the SA is already checked out, this will
+        * deadlock!
+        *
+        * @param this                          the manager object
+        * @param name                          name in one of the format described above
+        * @returns                             
+        *                                                      - SUCCESS if found
+        *                                                      - NOT_FOUND when no such SA is available
+        */
+       status_t (*delete_by_name) (ike_sa_manager_t* this, char *name);
+       
+       /**
         * @brief Destroy a checked out SA.
         *
         * The IKE SA is destroyed without notification of the remote peer.