From: Roy Marples Date: Wed, 22 May 2013 22:55:36 +0000 (+0000) Subject: Handle an interface coming and going better with a tailq list. X-Git-Tag: v5.99.7~43 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5b428df2a15eefa274085b606dfb73483b041fd2;p=thirdparty%2Fdhcpcd.git Handle an interface coming and going better with a tailq list. Ensure we check correct options when building ipv6 routes. --- diff --git a/ipv6.c b/ipv6.c index bf1f3395..4312d5a0 100644 --- a/ipv6.c +++ b/ipv6.c @@ -652,7 +652,7 @@ ipv6_buildroutes1(struct rt6head *dnr, int expired) TAILQ_FOREACH(rap, &ipv6_routers, next) { if (rap->expired != expired) continue; - if (options & DHCPCD_IPV6RA_OWN) { + if (rap->iface->options->options & DHCPCD_IPV6RA_OWN) { TAILQ_FOREACH(addr, &rap->addrs, next) { if (!addr->onlink) continue; @@ -661,9 +661,13 @@ ipv6_buildroutes1(struct rt6head *dnr, int expired) TAILQ_INSERT_TAIL(dnr, rt, next); } } - rt = make_router(rap); - if (rt) - TAILQ_INSERT_TAIL(dnr, rt, next); + if (rap->iface->options->options & + (DHCPCD_IPV6RA_OWN | DHCPCD_IPV6RA_OWN_DEFAULT)) + { + rt = make_router(rap); + if (rt) + TAILQ_INSERT_TAIL(dnr, rt, next); + } } } diff --git a/ipv6rs.c b/ipv6rs.c index 7d130009..61f8a7ec 100644 --- a/ipv6rs.c +++ b/ipv6rs.c @@ -337,7 +337,8 @@ void ipv6rs_freedrop_ra(struct ra *rap, int drop) eloop_timeout_delete(NULL, rap->iface); eloop_timeout_delete(NULL, rap); - TAILQ_REMOVE(&ipv6_routers, rap, next); + if (!drop) + TAILQ_REMOVE(&ipv6_routers, rap, next); ipv6rs_freedrop_addrs(rap, drop); ipv6rs_free_opts(rap); free(rap->data);