]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-dns-server.h
resolved: use DNS_{QUESTION|ANSWER}_FOREACH macros at two more places
[thirdparty/systemd.git] / src / resolve / resolved-dns-server.h
CommitLineData
74b2466e
LP
1#pragma once
2
3/***
4 This file is part of systemd.
5
6 Copyright 2014 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
3c0cf502
LP
22#include "in-addr-util.h"
23
74b2466e 24typedef struct DnsServer DnsServer;
74b2466e 25
4e945a6f
LP
26typedef enum DnsServerType {
27 DNS_SERVER_SYSTEM,
28 DNS_SERVER_FALLBACK,
29 DNS_SERVER_LINK,
30} DnsServerType;
e3309036
ZJS
31#define _DNS_SERVER_TYPE_MAX (DNS_SERVER_LINK + 1)
32
33const char* dns_server_type_to_string(DnsServerType i) _const_;
34DnsServerType dns_server_type_from_string(const char *s) _pure_;
4e945a6f 35
be808ea0
TG
36typedef enum DnsServerFeatureLevel {
37 DNS_SERVER_FEATURE_LEVEL_TCP,
38 DNS_SERVER_FEATURE_LEVEL_UDP,
9c5e12a4 39 DNS_SERVER_FEATURE_LEVEL_EDNS0,
7586f4d1 40 DNS_SERVER_FEATURE_LEVEL_DO,
d74fb368 41 DNS_SERVER_FEATURE_LEVEL_LARGE,
be808ea0
TG
42 _DNS_SERVER_FEATURE_LEVEL_MAX,
43 _DNS_SERVER_FEATURE_LEVEL_INVALID = -1
44} DnsServerFeatureLevel;
45
46#define DNS_SERVER_FEATURE_LEVEL_WORST 0
47#define DNS_SERVER_FEATURE_LEVEL_BEST (_DNS_SERVER_FEATURE_LEVEL_MAX - 1)
48
49const char* dns_server_feature_level_to_string(int i) _const_;
50int dns_server_feature_level_from_string(const char *s) _pure_;
51
3e684349 52#include "resolved-link.h"
be808ea0 53#include "resolved-manager.h"
3e684349 54
74b2466e
LP
55struct DnsServer {
56 Manager *manager;
74b2466e 57
91b14d6f
TG
58 unsigned n_ref;
59
4e945a6f 60 DnsServerType type;
3c0cf502
LP
61 Link *link;
62
0dd25fb9 63 int family;
74b2466e 64 union in_addr_union address;
2817157b 65 int ifindex; /* for IPv6 link-local DNS servers */
74b2466e 66
6cb08a89
LP
67 char *server_string;
68
9df3ba6c
TG
69 usec_t resend_timeout;
70 usec_t max_rtt;
71
f4461e56
LP
72 DnsServerFeatureLevel verified_feature_level;
73 DnsServerFeatureLevel possible_feature_level;
de54e62b 74
d74fb368 75 size_t received_udp_packet_max;
de54e62b 76
6bb2c085
LP
77 unsigned n_failed_udp;
78 unsigned n_failed_tcp;
de54e62b 79
6bb2c085
LP
80 bool packet_failed:1;
81 bool packet_truncated:1;
de54e62b
LP
82 bool packet_bad_opt:1;
83 bool packet_rrsig_missing:1;
84
be808ea0
TG
85 usec_t verified_usec;
86 usec_t features_grace_period_usec;
74b2466e 87
1e02e182
LP
88 /* Whether we already warned about downgrading to non-DNSSEC mode for this server */
89 bool warned_downgrade:1;
90
b652d4a2
LP
91 /* Used when GC'ing old DNS servers when configuration changes. */
92 bool marked:1;
93
0eac4623
LP
94 /* If linked is set, then this server appears in the servers linked list */
95 bool linked:1;
74b2466e
LP
96 LIST_FIELDS(DnsServer, servers);
97};
98
99int dns_server_new(
100 Manager *m,
0b58db65 101 DnsServer **ret,
4e945a6f 102 DnsServerType type,
0b58db65 103 Link *link,
0dd25fb9 104 int family,
2817157b
LP
105 const union in_addr_union *address,
106 int ifindex);
74b2466e 107
91b14d6f
TG
108DnsServer* dns_server_ref(DnsServer *s);
109DnsServer* dns_server_unref(DnsServer *s);
87f5a193 110
0eac4623 111void dns_server_unlink(DnsServer *s);
0b58db65 112void dns_server_move_back_and_unmark(DnsServer *s);
0eac4623 113
6bb2c085
LP
114void dns_server_packet_received(DnsServer *s, int protocol, DnsServerFeatureLevel level, usec_t rtt, size_t size);
115void dns_server_packet_lost(DnsServer *s, int protocol, DnsServerFeatureLevel level, usec_t usec);
f4461e56 116void dns_server_packet_failed(DnsServer *s, DnsServerFeatureLevel level);
6bb2c085 117void dns_server_packet_truncated(DnsServer *s, DnsServerFeatureLevel level);
de54e62b
LP
118void dns_server_packet_rrsig_missing(DnsServer *s, DnsServerFeatureLevel level);
119void dns_server_packet_bad_opt(DnsServer *s, DnsServerFeatureLevel level);
9df3ba6c 120
f4461e56
LP
121DnsServerFeatureLevel dns_server_possible_feature_level(DnsServer *s);
122
519ef046
LP
123int dns_server_adjust_opt(DnsServer *server, DnsPacket *packet, DnsServerFeatureLevel level);
124
6cb08a89 125const char *dns_server_string(DnsServer *server);
2817157b 126int dns_server_ifindex(const DnsServer *s);
6cb08a89 127
92ec902a
LP
128bool dns_server_dnssec_supported(DnsServer *server);
129
1e02e182
LP
130void dns_server_warn_downgrade(DnsServer *server);
131
2817157b 132DnsServer *dns_server_find(DnsServer *first, int family, const union in_addr_union *in_addr, int ifindex);
4b95f179
LP
133
134void dns_server_unlink_all(DnsServer *first);
135void dns_server_unlink_marked(DnsServer *first);
136void dns_server_mark_all(DnsServer *first);
f2f1dbe5 137
4b95f179 138DnsServer *manager_get_first_dns_server(Manager *m, DnsServerType t);
636e813d 139
0eac4623 140DnsServer *manager_set_dns_server(Manager *m, DnsServer *s);
0eac4623
LP
141DnsServer *manager_get_dns_server(Manager *m);
142void manager_next_dns_server(Manager *m);
143
8300ba21
TG
144DEFINE_TRIVIAL_CLEANUP_FUNC(DnsServer*, dns_server_unref);
145
d5099efc 146extern const struct hash_ops dns_server_hash_ops;