]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-manager.h
machine-id-setup: don't try to read UUID from VM/container manager if we operate...
[thirdparty/systemd.git] / src / resolve / resolved-manager.h
CommitLineData
091a364c
TG
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
74b2466e
LP
3#pragma once
4
091a364c
TG
5/***
6 This file is part of systemd.
7
4e945a6f 8 Copyright 2014 Tom Gundersen <teg@jklm.no>
091a364c
TG
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
091a364c
TG
24#include "sd-event.h"
25#include "sd-network.h"
74b2466e 26#include "sd-rtnl.h"
091a364c
TG
27#include "util.h"
28#include "list.h"
3b653205 29#include "in-addr-util.h"
74b2466e 30#include "hashmap.h"
091a364c 31
091a364c 32typedef struct Manager Manager;
19b50b5b 33typedef enum Support Support;
091a364c 34
19b50b5b 35enum Support {
4e945a6f
LP
36 SUPPORT_NO,
37 SUPPORT_YES,
38 SUPPORT_RESOLVE,
39 _SUPPORT_MAX,
40 _SUPPORT_INVALID = -1
19b50b5b
LP
41};
42
43#include "resolved-dns-query.h"
44#include "resolved-dns-server.h"
45#include "resolved-dns-scope.h"
46#include "resolved-dns-stream.h"
47#include "resolved-link.h"
4e945a6f 48
091a364c
TG
49struct Manager {
50 sd_event *event;
51
4e945a6f 52 Support llmnr_support;
1716f6dc
LP
53
54 /* Network */
74b2466e
LP
55 Hashmap *links;
56
57 sd_rtnl *rtnl;
58 sd_event_source *rtnl_event_source;
59
091a364c 60 sd_network_monitor *network_monitor;
74b2466e
LP
61 sd_event_source *network_event_source;
62
1716f6dc 63 /* DNS query management */
ec2c5e43 64 Hashmap *dns_transactions;
1716f6dc
LP
65 LIST_HEAD(DnsQuery, dns_queries);
66 unsigned n_dns_queries;
67
623a4c97
LP
68 LIST_HEAD(DnsStream, dns_streams);
69 unsigned n_dns_streams;
70
1716f6dc 71 /* Unicast dns */
74b2466e
LP
72 int dns_ipv4_fd;
73 int dns_ipv6_fd;
74
75 sd_event_source *dns_ipv4_event_source;
76 sd_event_source *dns_ipv6_event_source;
77
74b2466e 78 LIST_HEAD(DnsServer, dns_servers);
4e945a6f 79 LIST_HEAD(DnsServer, fallback_dns_servers);
74b2466e
LP
80 DnsServer *current_dns_server;
81
5cb36f41
LP
82 bool read_resolv_conf;
83 usec_t resolv_conf_mtime;
84
74b2466e
LP
85 LIST_HEAD(DnsScope, dns_scopes);
86 DnsScope *unicast_scope;
87
1716f6dc
LP
88 /* LLMNR */
89 int llmnr_ipv4_udp_fd;
90 int llmnr_ipv6_udp_fd;
623a4c97
LP
91 int llmnr_ipv4_tcp_fd;
92 int llmnr_ipv6_tcp_fd;
1716f6dc
LP
93
94 sd_event_source *llmnr_ipv4_udp_event_source;
95 sd_event_source *llmnr_ipv6_udp_event_source;
623a4c97
LP
96 sd_event_source *llmnr_ipv4_tcp_event_source;
97 sd_event_source *llmnr_ipv6_tcp_event_source;
1716f6dc 98
74b2466e
LP
99 /* dbus */
100 sd_bus *bus;
101 sd_event_source *bus_retry_event_source;
623a4c97
LP
102
103 /* The hostname we publish on LLMNR and mDNS */
104 char *hostname;
105 DnsResourceKey *host_ipv4_key;
106 DnsResourceKey *host_ipv6_key;
eb60f9cd
LP
107
108 /* Watch the system hostname */
109 int hostname_fd;
110 sd_event_source *hostname_event_source;
902bb5d8
LP
111
112 /* Watch for system suspends */
113 sd_bus_slot *prepare_for_sleep_slot;
091a364c
TG
114};
115
116/* Manager */
117
118int manager_new(Manager **ret);
74b2466e
LP
119Manager* manager_free(Manager *m);
120
edc501d4 121int manager_start(Manager *m);
5cb36f41 122int manager_read_resolv_conf(Manager *m);
74b2466e
LP
123int manager_write_resolv_conf(Manager *m);
124
2c27fbca
LP
125DnsServer *manager_set_dns_server(Manager *m, DnsServer *s);
126DnsServer *manager_find_dns_server(Manager *m, int family, const union in_addr_union *in_addr);
74b2466e
LP
127DnsServer *manager_get_dns_server(Manager *m);
128void manager_next_dns_server(Manager *m);
ec2c5e43 129
e1c95994 130uint32_t manager_find_mtu(Manager *m);
091a364c 131
623a4c97 132int manager_send(Manager *m, int fd, int ifindex, int family, const union in_addr_union *addr, uint16_t port, DnsPacket *p);
1716f6dc 133int manager_recv(Manager *m, int fd, DnsProtocol protocol, DnsPacket **ret);
74b2466e 134
1716f6dc 135int manager_dns_ipv4_fd(Manager *m);
74b2466e 136int manager_dns_ipv6_fd(Manager *m);
1716f6dc
LP
137int manager_llmnr_ipv4_udp_fd(Manager *m);
138int manager_llmnr_ipv6_udp_fd(Manager *m);
623a4c97
LP
139int manager_llmnr_ipv4_tcp_fd(Manager *m);
140int manager_llmnr_ipv6_tcp_fd(Manager *m);
141
142int manager_ifindex_is_loopback(Manager *m, int ifindex);
143int manager_find_ifindex(Manager *m, int family, const union in_addr_union *in_addr);
4e945a6f 144LinkAddress* manager_find_link_address(Manager *m, int family, const union in_addr_union *in_addr);
ec2c5e43 145
eb60f9cd 146void manager_refresh_rrs(Manager *m);
ec2c5e43 147int manager_next_hostname(Manager *m);
74b2466e 148
a4076574
LP
149bool manager_our_packet(Manager *m, DnsPacket *p);
150DnsScope* manager_find_scope(Manager *m, DnsPacket *p);
091a364c 151
902bb5d8
LP
152void manager_verify_all(Manager *m);
153
3e684349
LP
154void manager_flush_dns_servers(Manager *m, DnsServerType t);
155
091a364c 156DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free);
091a364c 157
623a4c97 158#define EXTRA_CMSG_SPACE 1024
4e945a6f
LP
159
160const char* support_to_string(Support p) _const_;
161int support_from_string(const char *s) _pure_;