Mercurial > hg > dhcpcd
changeset 4362:2e028387b21c draft
dhcp: if the netmask is all ones, it's a host route
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Fri, 08 Feb 2019 16:32:36 +0000 |
| parents | 08ce825a4c2c |
| children | f51c65524444 |
| files | src/dhcp.c |
| diffstat | 1 files changed, 8 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dhcp.c Thu Feb 07 21:20:41 2019 +0000 +++ b/src/dhcp.c Fri Feb 08 16:32:36 2019 +0000 @@ -447,7 +447,7 @@ memcpy(&gateway.s_addr, p, 4); p += 4; - /* A host route is normally set by having the + /* An on-link host route is normally set by having the * gateway match the destination or assigned address */ if (gateway.s_addr == dest.s_addr || (gateway.s_addr == bootp->yiaddr || @@ -455,17 +455,14 @@ { gateway.s_addr = INADDR_ANY; netmask.s_addr = INADDR_BROADCAST; + } + if (netmask.s_addr == INADDR_BROADCAST) rt->rt_flags = RTF_HOST; - } sa_in_init(&rt->rt_dest, &dest); sa_in_init(&rt->rt_netmask, &netmask); sa_in_init(&rt->rt_gateway, &gateway); - /* If CIDR is 32 then it's a host route. */ - if (cidr == 32) - rt->rt_flags = RTF_HOST; - TAILQ_INSERT_TAIL(routes, rt, rt_next); n++; } @@ -638,7 +635,7 @@ if ((rt = rt_new(ifp)) == NULL) return -1; - /* A host route is normally set by having the + /* A on-link host route is normally set by having the * gateway match the destination or assigned address */ if (gateway.s_addr == dest.s_addr || (gateway.s_addr == bootp->yiaddr || @@ -646,12 +643,15 @@ { gateway.s_addr = INADDR_ANY; netmask.s_addr = INADDR_BROADCAST; - rt->rt_flags = RTF_HOST; } else netmask.s_addr = route_netmask(dest.s_addr); + if (netmask.s_addr == INADDR_BROADCAST) + rt->rt_flags = RTF_HOST; + sa_in_init(&rt->rt_dest, &dest); sa_in_init(&rt->rt_netmask, &netmask); sa_in_init(&rt->rt_gateway, &gateway); + TAILQ_INSERT_TAIL(routes, rt, rt_next); n++; }
