Example #1
0
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;
        }

}