From: Yu Watanabe Date: Mon, 15 Apr 2024 06:47:12 +0000 (+0900) Subject: network: introduce link_get_use_domains() X-Git-Tag: v256-rc1~122^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a169cb40fcb49c390f959c922c153c5d53e61f2;p=thirdparty%2Fsystemd.git network: introduce link_get_use_domains() No functional change, just refactoring. --- diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c index 4a0e26d1720..89622e6cfcf 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1540,7 +1540,7 @@ static int dhcp4_configure(Link *link) { return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for classless static route: %m"); } - if (link->network->dhcp_use_domains > 0) { + if (link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP4) > 0) { r = sd_dhcp_client_set_request_option(link->dhcp_client, SD_DHCP_OPTION_DOMAIN_SEARCH); if (r < 0) return log_link_debug_errno(link, r, "DHCPv4 CLIENT: Failed to set request flag for domain search list: %m"); diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index cf643194d58..bf7d3c7e8ec 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -639,7 +639,7 @@ static int dhcp6_configure(Link *link) { return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request DNS servers: %m"); } - if (link->network->dhcp6_use_domains > 0) { + if (link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP6) > 0) { r = sd_dhcp6_client_set_request_option(client, SD_DHCP6_OPTION_DOMAIN); if (r < 0) return log_link_debug_errno(link, r, "DHCPv6 CLIENT: Failed to request domains: %m"); diff --git a/src/network/networkd-dns.c b/src/network/networkd-dns.c index 9fa330a452b..eb01f4758eb 100644 --- a/src/network/networkd-dns.c +++ b/src/network/networkd-dns.c @@ -3,10 +3,56 @@ #include "dns-domain.h" #include "hostname-util.h" #include "networkd-dns.h" +#include "networkd-manager.h" #include "networkd-network.h" #include "parse-util.h" #include "string-table.h" +UseDomains link_get_use_domains(Link *link, NetworkConfigSource proto) { + UseDomains n, c, m; + + assert(link); + assert(link->manager); + + if (!link->network) + return USE_DOMAINS_NO; + + switch (proto) { + case NETWORK_CONFIG_SOURCE_DHCP4: + n = link->network->dhcp_use_domains; + c = link->network->compat_dhcp_use_domains; + m = link->manager->dhcp_use_domains; + break; + case NETWORK_CONFIG_SOURCE_DHCP6: + n = link->network->dhcp6_use_domains; + c = link->network->compat_dhcp_use_domains; + m = link->manager->dhcp6_use_domains; + break; + case NETWORK_CONFIG_SOURCE_NDISC: + n = link->network->ndisc_use_domains; + c = _USE_DOMAINS_INVALID; + m = _USE_DOMAINS_INVALID; + break; + default: + assert_not_reached(); + } + + /* If per-network and per-protocol setting is specified, use it. */ + if (n >= 0) + return n; + + /* If compat setting is specified, use it. */ + if (c >= 0) + return c; + + /* If global per-protocol setting is specified, use it. */ + if (m >= 0) + return m; + + /* Otherwise, defaults to no. */ + return USE_DOMAINS_NO; +} + int config_parse_domains( const char *unit, const char *filename, @@ -248,57 +294,6 @@ int config_parse_dhcp_use_dns( return 0; } -int config_parse_dhcp_use_domains( - 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) { - - Network *network = userdata; - UseDomains d; - - assert(filename); - assert(lvalue); - assert(IN_SET(ltype, AF_UNSPEC, AF_INET, AF_INET6)); - assert(rvalue); - assert(data); - - d = use_domains_from_string(rvalue); - if (d < 0) { - log_syntax(unit, LOG_WARNING, filename, line, d, - "Failed to parse %s=%s, ignoring assignment: %m", lvalue, rvalue); - return 0; - } - - switch (ltype) { - case AF_INET: - network->dhcp_use_domains = d; - network->dhcp_use_domains_set = true; - break; - case AF_INET6: - network->dhcp6_use_domains = d; - network->dhcp6_use_domains_set = true; - break; - case AF_UNSPEC: - /* For backward compatibility. */ - if (!network->dhcp_use_domains_set) - network->dhcp_use_domains = d; - if (!network->dhcp6_use_domains_set) - network->dhcp6_use_domains = d; - break; - default: - assert_not_reached(); - } - - return 0; -} - static const char* const use_domains_table[_USE_DOMAINS_MAX] = { [USE_DOMAINS_NO] = "no", [USE_DOMAINS_ROUTE] = "route", diff --git a/src/network/networkd-dns.h b/src/network/networkd-dns.h index f458aa86c7b..c1b3429b8ba 100644 --- a/src/network/networkd-dns.h +++ b/src/network/networkd-dns.h @@ -3,6 +3,9 @@ #include "conf-parser.h" #include "macro.h" +#include "networkd-util.h" + +typedef struct Link Link; typedef enum UseDomains { USE_DOMAINS_NO, @@ -12,6 +15,8 @@ typedef enum UseDomains { _USE_DOMAINS_INVALID = -EINVAL, } UseDomains; +UseDomains link_get_use_domains(Link *link, NetworkConfigSource proto); + const char* use_domains_to_string(UseDomains p) _const_; UseDomains use_domains_from_string(const char *s) _pure_; @@ -19,5 +24,4 @@ CONFIG_PARSER_PROTOTYPE(config_parse_domains); CONFIG_PARSER_PROTOTYPE(config_parse_dns); CONFIG_PARSER_PROTOTYPE(config_parse_dnssec_negative_trust_anchors); CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_dns); -CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_domains); CONFIG_PARSER_PROTOTYPE(config_parse_use_domains); diff --git a/src/network/networkd-json.c b/src/network/networkd-json.c index 98076532895..4fd75f4bfe4 100644 --- a/src/network/networkd-json.c +++ b/src/network/networkd-json.c @@ -697,7 +697,7 @@ static int domains_append_json(Link *link, bool is_route, JsonVariant **v) { if (!link_domains) { if (link->dhcp_lease && - link->network->dhcp_use_domains == use_domains) { + link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP4) == use_domains) { r = sd_dhcp_lease_get_server_identifier(link->dhcp_lease, &s.in); if (r < 0) return r; @@ -717,7 +717,7 @@ static int domains_append_json(Link *link, bool is_route, JsonVariant **v) { } if (link->dhcp6_lease && - link->network->dhcp6_use_domains == use_domains) { + link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP6) == use_domains) { r = sd_dhcp6_lease_get_server_address(link->dhcp6_lease, &s.in6); if (r < 0) return r; @@ -730,7 +730,7 @@ static int domains_append_json(Link *link, bool is_route, JsonVariant **v) { } } - if (link->network->ndisc_use_domains == use_domains) { + if (link_get_use_domains(link, NETWORK_CONFIG_SOURCE_NDISC) == use_domains) { NDiscDNSSL *a; SET_FOREACH(a, link->ndisc_dnssl) { diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 8e8b27d78db..2d21c2bca57 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -599,6 +599,8 @@ int manager_new(Manager **ret, bool test_mode) { .manage_foreign_nexthops = true, .ethtool_fd = -EBADF, .persistent_storage_fd = persistent_storage_open(), + .dhcp_use_domains = _USE_DOMAINS_INVALID, + .dhcp6_use_domains = _USE_DOMAINS_INVALID, .dhcp_duid.type = DUID_TYPE_EN, .dhcp6_duid.type = DUID_TYPE_EN, .duid_product_uuid.type = DUID_TYPE_UUID, diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index 9d7cdbb4a2d..c7d7fc7efc6 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -1501,7 +1501,7 @@ static int ndisc_router_process_dnssl(Link *link, sd_ndisc_router *rt) { assert(link->network); assert(rt); - if (link->network->ndisc_use_domains == USE_DOMAINS_NO) + if (link_get_use_domains(link, NETWORK_CONFIG_SOURCE_NDISC) <= 0) return 0; r = sd_ndisc_router_get_sender_address(rt, &router); diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 5261482212d..ef60797f2e3 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -230,7 +230,7 @@ DHCPv4.UseSIP, config_parse_bool, DHCPv4.UseCaptivePortal, config_parse_bool, 0, offsetof(Network, dhcp_use_captive_portal) DHCPv4.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_use_mtu) DHCPv4.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_use_hostname) -DHCPv4.UseDomains, config_parse_dhcp_use_domains, AF_INET, 0 +DHCPv4.UseDomains, config_parse_use_domains, 0, offsetof(Network, dhcp_use_domains) DHCPv4.UseRoutes, config_parse_bool, 0, offsetof(Network, dhcp_use_routes) DHCPv4.UseGateway, config_parse_tristate, 0, offsetof(Network, dhcp_use_gateway) DHCPv4.QuickAck, config_parse_bool, 0, offsetof(Network, dhcp_quickack) @@ -273,7 +273,7 @@ DHCPv6.UseAddress, config_parse_bool, DHCPv6.UseDelegatedPrefix, config_parse_bool, 0, offsetof(Network, dhcp6_use_pd_prefix) DHCPv6.UseDNS, config_parse_dhcp_use_dns, AF_INET6, 0 DHCPv6.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp6_use_hostname) -DHCPv6.UseDomains, config_parse_dhcp_use_domains, AF_INET6, 0 +DHCPv6.UseDomains, config_parse_use_domains, 0, offsetof(Network, dhcp6_use_domains) DHCPv6.UseNTP, config_parse_dhcp_use_ntp, AF_INET6, 0 DHCPv6.UseCaptivePortal, config_parse_bool, 0, offsetof(Network, dhcp6_use_captive_portal) DHCPv6.MUDURL, config_parse_mud_url, 0, offsetof(Network, dhcp6_mudurl) @@ -592,8 +592,8 @@ DHCP.UseDNS, config_parse_dhcp_use_dns, DHCP.UseNTP, config_parse_dhcp_use_ntp, AF_UNSPEC, 0 DHCP.UseMTU, config_parse_bool, 0, offsetof(Network, dhcp_use_mtu) DHCP.UseHostname, config_parse_bool, 0, offsetof(Network, dhcp_use_hostname) -DHCP.UseDomains, config_parse_dhcp_use_domains, AF_UNSPEC, 0 -DHCP.UseDomainName, config_parse_dhcp_use_domains, AF_UNSPEC, 0 +DHCP.UseDomains, config_parse_use_domains, 0, offsetof(Network, compat_dhcp_use_domains) +DHCP.UseDomainName, config_parse_use_domains, 0, offsetof(Network, compat_dhcp_use_domains) DHCP.UseRoutes, config_parse_bool, 0, offsetof(Network, dhcp_use_routes) DHCP.Anonymize, config_parse_bool, 0, offsetof(Network, dhcp_anonymize) DHCP.SendHostname, config_parse_dhcp_send_hostname, AF_UNSPEC, 0 @@ -611,7 +611,7 @@ DHCP.UseTimezone, config_parse_bool, DHCP.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port) DHCP.RapidCommit, config_parse_bool, 0, offsetof(Network, dhcp6_use_rapid_commit) DHCP.ForceDHCPv6PDOtherInformation, config_parse_warn_compat, DISABLED_LEGACY, 0 -DHCPv4.UseDomainName, config_parse_dhcp_use_domains, AF_INET, 0 +DHCPv4.UseDomainName, config_parse_use_domains, 0, offsetof(Network, dhcp_use_domains) DHCPv4.CriticalConnection, config_parse_tristate, 0, offsetof(Network, dhcp_critical) DHCPv6.RouteMetric, config_parse_ndisc_route_metric, AF_INET6, 0 DHCPv6.ForceDHCPv6PDOtherInformation, config_parse_warn_compat, DISABLED_LEGACY, 0 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 7020741aa1d..f270142d557 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -380,6 +380,8 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi .keep_configuration = manager->keep_configuration, + .compat_dhcp_use_domains = _USE_DOMAINS_INVALID, + .dhcp_duid.type = _DUID_TYPE_INVALID, .dhcp_critical = -1, .dhcp_use_ntp = true, @@ -388,7 +390,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi .dhcp_use_captive_portal = true, .dhcp_use_dns = true, .dhcp_routes_to_dns = true, - .dhcp_use_domains = manager->dhcp_use_domains, + .dhcp_use_domains = _USE_DOMAINS_INVALID, .dhcp_use_hostname = true, .dhcp_use_routes = true, .dhcp_use_gateway = -1, @@ -405,7 +407,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi .dhcp6_use_address = true, .dhcp6_use_pd_prefix = true, .dhcp6_use_dns = true, - .dhcp6_use_domains = manager->dhcp6_use_domains, + .dhcp6_use_domains = _USE_DOMAINS_INVALID, .dhcp6_use_hostname = true, .dhcp6_use_ntp = true, .dhcp6_use_captive_portal = true, diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index 5b30b8e056a..6fc2eddf00d 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -113,6 +113,9 @@ struct Network { bool default_route_on_device; AddressFamily ip_masquerade; + /* For backward compatibility, only applied to DHCPv4 and DHCPv6. */ + UseDomains compat_dhcp_use_domains; + /* DHCP Client Support */ AddressFamily dhcp; struct in_addr dhcp_request_address; @@ -164,7 +167,6 @@ struct Network { bool dhcp_send_release; bool dhcp_send_decline; UseDomains dhcp_use_domains; - bool dhcp_use_domains_set; Set *dhcp_deny_listed_ip; Set *dhcp_allow_listed_ip; Set *dhcp_request_options; @@ -186,7 +188,6 @@ struct Network { bool dhcp6_use_captive_portal; bool dhcp6_use_rapid_commit; UseDomains dhcp6_use_domains; - bool dhcp6_use_domains_set; uint32_t dhcp6_iaid; bool dhcp6_iaid_set; bool dhcp6_iaid_set_explicitly; diff --git a/src/network/networkd-state-file.c b/src/network/networkd-state-file.c index b2e6c50de5b..182b985caca 100644 --- a/src/network/networkd-state-file.c +++ b/src/network/networkd-state-file.c @@ -224,7 +224,7 @@ static int link_put_domains(Link *link, bool is_route, OrderedSet **s) { if (r < 0) return r; - if (link->dhcp_lease && link->network->dhcp_use_domains == use_domains) { + if (link->dhcp_lease && link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP4) == use_domains) { const char *domainname; char **domains; @@ -243,7 +243,7 @@ static int link_put_domains(Link *link, bool is_route, OrderedSet **s) { } } - if (link->dhcp6_lease && link->network->dhcp6_use_domains == use_domains) { + if (link->dhcp6_lease && link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP6) == use_domains) { char **domains; r = sd_dhcp6_lease_get_domains(link->dhcp6_lease, &domains); @@ -254,7 +254,7 @@ static int link_put_domains(Link *link, bool is_route, OrderedSet **s) { } } - if (link->network->ndisc_use_domains == use_domains) { + if (link_get_use_domains(link, NETWORK_CONFIG_SOURCE_NDISC) == use_domains) { NDiscDNSSL *a; SET_FOREACH(a, link->ndisc_dnssl) { @@ -542,7 +542,7 @@ static void link_save_domains(Link *link, FILE *f, OrderedSet *static_domains, U if (use_domains == USE_DOMAINS_NO) return; - if (link->dhcp_lease && link->network->dhcp_use_domains == use_domains) { + if (link->dhcp_lease && link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP4) == use_domains) { const char *domainname; char **domains; @@ -552,14 +552,14 @@ static void link_save_domains(Link *link, FILE *f, OrderedSet *static_domains, U fputstrv(f, domains, NULL, &space); } - if (link->dhcp6_lease && link->network->dhcp6_use_domains == use_domains) { + if (link->dhcp6_lease && link_get_use_domains(link, NETWORK_CONFIG_SOURCE_DHCP6) == use_domains) { char **domains; if (sd_dhcp6_lease_get_domains(link->dhcp6_lease, &domains) >= 0) fputstrv(f, domains, NULL, &space); } - if (link->network->ndisc_use_domains == use_domains) { + if (link_get_use_domains(link, NETWORK_CONFIG_SOURCE_NDISC) == use_domains) { NDiscDNSSL *dd; SET_FOREACH(dd, link->ndisc_dnssl)