Added a get_count() method to IKE_SA manager
authorMartin Willi <martin@revosec.ch>
Thu, 5 May 2011 08:01:21 +0000 (10:01 +0200)
committerMartin Willi <martin@revosec.ch>
Mon, 16 May 2011 13:24:15 +0000 (15:24 +0200)
src/libcharon/sa/ike_sa_manager.c
src/libcharon/sa/ike_sa_manager.h

index 03ca454..7f3ca7d 100644 (file)
@@ -1556,14 +1556,30 @@ METHOD(ike_sa_manager_t, has_contact, bool,
        return found;
 }
 
-METHOD(ike_sa_manager_t, get_half_open_count, int,
+METHOD(ike_sa_manager_t, get_count, u_int,
+       private_ike_sa_manager_t *this)
+{
+       u_int segment, count = 0;
+       mutex_t *mutex;
+
+       for (segment = 0; segment < this->segment_count; segment++)
+       {
+               mutex = this->segments[segment & this->segment_mask].mutex;
+               mutex->lock(mutex);
+               count += this->segments[segment].count;
+               mutex->unlock(mutex);
+       }
+       return count;
+}
+
+METHOD(ike_sa_manager_t, get_half_open_count, u_int,
        private_ike_sa_manager_t *this, host_t *ip)
 {
        linked_list_t *list;
        u_int segment, row;
        rwlock_t *lock;
        chunk_t addr;
-       int count = 0;
+       u_int count = 0;
 
        if (ip)
        {
@@ -1745,6 +1761,7 @@ ike_sa_manager_t *ike_sa_manager_create()
                        .create_enumerator = _create_enumerator,
                        .checkin = _checkin,
                        .checkin_and_destroy = _checkin_and_destroy,
+                       .get_count = _get_count,
                        .get_half_open_count = _get_half_open_count,
                        .flush = _flush,
                        .destroy = _destroy,
index 315e235..5e542e7 100644 (file)
@@ -192,6 +192,13 @@ struct ike_sa_manager_t {
        void (*checkin_and_destroy) (ike_sa_manager_t* this, ike_sa_t *ike_sa);
 
        /**
+        * Get the number of IKE_SAs currently registered.
+        *
+        * @return                                      number of registered IKE_SAs
+        */
+       u_int (*get_count)(ike_sa_manager_t *this);
+
+       /**
         * Get the number of IKE_SAs which are in the connecting state.
         *
         * To prevent the server from resource exhaustion, cookies and other
@@ -204,7 +211,7 @@ struct ike_sa_manager_t {
         * @param ip                            NULL for all, IP for half open IKE_SAs with IP
         * @return                                      number of half open IKE_SAs
         */
-       int (*get_half_open_count) (ike_sa_manager_t *this, host_t *ip);
+       u_int (*get_half_open_count) (ike_sa_manager_t *this, host_t *ip);
 
        /**
         * Delete all existing IKE_SAs and destroy them immediately.