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