diff -ru 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-02-22 21:32:34.266133364 -0800
@@ -134,6 +134,26 @@
         return link->network->ip_forward & ADDRESS_FAMILY_IPV6;
 }
 
+static bool link_ipv6_disabled(Link *link) {
+        const char *p = NULL;
+        int r;
+        if (link->flags & IFF_LOOPBACK)
+                return true;
+        /* Make this a NOP if IPv6 is not available */
+        if (!socket_ipv6_is_supported())
+                return true;
+
+        p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/disable_ipv6");
+        _cleanup_free_ char *val = NULL;
+        r = read_one_line_file(p, &val);
+        if (r < 0)
+                log_link_warning_errno(link, r, "Cannot read ipv6 state for interface: %m");
+	if (streq(val, "0"))
+                return false;
+        
+        return true;
+}
+
 bool link_ipv6_accept_ra_enabled(Link *link) {
         if (link->flags & IFF_LOOPBACK)
                 return false;
@@ -602,22 +622,17 @@
         Iterator i;
 
         assert(link);
-
         if (!link->network)
                 return;
-
         if (!link->static_configured)
                 return;
-
         if (link_ipv4ll_enabled(link))
                 if (!link->ipv4ll_address ||
                     !link->ipv4ll_route)
                         return;
-
-        if (link_ipv6ll_enabled(link))
+        if (!link_ipv6_disabled(link) && link_ipv6ll_enabled(link))
                 if (in_addr_is_null(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address) > 0)
                         return;
-
         if ((link_dhcp4_enabled(link) && !link_dhcp6_enabled(link) &&
              !link->dhcp4_configured) ||
             (link_dhcp6_enabled(link) && !link_dhcp4_enabled(link) &&
@@ -625,8 +640,7 @@
             (link_dhcp4_enabled(link) && link_dhcp6_enabled(link) &&
              !link->dhcp4_configured && !link->dhcp6_configured))
                 return;
-
-        if (link_ipv6_accept_ra_enabled(link) && !link->ndisc_configured)
+        if (!link_ipv6_disabled(link) && link_ipv6_accept_ra_enabled(link) && !link->ndisc_configured)
                 return;
 
         SET_FOREACH(a, link->addresses, i)