aboutsummaryrefslogtreecommitdiffstats
path: root/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2013-07-10 12:21:58 +0200
committerTobias Brunner <tobias@strongswan.org>2013-07-17 17:45:18 +0200
commit8afd0f05e34a5443ae2bda631a18b9b0c5a747d4 (patch)
treeb8b2401f7a22b19479d7b1406bb23de5a49e2c17 /src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
parent0745f846d0b5dac637938e63f0722ec20fdee1a3 (diff)
downloadstrongswan-8afd0f05e34a5443ae2bda631a18b9b0c5a747d4.tar.bz2
strongswan-8afd0f05e34a5443ae2bda631a18b9b0c5a747d4.tar.xz
kernel-pfkey: Provide interface name when installing exclude route
Diffstat (limited to 'src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c')
-rw-r--r--src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c b/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
index 86853e658..fb90f5b21 100644
--- a/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
+++ b/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
@@ -1993,10 +1993,14 @@ static void add_exclude_route(private_kernel_pfkey_ipsec_t *this,
dst, NULL);
if (gtw)
{
- if (hydra->kernel_interface->add_route(hydra->kernel_interface,
+ char *if_name = NULL;
+
+ if (hydra->kernel_interface->get_interface(
+ hydra->kernel_interface, src, &if_name) &&
+ hydra->kernel_interface->add_route(hydra->kernel_interface,
dst->get_address(dst),
dst->get_family(dst) == AF_INET ? 32 : 128,
- gtw, src, NULL) == SUCCESS)
+ gtw, src, if_name) == SUCCESS)
{
INIT(exclude,
.dst = dst->clone(dst),
@@ -2012,6 +2016,7 @@ static void add_exclude_route(private_kernel_pfkey_ipsec_t *this,
DBG1(DBG_KNL, "installing exclude route for %H failed", dst);
}
gtw->destroy(gtw);
+ free(if_name);
}
else
{
@@ -2050,18 +2055,24 @@ static void remove_exclude_route(private_kernel_pfkey_ipsec_t *this,
if (removed)
{
+ char *if_name = NULL;
+
dst = route->exclude->dst;
DBG2(DBG_KNL, "uninstalling exclude route for %H src %H",
dst, route->exclude->src);
- if (hydra->kernel_interface->del_route(hydra->kernel_interface,
+ if (hydra->kernel_interface->get_interface(
+ hydra->kernel_interface,
+ route->exclude->src, &if_name) &&
+ hydra->kernel_interface->del_route(hydra->kernel_interface,
dst->get_address(dst),
dst->get_family(dst) == AF_INET ? 32 : 128,
route->exclude->gtw, route->exclude->src,
- NULL) != SUCCESS)
+ if_name) != SUCCESS)
{
DBG1(DBG_KNL, "uninstalling exclude route for %H failed", dst);
}
exclude_route_destroy(route->exclude);
+ free(if_name);
}
route->exclude = NULL;
}