aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2011-11-04 10:03:48 +0100
committerTobias Brunner <tobias@strongswan.org>2011-11-04 11:11:17 +0100
commit051226d5c0ac2464d8cd9ed0213c26bf69d6b031 (patch)
tree6da8654440133b5d10184b93be27636303fddd29 /src
parent25d59e9e2dabdd69a6a10111c42cc44ad6c1118f (diff)
downloadstrongswan-051226d5c0ac2464d8cd9ed0213c26bf69d6b031.tar.bz2
strongswan-051226d5c0ac2464d8cd9ed0213c26bf69d6b031.tar.xz
Silently install route again, even if it did not change.
Address/interface changes can cause the route to disappear. Afterwards the route might look the same but that does not mean it is still installed.
Diffstat (limited to 'src')
-rw-r--r--src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c7
-rw-r--r--src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c7
2 files changed, 12 insertions, 2 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
index ff7b40d7b..649c560da 100644
--- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
+++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_ipsec.c
@@ -2154,7 +2154,12 @@ static status_t add_policy_internal(private_kernel_netlink_ipsec_t *this,
{
route_entry_t *old = policy->route;
if (route_entry_equals(old, route))
- { /* keep previously installed route */
+ { /* keep previously installed route. since it might have
+ * still been removed by an address change, we install it
+ * again but ignore the result */
+ hydra->kernel_interface->add_route(hydra->kernel_interface,
+ route->dst_net, route->prefixlen, route->gateway,
+ route->src_ip, route->if_name);
this->mutex->unlock(this->mutex);
route_entry_destroy(route);
return SUCCESS;
diff --git a/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c b/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
index d9327fc58..da10edffe 100644
--- a/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
+++ b/src/libhydra/plugins/kernel_pfkey/kernel_pfkey_ipsec.c
@@ -2016,7 +2016,12 @@ static status_t add_policy_internal(private_kernel_pfkey_ipsec_t *this,
{
route_entry_t *old = policy->route;
if (route_entry_equals(old, route))
- { /* keep previously installed route */
+ { /* keep previously installed route. since it might have
+ * still been removed by an address change, we install it
+ * again but ignore the result */
+ hydra->kernel_interface->add_route(hydra->kernel_interface,
+ route->dst_net, route->prefixlen, route->gateway,
+ route->src_ip, route->if_name);
this->mutex->unlock(this->mutex);
route_entry_destroy(route);
return SUCCESS;