diff options
author | Tobias Brunner <tobias@strongswan.org> | 2012-09-14 15:03:09 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2012-09-21 18:16:26 +0200 |
commit | aed33805ce92a1d075971734357a111637488a2a (patch) | |
tree | e307cd607d2566d21559a43cac693180042c1d0d /src | |
parent | 9513225e6b74ad506eb393a73b98ad604526d54e (diff) | |
download | strongswan-aed33805ce92a1d075971734357a111637488a2a.tar.bz2 strongswan-aed33805ce92a1d075971734357a111637488a2a.tar.xz |
Don't ignore loopback devices and allow addresses on them being enumerated
Diffstat (limited to 'src')
-rw-r--r-- | src/libcharon/plugins/stroke/stroke_list.c | 2 | ||||
-rw-r--r-- | src/libcharon/plugins/tnc_ifmap/tnc_ifmap_listener.c | 6 | ||||
-rw-r--r-- | src/libcharon/sa/ikev2/tasks/ike_me.c | 2 | ||||
-rw-r--r-- | src/libcharon/sa/ikev2/tasks/ike_mobike.c | 2 | ||||
-rw-r--r-- | src/libcharon/sa/ikev2/tasks/ike_natd.c | 2 | ||||
-rw-r--r-- | src/libhydra/kernel/kernel_interface.c | 6 | ||||
-rw-r--r-- | src/libhydra/kernel/kernel_interface.h | 6 | ||||
-rw-r--r-- | src/libhydra/kernel/kernel_net.h | 8 | ||||
-rw-r--r-- | src/libhydra/plugins/kernel_netlink/kernel_netlink_net.c | 13 | ||||
-rw-r--r-- | src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c | 19 |
10 files changed, 35 insertions, 31 deletions
diff --git a/src/libcharon/plugins/stroke/stroke_list.c b/src/libcharon/plugins/stroke/stroke_list.c index 1381e5842..10254c865 100644 --- a/src/libcharon/plugins/stroke/stroke_list.c +++ b/src/libcharon/plugins/stroke/stroke_list.c @@ -517,7 +517,7 @@ METHOD(stroke_list_t, status, void, enumerator->destroy(enumerator); enumerator = hydra->kernel_interface->create_address_enumerator( - hydra->kernel_interface, FALSE, FALSE); + hydra->kernel_interface, FALSE, FALSE, FALSE); fprintf(out, "Listening IP addresses:\n"); while (enumerator->enumerate(enumerator, (void**)&host)) { diff --git a/src/libcharon/plugins/tnc_ifmap/tnc_ifmap_listener.c b/src/libcharon/plugins/tnc_ifmap/tnc_ifmap_listener.c index 4fd33696c..6902bcbf5 100644 --- a/src/libcharon/plugins/tnc_ifmap/tnc_ifmap_listener.c +++ b/src/libcharon/plugins/tnc_ifmap/tnc_ifmap_listener.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Andreas Steffen + * Copyright (C) 2011 Andreas Steffen * HSR Hochschule fuer Technik Rapperswil * * This program is free software; you can redistribute it and/or modify it @@ -49,7 +49,7 @@ static bool publish_device_ip_addresses(private_tnc_ifmap_listener_t *this) bool success = TRUE; enumerator = hydra->kernel_interface->create_address_enumerator( - hydra->kernel_interface, FALSE, FALSE); + hydra->kernel_interface, FALSE, FALSE, FALSE); while (enumerator->enumerate(enumerator, &host)) { if (!this->ifmap->publish_device_ip(this->ifmap, host)) @@ -87,7 +87,7 @@ static bool reload_metadata(private_tnc_ifmap_listener_t *this) } } enumerator->destroy(enumerator); - + return success; } diff --git a/src/libcharon/sa/ikev2/tasks/ike_me.c b/src/libcharon/sa/ikev2/tasks/ike_me.c index e19349971..779f5257e 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_me.c +++ b/src/libcharon/sa/ikev2/tasks/ike_me.c @@ -136,7 +136,7 @@ static void gather_and_add_endpoints(private_ike_me_t *this, message_t *message) port = host->get_port(host); enumerator = hydra->kernel_interface->create_address_enumerator( - hydra->kernel_interface, FALSE, FALSE); + hydra->kernel_interface, FALSE, FALSE, FALSE); while (enumerator->enumerate(enumerator, (void**)&addr)) { host = addr->clone(addr); diff --git a/src/libcharon/sa/ikev2/tasks/ike_mobike.c b/src/libcharon/sa/ikev2/tasks/ike_mobike.c index 8c30ed96c..285009f2c 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_mobike.c +++ b/src/libcharon/sa/ikev2/tasks/ike_mobike.c @@ -192,7 +192,7 @@ static void build_address_list(private_ike_mobike_t *this, message_t *message) me = this->ike_sa->get_my_host(this->ike_sa); enumerator = hydra->kernel_interface->create_address_enumerator( - hydra->kernel_interface, FALSE, FALSE); + hydra->kernel_interface, FALSE, FALSE, FALSE); while (enumerator->enumerate(enumerator, (void**)&host)) { if (me->ip_equals(me, host)) diff --git a/src/libcharon/sa/ikev2/tasks/ike_natd.c b/src/libcharon/sa/ikev2/tasks/ike_natd.c index b97b37290..dc8a000ec 100644 --- a/src/libcharon/sa/ikev2/tasks/ike_natd.c +++ b/src/libcharon/sa/ikev2/tasks/ike_natd.c @@ -341,7 +341,7 @@ METHOD(task_t, build_i, status_t, else { /* 3. */ enumerator = hydra->kernel_interface->create_address_enumerator( - hydra->kernel_interface, FALSE, FALSE); + hydra->kernel_interface, FALSE, FALSE, FALSE); while (enumerator->enumerate(enumerator, (void**)&host)) { /* apply port 500 to host, but work on a copy */ diff --git a/src/libhydra/kernel/kernel_interface.c b/src/libhydra/kernel/kernel_interface.c index cd162b75e..8e3f6a666 100644 --- a/src/libhydra/kernel/kernel_interface.c +++ b/src/libhydra/kernel/kernel_interface.c @@ -303,14 +303,14 @@ METHOD(kernel_interface_t, get_interface, char*, METHOD(kernel_interface_t, create_address_enumerator, enumerator_t*, private_kernel_interface_t *this, bool include_down_ifaces, - bool include_virtual_ips) + bool include_virtual_ips, bool include_loopback) { if (!this->net) { return enumerator_create_empty(); } return this->net->create_address_enumerator(this->net, include_down_ifaces, - include_virtual_ips); + include_virtual_ips, include_loopback); } METHOD(kernel_interface_t, add_ip, status_t, @@ -423,7 +423,7 @@ METHOD(kernel_interface_t, get_address_by_ts, status_t, } host->destroy(host); - addrs = create_address_enumerator(this, TRUE, TRUE); + addrs = create_address_enumerator(this, TRUE, TRUE, TRUE); while (addrs->enumerate(addrs, (void**)&host)) { if (ts->includes(ts, host)) diff --git a/src/libhydra/kernel/kernel_interface.h b/src/libhydra/kernel/kernel_interface.h index 72af397c8..5396dad99 100644 --- a/src/libhydra/kernel/kernel_interface.h +++ b/src/libhydra/kernel/kernel_interface.h @@ -320,11 +320,13 @@ struct kernel_interface_t { * The hosts are read-only, do not modify of free. * * @param include_down_ifaces TRUE to enumerate addresses from down interfaces - * @param include_virtual_ips TRUE to enumerate virtual ip addresses + * @param include_virtual_ips TRUE to enumerate virtual IP addresses + * @param include_loopback TRUE to enumerate addresses on loopback interfaces * @return enumerator over host_t's */ enumerator_t *(*create_address_enumerator) (kernel_interface_t *this, - bool include_down_ifaces, bool include_virtual_ips); + bool include_down_ifaces, bool include_virtual_ips, + bool include_loopback); /** * Add a virtual IP to an interface. diff --git a/src/libhydra/kernel/kernel_net.h b/src/libhydra/kernel/kernel_net.h index a9b6fba50..772ccacd5 100644 --- a/src/libhydra/kernel/kernel_net.h +++ b/src/libhydra/kernel/kernel_net.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Tobias Brunner + * Copyright (C) 2008-2012 Tobias Brunner * Copyright (C) 2007 Martin Willi * Hochschule fuer Technik Rapperswil * @@ -80,11 +80,13 @@ struct kernel_net_t { * The hosts are read-only, do not modify of free. * * @param include_down_ifaces TRUE to enumerate addresses from down interfaces - * @param include_virtual_ips TRUE to enumerate virtual ip addresses + * @param include_virtual_ips TRUE to enumerate virtual IP addresses + * @param include_loopback TRUE to enumerate addresses on loopback interfaces * @return enumerator over host_t's */ enumerator_t *(*create_address_enumerator) (kernel_net_t *this, - bool include_down_ifaces, bool include_virtual_ips); + bool include_down_ifaces, bool include_virtual_ips, + bool include_loopback); /** * Add a virtual IP to an interface. 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, ¤t)) { @@ -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( diff --git a/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c b/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c index 7f38a9dab..878573793 100644 --- a/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c +++ b/src/libhydra/plugins/kernel_pfroute/kernel_pfroute_net.c @@ -284,11 +284,6 @@ static void process_link(private_kernel_pfroute_net_t *this, iface_entry_t *iface; bool roam = FALSE; - if (msg->ifm_flags & IFF_LOOPBACK) - { /* ignore loopback interfaces */ - return; - } - this->mutex->lock(this->mutex); enumerator = this->ifaces->create_enumerator(this->ifaces); while (enumerator->enumerate(enumerator, &iface)) @@ -393,6 +388,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; /** @@ -444,6 +441,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; @@ -454,12 +455,13 @@ static bool filter_interfaces(address_enumerator_t *data, iface_entry_t** in, METHOD(kernel_net_t, create_address_enumerator, enumerator_t*, private_kernel_pfroute_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( @@ -581,11 +583,6 @@ static status_t init_address_list(private_kernel_pfroute_net_t *this) case AF_INET: case AF_INET6: { - if (ifa->ifa_flags & IFF_LOOPBACK) - { /* ignore loopback interfaces */ - continue; - } - iface = NULL; ifaces = this->ifaces->create_enumerator(this->ifaces); while (ifaces->enumerate(ifaces, ¤t)) |