network: enable ipv6 when the network has static ipv6 configurations

This commit is contained in:
Yu Watanabe 2019-08-27 23:15:24 +09:00
parent fef40ceb5d
commit adfeee49c5
3 changed files with 31 additions and 5 deletions

View File

@ -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) {

View File

@ -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;
}

View File

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