From: Steven Barth Date: Mon, 13 Jul 2015 20:46:25 +0000 (+0200) Subject: ndp: fixup route replication X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=97a27ba59a66c62551fe2de6502dc028a8481210;p=oweals%2Fodhcpd.git ndp: fixup route replication --- diff --git a/src/ndp.c b/src/ndp.c index a6f8427..176eaec 100644 --- a/src/ndp.c +++ b/src/ndp.c @@ -361,6 +361,7 @@ static void handle_rtnetlink(_unused void *addr, void *data, size_t len, ssize_t alen = NLMSG_PAYLOAD(nh, rta_offset); struct in6_addr *addr = NULL; int *ifindex = (!is_route) ? &ndm->ndm_ifindex : NULL; + int *metric = NULL; for (struct rtattr *rta = (void*)(((uint8_t*)ndm) + rta_offset); RTA_OK(rta, alen); rta = RTA_NEXT(rta, alen)) { @@ -373,6 +374,8 @@ static void handle_rtnetlink(_unused void *addr, void *data, size_t len, } else if (is_route && rta->rta_type == RTA_GATEWAY) { ifindex = NULL; break; + } else if (is_route && rta->rta_type == RTA_PRIORITY) { + metric = (int*)RTA_DATA(rta); } } @@ -491,6 +494,7 @@ static void handle_rtnetlink(_unused void *addr, void *data, size_t len, list_for_each_entry(c, &interfaces, head) { if (c->ndp == RELAYD_RELAY && !c->master) { *ifindex = c->ifindex; + *metric = (*metric & 0xffff) | (c->ifindex << 16); send(rtnl_event.uloop.fd, nh, nh->nlmsg_len, MSG_DONTWAIT); } }