summaryrefslogtreecommitdiff
path: root/evutil.c
diff options
context:
space:
mode:
authorAzat Khuzhin <a3at.mail@gmail.com>2018-10-24 11:51:57 +0300
committerAzat Khuzhin <a3at.mail@gmail.com>2018-10-25 00:06:47 +0300
commit117dc92129f16cbf8cc7e7d60898569ca20b597f (patch)
tree6e9cd6169aa67b4f1b95cf9b658c22d5125b12d2 /evutil.c
parent0ec12bc84cf09307e01dc3b00d08ac1f816b6ff7 (diff)
downloadlibevent-117dc92129f16cbf8cc7e7d60898569ca20b597f.tar.gz
Filter link-local IPv4 addresses in evutil_found_ifaddr()
Fixes: #668
Diffstat (limited to 'evutil.c')
-rw-r--r--evutil.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/evutil.c b/evutil.c
index 49c9014f..6fa24a7c 100644
--- a/evutil.c
+++ b/evutil.c
@@ -599,6 +599,11 @@ static int have_checked_interfaces, had_ipv4_address, had_ipv6_address;
*/
#define EVUTIL_V4ADDR_IS_LOCALHOST(addr) (((addr)>>24) == 127)
+/* Macro: True iff the IPv4 address 'addr', in host order, is link-local
+ * 169.254.0.0/16 (RFC3927)
+ */
+#define EVUTIL_V4ADDR_IS_LINKLOCAL(addr) (((addr) & 0xffff0000U) == 0xa9fe0000U)
+
/* Macro: True iff the IPv4 address 'addr', in host order, is a class D
* (multiclass) address.
*/
@@ -615,6 +620,7 @@ evutil_found_ifaddr(const struct sockaddr *sa)
ev_uint32_t addr = ntohl(sin->sin_addr.s_addr);
if (addr == 0 ||
EVUTIL_V4ADDR_IS_LOCALHOST(addr) ||
+ EVUTIL_V4ADDR_IS_LINKLOCAL(addr) ||
EVUTIL_V4ADDR_IS_CLASSD(addr)) {
/* Not actually a usable external address. */
} else {