]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-manager.h
resolved: support for DNS-over-TLS
[thirdparty/systemd.git] / src / resolve / resolved-manager.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
74b2466e
LP
2#pragma once
3
091a364c
TG
4/***
5 This file is part of systemd.
6
4e945a6f 7 Copyright 2014 Tom Gundersen <teg@jklm.no>
091a364c
TG
8***/
9
091a364c 10#include "sd-event.h"
1c4baffc 11#include "sd-netlink.h"
71d35b6b
TA
12#include "sd-network.h"
13
74b2466e 14#include "hashmap.h"
71d35b6b 15#include "list.h"
9176a57c 16#include "ordered-set.h"
af49ca27 17#include "resolve-util.h"
091a364c 18
091a364c 19typedef struct Manager Manager;
19b50b5b 20
1ae43295 21#include "resolved-conf.h"
19b50b5b 22#include "resolved-dns-query.h"
a51c1048
LP
23#include "resolved-dns-search-domain.h"
24#include "resolved-dns-server.h"
19b50b5b 25#include "resolved-dns-stream.h"
0d2cd476 26#include "resolved-dns-trust-anchor.h"
19b50b5b 27#include "resolved-link.h"
4e945a6f 28
eed857b7
LP
29#define MANAGER_SEARCH_DOMAINS_MAX 32
30#define MANAGER_DNS_SERVERS_MAX 32
31
091a364c
TG
32struct Manager {
33 sd_event *event;
34
af49ca27
LP
35 ResolveSupport llmnr_support;
36 ResolveSupport mdns_support;
ad6c0475 37 DnssecMode dnssec_mode;
5d67a7ae 38 PrivateDnsMode private_dns_mode;
ceeddf79 39 bool enable_cache;
1ae43295 40 DnsStubListenerMode dns_stub_listener_mode;
1716f6dc
LP
41
42 /* Network */
74b2466e
LP
43 Hashmap *links;
44
1c4baffc 45 sd_netlink *rtnl;
74b2466e
LP
46 sd_event_source *rtnl_event_source;
47
091a364c 48 sd_network_monitor *network_monitor;
74b2466e
LP
49 sd_event_source *network_event_source;
50
1716f6dc 51 /* DNS query management */
ec2c5e43 52 Hashmap *dns_transactions;
1716f6dc
LP
53 LIST_HEAD(DnsQuery, dns_queries);
54 unsigned n_dns_queries;
55
623a4c97
LP
56 LIST_HEAD(DnsStream, dns_streams);
57 unsigned n_dns_streams;
58
1716f6dc 59 /* Unicast dns */
74b2466e 60 LIST_HEAD(DnsServer, dns_servers);
4e945a6f 61 LIST_HEAD(DnsServer, fallback_dns_servers);
eed857b7 62 unsigned n_dns_servers; /* counts both main and fallback */
74b2466e
LP
63 DnsServer *current_dns_server;
64
a51c1048 65 LIST_HEAD(DnsSearchDomain, search_domains);
eed857b7 66 unsigned n_search_domains;
a51c1048 67
00fa60ae 68 bool need_builtin_fallbacks:1;
a51c1048 69
00fa60ae 70 bool read_resolv_conf:1;
5cb36f41
LP
71 usec_t resolv_conf_mtime;
72
0d2cd476
LP
73 DnsTrustAnchor trust_anchor;
74
74b2466e
LP
75 LIST_HEAD(DnsScope, dns_scopes);
76 DnsScope *unicast_scope;
77
1716f6dc
LP
78 /* LLMNR */
79 int llmnr_ipv4_udp_fd;
80 int llmnr_ipv6_udp_fd;
623a4c97
LP
81 int llmnr_ipv4_tcp_fd;
82 int llmnr_ipv6_tcp_fd;
1716f6dc
LP
83
84 sd_event_source *llmnr_ipv4_udp_event_source;
85 sd_event_source *llmnr_ipv6_udp_event_source;
623a4c97
LP
86 sd_event_source *llmnr_ipv4_tcp_event_source;
87 sd_event_source *llmnr_ipv6_tcp_event_source;
1716f6dc 88
bc7702b0
DM
89 /* mDNS */
90 int mdns_ipv4_fd;
91 int mdns_ipv6_fd;
92
6501dd31
DR
93 /* DNS-SD */
94 Hashmap *dnssd_services;
95
bc7702b0
DM
96 sd_event_source *mdns_ipv4_event_source;
97 sd_event_source *mdns_ipv6_event_source;
98
74b2466e
LP
99 /* dbus */
100 sd_bus *bus;
623a4c97
LP
101
102 /* The hostname we publish on LLMNR and mDNS */
e96de0ce 103 char *full_hostname;
78c6a153
LP
104 char *llmnr_hostname;
105 char *mdns_hostname;
106 DnsResourceKey *llmnr_host_ipv4_key;
107 DnsResourceKey *llmnr_host_ipv6_key;
400cb36e
DR
108 DnsResourceKey *mdns_host_ipv4_key;
109 DnsResourceKey *mdns_host_ipv6_key;
eb60f9cd
LP
110
111 /* Watch the system hostname */
112 int hostname_fd;
113 sd_event_source *hostname_event_source;
902bb5d8
LP
114
115 /* Watch for system suspends */
116 sd_bus_slot *prepare_for_sleep_slot;
4d506d6b
LP
117
118 sd_event_source *sigusr1_event_source;
bc81447e 119 sd_event_source *sigusr2_event_source;
d55b0463 120 sd_event_source *sigrtmin1_event_source;
a150ff5e
LP
121
122 unsigned n_transactions_total;
59c5b597 123 unsigned n_dnssec_verdict[_DNSSEC_VERDICT_MAX];
dd0bc0f1
LP
124
125 /* Data from /etc/hosts */
126 Set* etc_hosts_by_address;
127 Hashmap* etc_hosts_by_name;
128 usec_t etc_hosts_last, etc_hosts_mtime;
b30bf55d
LP
129
130 /* Local DNS stub on 127.0.0.53:53 */
131 int dns_stub_udp_fd;
132 int dns_stub_tcp_fd;
133
134 sd_event_source *dns_stub_udp_event_source;
135 sd_event_source *dns_stub_tcp_event_source;
84b0f133
DR
136
137 Hashmap *polkit_registry;
091a364c
TG
138};
139
140/* Manager */
141
142int manager_new(Manager **ret);
74b2466e
LP
143Manager* manager_free(Manager *m);
144
edc501d4 145int manager_start(Manager *m);
74b2466e 146
e1c95994 147uint32_t manager_find_mtu(Manager *m);
091a364c 148
72290734 149int manager_write(Manager *m, int fd, DnsPacket *p);
b30bf55d 150int 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 151int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
74b2466e 152
623a4c97 153int manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_addr);
4e945a6f 154LinkAddress* manager_find_link_address(Manager *m, int family, const union in_addr_union *in_addr);
ec2c5e43 155
eb60f9cd 156void manager_refresh_rrs(Manager *m);
ec2c5e43 157int manager_next_hostname(Manager *m);
74b2466e 158
a4076574
LP
159bool manager_our_packet(Manager *m, DnsPacket *p);
160DnsScope* manager_find_scope(Manager *m, DnsPacket *p);
091a364c 161
902bb5d8
LP
162void manager_verify_all(Manager *m);
163
091a364c 164DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
091a364c 165
623a4c97 166#define EXTRA_CMSG_SPACE 1024
4e945a6f 167
78c6a153
LP
168int manager_is_own_hostname(Manager *m, const char *name);
169
9176a57c 170int manager_compile_dns_servers(Manager *m, OrderedSet **servers);
6f7da49d 171int manager_compile_search_domains(Manager *m, OrderedSet **domains, int filter_route);
c69fa7e3
LP
172
173DnssecMode manager_get_dnssec_mode(Manager *m);
174bool manager_dnssec_supported(Manager *m);
59c5b597 175
5d67a7ae
IT
176PrivateDnsMode manager_get_private_dns_mode(Manager *m);
177
59c5b597 178void manager_dnssec_verdict(Manager *m, DnssecVerdict verdict, const DnsResourceKey *key);
011696f7
LP
179
180bool manager_routable(Manager *m, int family);
ba35662f
LP
181
182void manager_flush_caches(Manager *m);
59c0fd0e 183void manager_reset_server_features(Manager *m);
943ef07c
LP
184
185void manager_cleanup_saved_user(Manager *m);
e7c1b0e4
DR
186
187bool manager_next_dnssd_names(Manager *m);