]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-manager.h
resolved: add missing error code check when initializing DNS-over-TLS
[thirdparty/systemd.git] / src / resolve / resolved-manager.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
74b2466e
LP
2#pragma once
3
091a364c 4#include "sd-event.h"
1c4baffc 5#include "sd-netlink.h"
71d35b6b
TA
6#include "sd-network.h"
7
74b2466e 8#include "hashmap.h"
71d35b6b 9#include "list.h"
9176a57c 10#include "ordered-set.h"
af49ca27 11#include "resolve-util.h"
091a364c 12
091a364c 13typedef struct Manager Manager;
19b50b5b 14
1ae43295 15#include "resolved-conf.h"
19b50b5b 16#include "resolved-dns-query.h"
a51c1048
LP
17#include "resolved-dns-search-domain.h"
18#include "resolved-dns-server.h"
19b50b5b 19#include "resolved-dns-stream.h"
0d2cd476 20#include "resolved-dns-trust-anchor.h"
e22c5b20 21#include "resolved-dnstls.h"
19b50b5b 22#include "resolved-link.h"
4e945a6f 23
b950ee06
LP
24#define MANAGER_SEARCH_DOMAINS_MAX 256
25#define MANAGER_DNS_SERVERS_MAX 256
eed857b7 26
37b7cc8d
ZJS
27typedef struct EtcHosts {
28 Hashmap *by_address;
29 Hashmap *by_name;
fd373593 30 Set *no_address;
37b7cc8d
ZJS
31} EtcHosts;
32
091a364c
TG
33struct Manager {
34 sd_event *event;
35
af49ca27
LP
36 ResolveSupport llmnr_support;
37 ResolveSupport mdns_support;
ad6c0475 38 DnssecMode dnssec_mode;
c9299be2 39 DnsOverTlsMode dns_over_tls_mode;
ceeddf79 40 bool enable_cache;
1ae43295 41 DnsStubListenerMode dns_stub_listener_mode;
1716f6dc 42
e22c5b20
IT
43#if ENABLE_DNS_OVER_TLS
44 DnsTlsManagerData dnstls_data;
45#endif
46
1716f6dc 47 /* Network */
74b2466e
LP
48 Hashmap *links;
49
1c4baffc 50 sd_netlink *rtnl;
74b2466e
LP
51 sd_event_source *rtnl_event_source;
52
091a364c 53 sd_network_monitor *network_monitor;
74b2466e
LP
54 sd_event_source *network_event_source;
55
1716f6dc 56 /* DNS query management */
ec2c5e43 57 Hashmap *dns_transactions;
1716f6dc
LP
58 LIST_HEAD(DnsQuery, dns_queries);
59 unsigned n_dns_queries;
60
623a4c97 61 LIST_HEAD(DnsStream, dns_streams);
652ba568 62 unsigned n_dns_streams[_DNS_STREAM_TYPE_MAX];
623a4c97 63
1716f6dc 64 /* Unicast dns */
74b2466e 65 LIST_HEAD(DnsServer, dns_servers);
4e945a6f 66 LIST_HEAD(DnsServer, fallback_dns_servers);
eed857b7 67 unsigned n_dns_servers; /* counts both main and fallback */
74b2466e
LP
68 DnsServer *current_dns_server;
69
a51c1048 70 LIST_HEAD(DnsSearchDomain, search_domains);
eed857b7 71 unsigned n_search_domains;
a51c1048 72
00fa60ae 73 bool need_builtin_fallbacks:1;
a51c1048 74
00fa60ae 75 bool read_resolv_conf:1;
5cb36f41
LP
76 usec_t resolv_conf_mtime;
77
0d2cd476
LP
78 DnsTrustAnchor trust_anchor;
79
74b2466e
LP
80 LIST_HEAD(DnsScope, dns_scopes);
81 DnsScope *unicast_scope;
82
1716f6dc
LP
83 /* LLMNR */
84 int llmnr_ipv4_udp_fd;
85 int llmnr_ipv6_udp_fd;
623a4c97
LP
86 int llmnr_ipv4_tcp_fd;
87 int llmnr_ipv6_tcp_fd;
1716f6dc
LP
88
89 sd_event_source *llmnr_ipv4_udp_event_source;
90 sd_event_source *llmnr_ipv6_udp_event_source;
623a4c97
LP
91 sd_event_source *llmnr_ipv4_tcp_event_source;
92 sd_event_source *llmnr_ipv6_tcp_event_source;
1716f6dc 93
bc7702b0
DM
94 /* mDNS */
95 int mdns_ipv4_fd;
96 int mdns_ipv6_fd;
97
6501dd31
DR
98 /* DNS-SD */
99 Hashmap *dnssd_services;
100
bc7702b0
DM
101 sd_event_source *mdns_ipv4_event_source;
102 sd_event_source *mdns_ipv6_event_source;
103
74b2466e
LP
104 /* dbus */
105 sd_bus *bus;
623a4c97
LP
106
107 /* The hostname we publish on LLMNR and mDNS */
e96de0ce 108 char *full_hostname;
78c6a153
LP
109 char *llmnr_hostname;
110 char *mdns_hostname;
111 DnsResourceKey *llmnr_host_ipv4_key;
112 DnsResourceKey *llmnr_host_ipv6_key;
400cb36e
DR
113 DnsResourceKey *mdns_host_ipv4_key;
114 DnsResourceKey *mdns_host_ipv6_key;
eb60f9cd
LP
115
116 /* Watch the system hostname */
117 int hostname_fd;
118 sd_event_source *hostname_event_source;
902bb5d8 119
4d506d6b 120 sd_event_source *sigusr1_event_source;
bc81447e 121 sd_event_source *sigusr2_event_source;
d55b0463 122 sd_event_source *sigrtmin1_event_source;
a150ff5e
LP
123
124 unsigned n_transactions_total;
59c5b597 125 unsigned n_dnssec_verdict[_DNSSEC_VERDICT_MAX];
dd0bc0f1
LP
126
127 /* Data from /etc/hosts */
37b7cc8d 128 EtcHosts etc_hosts;
dd0bc0f1 129 usec_t etc_hosts_last, etc_hosts_mtime;
86317087 130 bool read_etc_hosts;
b30bf55d
LP
131
132 /* Local DNS stub on 127.0.0.53:53 */
133 int dns_stub_udp_fd;
134 int dns_stub_tcp_fd;
135
136 sd_event_source *dns_stub_udp_event_source;
137 sd_event_source *dns_stub_tcp_event_source;
84b0f133
DR
138
139 Hashmap *polkit_registry;
091a364c
TG
140};
141
142/* Manager */
143
144int manager_new(Manager **ret);
74b2466e
LP
145Manager* manager_free(Manager *m);
146
edc501d4 147int manager_start(Manager *m);
74b2466e 148
e1c95994 149uint32_t manager_find_mtu(Manager *m);
091a364c 150
72290734 151int manager_write(Manager *m, int fd, DnsPacket *p);
b30bf55d 152int manager_send(Manager *m, int fd, int ifindex, int family, const union in_addr_union *destination, uint16_t port, const union in_addr_union *source, DnsPacket *p);
1716f6dc 153int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
74b2466e 154
623a4c97 155int manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_addr);
4e945a6f 156LinkAddress* manager_find_link_address(Manager *m, int family, const union in_addr_union *in_addr);
ec2c5e43 157
eb60f9cd 158void manager_refresh_rrs(Manager *m);
ec2c5e43 159int manager_next_hostname(Manager *m);
74b2466e 160
a4076574
LP
161bool manager_our_packet(Manager *m, DnsPacket *p);
162DnsScope* manager_find_scope(Manager *m, DnsPacket *p);
091a364c 163
902bb5d8
LP
164void manager_verify_all(Manager *m);
165
091a364c 166DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
091a364c 167
623a4c97 168#define EXTRA_CMSG_SPACE 1024
4e945a6f 169
78c6a153
LP
170int manager_is_own_hostname(Manager *m, const char *name);
171
9176a57c 172int manager_compile_dns_servers(Manager *m, OrderedSet **servers);
6f7da49d 173int manager_compile_search_domains(Manager *m, OrderedSet **domains, int filter_route);
c69fa7e3
LP
174
175DnssecMode manager_get_dnssec_mode(Manager *m);
176bool manager_dnssec_supported(Manager *m);
59c5b597 177
c9299be2 178DnsOverTlsMode manager_get_dns_over_tls_mode(Manager *m);
5d67a7ae 179
59c5b597 180void manager_dnssec_verdict(Manager *m, DnssecVerdict verdict, const DnsResourceKey *key);
011696f7
LP
181
182bool manager_routable(Manager *m, int family);
ba35662f
LP
183
184void manager_flush_caches(Manager *m);
59c0fd0e 185void manager_reset_server_features(Manager *m);
943ef07c
LP
186
187void manager_cleanup_saved_user(Manager *m);
e7c1b0e4
DR
188
189bool manager_next_dnssd_names(Manager *m);