]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-link.h
resolved: cache stringified transaction key once per transaction
[thirdparty/systemd.git] / src / resolve / resolved-link.h
CommitLineData
74b2466e
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
5/***
6 This file is part of systemd.
7
8 Copyright 2014 Lennart Poettering
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
1716f6dc
LP
24#include <net/if.h>
25
74b2466e
LP
26#include "in-addr-util.h"
27#include "ratelimit.h"
28
29typedef struct Link Link;
30typedef struct LinkAddress LinkAddress;
31
623a4c97 32#include "resolved-dns-rr.h"
a51c1048
LP
33#include "resolved-dns-search-domain.h"
34#include "resolved-dns-server.h"
39d8db04 35#include "resolved-manager.h"
74b2466e 36
eed857b7
LP
37#define LINK_SEARCH_DOMAINS_MAX 32
38#define LINK_DNS_SERVERS_MAX 32
39
74b2466e
LP
40struct LinkAddress {
41 Link *link;
42
0dd25fb9 43 int family;
74b2466e
LP
44 union in_addr_union in_addr;
45
46 unsigned char flags, scope;
47
623a4c97
LP
48 DnsResourceRecord *llmnr_address_rr;
49 DnsResourceRecord *llmnr_ptr_rr;
50
74b2466e
LP
51 LIST_FIELDS(LinkAddress, addresses);
52};
53
54struct Link {
55 Manager *manager;
56
57 int ifindex;
58 unsigned flags;
59
60 LIST_HEAD(LinkAddress, addresses);
61
6073b6f2 62 LIST_HEAD(DnsServer, dns_servers);
74b2466e 63 DnsServer *current_dns_server;
eed857b7 64 unsigned n_dns_servers;
74b2466e 65
a51c1048 66 LIST_HEAD(DnsSearchDomain, search_domains);
eed857b7 67 unsigned n_search_domains;
a51c1048 68
19b50b5b 69 Support llmnr_support;
bc7702b0 70 Support mdns_support;
19b50b5b 71
74b2466e 72 DnsScope *unicast_scope;
1716f6dc
LP
73 DnsScope *llmnr_ipv4_scope;
74 DnsScope *llmnr_ipv6_scope;
b4f1862d
DM
75 DnsScope *mdns_ipv4_scope;
76 DnsScope *mdns_ipv6_scope;
74b2466e 77
1716f6dc 78 char name[IF_NAMESIZE];
e1c95994 79 uint32_t mtu;
74b2466e
LP
80};
81
82int link_new(Manager *m, Link **ret, int ifindex);
83Link *link_free(Link *l);
1c4baffc 84int link_update_rtnl(Link *l, sd_netlink_message *m);
74b2466e 85int link_update_monitor(Link *l);
0dd25fb9 86bool link_relevant(Link *l, int family);
623a4c97 87LinkAddress* link_find_address(Link *l, int family, const union in_addr_union *in_addr);
ec2c5e43 88void link_add_rrs(Link *l, bool force_remove);
2c27fbca
LP
89
90DnsServer* link_set_dns_server(Link *l, DnsServer *s);
74b2466e
LP
91DnsServer* link_get_dns_server(Link *l);
92void link_next_dns_server(Link *l);
93
623a4c97 94int link_address_new(Link *l, LinkAddress **ret, int family, const union in_addr_union *in_addr);
74b2466e 95LinkAddress *link_address_free(LinkAddress *a);
1c4baffc 96int link_address_update_rtnl(LinkAddress *a, sd_netlink_message *m);
74b2466e 97bool link_address_relevant(LinkAddress *l);
ec2c5e43 98void link_address_add_rrs(LinkAddress *a, bool force_remove);
74b2466e
LP
99
100DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);