From 27ff0490e6b408e619b28d97b26853fa5ca6fd85 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 19 Oct 2020 12:08:53 +0900 Subject: [PATCH] network: rename IPv6PrefixDelegation= to IPv6SendRA= --- src/network/networkd-network-gperf.gperf | 30 +++++++---- src/network/networkd-network.c | 1 + src/network/networkd-network.h | 2 +- src/network/networkd-radv.c | 50 +++++++++++++++++-- .../fuzz-network-parser/directives.network | 11 ++++ 5 files changed, 78 insertions(+), 16 deletions(-) diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index d0ddd4c572..5cc9e3e8f6 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -126,7 +126,7 @@ Network.BindCarrier, config_parse_strv, Network.ConfigureWithoutCarrier, config_parse_bool, 0, offsetof(Network, configure_without_carrier) Network.IgnoreCarrierLoss, config_parse_tristate, 0, offsetof(Network, ignore_carrier_loss) Network.KeepConfiguration, config_parse_keep_configuration, 0, offsetof(Network, keep_configuration) -Network.IPv6PrefixDelegation, config_parse_router_prefix_delegation, 0, offsetof(Network, router_prefix_delegation) +Network.IPv6SendRA, config_parse_router_prefix_delegation, 0, offsetof(Network, router_prefix_delegation) Network.DHCPv6PrefixDelegation, config_parse_tristate, 0, offsetof(Network, dhcp6_pd) Address.Address, config_parse_address, 0, 0 Address.Peer, config_parse_address, 0, 0 @@ -286,15 +286,15 @@ DHCPv6PrefixDelegation.SubnetId, config_parse_dhcp6_pd_subnet_id, DHCPv6PrefixDelegation.Announce, config_parse_bool, 0, offsetof(Network, dhcp6_pd_announce) DHCPv6PrefixDelegation.Assign, config_parse_bool, 0, offsetof(Network, dhcp6_pd_assign) DHCPv6PrefixDelegation.Token, config_parse_dhcp6_pd_token, 0, offsetof(Network, dhcp6_pd_token) -IPv6PrefixDelegation.RouterLifetimeSec, config_parse_sec, 0, offsetof(Network, router_lifetime_usec) -IPv6PrefixDelegation.Managed, config_parse_bool, 0, offsetof(Network, router_managed) -IPv6PrefixDelegation.OtherInformation, config_parse_bool, 0, offsetof(Network, router_other_information) -IPv6PrefixDelegation.RouterPreference, config_parse_router_preference, 0, 0 -IPv6PrefixDelegation.EmitDNS, config_parse_bool, 0, offsetof(Network, router_emit_dns) -IPv6PrefixDelegation.DNS, config_parse_radv_dns, 0, 0 -IPv6PrefixDelegation.EmitDomains, config_parse_bool, 0, offsetof(Network, router_emit_domains) -IPv6PrefixDelegation.Domains, config_parse_radv_search_domains, 0, 0 -IPv6PrefixDelegation.DNSLifetimeSec, config_parse_sec, 0, offsetof(Network, router_dns_lifetime_usec) +IPv6SendRA.RouterLifetimeSec, config_parse_sec, 0, offsetof(Network, router_lifetime_usec) +IPv6SendRA.Managed, config_parse_bool, 0, offsetof(Network, router_managed) +IPv6SendRA.OtherInformation, config_parse_bool, 0, offsetof(Network, router_other_information) +IPv6SendRA.RouterPreference, config_parse_router_preference, 0, 0 +IPv6SendRA.EmitDNS, config_parse_bool, 0, offsetof(Network, router_emit_dns) +IPv6SendRA.DNS, config_parse_radv_dns, 0, 0 +IPv6SendRA.EmitDomains, config_parse_bool, 0, offsetof(Network, router_emit_domains) +IPv6SendRA.Domains, config_parse_radv_search_domains, 0, 0 +IPv6SendRA.DNSLifetimeSec, config_parse_sec, 0, offsetof(Network, router_dns_lifetime_usec) IPv6Prefix.Prefix, config_parse_prefix, 0, 0 IPv6Prefix.OnLink, config_parse_prefix_flags, 0, 0 IPv6Prefix.AddressAutoconfiguration, config_parse_prefix_flags, 0, 0 @@ -431,6 +431,16 @@ TrivialLinkEqualizer.Handle, config_parse_qdisc_handle, TrivialLinkEqualizer.Id, config_parse_trivial_link_equalizer_id, QDISC_KIND_TEQL, 0 /* backwards compatibility: do not add new entries to this section */ Network.IPv4LL, config_parse_ipv4ll, 0, offsetof(Network, link_local) +Network.IPv6PrefixDelegation, config_parse_router_prefix_delegation, 0, offsetof(Network, router_prefix_delegation) +IPv6PrefixDelegation.RouterLifetimeSec, config_parse_sec, 0, offsetof(Network, router_lifetime_usec) +IPv6PrefixDelegation.Managed, config_parse_bool, 0, offsetof(Network, router_managed) +IPv6PrefixDelegation.OtherInformation, config_parse_bool, 0, offsetof(Network, router_other_information) +IPv6PrefixDelegation.RouterPreference, config_parse_router_preference, 0, 0 +IPv6PrefixDelegation.EmitDNS, config_parse_bool, 0, offsetof(Network, router_emit_dns) +IPv6PrefixDelegation.DNS, config_parse_radv_dns, 0, 0 +IPv6PrefixDelegation.EmitDomains, config_parse_bool, 0, offsetof(Network, router_emit_domains) +IPv6PrefixDelegation.Domains, config_parse_radv_search_domains, 0, 0 +IPv6PrefixDelegation.DNSLifetimeSec, config_parse_sec, 0, offsetof(Network, router_dns_lifetime_usec) DHCPv4.BlackList, config_parse_dhcp_acl_ip_address, 0, 0 DHCP.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier) DHCP.UseDNS, config_parse_dhcp_use_dns, 0, 0 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index c72b56b2bb..426dd0a8f0 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -453,6 +453,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi "BridgeFDB\0" "BridgeMDB\0" "BridgeVLAN\0" + "IPv6SendRA\0" "IPv6PrefixDelegation\0" "IPv6Prefix\0" "IPv6RoutePrefix\0" diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index 2cf89857ba..92c7a4636f 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -187,7 +187,7 @@ struct Network { IPv6LinkLocalAddressGenMode ipv6ll_address_gen_mode; bool ipv4ll_route; - /* IPv6 prefix delegation support */ + /* IPv6 RA support */ RADVPrefixDelegation router_prefix_delegation; usec_t router_lifetime_usec; uint8_t router_preference; diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 48c37d7490..b9979f957a 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -916,11 +916,51 @@ DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN( RADVPrefixDelegation, RADV_PREFIX_DELEGATION_BOTH); -DEFINE_CONFIG_PARSE_ENUM( - config_parse_router_prefix_delegation, - radv_prefix_delegation, - RADVPrefixDelegation, - "Invalid router prefix delegation"); +int config_parse_router_prefix_delegation( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + + RADVPrefixDelegation val, *ra = data; + int r; + + assert(filename); + assert(lvalue); + assert(rvalue); + assert(data); + + if (streq(lvalue, "IPv6SendRA")) { + r = parse_boolean(rvalue); + if (r < 0) { + log_syntax(unit, LOG_WARNING, filename, line, r, + "Invalid %s= setting, ignoring assignment: %s", lvalue, rvalue); + return 0; + } + + /* When IPv6SendRA= is enabled, only static prefixes are sent by default, and users + * need to explicitly enable DHCPv6PrefixDelegation=. */ + *ra = r ? RADV_PREFIX_DELEGATION_STATIC : RADV_PREFIX_DELEGATION_NONE; + return 0; + } + + /* For backward compatibility */ + val = radv_prefix_delegation_from_string(rvalue); + if (val < 0) { + log_syntax(unit, LOG_WARNING, filename, line, 0, + "Invalid %s= setting, ignoring assignment: %s", lvalue, rvalue); + return 0; + } + + *ra = val; + return 0; +} int config_parse_router_preference( const char *unit, diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index c187b1b2f8..988553d505 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -208,6 +208,7 @@ ConfigureWithoutCarrier= NTP= DHCP= Domains= +IPv6SendRA= IPv6PrefixDelegation= VLAN= DHCPServer= @@ -272,6 +273,16 @@ InvertRule= Family= SuppressPrefixLength= User= +[IPv6SendRA] +RouterPreference= +DNSLifetimeSec= +DNS= +RouterLifetimeSec= +Domains= +EmitDNS= +EmitDomains= +Managed= +OtherInformation= [IPv6PrefixDelegation] RouterPreference= DNSLifetimeSec=