diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2016-08-16 10:08:01 +0200 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2016-08-16 10:08:01 +0200 |
commit | f1081b6b0f47160f83ded689d956bd577819d752 (patch) | |
tree | 4ecb5f7701b8104a39f87c23ef845b32bc140b47 /iface.c | |
parent | 348e1614d6ddb9fdc3c0c9c8389753d2d9cc0314 (diff) |
llmnrd: Don't enumerate and store IPv6 addresses if IPv6 is disabled
Currently IPv6 addresses are always enumerated via RTNL socket and then
stored internally, even if llmnrd was started without the IPv6 command
line option '-6'. Even though no queries on AF_INET6 sockets will be
answered, this behavior might be confusing. Especially due to messages
like:
Added IPv6 address fe80::f0eb:aaff:feb3:ae58 on interface tap0
being logged.
Explicitely disable IPv6 address enumeration on the RTNL socket to fix
this behavior.
Closes #8
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
Diffstat (limited to 'iface.c')
-rw-r--r-- | iface.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2015 Tobias Klauser <tklauser@distanz.ch> + * Copyright (C) 2015-2016 Tobias Klauser <tklauser@distanz.ch> * * This file is part of llmnrd. * @@ -41,6 +41,7 @@ #include "iface.h" static bool iface_running = true; +static bool iface_ipv6 = false; static pthread_t iface_thread; static iface_event_handler_t iface_event_handler; @@ -349,15 +350,17 @@ int iface_run(void) return -1; } - sock = socket_open_rtnl(); + sock = socket_open_rtnl(iface_ipv6); if (sock < 0) return -1; /* send RTM_GETADDR request to initially populate the interface list */ if (iface_rtnl_enumerate(sock, RTM_GETADDR, AF_INET) < 0) goto out; - if (iface_rtnl_enumerate(sock, RTM_GETADDR, AF_INET6) < 0) - goto out; + if (iface_ipv6) { + if (iface_rtnl_enumerate(sock, RTM_GETADDR, AF_INET6) < 0) + goto out; + } while (iface_running) { ssize_t recvlen; @@ -385,8 +388,10 @@ static void* iface_run_wrapper(void *data __unused) return ERR_PTR(iface_run()); } -int iface_start_thread(void) +int iface_start_thread(bool ipv6) { + iface_ipv6 = ipv6; + if (pthread_create(&iface_thread, NULL, iface_run_wrapper, NULL) < 0) { log_err("Failed to start interface monitoring thread\n"); return -1; |