aboutsummaryrefslogtreecommitdiffstats
path: root/src/libhydra/kernel/kernel_interface.c
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2013-02-21 09:39:23 +0100
committerMartin Willi <martin@revosec.ch>2013-03-01 11:11:24 +0100
commit76f7d80e80c3217979e92548f7f93cdb96d9f6c5 (patch)
tree5ab2c971f6f74083bd07bcbf2fa8e7addb9bf728 /src/libhydra/kernel/kernel_interface.c
parentd830174e3c5d6fb0978384f43893ca9cfbe4e1e0 (diff)
downloadstrongswan-76f7d80e80c3217979e92548f7f93cdb96d9f6c5.tar.bz2
strongswan-76f7d80e80c3217979e92548f7f93cdb96d9f6c5.tar.xz
Introduce "features" for the kernel backends returning kernel capabilities
Diffstat (limited to 'src/libhydra/kernel/kernel_interface.c')
-rw-r--r--src/libhydra/kernel/kernel_interface.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/libhydra/kernel/kernel_interface.c b/src/libhydra/kernel/kernel_interface.c
index 8948e0561..b82fd6d3d 100644
--- a/src/libhydra/kernel/kernel_interface.c
+++ b/src/libhydra/kernel/kernel_interface.c
@@ -137,6 +137,22 @@ struct private_kernel_interface_t {
bool ifaces_exclude;
};
+METHOD(kernel_interface_t, get_features, kernel_feature_t,
+ private_kernel_interface_t *this)
+{
+ kernel_feature_t features = 0;
+
+ if (this->ipsec && this->ipsec->get_features)
+ {
+ features |= this->ipsec->get_features(this->ipsec);
+ }
+ if (this->net && this->net->get_features)
+ {
+ features |= this->net->get_features(this->net);
+ }
+ return features;
+}
+
METHOD(kernel_interface_t, get_spi, status_t,
private_kernel_interface_t *this, host_t *src, host_t *dst,
u_int8_t protocol, u_int32_t reqid, u_int32_t *spi)
@@ -682,6 +698,7 @@ kernel_interface_t *kernel_interface_create()
INIT(this,
.public = {
+ .get_features = _get_features,
.get_spi = _get_spi,
.get_cpi = _get_cpi,
.add_sa = _add_sa,
@@ -757,4 +774,3 @@ kernel_interface_t *kernel_interface_create()
return &this->public;
}
-