]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd-network.h
Merge pull request #8377 from sourcejedi/logind_restart_is_sorely_lacking_in_testing3
[thirdparty/systemd.git] / src / network / networkd-network.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
fc2f9534
LP
2#pragma once
3
4/***
5 This file is part of systemd.
6
7 Copyright 2013 Tom Gundersen <teg@jklm.no>
8
9 systemd is free software; you can redistribute it and/or modify it
10 under the terms of the GNU Lesser General Public License as published by
11 the Free Software Foundation; either version 2.1 of the License, or
12 (at your option) any later version.
13
14 systemd is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public License
20 along with systemd; If not, see <http://www.gnu.org/licenses/>.
21***/
22
634f0f98
ZJS
23#include "sd-bus.h"
24#include "udev.h"
25
fc2f9534 26#include "condition.h"
634f0f98
ZJS
27#include "dhcp-identifier.h"
28#include "hashmap.h"
af49ca27 29#include "resolve-util.h"
fc2f9534 30
fc2f9534 31#include "networkd-address.h"
95b74ef6 32#include "networkd-address-label.h"
13b498f9 33#include "networkd-brvlan.h"
fc2f9534 34#include "networkd-fdb.h"
7272b25e 35#include "networkd-lldp-tx.h"
a0e5c15d 36#include "networkd-ipv6-proxy-ndp.h"
6e849e95 37#include "networkd-radv.h"
71d35b6b 38#include "networkd-route.h"
bce67bbe 39#include "networkd-routing-policy-rule.h"
fc2f9534 40#include "networkd-util.h"
441e9ae4 41#include "netdev/netdev.h"
fc2f9534
LP
42
43#define DHCP_ROUTE_METRIC 1024
44#define IPV4LL_ROUTE_METRIC 2048
45
13b498f9
TJ
46#define BRIDGE_VLAN_BITMAP_MAX 4096
47#define BRIDGE_VLAN_BITMAP_LEN (BRIDGE_VLAN_BITMAP_MAX / 32)
48
499d555a 49typedef enum DHCPClientIdentifier {
fc2f9534
LP
50 DHCP_CLIENT_ID_MAC,
51 DHCP_CLIENT_ID_DUID,
52 _DHCP_CLIENT_ID_MAX,
53 _DHCP_CLIENT_ID_INVALID = -1,
499d555a 54} DHCPClientIdentifier;
fc2f9534
LP
55
56typedef enum IPv6PrivacyExtensions {
57 /* The values map to the kernel's /proc/sys/net/ipv6/conf/xxx/use_tempaddr values */
58 IPV6_PRIVACY_EXTENSIONS_NO,
59 IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC,
60 IPV6_PRIVACY_EXTENSIONS_YES, /* aka prefer-temporary */
61 _IPV6_PRIVACY_EXTENSIONS_MAX,
62 _IPV6_PRIVACY_EXTENSIONS_INVALID = -1,
63} IPv6PrivacyExtensions;
64
b2a81c0b
LP
65typedef enum DHCPUseDomains {
66 DHCP_USE_DOMAINS_NO,
67 DHCP_USE_DOMAINS_YES,
68 DHCP_USE_DOMAINS_ROUTE,
69 _DHCP_USE_DOMAINS_MAX,
70 _DHCP_USE_DOMAINS_INVALID = -1,
71} DHCPUseDomains;
72
34437b4f
LP
73typedef enum LLDPMode {
74 LLDP_MODE_NO = 0,
75 LLDP_MODE_YES = 1,
76 LLDP_MODE_ROUTERS_ONLY = 2,
77 _LLDP_MODE_MAX,
78 _LLDP_MODE_INVALID = -1,
79} LLDPMode;
80
8341a5c3
ZJS
81typedef struct DUID {
82 /* Value of Type in [DHCP] section */
83 DUIDType type;
84
85 uint8_t raw_data_len;
86 uint8_t raw_data[MAX_DUID_LEN];
87} DUID;
88
56a23cb4
PF
89typedef enum RADVPrefixDelegation {
90 RADV_PREFIX_DELEGATION_NONE,
91 RADV_PREFIX_DELEGATION_STATIC,
92 RADV_PREFIX_DELEGATION_DHCP6,
93 RADV_PREFIX_DELEGATION_BOTH,
94} RADVPrefixDelegation;
95
f4859fc7
SS
96typedef struct NetworkConfigSection {
97 unsigned line;
98 char filename[];
99} NetworkConfigSection;
100
101int network_config_section_new(const char *filename, unsigned line, NetworkConfigSection **s);
102void network_config_section_free(NetworkConfigSection *network);
103
104DEFINE_TRIVIAL_CLEANUP_FUNC(NetworkConfigSection*, network_config_section_free);
105#define _cleanup_network_config_section_free_ _cleanup_(network_config_section_freep)
106
634f0f98
ZJS
107typedef struct Manager Manager;
108
fc2f9534
LP
109struct Network {
110 Manager *manager;
111
112 char *filename;
113 char *name;
114
115 struct ether_addr *match_mac;
116 char **match_path;
117 char **match_driver;
118 char **match_type;
119 char **match_name;
120
121 Condition *match_host;
122 Condition *match_virt;
5022f08a
LP
123 Condition *match_kernel_cmdline;
124 Condition *match_kernel_version;
fc2f9534
LP
125 Condition *match_arch;
126
127 char *description;
128
129 NetDev *bridge;
130 NetDev *bond;
6cb955c6 131 NetDev *vrf;
fc2f9534
LP
132 Hashmap *stacked_netdevs;
133
134 /* DHCP Client Support */
135 AddressFamilyBoolean dhcp;
499d555a 136 DHCPClientIdentifier dhcp_client_identifier;
fc2f9534 137 char *dhcp_vendor_class_identifier;
27cb34f5 138 char *dhcp_hostname;
94e9bd57
LP
139 unsigned dhcp_route_metric;
140 uint32_t dhcp_route_table;
9c77d107 141 uint16_t dhcp_client_port;
7585baa0 142 bool dhcp_anonymize;
27cb34f5 143 bool dhcp_send_hostname;
fc2f9534
LP
144 bool dhcp_broadcast;
145 bool dhcp_critical;
94e9bd57
LP
146 bool dhcp_use_dns;
147 bool dhcp_use_ntp;
148 bool dhcp_use_mtu;
27cb34f5
LP
149 bool dhcp_use_routes;
150 bool dhcp_use_timezone;
fb5c8216 151 bool rapid_commit;
94e9bd57 152 bool dhcp_use_hostname;
fc1ba79d 153 bool dhcp_route_table_set;
94e9bd57 154 DHCPUseDomains dhcp_use_domains;
fc2f9534
LP
155
156 /* DHCP Server Support */
157 bool dhcp_server;
1a04db0f
LP
158 bool dhcp_server_emit_dns;
159 struct in_addr *dhcp_server_dns;
160 unsigned n_dhcp_server_dns;
161 bool dhcp_server_emit_ntp;
162 struct in_addr *dhcp_server_ntp;
163 unsigned n_dhcp_server_ntp;
77ff6022 164 bool dhcp_server_emit_router;
fc2f9534 165 bool dhcp_server_emit_timezone;
1a04db0f 166 char *dhcp_server_timezone;
fc2f9534 167 usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
9b3a67c5
TG
168 uint32_t dhcp_server_pool_offset;
169 uint32_t dhcp_server_pool_size;
fc2f9534
LP
170
171 /* IPV4LL Support */
172 AddressFamilyBoolean link_local;
173 bool ipv4ll_route;
174
7d5cac19 175 /* IPv6 prefix delegation support */
56a23cb4 176 RADVPrefixDelegation router_prefix_delegation;
7d5cac19
PF
177 usec_t router_lifetime_usec;
178 uint8_t router_preference;
179 bool router_managed;
180 bool router_other_information;
9e25315c
PF
181 bool router_emit_dns;
182 bool router_emit_domains;
88295a05
PF
183 usec_t router_dns_lifetime_usec;
184 struct in6_addr *router_dns;
185 unsigned n_router_dns;
700f1186 186 char **router_search_domains;
7d5cac19 187
fc2f9534
LP
188 /* Bridge Support */
189 bool use_bpdu;
190 bool hairpin;
191 bool fast_leave;
192 bool allow_port_to_be_root;
193 bool unicast_flood;
b56be296
DJL
194 uint32_t cost;
195 uint16_t priority;
fc2f9534 196
ffff9abe 197 bool use_br_vlan;
13b498f9
TJ
198 uint16_t pvid;
199 uint32_t br_vid_bitmap[BRIDGE_VLAN_BITMAP_LEN];
200 uint32_t br_untagged_bitmap[BRIDGE_VLAN_BITMAP_LEN];
201
fc2f9534
LP
202 AddressFamilyBoolean ip_forward;
203 bool ip_masquerade;
204
4f2e437a 205 int ipv6_accept_ra;
8749cbcd 206 int ipv6_dad_transmits;
b69c3180 207 int ipv6_hop_limit;
465dfe59 208 int ipv6_proxy_ndp;
23d8b221 209 int proxy_arp;
4f2e437a 210
1e7a0e21 211 bool ipv6_accept_ra_use_dns;
eb64b435
SS
212 bool active_slave;
213 bool primary_slave;
1e7a0e21 214 DHCPUseDomains ipv6_accept_ra_use_domains;
2ba31d29 215 uint32_t ipv6_accept_ra_route_table;
1e7a0e21 216
fc2f9534
LP
217 union in_addr_union ipv6_token;
218 IPv6PrivacyExtensions ipv6_privacy_extensions;
219
220 struct ether_addr *mac;
b8b40317 221 size_t mtu;
99d2baa2 222 int arp;
a09dc546 223 bool unmanaged;
dad2d78e 224 bool configure_without_carrier;
413708d1 225 uint32_t iaid;
8341a5c3 226 DUID duid;
fc2f9534 227
c1a38904
MTL
228 bool required_for_online; /* Is this network required to be considered online? */
229
8e1ad1ea 230 LLDPMode lldp_mode; /* LLDP reception */
7272b25e 231 LLDPEmit lldp_emit; /* LLDP transmission */
fc2f9534
LP
232
233 LIST_HEAD(Address, static_addresses);
234 LIST_HEAD(Route, static_routes);
235 LIST_HEAD(FdbEntry, static_fdb_entries);
a0e5c15d 236 LIST_HEAD(IPv6ProxyNDPAddress, ipv6_proxy_ndp_addresses);
95b74ef6 237 LIST_HEAD(AddressLabel, address_labels);
057abfd8 238 LIST_HEAD(Prefix, static_prefixes);
bce67bbe 239 LIST_HEAD(RoutingPolicyRule, rules);
fc2f9534 240
8c34b963
LP
241 unsigned n_static_addresses;
242 unsigned n_static_routes;
243 unsigned n_static_fdb_entries;
a0e5c15d 244 unsigned n_ipv6_proxy_ndp_addresses;
95b74ef6 245 unsigned n_address_labels;
057abfd8 246 unsigned n_static_prefixes;
bce67bbe 247 unsigned n_rules;
8c34b963 248
fc2f9534
LP
249 Hashmap *addresses_by_section;
250 Hashmap *routes_by_section;
251 Hashmap *fdb_entries_by_section;
95b74ef6 252 Hashmap *address_labels_by_section;
057abfd8 253 Hashmap *prefixes_by_section;
bce67bbe 254 Hashmap *rules_by_section;
fc2f9534 255
5512a963
LP
256 struct in_addr_data *dns;
257 unsigned n_dns;
258
259 char **search_domains, **route_domains, **ntp, **bind_carrier;
fc2f9534
LP
260
261 ResolveSupport llmnr;
aaa297d4 262 ResolveSupport mdns;
ad6c0475 263 DnssecMode dnssec_mode;
8a516214 264 Set *dnssec_negative_trust_anchors;
fc2f9534
LP
265
266 LIST_FIELDS(Network, networks);
267};
268
269void network_free(Network *network);
270
271DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
272#define _cleanup_network_free_ _cleanup_(network_freep)
273
274int network_load(Manager *manager);
275
276int network_get_by_name(Manager *manager, const char *name, Network **ret);
277int network_get(Manager *manager, struct udev_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
7d342c03 278int network_apply(Network *network, Link *link);
add8d07d 279void network_apply_anonymize_if_set(Network *network);
fc2f9534 280
439689c6
SS
281bool network_has_static_ipv6_addresses(Network *network);
282
fc2f9534
LP
283int 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);
284int 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);
285int 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);
286int 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);
53253824 287int 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);
fc2f9534
LP
288int 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);
289int 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);
290int 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);
291int 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);
292int 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);
1a04db0f 293int 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);
88295a05 294int config_parse_radv_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);
700f1186 295int config_parse_radv_search_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);
1a04db0f 296int 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);
8a516214 297int 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);
b2a81c0b 298int 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);
34437b4f 299int 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);
f594276b 300int 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);
26575990 301int 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);
fc2f9534
LP
302
303/* Legacy IPv4LL support */
304int 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);
305
c9f7b4d3 306const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
fc2f9534
LP
307
308extern const sd_bus_vtable network_vtable[];
309
310int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
311int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
312
313const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
314IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
b2a81c0b
LP
315
316const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
317DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
34437b4f
LP
318
319const char* lldp_mode_to_string(LLDPMode m) _const_;
320LLDPMode lldp_mode_from_string(const char *s) _pure_;