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