-// Event handler for incoming ICMPv6 packets
-static void handle_icmpv6(void *addr, void *data, size_t len,
- struct interface *iface)
-{
- struct icmp6_hdr *hdr = data;
-
- if (!router_icmpv6_valid(addr, data, len))
- return;
-
- if ((iface->ra == RELAYD_SERVER && !iface->master)) { // Server mode
- if (hdr->icmp6_type == ND_ROUTER_SOLICIT)
- send_router_advert(&iface->timer_rs);
- } else if (iface->ra == RELAYD_RELAY) { // Relay mode
- if (hdr->icmp6_type == ND_ROUTER_ADVERT && iface->master)
- forward_router_advertisement(data, len);
- else if (hdr->icmp6_type == ND_ROUTER_SOLICIT && !iface->master)
- forward_router_solicitation(odhcpd_get_master_interface());
- }
-}
-