]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolve: use enum for several fields
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 6 Nov 2025 17:31:14 +0000 (02:31 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 10 Nov 2025 02:02:33 +0000 (11:02 +0900)
Unfortunately, we have already exposed dnssec with hyphen, so we cannot
change it as enum.

src/shared/varlink-io.systemd.Resolve.Monitor.c
src/shared/varlink-io.systemd.Resolve.c
src/shared/varlink-io.systemd.Resolve.h
src/test/test-varlink-idl.c

index 0fc67df221bbde96a54b0b2d908dfc4599d5232a..abff022b18999a69311921eb3c1213b43f522264 100644 (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,
index bdc0d9cd076b176e5b8ad1ab20a9283367262198..3f20c9f6ccc73d5d0b573e9e4e66dffdaa02ef5e 100644 (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."),
index 48fdabe13cd64ec71e49510fa00d62a7b3f7c029..c8322cd66a9cea2a96518fd910b253f070a19f98 100644 (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;
index cc2481a0847d63c8e96dfb4e9137416cd4af4d77..cecc64b3fdc493c51d5fdb3e743e32ca4ec580ed 100644 (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);