]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
kernel-interface: Add method to enumerate locally attached subnets
authorTobias Brunner <tobias@strongswan.org>
Wed, 12 Oct 2016 07:24:49 +0000 (09:24 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 8 Feb 2017 09:38:28 +0000 (10:38 +0100)
src/libcharon/kernel/kernel_interface.c
src/libcharon/kernel/kernel_interface.h
src/libcharon/kernel/kernel_net.h

index 7b39a020c82ab1f4013b9304f7556e2c2a0bd5ae..ea5af9eb8a4f45f03a92b1db73adbcf05eb9f107 100644 (file)
@@ -554,6 +554,16 @@ METHOD(kernel_interface_t, create_address_enumerator, enumerator_t*,
        return this->net->create_address_enumerator(this->net, which);
 }
 
+METHOD(kernel_interface_t, create_local_subnet_enumerator, enumerator_t*,
+       private_kernel_interface_t *this)
+{
+       if (!this->net || !this->net->create_local_subnet_enumerator)
+       {
+               return enumerator_create_empty();
+       }
+       return this->net->create_local_subnet_enumerator(this->net);
+}
+
 METHOD(kernel_interface_t, add_ip, status_t,
        private_kernel_interface_t *this, host_t *virtual_ip, int prefix,
        char *iface)
@@ -1005,6 +1015,7 @@ kernel_interface_t *kernel_interface_create()
                        .get_nexthop = _get_nexthop,
                        .get_interface = _get_interface,
                        .create_address_enumerator = _create_address_enumerator,
+                       .create_local_subnet_enumerator = _create_local_subnet_enumerator,
                        .add_ip = _add_ip,
                        .del_ip = _del_ip,
                        .add_route = _add_route,
index 225b40932a3ea7f9ac004cd5628619ad9a3483d7..dca4babadd4cfd4ef78673f747561fbd93f474e5 100644 (file)
@@ -315,6 +315,15 @@ struct kernel_interface_t {
        enumerator_t *(*create_address_enumerator) (kernel_interface_t *this,
                                                                                                kernel_address_type_t which);
 
+       /**
+        * Creates an enumerator over all local subnets.
+        *
+        * Local subnets are subnets the host is directly connected to.
+        *
+        * @return                              enumerator over host_t*, uint8_t
+        */
+       enumerator_t *(*create_local_subnet_enumerator)(kernel_interface_t *this);
+
        /**
         * Add a virtual IP to an interface.
         *
index 1d78d6edd7691535057551cc3de4593c602dd838..a1ced362ce688f04f099bbffcd2e6023381374b3 100644 (file)
@@ -118,6 +118,15 @@ struct kernel_net_t {
        enumerator_t *(*create_address_enumerator) (kernel_net_t *this,
                                                                                                kernel_address_type_t which);
 
+       /**
+        * Creates an enumerator over all local subnets.
+        *
+        * Local subnets are subnets the host is directly connected to.
+        *
+        * @return                              enumerator over host_t*, uint8_t
+        */
+       enumerator_t *(*create_local_subnet_enumerator)(kernel_net_t *this);
+
        /**
         * Add a virtual IP to an interface.
         *