From 23f186494cf041107896fc4bd7fc5b8f921fd79f Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Wed, 18 Nov 2015 13:43:49 +0100 Subject: networkd: ndisc - revert to letting the kernel handle NDisc There is still a bug in the userspace version, so temporarily revert this. This is a work-around for issue #1866. --- src/network/networkd-link.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/network/networkd-link.c') diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 01d5942ce5..0d3c141312 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -626,9 +626,6 @@ void link_check_ready(Link *link) { !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_privacy_extensions(Link *link) { 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 @@ static int link_set_ipv6_accept_ra(Link *link) { 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; } @@ -2004,6 +2006,7 @@ static int link_set_ipv6_hop_limit(Link *link) { return 0; } +/* static int link_drop_foreign_config(Link *link) { Address *address; Route *route; @@ -2011,7 +2014,6 @@ static int link_drop_foreign_config(Link *link) { int r; SET_FOREACH(address, link->addresses_foreign, i) { - /* we consider IPv6LL addresses to be managed by the kernel */ if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1) continue; @@ -2021,7 +2023,6 @@ static int link_drop_foreign_config(Link *link) { } SET_FOREACH(route, link->routes_foreign, i) { - /* do not touch routes managed by the kernel */ if (route->protocol == RTPROT_KERNEL) continue; @@ -2032,6 +2033,7 @@ static int link_drop_foreign_config(Link *link) { return 0; } +*/ static int link_configure(Link *link) { int r; @@ -2040,9 +2042,11 @@ static int link_configure(Link *link) { assert(link->network); assert(link->state == LINK_STATE_PENDING); +/* r = link_drop_foreign_config(link); if (r < 0) return r; +*/ r = link_set_bridge_fdb(link); if (r < 0) -- cgit v1.2.3-54-g00ecf