]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
kernel-utun: Add a globally accessible enumerator for known utun devices
authorMartin Willi <martin@revosec.ch>
Fri, 12 Apr 2013 11:12:02 +0000 (13:12 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 18 Apr 2013 12:43:56 +0000 (14:43 +0200)
src/libhydra/plugins/kernel_utun/kernel_utun_net.c
src/libhydra/plugins/kernel_utun/kernel_utun_net.h

index e122eab275cec660a723286fcbf42b6a1eb4e23a..f10670e75acfd192ed0c49f256e4689077d9b8b2 100644 (file)
@@ -184,14 +184,21 @@ METHOD(kernel_net_t, del_route, status_t,
        return FAILED;
 }
 
+/**
+ * Globally referencable instance of kernek_utun_net instance
+ */
+static private_kernel_utun_net_t *singleton;
+
 METHOD(kernel_net_t, destroy, void,
        private_kernel_utun_net_t *this)
 {
+       singleton = NULL;
        this->tuns->destroy_offset(this->tuns, offsetof(tun_device_t, destroy));
        this->mutex->destroy(this->mutex);
        free(this);
 }
 
+
 /*
  * Described in header.
  */
@@ -217,5 +224,21 @@ kernel_utun_net_t *kernel_utun_net_create()
                .tuns = linked_list_create(),
        );
 
+       singleton = this;
        return &this->public;
 }
+
+/**
+ * See header.
+ */
+enumerator_t *kernel_utun_create_enumerator()
+{
+       if (singleton)
+       {
+               singleton->mutex->lock(singleton->mutex);
+               return enumerator_create_cleaner(
+                                       singleton->tuns->create_enumerator(singleton->tuns),
+                                       (void*)singleton->mutex->unlock, singleton->mutex);
+       }
+       return enumerator_create_empty();
+}
index 2bc2f9bd937e45403e991b711219897f9ee237f2..b26912c8d90fb179a518781e6f29abcd9a2a9a2f 100644 (file)
@@ -43,4 +43,11 @@ struct kernel_utun_net_t {
  */
 kernel_utun_net_t *kernel_utun_net_create();
 
+/**
+ * Create an enumerator over all known utun interfaces.
+ *
+ * @return                     enumerator over tun_device_t
+ */
+enumerator_t *kernel_utun_create_enumerator();
+
 #endif /** KERNEL_UTUN_NET_H_ @}*/