2020-11-09 05:23:58 +01:00
|
|
|
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
2014-07-16 00:26:02 +02:00
|
|
|
#pragma once
|
|
|
|
|
2020-05-06 19:10:59 +02:00
|
|
|
#include "sd-netlink.h"
|
|
|
|
|
2014-07-16 00:26:02 +02:00
|
|
|
#include "in-addr-util.h"
|
|
|
|
#include "ratelimit.h"
|
2016-01-05 17:25:10 +01:00
|
|
|
#include "resolve-util.h"
|
2014-07-16 00:26:02 +02:00
|
|
|
|
|
|
|
typedef struct Link Link;
|
|
|
|
typedef struct LinkAddress LinkAddress;
|
|
|
|
|
2014-07-29 14:24:02 +02:00
|
|
|
#include "resolved-dns-rr.h"
|
2016-09-01 00:33:21 +02:00
|
|
|
#include "resolved-dns-scope.h"
|
2015-11-24 21:12:51 +01:00
|
|
|
#include "resolved-dns-search-domain.h"
|
|
|
|
#include "resolved-dns-server.h"
|
2014-07-16 00:26:02 +02:00
|
|
|
|
2018-12-17 13:34:50 +01:00
|
|
|
#define LINK_SEARCH_DOMAINS_MAX 256
|
|
|
|
#define LINK_DNS_SERVERS_MAX 256
|
2015-11-24 21:39:14 +01:00
|
|
|
|
2014-07-16 00:26:02 +02:00
|
|
|
struct LinkAddress {
|
|
|
|
Link *link;
|
|
|
|
|
2014-07-18 16:09:30 +02:00
|
|
|
int family;
|
2014-07-16 00:26:02 +02:00
|
|
|
union in_addr_union in_addr;
|
|
|
|
|
|
|
|
unsigned char flags, scope;
|
|
|
|
|
2014-07-29 14:24:02 +02:00
|
|
|
DnsResourceRecord *llmnr_address_rr;
|
|
|
|
DnsResourceRecord *llmnr_ptr_rr;
|
2016-12-02 10:58:00 +01:00
|
|
|
DnsResourceRecord *mdns_address_rr;
|
|
|
|
DnsResourceRecord *mdns_ptr_rr;
|
2014-07-29 14:24:02 +02:00
|
|
|
|
2014-07-16 00:26:02 +02:00
|
|
|
LIST_FIELDS(LinkAddress, addresses);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Link {
|
|
|
|
Manager *manager;
|
|
|
|
|
|
|
|
int ifindex;
|
|
|
|
unsigned flags;
|
|
|
|
|
|
|
|
LIST_HEAD(LinkAddress, addresses);
|
2017-02-13 20:41:09 +01:00
|
|
|
unsigned n_addresses;
|
2014-07-16 00:26:02 +02:00
|
|
|
|
2014-07-23 23:10:00 +02:00
|
|
|
LIST_HEAD(DnsServer, dns_servers);
|
2014-07-16 00:26:02 +02:00
|
|
|
DnsServer *current_dns_server;
|
2015-11-24 21:39:14 +01:00
|
|
|
unsigned n_dns_servers;
|
2014-07-16 00:26:02 +02:00
|
|
|
|
2015-11-24 21:12:51 +01:00
|
|
|
LIST_HEAD(DnsSearchDomain, search_domains);
|
2015-11-24 21:39:14 +01:00
|
|
|
unsigned n_search_domains;
|
2015-11-24 21:12:51 +01:00
|
|
|
|
2018-12-04 12:40:07 +01:00
|
|
|
int default_route;
|
|
|
|
|
2016-01-05 17:25:10 +01:00
|
|
|
ResolveSupport llmnr_support;
|
|
|
|
ResolveSupport mdns_support;
|
2018-06-13 20:26:24 +02:00
|
|
|
DnsOverTlsMode dns_over_tls_mode;
|
2016-01-05 19:57:33 +01:00
|
|
|
DnssecMode dnssec_mode;
|
2016-01-06 18:36:32 +01:00
|
|
|
Set *dnssec_negative_trust_anchors;
|
2014-08-04 23:08:03 +02:00
|
|
|
|
2014-07-16 00:26:02 +02:00
|
|
|
DnsScope *unicast_scope;
|
2014-07-18 12:34:02 +02:00
|
|
|
DnsScope *llmnr_ipv4_scope;
|
|
|
|
DnsScope *llmnr_ipv6_scope;
|
2015-07-11 19:17:51 +02:00
|
|
|
DnsScope *mdns_ipv4_scope;
|
|
|
|
DnsScope *mdns_ipv6_scope;
|
2014-07-16 00:26:02 +02:00
|
|
|
|
2016-01-19 17:16:12 +01:00
|
|
|
bool is_managed;
|
|
|
|
|
2019-04-11 07:08:40 +02:00
|
|
|
char *ifname;
|
2014-07-17 01:13:22 +02:00
|
|
|
uint32_t mtu;
|
2016-01-20 21:22:26 +01:00
|
|
|
uint8_t operstate;
|
2016-06-15 22:38:23 +02:00
|
|
|
|
|
|
|
bool loaded;
|
|
|
|
char *state_file;
|
2017-09-29 21:18:29 +02:00
|
|
|
|
|
|
|
bool unicast_relevant;
|
2014-07-16 00:26:02 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
int link_new(Manager *m, Link **ret, int ifindex);
|
|
|
|
Link *link_free(Link *l);
|
2016-06-15 22:38:23 +02:00
|
|
|
int link_process_rtnl(Link *l, sd_netlink_message *m);
|
|
|
|
int link_update(Link *l);
|
2016-02-01 00:00:01 +01:00
|
|
|
bool link_relevant(Link *l, int family, bool local_multicast);
|
2014-07-29 14:24:02 +02:00
|
|
|
LinkAddress* link_find_address(Link *l, int family, const union in_addr_union *in_addr);
|
2014-07-31 17:46:40 +02:00
|
|
|
void link_add_rrs(Link *l, bool force_remove);
|
2014-08-01 18:09:07 +02:00
|
|
|
|
2016-01-19 17:16:12 +01:00
|
|
|
void link_flush_settings(Link *l);
|
|
|
|
void link_set_dnssec_mode(Link *l, DnssecMode mode);
|
2018-06-13 20:26:24 +02:00
|
|
|
void link_set_dns_over_tls_mode(Link *l, DnsOverTlsMode mode);
|
2016-01-19 17:16:12 +01:00
|
|
|
void link_allocate_scopes(Link *l);
|
|
|
|
|
2014-08-01 18:09:07 +02:00
|
|
|
DnsServer* link_set_dns_server(Link *l, DnsServer *s);
|
2014-07-16 00:26:02 +02:00
|
|
|
DnsServer* link_get_dns_server(Link *l);
|
|
|
|
void link_next_dns_server(Link *l);
|
|
|
|
|
2016-01-19 21:48:01 +01:00
|
|
|
DnssecMode link_get_dnssec_mode(Link *l);
|
|
|
|
bool link_dnssec_supported(Link *l);
|
|
|
|
|
2018-06-13 20:26:24 +02:00
|
|
|
DnsOverTlsMode link_get_dns_over_tls_mode(Link *l);
|
2018-05-04 17:31:16 +02:00
|
|
|
|
2016-06-15 22:38:23 +02:00
|
|
|
int link_save_user(Link *l);
|
|
|
|
int link_load_user(Link *l);
|
|
|
|
void link_remove_user(Link *l);
|
|
|
|
|
2014-07-29 14:24:02 +02:00
|
|
|
int link_address_new(Link *l, LinkAddress **ret, int family, const union in_addr_union *in_addr);
|
2014-07-16 00:26:02 +02:00
|
|
|
LinkAddress *link_address_free(LinkAddress *a);
|
2015-06-12 16:31:33 +02:00
|
|
|
int link_address_update_rtnl(LinkAddress *a, sd_netlink_message *m);
|
2016-02-01 00:00:01 +01:00
|
|
|
bool link_address_relevant(LinkAddress *l, bool local_multicast);
|
2014-07-31 17:46:40 +02:00
|
|
|
void link_address_add_rrs(LinkAddress *a, bool force_remove);
|
2014-07-16 00:26:02 +02:00
|
|
|
|
2020-11-17 18:31:53 +01:00
|
|
|
bool link_negative_trust_anchor_lookup(Link *l, const char *name);
|
|
|
|
|
2014-07-16 00:26:02 +02:00
|
|
|
DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);
|