aboutsummaryrefslogtreecommitdiffstats
path: root/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2012-09-14 15:03:09 +0200
committerTobias Brunner <tobias@strongswan.org>2012-09-21 18:16:26 +0200
commitaed33805ce92a1d075971734357a111637488a2a (patch)
treee307cd607d2566d21559a43cac693180042c1d0d /src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
parent9513225e6b74ad506eb393a73b98ad604526d54e (diff)
downloadstrongswan-aed33805ce92a1d075971734357a111637488a2a.tar.bz2
strongswan-aed33805ce92a1d075971734357a111637488a2a.tar.xz
Don't ignore loopback devices and allow addresses on them being enumerated
Diffstat (limited to 'src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c')
-rw-r--r--src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
index ecd265d06..52671a205 100644
--- a/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
+++ b/src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c
@@ -589,10 +589,6 @@ static void process_link(private_kernel_netlink_net_t *this,
{
case RTM_NEWLINK:
{
- if (msg->ifi_flags & IFF_LOOPBACK)
- { /* ignore loopback interfaces */
- break;
- }
enumerator = this->ifaces->create_enumerator(this->ifaces);
while (enumerator->enumerate(enumerator, &current))
{
@@ -924,6 +920,8 @@ typedef struct {
bool include_down_ifaces;
/** whether to enumerate virtual ip addresses */
bool include_virtual_ips;
+ /** whether to enumerate loopback interfaces */
+ bool include_loopback;
} address_enumerator_t;
/**
@@ -970,6 +968,10 @@ static enumerator_t *create_iface_enumerator(iface_entry_t *iface,
static bool filter_interfaces(address_enumerator_t *data, iface_entry_t** in,
iface_entry_t** out)
{
+ if (!data->include_loopback && ((*in)->flags & IFF_LOOPBACK))
+ { /* ignore loopback devices */
+ return FALSE;
+ }
if (!data->include_down_ifaces && !((*in)->flags & IFF_UP))
{ /* skip interfaces not up */
return FALSE;
@@ -980,12 +982,13 @@ 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,
- bool include_down_ifaces, bool include_virtual_ips)
+ bool include_down_ifaces, bool include_virtual_ips, bool include_loopback)
{
address_enumerator_t *data = malloc_thing(address_enumerator_t);
data->this = this;
data->include_down_ifaces = include_down_ifaces;
data->include_virtual_ips = include_virtual_ips;
+ data->include_loopback = include_loopback;
this->mutex->lock(this->mutex);
return enumerator_create_nested(