int default_route,
DnsServer *current_dns_server,
DnsServer *dns_servers,
+ DnsServer *fallback_dns_servers,
DnsSearchDomain *search_domains,
Set *negative_trust_anchors,
Set *dns_scopes,
sd_json_variant **configuration) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *dns_servers_json = NULL,
+ *fallback_dns_servers_json = NULL,
*search_domains_json = NULL,
*current_dns_server_json = NULL,
*scopes_json = NULL;
return r;
}
+ if (fallback_dns_servers) {
+ r = sd_json_variant_new_array(&fallback_dns_servers_json, NULL, 0);
+ if (r < 0)
+ return r;
+ }
+
SET_FOREACH(scope, dns_scopes) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
return r;
}
+ LIST_FOREACH(servers, s, fallback_dns_servers) {
+ _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
+
+ assert(fallback_dns_servers_json);
+
+ r = dns_server_dump_configuration_to_json(s, &v);
+ if (r < 0)
+ return r;
+
+ r = sd_json_variant_append_array(&fallback_dns_servers_json, v);
+ if (r < 0)
+ return r;
+ }
+
return sd_json_variant_append_arraybo(
configuration,
JSON_BUILD_PAIR_STRING_NON_EMPTY("ifname", ifname),
default_route > 0),
JSON_BUILD_PAIR_VARIANT_NON_NULL("currentServer", current_dns_server_json),
JSON_BUILD_PAIR_VARIANT_NON_NULL("servers", dns_servers_json),
+ JSON_BUILD_PAIR_VARIANT_NON_NULL("fallbackServers", fallback_dns_servers_json),
JSON_BUILD_PAIR_VARIANT_NON_NULL("searchDomains", search_domains_json),
SD_JSON_BUILD_PAIR_CONDITION(!set_isempty(negative_trust_anchors),
"negativeTrustAnchors",
/* default_route = */ 0,
manager_get_dns_server(m),
m->dns_servers,
+ m->fallback_dns_servers,
m->search_domains,
m->trust_anchor.negative_by_name,
scopes,
link_get_default_route(l),
link_get_dns_server(l),
l->dns_servers,
+ /* fallback_dns_servers = */ NULL,
l->search_domains,
l->dnssec_negative_trust_anchors,
scopes,
d->default_route,
dns_delegate_get_dns_server(d),
d->dns_servers,
+ /* fallback_dns_servers = */ NULL,
d->search_domains,
/* negative_trust_anchors = */ NULL,
scopes,
SD_VARLINK_DEFINE_FIELD_BY_TYPE(currentServer, DNSServer, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Array of configured DNS servers."),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(servers, DNSServer, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
+ SD_VARLINK_FIELD_COMMENT("Array of configured fallback DNS servers, set for global configuration only."),
+ SD_VARLINK_DEFINE_FIELD_BY_TYPE(fallbackServers, DNSServer, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Array of configured search domains."),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(searchDomains, SearchDomain, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Array of configured DNSSEC negative trust anchors."),