static void ndisc_router_handler(sd_ndisc *nd, int event, void *userdata) { Link *link = userdata; assert(link); assert(link->network); assert(link->manager); if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER)) return; switch(event) { case SD_NDISC_EVENT_ROUTER_ADVERTISMENT_NONE: return; case SD_NDISC_EVENT_ROUTER_ADVERTISMENT_OTHER: dhcp6_configure(link, true); break; case SD_NDISC_EVENT_ROUTER_ADVERTISMENT_TIMEOUT: case SD_NDISC_EVENT_ROUTER_ADVERTISMENT_MANAGED: dhcp6_configure(link, false); break; default: if (event < 0) log_link_warning_errno(link, event, "IPv6 Neighbor Discover error: %m"); else log_link_warning(link, "IPv6 Neighbor Discovery unknown event: %d", event); break; } }
static void icmp6_router_handler(sd_icmp6_nd *nd, int event, void *userdata) { Link *link = userdata; assert(link); assert(link->network); assert(link->manager); if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER)) return; switch(event) { case ICMP6_EVENT_ROUTER_ADVERTISMENT_NONE: return; case ICMP6_EVENT_ROUTER_ADVERTISMENT_TIMEOUT: case ICMP6_EVENT_ROUTER_ADVERTISMENT_OTHER: case ICMP6_EVENT_ROUTER_ADVERTISMENT_MANAGED: dhcp6_configure(link, event); break; case ICMP6_EVENT_ROUTER_ADVERTISMENT_PREFIX_EXPIRED: if (!link->rtnl_extended_attrs) dhcp6_prefix_expired(link); break; default: if (event < 0) log_link_warning(link, "ICMPv6 error: %s", strerror(-event)); else log_link_warning(link, "ICMPv6 unknown event: %d", event); break; } }