summaryrefslogtreecommitdiff
path: root/src/libcharon/kernel
diff options
context:
space:
mode:
authorYves-Alexis Perez <corsac@corsac.net>2017-04-01 16:26:44 +0200
committerYves-Alexis Perez <corsac@corsac.net>2017-04-01 16:26:44 +0200
commit05ddd767992d68bb38c7f16ece142e8c2e9ae016 (patch)
tree302c618be306d4ed3c7f9fc58a1f6aaad4dd252f /src/libcharon/kernel
parent25663e04c3ab01ef8dc9f906608282319cfea2db (diff)
downloadvyos-strongswan-05ddd767992d68bb38c7f16ece142e8c2e9ae016.tar.gz
vyos-strongswan-05ddd767992d68bb38c7f16ece142e8c2e9ae016.zip
New upstream version 5.5.2
Diffstat (limited to 'src/libcharon/kernel')
-rw-r--r--src/libcharon/kernel/kernel_interface.c11
-rw-r--r--src/libcharon/kernel/kernel_interface.h17
-rw-r--r--src/libcharon/kernel/kernel_net.h11
3 files changed, 39 insertions, 0 deletions
diff --git a/src/libcharon/kernel/kernel_interface.c b/src/libcharon/kernel/kernel_interface.c
index 7b39a020c..ea5af9eb8 100644
--- a/src/libcharon/kernel/kernel_interface.c
+++ b/src/libcharon/kernel/kernel_interface.c
@@ -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,
diff --git a/src/libcharon/kernel/kernel_interface.h b/src/libcharon/kernel/kernel_interface.h
index 225b40932..d601ebd4e 100644
--- a/src/libcharon/kernel/kernel_interface.h
+++ b/src/libcharon/kernel/kernel_interface.h
@@ -57,6 +57,12 @@ typedef enum kernel_feature_t kernel_feature_t;
#include <kernel/kernel_net.h>
/**
+ * Default range for SPIs requested from kernels
+ */
+#define KERNEL_SPI_MIN 0xc0000000
+#define KERNEL_SPI_MAX 0xcfffffff
+
+/**
* Bitfield of optional features a kernel backend supports.
*
* This feature-set is for both, kernel_ipsec_t and kernel_net_t. Each
@@ -316,6 +322,17 @@ struct kernel_interface_t {
kernel_address_type_t which);
/**
+ * Creates an enumerator over all local subnets.
+ *
+ * Local subnets are subnets the host is directly connected to.
+ *
+ * The enumerator returns the network, subnet mask and interface.
+ *
+ * @return enumerator over host_t*, uint8_t, char*
+ */
+ enumerator_t *(*create_local_subnet_enumerator)(kernel_interface_t *this);
+
+ /**
* Add a virtual IP to an interface.
*
* Virtual IPs are attached to an interface. If an IP is added multiple
diff --git a/src/libcharon/kernel/kernel_net.h b/src/libcharon/kernel/kernel_net.h
index 1d78d6edd..12475b123 100644
--- a/src/libcharon/kernel/kernel_net.h
+++ b/src/libcharon/kernel/kernel_net.h
@@ -119,6 +119,17 @@ struct kernel_net_t {
kernel_address_type_t which);
/**
+ * Creates an enumerator over all local subnets.
+ *
+ * Local subnets are subnets the host is directly connected to.
+ *
+ * The enumerator returns the network, subnet mask and interface.
+ *
+ * @return enumerator over host_t*, uint8_t, char*
+ */
+ enumerator_t *(*create_local_subnet_enumerator)(kernel_net_t *this);
+
+ /**
* Add a virtual IP to an interface.
*
* Virtual IPs are attached to an interface. If an IP is added multiple