]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-manager.h
sd-varlink: two small additions (#38994)
[thirdparty/systemd.git] / src / resolve / resolved-manager.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
74b2466e
LP
2#pragma once
3
61c12865
LP
4#include <sys/stat.h>
5
bb351718 6#include "common-signal.h"
284d7641 7#include "forward.h"
71d35b6b 8#include "list.h"
af49ca27 9#include "resolve-util.h"
8458b7fb 10#include "resolved-dns-browse-services.h"
68527d30 11#include "resolved-dns-dnssec.h"
19b50b5b 12#include "resolved-dns-stream.h"
ae8f0ec3 13#include "resolved-dns-stub.h"
0d2cd476 14#include "resolved-dns-trust-anchor.h"
68527d30 15#include "resolved-etc-hosts.h"
284d7641 16#include "resolved-forward.h"
4e945a6f 17
0d229ef1 18#define MANAGER_SEARCH_DOMAINS_MAX 1024
b950ee06 19#define MANAGER_DNS_SERVERS_MAX 256
eed857b7 20
68527d30 21typedef struct Manager {
091a364c
TG
22 sd_event *event;
23
af49ca27
LP
24 ResolveSupport llmnr_support;
25 ResolveSupport mdns_support;
ad6c0475 26 DnssecMode dnssec_mode;
c9299be2 27 DnsOverTlsMode dns_over_tls_mode;
37d7a7d9 28 DnsCacheMode enable_cache;
6d8325f6 29 bool cache_from_localhost;
1ae43295 30 DnsStubListenerMode dns_stub_listener_mode;
5ed91481 31 usec_t stale_retention_usec;
1716f6dc 32
e22c5b20
IT
33#if ENABLE_DNS_OVER_TLS
34 DnsTlsManagerData dnstls_data;
35#endif
36
1716f6dc 37 /* Network */
74b2466e
LP
38 Hashmap *links;
39
1c4baffc 40 sd_netlink *rtnl;
74b2466e
LP
41 sd_event_source *rtnl_event_source;
42
091a364c 43 sd_network_monitor *network_monitor;
74b2466e
LP
44 sd_event_source *network_event_source;
45
1716f6dc 46 /* DNS query management */
ec2c5e43 47 Hashmap *dns_transactions;
1716f6dc
LP
48 LIST_HEAD(DnsQuery, dns_queries);
49 unsigned n_dns_queries;
bde69bbd 50 Hashmap *stub_queries_by_packet;
1716f6dc 51
623a4c97 52 LIST_HEAD(DnsStream, dns_streams);
652ba568 53 unsigned n_dns_streams[_DNS_STREAM_TYPE_MAX];
623a4c97 54
1716f6dc 55 /* Unicast dns */
74b2466e 56 LIST_HEAD(DnsServer, dns_servers);
4e945a6f 57 LIST_HEAD(DnsServer, fallback_dns_servers);
eed857b7 58 unsigned n_dns_servers; /* counts both main and fallback */
74b2466e
LP
59 DnsServer *current_dns_server;
60
a51c1048 61 LIST_HEAD(DnsSearchDomain, search_domains);
eed857b7 62 unsigned n_search_domains;
a51c1048 63
c2f1e83e
ZJS
64 bool need_builtin_fallbacks;
65 bool read_resolv_conf;
3b5bd7d6 66 bool resolve_unicast_single_label;
a51c1048 67
61c12865 68 struct stat resolv_conf_stat;
5cb36f41 69
0d2cd476
LP
70 DnsTrustAnchor trust_anchor;
71
74b2466e
LP
72 LIST_HEAD(DnsScope, dns_scopes);
73 DnsScope *unicast_scope;
74
7928c0e0
LP
75 Hashmap *delegates; /* id string → DnsDelegate objects */
76
1716f6dc
LP
77 /* LLMNR */
78 int llmnr_ipv4_udp_fd;
79 int llmnr_ipv6_udp_fd;
623a4c97
LP
80 int llmnr_ipv4_tcp_fd;
81 int llmnr_ipv6_tcp_fd;
1716f6dc
LP
82
83 sd_event_source *llmnr_ipv4_udp_event_source;
84 sd_event_source *llmnr_ipv6_udp_event_source;
623a4c97
LP
85 sd_event_source *llmnr_ipv4_tcp_event_source;
86 sd_event_source *llmnr_ipv6_tcp_event_source;
1716f6dc 87
bc7702b0
DM
88 /* mDNS */
89 int mdns_ipv4_fd;
90 int mdns_ipv6_fd;
6d76b5d7
LP
91 sd_event_source *mdns_ipv4_event_source;
92 sd_event_source *mdns_ipv6_event_source;
bc7702b0 93
6501dd31 94 /* DNS-SD */
108bd5c2 95 Hashmap *dnssd_registered_services;
6501dd31 96
74b2466e
LP
97 /* dbus */
98 sd_bus *bus;
623a4c97
LP
99
100 /* The hostname we publish on LLMNR and mDNS */
e96de0ce 101 char *full_hostname;
78c6a153
LP
102 char *llmnr_hostname;
103 char *mdns_hostname;
104 DnsResourceKey *llmnr_host_ipv4_key;
105 DnsResourceKey *llmnr_host_ipv6_key;
400cb36e
DR
106 DnsResourceKey *mdns_host_ipv4_key;
107 DnsResourceKey *mdns_host_ipv6_key;
eb60f9cd
LP
108
109 /* Watch the system hostname */
110 int hostname_fd;
111 sd_event_source *hostname_event_source;
902bb5d8 112
a150ff5e 113 unsigned n_transactions_total;
bc837621
KV
114 unsigned n_timeouts_total;
115 unsigned n_timeouts_served_stale_total;
116 unsigned n_failure_responses_total;
117 unsigned n_failure_responses_served_stale_total;
118
59c5b597 119 unsigned n_dnssec_verdict[_DNSSEC_VERDICT_MAX];
dd0bc0f1
LP
120
121 /* Data from /etc/hosts */
37b7cc8d 122 EtcHosts etc_hosts;
36d892b7
LP
123 usec_t etc_hosts_last;
124 struct stat etc_hosts_stat;
86317087 125 bool read_etc_hosts;
b30bf55d 126
81ae2237
MNBKL
127 /* List of refused DNS Record Types*/
128 Set *refuse_record_types;
129
1f05101f
SS
130 OrderedSet *dns_extra_stub_listeners;
131
7216a3b5 132 /* Local DNS stub on 127.0.0.53:53 */
b30bf55d
LP
133 sd_event_source *dns_stub_udp_event_source;
134 sd_event_source *dns_stub_tcp_event_source;
84b0f133 135
a8d09063
LP
136 /* Local DNS proxy stub on 127.0.0.54:53 */
137 sd_event_source *dns_proxy_stub_udp_event_source;
138 sd_event_source *dns_proxy_stub_tcp_event_source;
139
84b0f133 140 Hashmap *polkit_registry;
9581bb84 141
25ff515b
LP
142 sd_varlink_server *varlink_server;
143 sd_varlink_server *varlink_monitor_server;
cb456374 144
cf22b5c5 145 Set *varlink_query_results_subscription;
54401c6f
NR
146 Set *varlink_dns_configuration_subscription;
147
148 sd_json_variant *dns_configuration_json;
149
150 sd_netlink_slot *netlink_new_route_slot;
151 sd_netlink_slot *netlink_del_route_slot;
90df0fbe
LP
152
153 sd_event_source *clock_change_event_source;
80710ade
LP
154
155 LIST_HEAD(SocketGraveyard, socket_graveyard);
156 SocketGraveyard *socket_graveyard_oldest;
157 size_t n_socket_graveyard;
bb351718
LP
158
159 struct sigrtmin18_info sigrtmin18_info;
8458b7fb
VCS
160
161 /* Map varlink links to DnsServiceBrowser instances. */
162 Hashmap *dns_service_browsers;
68527d30 163} Manager;
091a364c
TG
164
165/* Manager */
166
167int manager_new(Manager **ret);
74b2466e
LP
168Manager* manager_free(Manager *m);
169
edc501d4 170int manager_start(Manager *m);
74b2466e 171
e1c95994 172uint32_t manager_find_mtu(Manager *m);
091a364c 173
d9f9b8ce 174int manager_monitor_send(Manager *m, DnsQuery *q);
cb456374 175
ed6c5178 176int sendmsg_loop(int fd, struct msghdr *mh, int flags);
72290734 177int manager_write(Manager *m, int fd, DnsPacket *p);
b30bf55d 178int 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 179int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
74b2466e 180
623a4c97 181int manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_addr);
4e945a6f 182LinkAddress* manager_find_link_address(Manager *m, int family, const union in_addr_union *in_addr);
ec2c5e43 183
eb60f9cd 184void manager_refresh_rrs(Manager *m);
ec2c5e43 185int manager_next_hostname(Manager *m);
74b2466e 186
94378145 187bool manager_packet_from_local_address(Manager *m, DnsPacket *p);
a9fd8837
LP
188bool manager_packet_from_our_transaction(Manager *m, DnsPacket *p);
189
8458b7fb
VCS
190DnsScope* manager_find_scope_from_protocol(Manager *m, int ifindex, DnsProtocol protocol, int family);
191
192static inline DnsScope* manager_find_scope(Manager *m, DnsPacket *p) {
193 assert(m);
194 assert(p);
195 return manager_find_scope_from_protocol(m, p->ifindex, p->protocol, p->family);
196}
091a364c 197
902bb5d8
LP
198void manager_verify_all(Manager *m);
199
091a364c 200DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
091a364c 201
15dd4515 202/* For some reason we need some extra cmsg space on some kernels/archs. One of those days we need to figure out why */
623a4c97 203#define EXTRA_CMSG_SPACE 1024
4e945a6f 204
78c6a153
LP
205int manager_is_own_hostname(Manager *m, const char *name);
206
9176a57c 207int manager_compile_dns_servers(Manager *m, OrderedSet **servers);
6f7da49d 208int manager_compile_search_domains(Manager *m, OrderedSet **domains, int filter_route);
c69fa7e3
LP
209
210DnssecMode manager_get_dnssec_mode(Manager *m);
211bool manager_dnssec_supported(Manager *m);
59c5b597 212
c9299be2 213DnsOverTlsMode manager_get_dns_over_tls_mode(Manager *m);
5d67a7ae 214
59c5b597 215void manager_dnssec_verdict(Manager *m, DnssecVerdict verdict, const DnsResourceKey *key);
011696f7 216
de4a0138 217bool manager_routable(Manager *m);
ba35662f 218
90df0fbe 219void manager_flush_caches(Manager *m, int log_level);
59c0fd0e 220void manager_reset_server_features(Manager *m);
943ef07c
LP
221
222void manager_cleanup_saved_user(Manager *m);
e7c1b0e4
DR
223
224bool manager_next_dnssd_names(Manager *m);
49ef064c
LP
225
226bool manager_server_is_stub(Manager *m, DnsServer *s);
eb170e75
LP
227
228int socket_disable_pmtud(int fd, int af);
bc837621 229
309a747f 230int dns_manager_dump_statistics_json(Manager *m, sd_json_variant **ret);
bc837621 231
a67e5c6e 232void dns_manager_reset_statistics(Manager *m);
54401c6f
NR
233
234int manager_dump_dns_configuration_json(Manager *m, sd_json_variant **ret);
235int manager_send_dns_configuration_changed(Manager *m, Link *l, bool reset);
236
237int manager_start_dns_configuration_monitor(Manager *m);
238void manager_stop_dns_configuration_monitor(Manager *m);