]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/resolve/resolved-manager.h
Merge pull request #9560 from mbiebl/uaccess-dev-kvm
[thirdparty/systemd.git] / src / resolve / resolved-manager.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 #include "sd-event.h"
5 #include "sd-netlink.h"
6 #include "sd-network.h"
7
8 #include "hashmap.h"
9 #include "list.h"
10 #include "ordered-set.h"
11 #include "resolve-util.h"
12
13 typedef struct Manager Manager;
14
15 #include "resolved-conf.h"
16 #include "resolved-dns-query.h"
17 #include "resolved-dns-search-domain.h"
18 #include "resolved-dns-server.h"
19 #include "resolved-dns-stream.h"
20 #include "resolved-dns-trust-anchor.h"
21 #include "resolved-link.h"
22
23 #define MANAGER_SEARCH_DOMAINS_MAX 32
24 #define MANAGER_DNS_SERVERS_MAX 32
25
26 struct Manager {
27 sd_event *event;
28
29 ResolveSupport llmnr_support;
30 ResolveSupport mdns_support;
31 DnssecMode dnssec_mode;
32 DnsOverTlsMode dns_over_tls_mode;
33 bool enable_cache;
34 DnsStubListenerMode dns_stub_listener_mode;
35
36 /* Network */
37 Hashmap *links;
38
39 sd_netlink *rtnl;
40 sd_event_source *rtnl_event_source;
41
42 sd_network_monitor *network_monitor;
43 sd_event_source *network_event_source;
44
45 /* DNS query management */
46 Hashmap *dns_transactions;
47 LIST_HEAD(DnsQuery, dns_queries);
48 unsigned n_dns_queries;
49
50 LIST_HEAD(DnsStream, dns_streams);
51 unsigned n_dns_streams;
52
53 /* Unicast dns */
54 LIST_HEAD(DnsServer, dns_servers);
55 LIST_HEAD(DnsServer, fallback_dns_servers);
56 unsigned n_dns_servers; /* counts both main and fallback */
57 DnsServer *current_dns_server;
58
59 LIST_HEAD(DnsSearchDomain, search_domains);
60 unsigned n_search_domains;
61
62 bool need_builtin_fallbacks:1;
63
64 bool read_resolv_conf:1;
65 usec_t resolv_conf_mtime;
66
67 DnsTrustAnchor trust_anchor;
68
69 LIST_HEAD(DnsScope, dns_scopes);
70 DnsScope *unicast_scope;
71
72 /* LLMNR */
73 int llmnr_ipv4_udp_fd;
74 int llmnr_ipv6_udp_fd;
75 int llmnr_ipv4_tcp_fd;
76 int llmnr_ipv6_tcp_fd;
77
78 sd_event_source *llmnr_ipv4_udp_event_source;
79 sd_event_source *llmnr_ipv6_udp_event_source;
80 sd_event_source *llmnr_ipv4_tcp_event_source;
81 sd_event_source *llmnr_ipv6_tcp_event_source;
82
83 /* mDNS */
84 int mdns_ipv4_fd;
85 int mdns_ipv6_fd;
86
87 /* DNS-SD */
88 Hashmap *dnssd_services;
89
90 sd_event_source *mdns_ipv4_event_source;
91 sd_event_source *mdns_ipv6_event_source;
92
93 /* dbus */
94 sd_bus *bus;
95
96 /* The hostname we publish on LLMNR and mDNS */
97 char *full_hostname;
98 char *llmnr_hostname;
99 char *mdns_hostname;
100 DnsResourceKey *llmnr_host_ipv4_key;
101 DnsResourceKey *llmnr_host_ipv6_key;
102 DnsResourceKey *mdns_host_ipv4_key;
103 DnsResourceKey *mdns_host_ipv6_key;
104
105 /* Watch the system hostname */
106 int hostname_fd;
107 sd_event_source *hostname_event_source;
108
109 sd_event_source *sigusr1_event_source;
110 sd_event_source *sigusr2_event_source;
111 sd_event_source *sigrtmin1_event_source;
112
113 unsigned n_transactions_total;
114 unsigned n_dnssec_verdict[_DNSSEC_VERDICT_MAX];
115
116 /* Data from /etc/hosts */
117 Set* etc_hosts_by_address;
118 Hashmap* etc_hosts_by_name;
119 usec_t etc_hosts_last, etc_hosts_mtime;
120
121 /* Local DNS stub on 127.0.0.53:53 */
122 int dns_stub_udp_fd;
123 int dns_stub_tcp_fd;
124
125 sd_event_source *dns_stub_udp_event_source;
126 sd_event_source *dns_stub_tcp_event_source;
127
128 Hashmap *polkit_registry;
129 };
130
131 /* Manager */
132
133 int manager_new(Manager **ret);
134 Manager* manager_free(Manager *m);
135
136 int manager_start(Manager *m);
137
138 uint32_t manager_find_mtu(Manager *m);
139
140 int manager_write(Manager *m, int fd, DnsPacket *p);
141 int 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);
142 int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
143
144 int manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_addr);
145 LinkAddress* manager_find_link_address(Manager *m, int family, const union in_addr_union *in_addr);
146
147 void manager_refresh_rrs(Manager *m);
148 int manager_next_hostname(Manager *m);
149
150 bool manager_our_packet(Manager *m, DnsPacket *p);
151 DnsScope* manager_find_scope(Manager *m, DnsPacket *p);
152
153 void manager_verify_all(Manager *m);
154
155 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
156
157 #define EXTRA_CMSG_SPACE 1024
158
159 int manager_is_own_hostname(Manager *m, const char *name);
160
161 int manager_compile_dns_servers(Manager *m, OrderedSet **servers);
162 int manager_compile_search_domains(Manager *m, OrderedSet **domains, int filter_route);
163
164 DnssecMode manager_get_dnssec_mode(Manager *m);
165 bool manager_dnssec_supported(Manager *m);
166
167 DnsOverTlsMode manager_get_dns_over_tls_mode(Manager *m);
168
169 void manager_dnssec_verdict(Manager *m, DnssecVerdict verdict, const DnsResourceKey *key);
170
171 bool manager_routable(Manager *m, int family);
172
173 void manager_flush_caches(Manager *m);
174 void manager_reset_server_features(Manager *m);
175
176 void manager_cleanup_saved_user(Manager *m);
177
178 bool manager_next_dnssd_names(Manager *m);