aboutsummaryrefslogtreecommitdiffstats
path: root/src/libhydra/plugins/kernel_netlink
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-12-17 14:23:44 +0100
committerMartin Willi <martin@revosec.ch>2012-12-17 14:23:44 +0100
commit544c2e3d7b7c3f4557329c0675f986c3ad7f2b26 (patch)
tree0ca071e68df2883a05c7cff0996c094294d2022b /src/libhydra/plugins/kernel_netlink
parentd9d0f12222cf69dff0a2712410ca836be5786af7 (diff)
downloadstrongswan-544c2e3d7b7c3f4557329c0675f986c3ad7f2b26.tar.bz2
strongswan-544c2e3d7b7c3f4557329c0675f986c3ad7f2b26.tar.xz
kernel-netlinks get_interface() considers virtual IPs, too
When using load-tester, we can install tunnel outer addresses on demand. As these are installed as "virtual", we have to consider virtual IPs in the get_interface() lookup to install "real" virtual IPs to these dynamic external addresses.
Diffstat (limited to 'src/libhydra/plugins/kernel_netlink')
-rw-r--r--src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
index 23a354dba..e47887859 100644
--- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
+++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
@@ -1229,6 +1229,19 @@ METHOD(kernel_net_t, get_interface_name, bool,
this->lock->unlock(this->lock);
return TRUE;
}
+ /* in a second step, consider virtual IPs installed by us */
+ entry = this->vips->get_match(this->vips, &lookup,
+ (void*)addr_map_entry_match_up_and_usable);
+ if (entry)
+ {
+ if (name)
+ {
+ *name = strdup(entry->iface->ifname);
+ DBG2(DBG_KNL, "virtual %H is on interface %s", ip, *name);
+ }
+ this->lock->unlock(this->lock);
+ return TRUE;
+ }
/* maybe it is installed on an ignored interface */
entry = this->addrs->get_match(this->addrs, &lookup,
(void*)addr_map_entry_match_up);