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);
// 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;
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));