From adfeee49c5386c44642361baf7234d40aac5082c Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 27 Aug 2019 23:15:24 +0900 Subject: [PATCH 1/2] network: enable ipv6 when the network has static ipv6 configurations --- src/network/networkd-link.c | 8 +++++++- src/network/networkd-network.c | 26 +++++++++++++++++++++++--- src/network/networkd-network.h | 2 +- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 47d4d08aee..560d8e97b6 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -221,7 +221,13 @@ static bool link_ipv6_enabled(Link *link) { return false; /* DHCPv6 client will not be started if no IPv6 link-local address is configured. */ - return link_ipv6ll_enabled(link) || network_has_static_ipv6_addresses(link->network); + if (link_ipv6ll_enabled(link)) + return true; + + if (network_has_static_ipv6_configurations(link->network)) + return true; + + return false; } static bool link_radv_enabled(Link *link) { diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 6a8766ce68..91326cea3b 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -662,15 +662,35 @@ int network_apply(Network *network, Link *link) { return 0; } -bool network_has_static_ipv6_addresses(Network *network) { +bool network_has_static_ipv6_configurations(Network *network) { Address *address; + Route *route; + FdbEntry *fdb; + Neighbor *neighbor; assert(network); - LIST_FOREACH(addresses, address, network->static_addresses) { + LIST_FOREACH(addresses, address, network->static_addresses) if (address->family == AF_INET6) return true; - } + + LIST_FOREACH(routes, route, network->static_routes) + if (route->family == AF_INET6) + return true; + + LIST_FOREACH(static_fdb_entries, fdb, network->static_fdb_entries) + if (fdb->family == AF_INET6) + return true; + + LIST_FOREACH(neighbors, neighbor, network->neighbors) + if (neighbor->family == AF_INET6) + return true; + + if (!LIST_IS_EMPTY(network->address_labels)) + return true; + + if (!LIST_IS_EMPTY(network->static_prefixes)) + return true; return false; } diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index f8894f86dd..bc760744e5 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -269,7 +269,7 @@ int network_get(Manager *manager, sd_device *device, const char *ifname, const s int network_apply(Network *network, Link *link); void network_apply_anonymize_if_set(Network *network); -bool network_has_static_ipv6_addresses(Network *network); +bool network_has_static_ipv6_configurations(Network *network); CONFIG_PARSER_PROTOTYPE(config_parse_stacked_netdev); CONFIG_PARSER_PROTOTYPE(config_parse_tunnel); From 44013aa4f57c1a5ac7766a3a7cd719d912deb245 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 27 Aug 2019 23:45:00 +0900 Subject: [PATCH 2/2] network: add more warnings in network_verify() --- src/network/networkd-network.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 91326cea3b..2b8d0eb2fb 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -220,6 +220,26 @@ int network_verify(Network *network) { if (network->link_local < 0) network->link_local = network->bridge ? ADDRESS_FAMILY_NO : ADDRESS_FAMILY_IPV6; + if (!FLAGS_SET(network->link_local, ADDRESS_FAMILY_IPV6)) { + if (network->ipv6_accept_ra > 0) { + log_warning("%s: IPv6AcceptRA= is enabled by the .network file but IPv6 link local addressing is disabled. " + "Disabling IPv6AcceptRA=.", network->filename); + network->ipv6_accept_ra = false; + } + + if (FLAGS_SET(network->dhcp, ADDRESS_FAMILY_IPV6)) { + log_warning("%s: DHCPv6 client is enabled by the .network file but IPv6 link local addressing is disabled. " + "Disabling DHCPv6 client.", network->filename); + SET_FLAG(network->dhcp, ADDRESS_FAMILY_IPV6, false); + } + + if (network->router_prefix_delegation != RADV_PREFIX_DELEGATION_NONE) { + log_warning("%s: IPv6PrefixDelegation= is enabled but IPv6 link local addressing is disabled. " + "Disabling IPv6PrefixDelegation=.", network->filename); + network->router_prefix_delegation = RADV_PREFIX_DELEGATION_NONE; + } + } + if (FLAGS_SET(network->link_local, ADDRESS_FAMILY_FALLBACK_IPV4) && !FLAGS_SET(network->dhcp, ADDRESS_FAMILY_IPV4)) { log_warning("%s: fallback assignment of IPv4 link local address is enabled but DHCPv4 is disabled. "