changeset 4194:f82c8bde229d draft

linux: use IFA_F_NOPREFIXROUTE for ipv4 addresses
author Roy Marples <roy@marples.name>
date Sun, 10 Dec 2017 18:49:20 +0000
parents a1772bc670f0
children d16878b8acac
files src/if-linux.c
diffstat 1 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-linux.c	Fri Dec 08 10:29:49 2017 +0000
+++ b/src/if-linux.c	Sun Dec 10 18:49:20 2017 +0000
@@ -1455,6 +1455,9 @@
 {
 	struct nlma nlm;
 	int retval = 0;
+#if defined(IFA_F_NOPREFIXROUTE)
+	uint32_t flags = 0;
+#endif
 
 	memset(&nlm, 0, sizeof(nlm));
 	nlm.hdr.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg));
@@ -1477,6 +1480,13 @@
 		add_attr_l(&nlm.hdr, sizeof(nlm), IFA_BROADCAST,
 		    &addr->brd.s_addr, sizeof(addr->brd.s_addr));
 
+#ifdef IFA_F_NOPREFIXROUTE
+	if (nlm.ifa.ifa_prefixlen < 32)
+		flags |= IFA_F_NOPREFIXROUTE;
+	if (flags)
+		add_attr_32(&nlm.hdr, sizeof(nlm), IFA_FLAGS, flags);
+#endif
+
 	if (send_netlink(addr->iface->ctx, NULL,
 	    NETLINK_ROUTE, &nlm.hdr, NULL) == -1)
 		retval = -1;