]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
interfaces: exclude IPv4 link local addresses from management addresses
authorVincent Bernat <vincent@bernat.im>
Fri, 13 Feb 2015 17:06:49 +0000 (18:06 +0100)
committerVincent Bernat <vincent@bernat.im>
Fri, 13 Feb 2015 17:06:49 +0000 (18:06 +0100)
Link-local IPv4 addresses (169.254.0.0/16) are not an acceptable
management address. Closes #96.

src/daemon/interfaces.c

index e2f8c6e9d8cb5ed29e6dab8d56db928ee0dbb321..4f48fde1c83c282d23ea4f2645057b9daaf7f3ec 100644 (file)
@@ -344,8 +344,10 @@ interfaces_helper_chassis(struct lldpd *cfg,
 #define IN_IS_ADDR_LOOPBACK(a) ((a)->s_addr == htonl(INADDR_LOOPBACK))
 #undef IN_IS_ADDR_ANY
 #define IN_IS_ADDR_ANY(a) ((a)->s_addr == htonl(INADDR_ANY))
+#undef IN_IS_ADDR_LINKLOCAL
+#define IN_IS_ADDR_LINKLOCAL(a) (((a)->s_addr & htonl(0xffff0000)) == htonl(0xa9fe0000))
 #undef IN_IS_ADDR_GLOBAL
-#define IN_IS_ADDR_GLOBAL(a) (!IN_IS_ADDR_LOOPBACK(a) && !IN_IS_ADDR_ANY(a))
+#define IN_IS_ADDR_GLOBAL(a) (!IN_IS_ADDR_LOOPBACK(a) && !IN_IS_ADDR_ANY(a) && !IN_IS_ADDR_LINKLOCAL(a))
 #undef IN6_IS_ADDR_GLOBAL
 #define IN6_IS_ADDR_GLOBAL(a) \
        (!IN6_IS_ADDR_LOOPBACK(a) && !IN6_IS_ADDR_LINKLOCAL(a))