diff options
author | Martin Willi <martin@revosec.ch> | 2013-04-19 14:52:29 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2013-05-06 16:10:13 +0200 |
commit | 1a2a8bffedd633dbfd8ed7fe6ff28218cd535497 (patch) | |
tree | 830a26733a4da01f1a0d4dc3039e47716fd6708e /src/libhydra/plugins/kernel_netlink | |
parent | 5f7f8c92cab171a0bfe20dfcea076642bedd52b0 (diff) | |
download | strongswan-1a2a8bffedd633dbfd8ed7fe6ff28218cd535497.tar.bz2 strongswan-1a2a8bffedd633dbfd8ed7fe6ff28218cd535497.tar.xz |
kernel-interface: support enumeration of virtual-only IPs
Diffstat (limited to 'src/libhydra/plugins/kernel_netlink')
-rw-r--r-- | src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c index 739a1f407..d4cb4e1ac 100644 --- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c +++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c @@ -1165,6 +1165,10 @@ static bool filter_addresses(address_enumerator_t *data, { /* skip virtual interfaces added by us */ return FALSE; } + if (!(data->which & ADDR_TYPE_REGULAR) && !(*in)->refcount) + { /* address is regular, but not requested */ + return FALSE; + } if ((*in)->scope >= RT_SCOPE_LINK) { /* skip addresses with a unusable scope */ return FALSE; @@ -1209,9 +1213,12 @@ static bool filter_interfaces(address_enumerator_t *data, iface_entry_t** in, METHOD(kernel_net_t, create_address_enumerator, enumerator_t*, private_kernel_netlink_net_t *this, kernel_address_type_t which) { - address_enumerator_t *data = malloc_thing(address_enumerator_t); - data->this = this; - data->which = which; + address_enumerator_t *data; + + INIT(data, + .this = this, + .which = which, + ); this->lock->read_lock(this->lock); return enumerator_create_nested( |