diff -aur systemd-228/src/network/networkd-link.c systemd-228-1/src/network/networkd-link.c --- systemd-228/src/network/networkd-link.c 2015-11-17 23:59:06.000000000 -0800 +++ systemd-228-1/src/network/networkd-link.c 2016-05-18 14:51:47.150381582 -0700 @@ -626,9 +626,6 @@ !link->dhcp4_configured && !link->dhcp6_configured)) return; - if (link_ipv6_accept_ra_enabled(link) && !link->ndisc_configured) - return; - SET_FOREACH(a, link->addresses, i) if (!address_is_ready(a)) return; @@ -1926,6 +1923,7 @@ static int link_set_ipv6_accept_ra(Link *link) { const char *p = NULL; + const char *v; int r; /* Make this a NOP if IPv6 is not available */ @@ -1938,12 +1936,16 @@ if (!link->network) return 0; + if (link_ipv6_accept_ra_enabled(link)) + v = "1"; + else + v = "0"; + p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/accept_ra"); - /* We handle router advertisments ourselves, tell the kernel to GTFO */ - r = write_string_file(p, "0", WRITE_STRING_FILE_VERIFY_ON_FAILURE); + r = write_string_file(p, v, WRITE_STRING_FILE_VERIFY_ON_FAILURE); if (r < 0) - log_link_warning_errno(link, r, "Cannot disable kernel IPv6 accept_ra for interface: %m"); + log_link_warning_errno(link, r, "Cannot configure kernel IPv6 accept_ra for interface: %m"); return 0; } diff -aur systemd-228/src/network/networkd-ndisc.c systemd-228-1/src/network/networkd-ndisc.c --- systemd-228/src/network/networkd-ndisc.c 2015-11-17 23:59:06.000000000 -0800 +++ systemd-228-1/src/network/networkd-ndisc.c 2016-05-18 14:52:08.990186324 -0700 @@ -26,7 +26,7 @@ #include "sd-ndisc.h" #include "networkd-link.h" - +/* static int ndisc_netlink_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) { _cleanup_link_unref_ Link *link = userdata; int r; @@ -77,7 +77,6 @@ if (in_addr_is_null(AF_INET6, (const union in_addr_union *) &link->network->ipv6_token) == 0) memcpy(((char *)&address->in_addr.in6) + 8, ((char *)&link->network->ipv6_token) + 8, 8); else { - /* see RFC4291 section 2.5.1 */ address->in_addr.in6.__in6_u.__u6_addr8[8] = link->mac.ether_addr_octet[0]; address->in_addr.in6.__in6_u.__u6_addr8[8] ^= 1 << 1; address->in_addr.in6.__in6_u.__u6_addr8[9] = link->mac.ether_addr_octet[1]; @@ -140,11 +139,12 @@ link->ndisc_messages ++; } +*/ static void ndisc_router_handler(sd_ndisc *nd, uint8_t flags, const struct in6_addr *gateway, unsigned lifetime, int pref, void *userdata) { _cleanup_route_free_ Route *route = NULL; Link *link = userdata; - usec_t time_now; + /* usec_t time_now; */ int r; assert(link); @@ -163,6 +163,8 @@ log_link_warning_errno(link, r, "Starting DHCPv6 client on NDisc request failed: %m"); } + return; +/* if (!gateway) return; @@ -189,6 +191,7 @@ } link->ndisc_messages ++; +*/ } static void ndisc_handler(sd_ndisc *nd, int event, void *userdata) { @@ -242,8 +245,8 @@ r = sd_ndisc_set_callback(link->ndisc_router_discovery, ndisc_router_handler, - ndisc_prefix_onlink_handler, - ndisc_prefix_autonomous_handler, + NULL, + NULL, ndisc_handler, link);