X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fodhcpd.git;a=blobdiff_plain;f=src%2Frouter.c;h=a45a8cbbe2d176ed4ed71a587f9107cdebfb8154;hp=772d77017b4112859f6824dc55e8057bff142912;hb=e59238f32a47616091d8c78acb317d7b4023745f;hpb=a85ccf1aa14d3d860e6ac0e7c56ba4695462afa1 diff --git a/src/router.c b/src/router.c index 772d770..a45a8cb 100644 --- a/src/router.c +++ b/src/router.c @@ -30,7 +30,7 @@ static void forward_router_solicitation(const struct interface *iface); static void forward_router_advertisement(uint8_t *data, size_t len); static void handle_icmpv6(void *addr, void *data, size_t len, - struct interface *iface); + struct interface *iface, void *dest); static void send_router_advert(struct uloop_timeout *event); static void sigusr1_refresh(int signal); @@ -170,7 +170,7 @@ static bool router_icmpv6_valid(struct sockaddr_in6 *source, uint8_t *data, size // Event handler for incoming ICMPv6 packets static void handle_icmpv6(void *addr, void *data, size_t len, - struct interface *iface) + struct interface *iface, _unused void *dest) { struct icmp6_hdr *hdr = data; @@ -410,7 +410,8 @@ static void send_router_advert(struct uloop_timeout *event) for (ssize_t i = 0; i < ipcnt; ++i) { struct odhcpd_ipaddr *addr = &addrs[i]; - if (addr->dprefix > 64 || addr->dprefix == 0) { + if (addr->dprefix > 64 || addr->dprefix == 0 || + (addr->dprefix == 64 && addr->prefix == 64)) { continue; // Address not suitable } else if (addr->dprefix > 32) { addr->addr.s6_addr32[1] &= htonl(~((1U << (64 - addr->dprefix)) - 1));