]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-network.h
Merge pull request #5276 from poettering/resolved-cname
[thirdparty/systemd.git] / src / network / networkd-network.h
1 #pragma once
2
3 /***
4 This file is part of systemd.
5
6 Copyright 2013 Tom Gundersen <teg@jklm.no>
7
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20 ***/
21
22 #include "sd-bus.h"
23 #include "udev.h"
24
25 #include "condition.h"
26 #include "dhcp-identifier.h"
27 #include "hashmap.h"
28 #include "resolve-util.h"
29
30 #include "networkd-address.h"
31 #include "networkd-brvlan.h"
32 #include "networkd-fdb.h"
33 #include "networkd-lldp-tx.h"
34 #include "networkd-ipv6-proxy-ndp.h"
35 #include "networkd-route.h"
36 #include "networkd-util.h"
37 #include "netdev/netdev.h"
38
39 #define DHCP_ROUTE_METRIC 1024
40 #define IPV4LL_ROUTE_METRIC 2048
41
42 #define BRIDGE_VLAN_BITMAP_MAX 4096
43 #define BRIDGE_VLAN_BITMAP_LEN (BRIDGE_VLAN_BITMAP_MAX / 32)
44
45 typedef enum DCHPClientIdentifier {
46 DHCP_CLIENT_ID_MAC,
47 DHCP_CLIENT_ID_DUID,
48 _DHCP_CLIENT_ID_MAX,
49 _DHCP_CLIENT_ID_INVALID = -1,
50 } DCHPClientIdentifier;
51
52 typedef enum IPv6PrivacyExtensions {
53 /* The values map to the kernel's /proc/sys/net/ipv6/conf/xxx/use_tempaddr values */
54 IPV6_PRIVACY_EXTENSIONS_NO,
55 IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC,
56 IPV6_PRIVACY_EXTENSIONS_YES, /* aka prefer-temporary */
57 _IPV6_PRIVACY_EXTENSIONS_MAX,
58 _IPV6_PRIVACY_EXTENSIONS_INVALID = -1,
59 } IPv6PrivacyExtensions;
60
61 typedef enum DHCPUseDomains {
62 DHCP_USE_DOMAINS_NO,
63 DHCP_USE_DOMAINS_YES,
64 DHCP_USE_DOMAINS_ROUTE,
65 _DHCP_USE_DOMAINS_MAX,
66 _DHCP_USE_DOMAINS_INVALID = -1,
67 } DHCPUseDomains;
68
69 typedef enum LLDPMode {
70 LLDP_MODE_NO = 0,
71 LLDP_MODE_YES = 1,
72 LLDP_MODE_ROUTERS_ONLY = 2,
73 _LLDP_MODE_MAX,
74 _LLDP_MODE_INVALID = -1,
75 } LLDPMode;
76
77 typedef struct DUID {
78 /* Value of Type in [DHCP] section */
79 DUIDType type;
80
81 uint8_t raw_data_len;
82 uint8_t raw_data[MAX_DUID_LEN];
83 } DUID;
84
85 typedef struct Manager Manager;
86
87 struct Network {
88 Manager *manager;
89
90 char *filename;
91 char *name;
92
93 struct ether_addr *match_mac;
94 char **match_path;
95 char **match_driver;
96 char **match_type;
97 char **match_name;
98
99 Condition *match_host;
100 Condition *match_virt;
101 Condition *match_kernel;
102 Condition *match_arch;
103
104 char *description;
105
106 NetDev *bridge;
107 NetDev *bond;
108 NetDev *vrf;
109 Hashmap *stacked_netdevs;
110
111 /* DHCP Client Support */
112 AddressFamilyBoolean dhcp;
113 DCHPClientIdentifier dhcp_client_identifier;
114 char *dhcp_vendor_class_identifier;
115 char *dhcp_hostname;
116 unsigned dhcp_route_metric;
117 uint32_t dhcp_route_table;
118 uint16_t dhcp_client_port;
119 bool dhcp_send_hostname;
120 bool dhcp_broadcast;
121 bool dhcp_critical;
122 bool dhcp_use_dns;
123 bool dhcp_use_ntp;
124 bool dhcp_use_mtu;
125 bool dhcp_use_routes;
126 bool dhcp_use_timezone;
127 bool dhcp_use_hostname;
128 DHCPUseDomains dhcp_use_domains;
129
130 /* DHCP Server Support */
131 bool dhcp_server;
132 bool dhcp_server_emit_dns;
133 struct in_addr *dhcp_server_dns;
134 unsigned n_dhcp_server_dns;
135 bool dhcp_server_emit_ntp;
136 struct in_addr *dhcp_server_ntp;
137 unsigned n_dhcp_server_ntp;
138 bool dhcp_server_emit_router;
139 bool dhcp_server_emit_timezone;
140 char *dhcp_server_timezone;
141 usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
142 uint32_t dhcp_server_pool_offset;
143 uint32_t dhcp_server_pool_size;
144
145 /* IPV4LL Support */
146 AddressFamilyBoolean link_local;
147 bool ipv4ll_route;
148
149 /* Bridge Support */
150 bool use_bpdu;
151 bool hairpin;
152 bool fast_leave;
153 bool allow_port_to_be_root;
154 bool unicast_flood;
155 unsigned cost;
156
157 bool use_br_vlan;
158 uint16_t pvid;
159 uint32_t br_vid_bitmap[BRIDGE_VLAN_BITMAP_LEN];
160 uint32_t br_untagged_bitmap[BRIDGE_VLAN_BITMAP_LEN];
161
162 AddressFamilyBoolean ip_forward;
163 bool ip_masquerade;
164
165 int ipv6_accept_ra;
166 int ipv6_dad_transmits;
167 int ipv6_hop_limit;
168 int proxy_arp;
169
170 bool ipv6_accept_ra_use_dns;
171 bool active_slave;
172 bool primary_slave;
173 DHCPUseDomains ipv6_accept_ra_use_domains;
174 uint32_t ipv6_accept_ra_route_table;
175
176 union in_addr_union ipv6_token;
177 IPv6PrivacyExtensions ipv6_privacy_extensions;
178
179 struct ether_addr *mac;
180 size_t mtu;
181 int arp;
182 bool unmanaged;
183 uint32_t iaid;
184 DUID duid;
185
186 LLDPMode lldp_mode; /* LLDP reception */
187 LLDPEmit lldp_emit; /* LLDP transmission */
188
189 LIST_HEAD(Address, static_addresses);
190 LIST_HEAD(Route, static_routes);
191 LIST_HEAD(FdbEntry, static_fdb_entries);
192 LIST_HEAD(IPv6ProxyNDPAddress, ipv6_proxy_ndp_addresses);
193
194 unsigned n_static_addresses;
195 unsigned n_static_routes;
196 unsigned n_static_fdb_entries;
197 unsigned n_ipv6_proxy_ndp_addresses;
198
199 Hashmap *addresses_by_section;
200 Hashmap *routes_by_section;
201 Hashmap *fdb_entries_by_section;
202
203 struct in_addr_data *dns;
204 unsigned n_dns;
205
206 char **search_domains, **route_domains, **ntp, **bind_carrier;
207
208 ResolveSupport llmnr;
209 ResolveSupport mdns;
210 DnssecMode dnssec_mode;
211 Set *dnssec_negative_trust_anchors;
212
213 LIST_FIELDS(Network, networks);
214 };
215
216 void network_free(Network *network);
217
218 DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
219 #define _cleanup_network_free_ _cleanup_(network_freep)
220
221 int network_load(Manager *manager);
222
223 int network_get_by_name(Manager *manager, const char *name, Network **ret);
224 int network_get(Manager *manager, struct udev_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
225 int network_apply(Network *network, Link *link);
226
227 bool network_has_static_ipv6_addresses(Network *network);
228
229 int config_parse_netdev(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
230 int config_parse_domains(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
231 int config_parse_tunnel(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
232 int config_parse_dhcp(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
233 int config_parse_dns(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
234 int config_parse_dhcp_client_identifier(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
235 int config_parse_ipv6token(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
236 int config_parse_ipv6_privacy_extensions(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
237 int config_parse_hostname(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
238 int config_parse_timezone(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
239 int config_parse_dhcp_server_dns(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
240 int config_parse_dhcp_server_ntp(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
241 int config_parse_dnssec_negative_trust_anchors(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
242 int config_parse_dhcp_use_domains(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
243 int config_parse_lldp_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
244 int config_parse_dhcp_route_table(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
245 int config_parse_ntp(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
246
247 /* Legacy IPv4LL support */
248 int config_parse_ipv4ll(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
249
250 const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
251
252 extern const sd_bus_vtable network_vtable[];
253
254 int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
255 int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
256
257 const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
258 IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
259
260 const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
261 DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
262
263 const char* lldp_mode_to_string(LLDPMode m) _const_;
264 LLDPMode lldp_mode_from_string(const char *s) _pure_;