diff --git a/src/shared/dns-resolver-internal.h b/src/libsystemd-network/dns-resolver-internal.h similarity index 100% rename from src/shared/dns-resolver-internal.h rename to src/libsystemd-network/dns-resolver-internal.h diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build index 718495cd8eb..262ce9c4eff 100644 --- a/src/libsystemd-network/meson.build +++ b/src/libsystemd-network/meson.build @@ -23,6 +23,7 @@ sources = files( 'sd-dhcp-server.c', 'sd-dhcp6-client.c', 'sd-dhcp6-lease.c', + 'sd-dns-resolver.c', 'sd-ipv4acd.c', 'sd-ipv4ll.c', 'sd-lldp-rx.c', diff --git a/src/shared/sd-dns-resolver.c b/src/libsystemd-network/sd-dns-resolver.c similarity index 100% rename from src/shared/sd-dns-resolver.c rename to src/libsystemd-network/sd-dns-resolver.c diff --git a/src/systemd/sd-dns-resolver.h b/src/libsystemd-network/sd-dns-resolver.h similarity index 100% rename from src/systemd/sd-dns-resolver.h rename to src/libsystemd-network/sd-dns-resolver.h diff --git a/src/resolve/resolved-dns-packet.c b/src/resolve/resolved-dns-packet.c index adf5f4e06ba..f7490e3df6c 100644 --- a/src/resolve/resolved-dns-packet.c +++ b/src/resolve/resolved-dns-packet.c @@ -4,8 +4,6 @@ # include #endif -#include "dns-resolver-internal.h" - #include "alloc-util.h" #include "dns-domain.h" #include "escape.h" @@ -2883,6 +2881,27 @@ size_t dns_packet_size_unfragmented(DnsPacket *p) { return LESS_BY(p->fragsize, udp_header_size(p->family)); } +static const char* const dns_svc_param_key_table[_DNS_SVC_PARAM_KEY_MAX_DEFINED] = { + [DNS_SVC_PARAM_KEY_MANDATORY] = "mandatory", + [DNS_SVC_PARAM_KEY_ALPN] = "alpn", + [DNS_SVC_PARAM_KEY_NO_DEFAULT_ALPN] = "no-default-alpn", + [DNS_SVC_PARAM_KEY_PORT] = "port", + [DNS_SVC_PARAM_KEY_IPV4HINT] = "ipv4hint", + [DNS_SVC_PARAM_KEY_ECH] = "ech", + [DNS_SVC_PARAM_KEY_IPV6HINT] = "ipv6hint", + [DNS_SVC_PARAM_KEY_DOHPATH] = "dohpath", + [DNS_SVC_PARAM_KEY_OHTTP] = "ohttp", +}; +DEFINE_STRING_TABLE_LOOKUP_TO_STRING(dns_svc_param_key, int); + +const char* format_dns_svc_param_key(uint16_t i, char buf[static DECIMAL_STR_MAX(uint16_t)+3]) { + const char *p = dns_svc_param_key_to_string(i); + if (p) + return p; + + return snprintf_ok(buf, DECIMAL_STR_MAX(uint16_t)+3, "key%i", i); +} + static const char* const dns_rcode_table[_DNS_RCODE_MAX_DEFINED] = { [DNS_RCODE_SUCCESS] = "SUCCESS", [DNS_RCODE_FORMERR] = "FORMERR", diff --git a/src/resolve/resolved-dns-packet.h b/src/resolve/resolved-dns-packet.h index b785ef25d48..4cd237fd67d 100644 --- a/src/resolve/resolved-dns-packet.h +++ b/src/resolve/resolved-dns-packet.h @@ -369,6 +369,25 @@ DnsProtocol dns_protocol_from_string(const char *s) _pure_; extern const struct hash_ops dns_packet_hash_ops; +/* https://www.iana.org/assignments/dns-svcb/dns-svcb.xhtml#dns-svcparamkeys */ +enum { + DNS_SVC_PARAM_KEY_MANDATORY = 0, /* RFC 9460 § 8 */ + DNS_SVC_PARAM_KEY_ALPN = 1, /* RFC 9460 § 7.1 */ + DNS_SVC_PARAM_KEY_NO_DEFAULT_ALPN = 2, /* RFC 9460 § 7.1 */ + DNS_SVC_PARAM_KEY_PORT = 3, /* RFC 9460 § 7.2 */ + DNS_SVC_PARAM_KEY_IPV4HINT = 4, /* RFC 9460 § 7.3 */ + DNS_SVC_PARAM_KEY_ECH = 5, /* RFC 9460 */ + DNS_SVC_PARAM_KEY_IPV6HINT = 6, /* RFC 9460 § 7.3 */ + DNS_SVC_PARAM_KEY_DOHPATH = 7, /* RFC 9461 */ + DNS_SVC_PARAM_KEY_OHTTP = 8, + _DNS_SVC_PARAM_KEY_MAX_DEFINED, + DNS_SVC_PARAM_KEY_INVALID = 65535 /* RFC 9460 */ +}; + +const char* dns_svc_param_key_to_string(int i) _const_; +const char* format_dns_svc_param_key(uint16_t i, char buf[static DECIMAL_STR_MAX(uint16_t)+3]); +#define FORMAT_DNS_SVC_PARAM_KEY(i) format_dns_svc_param_key(i, (char [DECIMAL_STR_MAX(uint16_t)+3]) {}) + static inline uint64_t SD_RESOLVED_FLAGS_MAKE( DnsProtocol protocol, int family, diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c index 2e330adebbb..e9d667f7d5b 100644 --- a/src/resolve/resolved-dns-rr.c +++ b/src/resolve/resolved-dns-rr.c @@ -2,8 +2,6 @@ #include -#include "dns-resolver-internal.h" - #include "alloc-util.h" #include "dns-domain.h" #include "dns-type.h" diff --git a/src/shared/meson.build b/src/shared/meson.build index b579f0a64c6..e33e924b552 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -151,7 +151,6 @@ shared_sources = files( 'resize-fs.c', 'resolve-util.c', 'rm-rf.c', - 'sd-dns-resolver.c', 'securebits-util.c', 'selinux-util.c', 'serialize.c', diff --git a/src/systemd/meson.build b/src/systemd/meson.build index 3feab127447..4065ac4f30e 100644 --- a/src/systemd/meson.build +++ b/src/systemd/meson.build @@ -33,7 +33,6 @@ _not_installed_headers = [ 'sd-dhcp6-lease.h', 'sd-dhcp6-option.h', 'sd-dhcp6-protocol.h', - 'sd-dns-resolver.h', 'sd-ipv4acd.h', 'sd-ipv4ll.h', 'sd-lldp-rx.h',