Branch data Line data Source code
1 : : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : : #pragma once 3 : : 4 : : #include "in-addr-util.h" 5 : : #include "ratelimit.h" 6 : : #include "resolve-util.h" 7 : : 8 : : typedef struct Link Link; 9 : : typedef struct LinkAddress LinkAddress; 10 : : 11 : : #include "resolved-dns-rr.h" 12 : : #include "resolved-dns-scope.h" 13 : : #include "resolved-dns-search-domain.h" 14 : : #include "resolved-dns-server.h" 15 : : #include "resolved-manager.h" 16 : : 17 : : #define LINK_SEARCH_DOMAINS_MAX 256 18 : : #define LINK_DNS_SERVERS_MAX 256 19 : : 20 : : struct LinkAddress { 21 : : Link *link; 22 : : 23 : : int family; 24 : : union in_addr_union in_addr; 25 : : 26 : : unsigned char flags, scope; 27 : : 28 : : DnsResourceRecord *llmnr_address_rr; 29 : : DnsResourceRecord *llmnr_ptr_rr; 30 : : DnsResourceRecord *mdns_address_rr; 31 : : DnsResourceRecord *mdns_ptr_rr; 32 : : 33 : : LIST_FIELDS(LinkAddress, addresses); 34 : : }; 35 : : 36 : : struct Link { 37 : : Manager *manager; 38 : : 39 : : int ifindex; 40 : : unsigned flags; 41 : : 42 : : LIST_HEAD(LinkAddress, addresses); 43 : : unsigned n_addresses; 44 : : 45 : : LIST_HEAD(DnsServer, dns_servers); 46 : : DnsServer *current_dns_server; 47 : : unsigned n_dns_servers; 48 : : 49 : : LIST_HEAD(DnsSearchDomain, search_domains); 50 : : unsigned n_search_domains; 51 : : 52 : : int default_route; 53 : : 54 : : ResolveSupport llmnr_support; 55 : : ResolveSupport mdns_support; 56 : : DnsOverTlsMode dns_over_tls_mode; 57 : : DnssecMode dnssec_mode; 58 : : Set *dnssec_negative_trust_anchors; 59 : : 60 : : DnsScope *unicast_scope; 61 : : DnsScope *llmnr_ipv4_scope; 62 : : DnsScope *llmnr_ipv6_scope; 63 : : DnsScope *mdns_ipv4_scope; 64 : : DnsScope *mdns_ipv6_scope; 65 : : 66 : : bool is_managed; 67 : : 68 : : char *ifname; 69 : : uint32_t mtu; 70 : : uint8_t operstate; 71 : : 72 : : bool loaded; 73 : : char *state_file; 74 : : 75 : : bool unicast_relevant; 76 : : }; 77 : : 78 : : int link_new(Manager *m, Link **ret, int ifindex); 79 : : Link *link_free(Link *l); 80 : : int link_process_rtnl(Link *l, sd_netlink_message *m); 81 : : int link_update(Link *l); 82 : : bool link_relevant(Link *l, int family, bool local_multicast); 83 : : LinkAddress* link_find_address(Link *l, int family, const union in_addr_union *in_addr); 84 : : void link_add_rrs(Link *l, bool force_remove); 85 : : 86 : : void link_flush_settings(Link *l); 87 : : void link_set_dnssec_mode(Link *l, DnssecMode mode); 88 : : void link_set_dns_over_tls_mode(Link *l, DnsOverTlsMode mode); 89 : : void link_allocate_scopes(Link *l); 90 : : 91 : : DnsServer* link_set_dns_server(Link *l, DnsServer *s); 92 : : DnsServer* link_get_dns_server(Link *l); 93 : : void link_next_dns_server(Link *l); 94 : : 95 : : DnssecMode link_get_dnssec_mode(Link *l); 96 : : bool link_dnssec_supported(Link *l); 97 : : 98 : : DnsOverTlsMode link_get_dns_over_tls_mode(Link *l); 99 : : 100 : : int link_save_user(Link *l); 101 : : int link_load_user(Link *l); 102 : : void link_remove_user(Link *l); 103 : : 104 : : int link_address_new(Link *l, LinkAddress **ret, int family, const union in_addr_union *in_addr); 105 : : LinkAddress *link_address_free(LinkAddress *a); 106 : : int link_address_update_rtnl(LinkAddress *a, sd_netlink_message *m); 107 : : bool link_address_relevant(LinkAddress *l, bool local_multicast); 108 : : void link_address_add_rrs(LinkAddress *a, bool force_remove); 109 : : 110 [ # # ]: 0 : DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);