Mercurial > hg > dhcpcd
changeset 4553:8289f982fb87 draft
route: Compare AF_UNSPEC family when cleaning old routes
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Mon, 15 Jul 2019 17:13:43 +0100 |
| parents | d62e5b96b66e |
| children | 8c493d779d03 |
| files | src/route.c |
| diffstat | 1 files changed, 11 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/route.c Fri Jul 12 15:04:13 2019 +0100 +++ b/src/route.c Mon Jul 15 17:13:43 2019 +0100 @@ -685,8 +685,10 @@ } RB_TREE_FOREACH_SAFE(rt, &routes, rtn) { - if (rt->rt_dest.sa_family != af && - rt->rt_gateway.sa_family != af) + if ((rt->rt_dest.sa_family != af && + rt->rt_dest.sa_family != AF_UNSPEC) || + (rt->rt_gateway.sa_family != af && + rt->rt_gateway.sa_family != AF_UNSPEC)) continue; /* Is this route already in our table? */ if (rb_tree_find_node(&added, rt) != NULL) @@ -702,12 +704,14 @@ } /* Remove old routes we used to manage. */ - while ((rt = RB_TREE_MAX(&ctx->routes)) != NULL) { + RB_TREE_FOREACH_REVERSE_SAFE(rt, &ctx->routes, rtn) { + if ((rt->rt_dest.sa_family != af && + rt->rt_dest.sa_family != AF_UNSPEC) || + (rt->rt_gateway.sa_family != af && + rt->rt_gateway.sa_family != AF_UNSPEC)) + continue; rb_tree_remove_node(&ctx->routes, rt); - if (rt->rt_dest.sa_family == af && - rt->rt_gateway.sa_family == af && - rb_tree_find_node(&added, rt) == NULL) - { + if (rb_tree_find_node(&added, rt) == NULL) { o = rt->rt_ifp->options ? rt->rt_ifp->options->options : ctx->options;
