From: Yu Watanabe Date: Thu, 6 Nov 2025 17:31:14 +0000 (+0900) Subject: resolve: use enum for several fields X-Git-Tag: v259-rc1~105^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=76c674ec25cd12a73e0186ecbce50a3cbe3a45f0;p=thirdparty%2Fsystemd.git resolve: use enum for several fields Unfortunately, we have already exposed dnssec with hyphen, so we cannot change it as enum. --- diff --git a/src/shared/varlink-io.systemd.Resolve.Monitor.c b/src/shared/varlink-io.systemd.Resolve.Monitor.c index 0fc67df221b..abff022b189 100644 --- a/src/shared/varlink-io.systemd.Resolve.Monitor.c +++ b/src/shared/varlink-io.systemd.Resolve.Monitor.c @@ -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, diff --git a/src/shared/varlink-io.systemd.Resolve.c b/src/shared/varlink-io.systemd.Resolve.c index bdc0d9cd076..3f20c9f6ccc 100644 --- a/src/shared/varlink-io.systemd.Resolve.c +++ b/src/shared/varlink-io.systemd.Resolve.c @@ -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."), diff --git a/src/shared/varlink-io.systemd.Resolve.h b/src/shared/varlink-io.systemd.Resolve.h index 48fdabe13cd..c8322cd66a9 100644 --- a/src/shared/varlink-io.systemd.Resolve.h +++ b/src/shared/varlink-io.systemd.Resolve.h @@ -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; diff --git a/src/test/test-varlink-idl.c b/src/test/test-varlink-idl.c index cc2481a0847..cecc64b3fdc 100644 --- a/src/test/test-varlink-idl.c +++ b/src/test/test-varlink-idl.c @@ -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);