networkd: add support for Domains= to .network files
This allows the search/routing domanis to be specified per link/network and be passed on to resolved.
This commit is contained in:
parent
2f3a215f61
commit
6192b846ca
|
@ -301,7 +301,18 @@
|
|||
This option may be specified more than once.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<!-- TODO: document NTP= option when it is actually used somewhere -->
|
||||
<varlistentry>
|
||||
<term><varname>Domains=</varname></term>
|
||||
<listitem>
|
||||
<para>The domains used for DNS resolution over this link.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>NTP=</varname></term>
|
||||
<listitem>
|
||||
<para>An NTP server address. This option may be specified more than once.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>Bridge=</varname></term>
|
||||
<listitem>
|
||||
|
|
|
@ -1722,6 +1722,7 @@ int link_save(Link *link) {
|
|||
|
||||
if (link->network) {
|
||||
char **address;
|
||||
char **domain;
|
||||
|
||||
fputs("DNS=", f);
|
||||
|
||||
|
@ -1763,15 +1764,26 @@ int link_save(Link *link) {
|
|||
|
||||
fputs("\n", f);
|
||||
|
||||
fprintf(f, "DOMAINS=");
|
||||
|
||||
if (link->network->dhcp_domains &&
|
||||
link->dhcp_lease) {
|
||||
const char *domainname;
|
||||
|
||||
r = sd_dhcp_lease_get_domainname(link->dhcp_lease, &domainname);
|
||||
if (r >= 0)
|
||||
fprintf(f, "DOMAINS=%s\n", domainname);
|
||||
if (r >= 0) {
|
||||
fputs(domainname, f);
|
||||
if (link->network->domains)
|
||||
fputs(" ", f);
|
||||
}
|
||||
}
|
||||
|
||||
STRV_FOREACH(domain, link->network->domains)
|
||||
fprintf(f, "%s%s", *domain,
|
||||
(domain + 1 ? " " : ""));
|
||||
|
||||
fputs("\n", f);
|
||||
|
||||
fprintf(f, "LLMNR=%s\n",
|
||||
llmnr_support_to_string(link->network->llmnr));
|
||||
}
|
||||
|
|
|
@ -37,6 +37,7 @@ Network.IPv4LL, config_parse_bool, 0,
|
|||
Network.IPv4LLRoute, config_parse_bool, 0, offsetof(Network, ipv4ll_route)
|
||||
Network.Address, config_parse_address, 0, 0
|
||||
Network.Gateway, config_parse_gateway, 0, 0
|
||||
Network.Domains, config_parse_domains, 0, offsetof(Network, domains)
|
||||
Network.DNS, config_parse_strv, 0, offsetof(Network, dns)
|
||||
Network.LLMNR, config_parse_llmnr, 0, offsetof(Network, llmnr)
|
||||
Network.NTP, config_parse_strv, 0, offsetof(Network, ntp)
|
||||
|
|
|
@ -341,6 +341,34 @@ int config_parse_netdev(const char *unit,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_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) {
|
||||
char ***domains = data;
|
||||
char **domain;
|
||||
int r;
|
||||
|
||||
r = config_parse_strv(unit, filename, line, section, section_line,
|
||||
lvalue, ltype, rvalue, domains, userdata);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
strv_uniq(*domains);
|
||||
|
||||
STRV_FOREACH(domain, *domains)
|
||||
if (is_localhost(*domain) || !hostname_is_valid(*domain))
|
||||
strv_remove(*domains, *domain);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_parse_tunnel(const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
|
|
|
@ -111,7 +111,7 @@ struct Network {
|
|||
Hashmap *addresses_by_section;
|
||||
Hashmap *routes_by_section;
|
||||
|
||||
char **dns, **ntp;
|
||||
char **domains, **dns, **ntp;
|
||||
|
||||
LLMNRSupport llmnr;
|
||||
|
||||
|
@ -224,6 +224,17 @@ int config_parse_netdev(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);
|
||||
|
||||
int config_parse_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);
|
||||
|
||||
int config_parse_tunnel(const char *unit,
|
||||
const char *filename,
|
||||
unsigned line,
|
||||
|
|
Loading…
Reference in New Issue