aboutsummaryrefslogtreecommitdiffstats
path: root/src/libhydra/plugins
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-11-12 17:12:18 +0100
committerTobias Brunner <tobias@strongswan.org>2012-11-13 09:06:02 +0100
commit5be88ca6bb0f53d53b40aba34ec3eba178df6f0c (patch)
treedf8cfd1ed98cfa4d166300fa58a6d1cd110da4ac /src/libhydra/plugins
parentf94d32dba96c64359a9f3612480425d9398a45a0 (diff)
downloadstrongswan-5be88ca6bb0f53d53b40aba34ec3eba178df6f0c.tar.bz2
strongswan-5be88ca6bb0f53d53b40aba34ec3eba178df6f0c.tar.xz
Don't call get_route recursively if a route's gateway matches the destination
Diffstat (limited to 'src/libhydra/plugins')
-rw-r--r--src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
index 8b8ab2121..79ab35ca0 100644
--- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
+++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
@@ -1557,8 +1557,11 @@ static host_t *get_route(private_kernel_netlink_net_t *this, host_t *dest,
host_t *gtw;
gtw = host_create_from_chunk(msg->rtm_family, route->gtw, 0);
- route->src_host = get_route(this, gtw, FALSE, candidate);
- gtw->destroy(gtw);
+ if (gtw && !gtw->ip_equals(gtw, dest))
+ {
+ route->src_host = get_route(this, gtw, FALSE, candidate);
+ }
+ DESTROY_IF(gtw);
if (route->src_host)
{ /* more of the same */
if (!candidate ||