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