]> git.proxmox.com Git - systemd.git/blame - src/resolve/resolved-manager.h
bump version to 252.11-pve1
[systemd.git] / src / resolve / resolved-manager.h
CommitLineData
a032b68d 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
5eef597e
MP
2#pragma once
3
a10f5d05
MB
4#include <sys/stat.h>
5
5eef597e 6#include "sd-event.h"
86f210e9 7#include "sd-netlink.h"
4c89c718
MP
8#include "sd-network.h"
9
5eef597e 10#include "hashmap.h"
4c89c718
MP
11#include "list.h"
12#include "ordered-set.h"
13#include "resolve-util.h"
a032b68d 14#include "varlink.h"
5eef597e
MP
15
16typedef struct Manager Manager;
5eef597e
MP
17
18#include "resolved-dns-query.h"
4c89c718 19#include "resolved-dns-search-domain.h"
5eef597e 20#include "resolved-dns-stream.h"
a032b68d 21#include "resolved-dns-stub.h"
4c89c718 22#include "resolved-dns-trust-anchor.h"
5eef597e 23#include "resolved-link.h"
3a6ce677 24#include "resolved-socket-graveyard.h"
5eef597e 25
6e866b33
MB
26#define MANAGER_SEARCH_DOMAINS_MAX 256
27#define MANAGER_DNS_SERVERS_MAX 256
28
29typedef struct EtcHosts {
30 Hashmap *by_address;
31 Hashmap *by_name;
32 Set *no_address;
33} EtcHosts;
4c89c718 34
5eef597e
MP
35struct Manager {
36 sd_event *event;
37
4c89c718
MP
38 ResolveSupport llmnr_support;
39 ResolveSupport mdns_support;
40 DnssecMode dnssec_mode;
b012e921 41 DnsOverTlsMode dns_over_tls_mode;
f2dec872 42 DnsCacheMode enable_cache;
3a6ce677 43 bool cache_from_localhost;
8a584da2 44 DnsStubListenerMode dns_stub_listener_mode;
5eef597e 45
f2dec872
BR
46#if ENABLE_DNS_OVER_TLS
47 DnsTlsManagerData dnstls_data;
48#endif
49
5eef597e
MP
50 /* Network */
51 Hashmap *links;
52
86f210e9 53 sd_netlink *rtnl;
5eef597e
MP
54 sd_event_source *rtnl_event_source;
55
56 sd_network_monitor *network_monitor;
57 sd_event_source *network_event_source;
58
59 /* DNS query management */
60 Hashmap *dns_transactions;
61 LIST_HEAD(DnsQuery, dns_queries);
62 unsigned n_dns_queries;
3a6ce677 63 Hashmap *stub_queries_by_packet;
5eef597e
MP
64
65 LIST_HEAD(DnsStream, dns_streams);
bb4f798a 66 unsigned n_dns_streams[_DNS_STREAM_TYPE_MAX];
5eef597e
MP
67
68 /* Unicast dns */
5eef597e
MP
69 LIST_HEAD(DnsServer, dns_servers);
70 LIST_HEAD(DnsServer, fallback_dns_servers);
4c89c718 71 unsigned n_dns_servers; /* counts both main and fallback */
5eef597e
MP
72 DnsServer *current_dns_server;
73
4c89c718
MP
74 LIST_HEAD(DnsSearchDomain, search_domains);
75 unsigned n_search_domains;
4c89c718 76
a10f5d05
MB
77 bool need_builtin_fallbacks;
78 bool read_resolv_conf;
79 bool resolve_unicast_single_label;
4c89c718 80
a10f5d05 81 struct stat resolv_conf_stat;
5eef597e 82
4c89c718
MP
83 DnsTrustAnchor trust_anchor;
84
5eef597e
MP
85 LIST_HEAD(DnsScope, dns_scopes);
86 DnsScope *unicast_scope;
87
88 /* LLMNR */
89 int llmnr_ipv4_udp_fd;
90 int llmnr_ipv6_udp_fd;
91 int llmnr_ipv4_tcp_fd;
92 int llmnr_ipv6_tcp_fd;
93
94 sd_event_source *llmnr_ipv4_udp_event_source;
95 sd_event_source *llmnr_ipv6_udp_event_source;
96 sd_event_source *llmnr_ipv4_tcp_event_source;
97 sd_event_source *llmnr_ipv6_tcp_event_source;
98
4c89c718
MP
99 /* mDNS */
100 int mdns_ipv4_fd;
101 int mdns_ipv6_fd;
3a6ce677
BR
102 sd_event_source *mdns_ipv4_event_source;
103 sd_event_source *mdns_ipv6_event_source;
4c89c718 104
52ad194e
MB
105 /* DNS-SD */
106 Hashmap *dnssd_services;
107
5eef597e
MP
108 /* dbus */
109 sd_bus *bus;
5eef597e
MP
110
111 /* The hostname we publish on LLMNR and mDNS */
2897b343 112 char *full_hostname;
13d276d0
MP
113 char *llmnr_hostname;
114 char *mdns_hostname;
115 DnsResourceKey *llmnr_host_ipv4_key;
116 DnsResourceKey *llmnr_host_ipv6_key;
2897b343
MP
117 DnsResourceKey *mdns_host_ipv4_key;
118 DnsResourceKey *mdns_host_ipv6_key;
5eef597e
MP
119
120 /* Watch the system hostname */
121 int hostname_fd;
122 sd_event_source *hostname_event_source;
123
13d276d0 124 sd_event_source *sigusr1_event_source;
5a920b42 125 sd_event_source *sigusr2_event_source;
f5e65279 126 sd_event_source *sigrtmin1_event_source;
4c89c718
MP
127
128 unsigned n_transactions_total;
129 unsigned n_dnssec_verdict[_DNSSEC_VERDICT_MAX];
130
131 /* Data from /etc/hosts */
6e866b33 132 EtcHosts etc_hosts;
3a6ce677
BR
133 usec_t etc_hosts_last;
134 struct stat etc_hosts_stat;
6e866b33 135 bool read_etc_hosts;
5a920b42 136
a032b68d 137 OrderedSet *dns_extra_stub_listeners;
5a920b42 138
a032b68d 139 /* Local DNS stub on 127.0.0.53:53 */
5a920b42
MP
140 sd_event_source *dns_stub_udp_event_source;
141 sd_event_source *dns_stub_tcp_event_source;
52ad194e 142
ea0999c9
MB
143 /* Local DNS proxy stub on 127.0.0.54:53 */
144 sd_event_source *dns_proxy_stub_udp_event_source;
145 sd_event_source *dns_proxy_stub_tcp_event_source;
146
52ad194e 147 Hashmap *polkit_registry;
a032b68d
MB
148
149 VarlinkServer *varlink_server;
086111aa
LB
150 VarlinkServer *varlink_monitor_server;
151
152 Set *varlink_subscription;
3a6ce677
BR
153
154 sd_event_source *clock_change_event_source;
155
156 LIST_HEAD(SocketGraveyard, socket_graveyard);
157 SocketGraveyard *socket_graveyard_oldest;
158 size_t n_socket_graveyard;
5eef597e
MP
159};
160
161/* Manager */
162
163int manager_new(Manager **ret);
164Manager* manager_free(Manager *m);
165
166int manager_start(Manager *m);
5eef597e
MP
167
168uint32_t manager_find_mtu(Manager *m);
169
086111aa
LB
170int manager_monitor_send(Manager *m, int state, int rcode, int error, DnsQuestion *question_idna, DnsQuestion *question_utf8, DnsQuestion *collected_questions, DnsAnswer *answer);
171
7035cd9e 172int manager_write(Manager *m, int fd, DnsPacket *p);
5a920b42 173int 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);
5eef597e
MP
174int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
175
5eef597e
MP
176int manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_addr);
177LinkAddress* manager_find_link_address(Manager *m, int family, const union in_addr_union *in_addr);
178
179void manager_refresh_rrs(Manager *m);
180int manager_next_hostname(Manager *m);
181
3a6ce677
BR
182bool manager_packet_from_local_address(Manager *m, DnsPacket *p);
183bool manager_packet_from_our_transaction(Manager *m, DnsPacket *p);
184
5eef597e
MP
185DnsScope* manager_find_scope(Manager *m, DnsPacket *p);
186
187void manager_verify_all(Manager *m);
188
5eef597e
MP
189DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
190
a10f5d05 191/* For some reason we need some extra cmsg space on some kernels/archs. One of those days we need to figure out why */
5eef597e
MP
192#define EXTRA_CMSG_SPACE 1024
193
13d276d0
MP
194int manager_is_own_hostname(Manager *m, const char *name);
195
4c89c718 196int manager_compile_dns_servers(Manager *m, OrderedSet **servers);
5a920b42 197int manager_compile_search_domains(Manager *m, OrderedSet **domains, int filter_route);
4c89c718
MP
198
199DnssecMode manager_get_dnssec_mode(Manager *m);
200bool manager_dnssec_supported(Manager *m);
201
b012e921
MB
202DnsOverTlsMode manager_get_dns_over_tls_mode(Manager *m);
203
4c89c718
MP
204void manager_dnssec_verdict(Manager *m, DnssecVerdict verdict, const DnsResourceKey *key);
205
a032b68d 206bool manager_routable(Manager *m);
5a920b42 207
3a6ce677 208void manager_flush_caches(Manager *m, int log_level);
f5e65279 209void manager_reset_server_features(Manager *m);
5a920b42
MP
210
211void manager_cleanup_saved_user(Manager *m);
52ad194e
MB
212
213bool manager_next_dnssd_names(Manager *m);
3a6ce677
BR
214
215bool manager_server_is_stub(Manager *m, DnsServer *s);
216
217int socket_disable_pmtud(int fd, int af);