1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 This file is part of systemd.
7 Copyright 2014 Lennart Poettering
12 #include "in-addr-util.h"
13 #include "ratelimit.h"
14 #include "resolve-util.h"
16 typedef struct Link Link
;
17 typedef struct LinkAddress LinkAddress
;
19 #include "resolved-dns-rr.h"
20 #include "resolved-dns-scope.h"
21 #include "resolved-dns-search-domain.h"
22 #include "resolved-dns-server.h"
23 #include "resolved-manager.h"
25 #define LINK_SEARCH_DOMAINS_MAX 32
26 #define LINK_DNS_SERVERS_MAX 32
32 union in_addr_union in_addr
;
34 unsigned char flags
, scope
;
36 DnsResourceRecord
*llmnr_address_rr
;
37 DnsResourceRecord
*llmnr_ptr_rr
;
38 DnsResourceRecord
*mdns_address_rr
;
39 DnsResourceRecord
*mdns_ptr_rr
;
41 LIST_FIELDS(LinkAddress
, addresses
);
50 LIST_HEAD(LinkAddress
, addresses
);
53 LIST_HEAD(DnsServer
, dns_servers
);
54 DnsServer
*current_dns_server
;
55 unsigned n_dns_servers
;
57 LIST_HEAD(DnsSearchDomain
, search_domains
);
58 unsigned n_search_domains
;
60 ResolveSupport llmnr_support
;
61 ResolveSupport mdns_support
;
62 DnsOverTlsMode dns_over_tls_mode
;
63 DnssecMode dnssec_mode
;
64 Set
*dnssec_negative_trust_anchors
;
66 DnsScope
*unicast_scope
;
67 DnsScope
*llmnr_ipv4_scope
;
68 DnsScope
*llmnr_ipv6_scope
;
69 DnsScope
*mdns_ipv4_scope
;
70 DnsScope
*mdns_ipv6_scope
;
74 char name
[IF_NAMESIZE
];
81 bool unicast_relevant
;
84 int link_new(Manager
*m
, Link
**ret
, int ifindex
);
85 Link
*link_free(Link
*l
);
86 int link_process_rtnl(Link
*l
, sd_netlink_message
*m
);
87 int link_update(Link
*l
);
88 bool link_relevant(Link
*l
, int family
, bool local_multicast
);
89 LinkAddress
* link_find_address(Link
*l
, int family
, const union in_addr_union
*in_addr
);
90 void link_add_rrs(Link
*l
, bool force_remove
);
92 void link_flush_settings(Link
*l
);
93 void link_set_dnssec_mode(Link
*l
, DnssecMode mode
);
94 void link_set_dns_over_tls_mode(Link
*l
, DnsOverTlsMode mode
);
95 void link_allocate_scopes(Link
*l
);
97 DnsServer
* link_set_dns_server(Link
*l
, DnsServer
*s
);
98 DnsServer
* link_get_dns_server(Link
*l
);
99 void link_next_dns_server(Link
*l
);
101 DnssecMode
link_get_dnssec_mode(Link
*l
);
102 bool link_dnssec_supported(Link
*l
);
104 DnsOverTlsMode
link_get_dns_over_tls_mode(Link
*l
);
106 int link_save_user(Link
*l
);
107 int link_load_user(Link
*l
);
108 void link_remove_user(Link
*l
);
110 int link_address_new(Link
*l
, LinkAddress
**ret
, int family
, const union in_addr_union
*in_addr
);
111 LinkAddress
*link_address_free(LinkAddress
*a
);
112 int link_address_update_rtnl(LinkAddress
*a
, sd_netlink_message
*m
);
113 bool link_address_relevant(LinkAddress
*l
, bool local_multicast
);
114 void link_address_add_rrs(LinkAddress
*a
, bool force_remove
);
116 DEFINE_TRIVIAL_CLEANUP_FUNC(Link
*, link_free
);