changeset 4293:63138e0b8d68 draft

linux: set RTF_HOST correctly when reading kernel routes. Linux has no real concept of host routes, but dhcpcd does purely for describing them. As such, mark them has host routes if the netmask if all ones.
author Roy Marples <roy@marples.name>
date Mon, 02 Jul 2018 22:36:44 +0100
parents 3d4667e8f9c9
children 95fa4f3d6b1a
files src/if-linux.c
diffstat 1 files changed, 2 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-linux.c	Sun Jul 01 20:46:03 2018 +0100
+++ b/src/if-linux.c	Mon Jul 02 22:36:44 2018 +0100
@@ -430,8 +430,6 @@
 	memset(rt, 0, sizeof(*rt));
 	if (rtm->rtm_type == RTN_UNREACHABLE)
 		rt->rt_flags |= RTF_REJECT;
-	if (rtm->rtm_scope == RT_SCOPE_HOST)
-		rt->rt_flags |= RTF_HOST;
 
 	rta = (struct rtattr *)RTM_RTA(rtm);
 	len = RTM_PAYLOAD(nlm);
@@ -491,6 +489,8 @@
 
 	rt->rt_netmask.sa_family = rtm->rtm_family;
 	sa_fromprefix(&rt->rt_netmask, rtm->rtm_dst_len);
+	if (sa_is_allones(&rt->rt_netmask))
+		rt->rt_flags |= RTF_HOST;
 
 	#if 0
 	if (rt->rtp_ifp == NULL && rt->src.s_addr != INADDR_ANY) {