resolve: use enum for several fields

Unfortunately, we have already exposed dnssec with hyphen, so we cannot
change it as enum.
This commit is contained in:
Yu Watanabe
2025-11-07 02:31:14 +09:00
parent c6b6ac63ea
commit 76c674ec25
4 changed files with 75 additions and 7 deletions

View File

@@ -5,6 +5,10 @@
/* We want to reuse several structures from the io.systemd.Resolve interface, namely:
*
* - DNSProtocol
* - DNSOverTLSMode
* - ResolveSupport
* - ResolvConfMode
* - ResourceKey
* - ResourceRecord
* - DNSServer
@@ -52,13 +56,13 @@ static SD_VARLINK_DEFINE_STRUCT_TYPE(
static SD_VARLINK_DEFINE_STRUCT_TYPE(
ScopeCache,
SD_VARLINK_DEFINE_FIELD(protocol, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(protocol, DNSProtocol, 0),
SD_VARLINK_DEFINE_FIELD(family, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD(ifindex, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD(ifname, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(cache, CacheEntry, SD_VARLINK_ARRAY),
SD_VARLINK_DEFINE_FIELD(dnssec, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD(dnsOverTLS, SD_VARLINK_STRING, SD_VARLINK_NULLABLE));
SD_VARLINK_DEFINE_FIELD_BY_TYPE(dnsOverTLS, DNSOverTLSMode, SD_VARLINK_NULLABLE));
static SD_VARLINK_DEFINE_METHOD(
DumpCache,
@@ -137,6 +141,10 @@ SD_VARLINK_DEFINE_INTERFACE(
&vl_method_DumpServerState,
&vl_method_DumpStatistics,
&vl_method_ResetStatistics,
&vl_type_DNSProtocol,
&vl_type_DNSOverTLSMode,
&vl_type_ResolveSupport,
&vl_type_ResolvConfMode,
&vl_type_ResourceKey,
&vl_type_ResourceRecord,
&vl_type_ResourceRecordArray,

View File

@@ -1,7 +1,48 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include "resolve-util.h"
#include "varlink-io.systemd.Resolve.h"
SD_VARLINK_DEFINE_ENUM_TYPE(
DNSProtocol,
SD_VARLINK_FIELD_COMMENT("DNS"),
SD_VARLINK_DEFINE_ENUM_VALUE(dns),
SD_VARLINK_FIELD_COMMENT("Multicast DNS"),
SD_VARLINK_DEFINE_ENUM_VALUE(mdns),
SD_VARLINK_FIELD_COMMENT("LLMNR"),
SD_VARLINK_DEFINE_ENUM_VALUE(llmnr));
SD_VARLINK_DEFINE_ENUM_TYPE(
DNSOverTLSMode,
SD_VARLINK_FIELD_COMMENT("DNSOverTLS is disabled."),
SD_VARLINK_DEFINE_ENUM_VALUE(no),
SD_VARLINK_FIELD_COMMENT("DNSOverTLS is enabled."),
SD_VARLINK_DEFINE_ENUM_VALUE(yes),
SD_VARLINK_FIELD_COMMENT("Try to use DNSOverTLS, but disabled when the server does not support it."),
SD_VARLINK_DEFINE_ENUM_VALUE(opportunistic));
SD_VARLINK_DEFINE_ENUM_TYPE(
ResolveSupport,
SD_VARLINK_FIELD_COMMENT("The protocol is disabled."),
SD_VARLINK_DEFINE_ENUM_VALUE(no),
SD_VARLINK_FIELD_COMMENT("The protocol is enabled."),
SD_VARLINK_DEFINE_ENUM_VALUE(yes),
SD_VARLINK_FIELD_COMMENT("The protocol is used only for resolving."),
SD_VARLINK_DEFINE_ENUM_VALUE(resolve));
SD_VARLINK_DEFINE_ENUM_TYPE(
ResolvConfMode,
SD_VARLINK_FIELD_COMMENT("/etc/resolv.conf is a symbolic link to "PRIVATE_UPLINK_RESOLV_CONF"."),
SD_VARLINK_DEFINE_ENUM_VALUE(uplink),
SD_VARLINK_FIELD_COMMENT("/etc/resolv.conf is a symbolic link to "PRIVATE_STUB_RESOLV_CONF"."),
SD_VARLINK_DEFINE_ENUM_VALUE(stub),
SD_VARLINK_FIELD_COMMENT("/etc/resolv.conf is a symbolic link to "PRIVATE_STATIC_RESOLV_CONF"."),
SD_VARLINK_DEFINE_ENUM_VALUE(static),
SD_VARLINK_FIELD_COMMENT("/etc/resolv.conf does not exist."),
SD_VARLINK_DEFINE_ENUM_VALUE(missing),
SD_VARLINK_FIELD_COMMENT("/etc/resolv.conf is not managed by systemd-resolved."),
SD_VARLINK_DEFINE_ENUM_VALUE(foreign));
SD_VARLINK_DEFINE_STRUCT_TYPE(
ResourceKey,
SD_VARLINK_FIELD_COMMENT("The RR class, almost always IN, i.e 0x01. If unspecified defaults to IN."),
@@ -199,7 +240,7 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_DEFINE_STRUCT_TYPE(
DNSScope,
SD_VARLINK_FIELD_COMMENT("Protocol associated with this scope."),
SD_VARLINK_DEFINE_FIELD(protocol, SD_VARLINK_STRING, 0),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(protocol, DNSProtocol, 0),
SD_VARLINK_FIELD_COMMENT("Address family associated with this scope."),
SD_VARLINK_DEFINE_FIELD(family, SD_VARLINK_INT, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Interface index associated with this scope."),
@@ -209,7 +250,7 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("DNSSEC mode associated with this scope."),
SD_VARLINK_DEFINE_FIELD(dnssec, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("DNSOverTLS mode associated with this scope."),
SD_VARLINK_DEFINE_FIELD(dnsOverTLS, SD_VARLINK_STRING, SD_VARLINK_NULLABLE));
SD_VARLINK_DEFINE_FIELD_BY_TYPE(dnsOverTLS, DNSOverTLSMode, SD_VARLINK_NULLABLE));
SD_VARLINK_DEFINE_STRUCT_TYPE(
DNSConfiguration,
@@ -234,13 +275,14 @@ SD_VARLINK_DEFINE_STRUCT_TYPE(
SD_VARLINK_FIELD_COMMENT("DNSSEC mode."),
SD_VARLINK_DEFINE_FIELD(dnssec, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("DNSOverTLS mode."),
SD_VARLINK_DEFINE_FIELD(dnsOverTLS, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(dnsOverTLS, DNSOverTLSMode, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("LLMNR support."),
//SD_VARLINK_DEFINE_FIELD_BY_TYPE(llmnr, ResolveSupport, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD(llmnr, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("mDNS support."),
SD_VARLINK_DEFINE_FIELD(mDNS, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(mDNS, ResolveSupport, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("resolv.conf mode, set for global configuration only."),
SD_VARLINK_DEFINE_FIELD(resolvConfMode, SD_VARLINK_STRING, SD_VARLINK_NULLABLE),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(resolvConfMode, ResolvConfMode, SD_VARLINK_NULLABLE),
SD_VARLINK_FIELD_COMMENT("Array of current DNS scopes."),
SD_VARLINK_DEFINE_FIELD_BY_TYPE(scopes, DNSScope, SD_VARLINK_ARRAY|SD_VARLINK_NULLABLE));
@@ -317,6 +359,14 @@ SD_VARLINK_DEFINE_INTERFACE(
&vl_method_BrowseServices,
SD_VARLINK_SYMBOL_COMMENT("Current global and per-link DNS configurations."),
&vl_method_DumpDNSConfiguration,
SD_VARLINK_SYMBOL_COMMENT("The type of protocol."),
&vl_type_DNSProtocol,
SD_VARLINK_SYMBOL_COMMENT("The mode of DNSOverTLS."),
&vl_type_DNSOverTLSMode,
SD_VARLINK_SYMBOL_COMMENT("Whether the protocol is enabled."),
&vl_type_ResolveSupport,
SD_VARLINK_SYMBOL_COMMENT("The management mode of /etc/resolve.conf file."),
&vl_type_ResolvConfMode,
SD_VARLINK_SYMBOL_COMMENT("Encapsulates a resolved address."),
&vl_type_ResolvedAddress,
SD_VARLINK_SYMBOL_COMMENT("Encapsulates a resolved host name."),

View File

@@ -3,6 +3,10 @@
#include "sd-varlink-idl.h"
extern const sd_varlink_symbol vl_type_DNSProtocol;
extern const sd_varlink_symbol vl_type_DNSOverTLSMode;
extern const sd_varlink_symbol vl_type_ResolveSupport;
extern const sd_varlink_symbol vl_type_ResolvConfMode;
extern const sd_varlink_symbol vl_type_ResourceKey;
extern const sd_varlink_symbol vl_type_ResourceRecord;
extern const sd_varlink_symbol vl_type_DNSServer;

View File

@@ -13,6 +13,7 @@
#include "json-util.h"
#include "network-util.h"
#include "pretty-print.h"
#include "resolve-util.h"
#include "tests.h"
#include "varlink-idl-util.h"
#include "varlink-io.systemd.h"
@@ -512,13 +513,18 @@ static void test_enum_to_string_name(const char *n, const sd_varlink_symbol *sym
TEST(enums_idl) {
TEST_IDL_ENUM(BootEntryType, boot_entry_type, vl_type_BootEntryType);
TEST_IDL_ENUM_TO_STRING(BootEntrySource, boot_entry_source, vl_type_BootEntrySource);
TEST_IDL_ENUM(PartitionDesignator, partition_designator, vl_type_PartitionDesignator);
TEST_IDL_ENUM(LinkAddressState, link_address_state, vl_type_LinkAddressState);
TEST_IDL_ENUM_TO_STRING(LinkAddressState, link_address_state, vl_type_LinkAddressState);
TEST_IDL_ENUM(LinkOnlineState, link_online_state, vl_type_LinkOnlineState);
TEST_IDL_ENUM_TO_STRING(LinkOnlineState, link_online_state, vl_type_LinkOnlineState);
TEST_IDL_ENUM(AddressFamily, link_required_address_family, vl_type_LinkRequiredAddressFamily);
TEST_IDL_ENUM_TO_STRING(AddressFamily, link_required_address_family, vl_type_LinkRequiredAddressFamily);
TEST_IDL_ENUM(DnsOverTlsMode, dns_over_tls_mode, vl_type_DNSOverTLSMode);
TEST_IDL_ENUM(ResolveSupport, resolve_support, vl_type_ResolveSupport);
}
DEFINE_TEST_MAIN(LOG_DEBUG);