Mercurial > hg > dhcpcd
changeset 4162:fbed6260b7e1 draft
Set DHCP routes as DHCP in supported OS's.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Mon, 09 Oct 2017 20:11:36 +0100 |
| parents | a40c7c100a45 |
| children | 799ea031e1ec |
| files | src/dhcp.c src/if-linux.c src/ipv6.c src/route.h |
| diffstat | 4 files changed, 19 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dhcp.c Mon Oct 09 19:57:09 2017 +0100 +++ b/src/dhcp.c Mon Oct 09 20:11:36 2017 +0100 @@ -428,7 +428,7 @@ if ((rt = rt_new(ifp)) == NULL) return -1; - TAILQ_INSERT_TAIL(routes, rt, rt_next); + rt->rt_dflags |= RTDF_DHCP; /* If we have ocets then we have a destination and netmask */ dest.s_addr = 0; @@ -461,6 +461,8 @@ /* 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++; } return n; @@ -631,6 +633,7 @@ continue; if ((rt = rt_new(ifp)) == NULL) return -1; + rt->rt_dflags |= RTDF_DHCP; /* A host route is normally set by having the * gateway match the destination or assigned address */ @@ -663,6 +666,7 @@ while (p < e) { if ((rt = rt_new(ifp)) == NULL) return -1; + rt->rt_dflags |= RTDF_DHCP; memcpy(&gateway.s_addr, p, sizeof(gateway.s_addr)); p += 4; sa_in_init(&rt->rt_dest, &dest);
--- a/src/if-linux.c Mon Oct 09 19:57:09 2017 +0100 +++ b/src/if-linux.c Mon Oct 09 20:11:36 2017 +0100 @@ -1226,6 +1226,11 @@ nlm.rt.rtm_protocol = RTPROT_RA; else #endif +#ifdef RTPROT_DHCP + if (rt->rt_dflags & RTDF_DHCP) + nlm.rt.rtm_protocol = RTPROT_DHCP; + else +#endif if (rt->rt_dflags & RTDF_IFA_ROUTE) nlm.rt.rtm_protocol = RTPROT_KERNEL; else
--- a/src/ipv6.c Mon Oct 09 19:57:09 2017 +0100 +++ b/src/ipv6.c Mon Oct 09 20:11:36 2017 +0100 @@ -2136,10 +2136,8 @@ #ifdef HAVE_ROUTE_METRIC rt->rt_metric = ifp->metric; #endif - if (rap != NULL) { + if (rap != NULL) rt->rt_mtu = rap->mtu; - rt->rt_dflags |= RTDF_RA; - } return rt; } @@ -2256,12 +2254,15 @@ if (addr->prefix_vltime == 0) continue; rt = inet6_makeprefix(rap->iface, rap, addr); - if (rt) + if (rt) { + rt->rt_dflags |= RTDF_RA; TAILQ_INSERT_TAIL(routes, rt, rt_next); + } } if (rap->lifetime) { rt = inet6_makerouter(rap); if (rt) { + rt->rt_dflags |= RTDF_RA; TAILQ_INSERT_TAIL(routes, rt, rt_next); if (have_default) *have_default = true; @@ -2285,8 +2286,10 @@ if (d6_state && d6_state->state == dstate) { TAILQ_FOREACH(addr, &d6_state->addrs, next) { rt = inet6_makeprefix(ifp, NULL, addr); - if (rt) + if (rt) { + rt->rt_dflags |= RTDF_DHCP; TAILQ_INSERT_TAIL(routes, rt, rt_next); + } } } }
--- a/src/route.h Mon Oct 09 19:57:09 2017 +0100 +++ b/src/route.h Mon Oct 09 20:11:36 2017 +0100 @@ -76,6 +76,7 @@ #define RTDF_IFA_ROUTE 0x02 /* Address generated route */ #define RTDF_FAKE 0x04 /* Maybe us on lease reboot */ #define RTDF_RA 0x08 /* Router Advertisement */ +#define RTDF_DHCP 0x10 /* DHCP route */ }; TAILQ_HEAD(rt_head, rt);
