1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 Copyright © 2014 Tom Gundersen <teg@jklm.no>
9 #include "sd-netlink.h"
10 #include "sd-network.h"
14 #include "ordered-set.h"
15 #include "resolve-util.h"
17 typedef struct Manager Manager
;
19 #include "resolved-conf.h"
20 #include "resolved-dns-query.h"
21 #include "resolved-dns-search-domain.h"
22 #include "resolved-dns-server.h"
23 #include "resolved-dns-stream.h"
24 #include "resolved-dns-trust-anchor.h"
25 #include "resolved-link.h"
27 #define MANAGER_SEARCH_DOMAINS_MAX 32
28 #define MANAGER_DNS_SERVERS_MAX 32
33 ResolveSupport llmnr_support
;
34 ResolveSupport mdns_support
;
35 DnssecMode dnssec_mode
;
36 DnsOverTlsMode dns_over_tls_mode
;
38 DnsStubListenerMode dns_stub_listener_mode
;
44 sd_event_source
*rtnl_event_source
;
46 sd_network_monitor
*network_monitor
;
47 sd_event_source
*network_event_source
;
49 /* DNS query management */
50 Hashmap
*dns_transactions
;
51 LIST_HEAD(DnsQuery
, dns_queries
);
52 unsigned n_dns_queries
;
54 LIST_HEAD(DnsStream
, dns_streams
);
55 unsigned n_dns_streams
;
58 LIST_HEAD(DnsServer
, dns_servers
);
59 LIST_HEAD(DnsServer
, fallback_dns_servers
);
60 unsigned n_dns_servers
; /* counts both main and fallback */
61 DnsServer
*current_dns_server
;
63 LIST_HEAD(DnsSearchDomain
, search_domains
);
64 unsigned n_search_domains
;
66 bool need_builtin_fallbacks
:1;
68 bool read_resolv_conf
:1;
69 usec_t resolv_conf_mtime
;
71 DnsTrustAnchor trust_anchor
;
73 LIST_HEAD(DnsScope
, dns_scopes
);
74 DnsScope
*unicast_scope
;
77 int llmnr_ipv4_udp_fd
;
78 int llmnr_ipv6_udp_fd
;
79 int llmnr_ipv4_tcp_fd
;
80 int llmnr_ipv6_tcp_fd
;
82 sd_event_source
*llmnr_ipv4_udp_event_source
;
83 sd_event_source
*llmnr_ipv6_udp_event_source
;
84 sd_event_source
*llmnr_ipv4_tcp_event_source
;
85 sd_event_source
*llmnr_ipv6_tcp_event_source
;
92 Hashmap
*dnssd_services
;
94 sd_event_source
*mdns_ipv4_event_source
;
95 sd_event_source
*mdns_ipv6_event_source
;
100 /* The hostname we publish on LLMNR and mDNS */
102 char *llmnr_hostname
;
104 DnsResourceKey
*llmnr_host_ipv4_key
;
105 DnsResourceKey
*llmnr_host_ipv6_key
;
106 DnsResourceKey
*mdns_host_ipv4_key
;
107 DnsResourceKey
*mdns_host_ipv6_key
;
109 /* Watch the system hostname */
111 sd_event_source
*hostname_event_source
;
113 /* Watch for system suspends */
114 sd_bus_slot
*prepare_for_sleep_slot
;
116 sd_event_source
*sigusr1_event_source
;
117 sd_event_source
*sigusr2_event_source
;
118 sd_event_source
*sigrtmin1_event_source
;
120 unsigned n_transactions_total
;
121 unsigned n_dnssec_verdict
[_DNSSEC_VERDICT_MAX
];
123 /* Data from /etc/hosts */
124 Set
* etc_hosts_by_address
;
125 Hashmap
* etc_hosts_by_name
;
126 usec_t etc_hosts_last
, etc_hosts_mtime
;
128 /* Local DNS stub on 127.0.0.53:53 */
132 sd_event_source
*dns_stub_udp_event_source
;
133 sd_event_source
*dns_stub_tcp_event_source
;
135 Hashmap
*polkit_registry
;
140 int manager_new(Manager
**ret
);
141 Manager
* manager_free(Manager
*m
);
143 int manager_start(Manager
*m
);
145 uint32_t manager_find_mtu(Manager
*m
);
147 int manager_write(Manager
*m
, int fd
, DnsPacket
*p
);
148 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
);
149 int manager_recv(Manager
*m
, int fd
, DnsProtocol protocol
, DnsPacket
**ret
);
151 int manager_find_ifindex(Manager
*m
, int family
, const union in_addr_union
*in_addr
);
152 LinkAddress
* manager_find_link_address(Manager
*m
, int family
, const union in_addr_union
*in_addr
);
154 void manager_refresh_rrs(Manager
*m
);
155 int manager_next_hostname(Manager
*m
);
157 bool manager_our_packet(Manager
*m
, DnsPacket
*p
);
158 DnsScope
* manager_find_scope(Manager
*m
, DnsPacket
*p
);
160 void manager_verify_all(Manager
*m
);
162 DEFINE_TRIVIAL_CLEANUP_FUNC(Manager
*, manager_free
);
164 #define EXTRA_CMSG_SPACE 1024
166 int manager_is_own_hostname(Manager
*m
, const char *name
);
168 int manager_compile_dns_servers(Manager
*m
, OrderedSet
**servers
);
169 int manager_compile_search_domains(Manager
*m
, OrderedSet
**domains
, int filter_route
);
171 DnssecMode
manager_get_dnssec_mode(Manager
*m
);
172 bool manager_dnssec_supported(Manager
*m
);
174 DnsOverTlsMode
manager_get_dns_over_tls_mode(Manager
*m
);
176 void manager_dnssec_verdict(Manager
*m
, DnssecVerdict verdict
, const DnsResourceKey
*key
);
178 bool manager_routable(Manager
*m
, int family
);
180 void manager_flush_caches(Manager
*m
);
181 void manager_reset_server_features(Manager
*m
);
183 void manager_cleanup_saved_user(Manager
*m
);
185 bool manager_next_dnssd_names(Manager
*m
);