]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/resolve/resolved-link.h
resolved: add a generic DnsSearchDomain concept
[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
LP
36
37struct LinkAddress {
38 Link *link;
39
0dd25fb9 40 int family;
74b2466e
LP
41 union in_addr_union in_addr;
42
43 unsigned char flags, scope;
44
623a4c97
LP
45 DnsResourceRecord *llmnr_address_rr;
46 DnsResourceRecord *llmnr_ptr_rr;
47
74b2466e
LP
48 LIST_FIELDS(LinkAddress, addresses);
49};
50
51struct Link {
52 Manager *manager;
53
54 int ifindex;
55 unsigned flags;
56
57 LIST_HEAD(LinkAddress, addresses);
58
6073b6f2 59 LIST_HEAD(DnsServer, dns_servers);
74b2466e
LP
60 DnsServer *current_dns_server;
61
a51c1048
LP
62 LIST_HEAD(DnsSearchDomain, search_domains);
63
19b50b5b
LP
64 Support llmnr_support;
65
74b2466e 66 DnsScope *unicast_scope;
1716f6dc
LP
67 DnsScope *llmnr_ipv4_scope;
68 DnsScope *llmnr_ipv6_scope;
74b2466e 69
1716f6dc 70 char name[IF_NAMESIZE];
e1c95994 71 uint32_t mtu;
74b2466e
LP
72};
73
74int link_new(Manager *m, Link **ret, int ifindex);
75Link *link_free(Link *l);
1c4baffc 76int link_update_rtnl(Link *l, sd_netlink_message *m);
74b2466e 77int link_update_monitor(Link *l);
0dd25fb9 78bool link_relevant(Link *l, int family);
623a4c97 79LinkAddress* link_find_address(Link *l, int family, const union in_addr_union *in_addr);
ec2c5e43 80void link_add_rrs(Link *l, bool force_remove);
2c27fbca 81
0eac4623
LP
82void link_flush_dns_servers(Link *l);
83void link_flush_marked_dns_servers(Link *l);
84void link_mark_dns_servers(Link *l);
85
2c27fbca 86DnsServer* link_set_dns_server(Link *l, DnsServer *s);
623a4c97 87DnsServer* link_find_dns_server(Link *l, int family, const union in_addr_union *in_addr);
74b2466e
LP
88DnsServer* link_get_dns_server(Link *l);
89void link_next_dns_server(Link *l);
90
a51c1048
LP
91void link_flush_search_domains(Link *l);
92
623a4c97 93int link_address_new(Link *l, LinkAddress **ret, int family, const union in_addr_union *in_addr);
74b2466e 94LinkAddress *link_address_free(LinkAddress *a);
1c4baffc 95int link_address_update_rtnl(LinkAddress *a, sd_netlink_message *m);
74b2466e 96bool link_address_relevant(LinkAddress *l);
ec2c5e43 97void link_address_add_rrs(LinkAddress *a, bool force_remove);
74b2466e
LP
98
99DEFINE_TRIVIAL_CLEANUP_FUNC(Link*, link_free);