]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd-network.h
Merge pull request #5319 from keszybz/test-execute
[thirdparty/systemd.git] / src / network / networkd-network.h
CommitLineData
fc2f9534
LP
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
634f0f98
ZJS
22#include "sd-bus.h"
23#include "udev.h"
24
fc2f9534 25#include "condition.h"
634f0f98
ZJS
26#include "dhcp-identifier.h"
27#include "hashmap.h"
af49ca27 28#include "resolve-util.h"
fc2f9534 29
fc2f9534 30#include "networkd-address.h"
13b498f9 31#include "networkd-brvlan.h"
fc2f9534 32#include "networkd-fdb.h"
7272b25e 33#include "networkd-lldp-tx.h"
a0e5c15d 34#include "networkd-ipv6-proxy-ndp.h"
71d35b6b 35#include "networkd-route.h"
fc2f9534 36#include "networkd-util.h"
441e9ae4 37#include "netdev/netdev.h"
fc2f9534
LP
38
39#define DHCP_ROUTE_METRIC 1024
40#define IPV4LL_ROUTE_METRIC 2048
41
13b498f9
TJ
42#define BRIDGE_VLAN_BITMAP_MAX 4096
43#define BRIDGE_VLAN_BITMAP_LEN (BRIDGE_VLAN_BITMAP_MAX / 32)
44
fc2f9534
LP
45typedef 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
52typedef 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
b2a81c0b
LP
61typedef 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
34437b4f
LP
69typedef 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
8341a5c3
ZJS
77typedef 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
634f0f98
ZJS
85typedef struct Manager Manager;
86
fc2f9534
LP
87struct 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;
6cb955c6 108 NetDev *vrf;
fc2f9534
LP
109 Hashmap *stacked_netdevs;
110
111 /* DHCP Client Support */
112 AddressFamilyBoolean dhcp;
113 DCHPClientIdentifier dhcp_client_identifier;
114 char *dhcp_vendor_class_identifier;
27cb34f5 115 char *dhcp_hostname;
94e9bd57
LP
116 unsigned dhcp_route_metric;
117 uint32_t dhcp_route_table;
9c77d107 118 uint16_t dhcp_client_port;
27cb34f5 119 bool dhcp_send_hostname;
fc2f9534
LP
120 bool dhcp_broadcast;
121 bool dhcp_critical;
94e9bd57
LP
122 bool dhcp_use_dns;
123 bool dhcp_use_ntp;
124 bool dhcp_use_mtu;
27cb34f5
LP
125 bool dhcp_use_routes;
126 bool dhcp_use_timezone;
94e9bd57
LP
127 bool dhcp_use_hostname;
128 DHCPUseDomains dhcp_use_domains;
fc2f9534
LP
129
130 /* DHCP Server Support */
131 bool dhcp_server;
1a04db0f
LP
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;
77ff6022 138 bool dhcp_server_emit_router;
fc2f9534 139 bool dhcp_server_emit_timezone;
1a04db0f 140 char *dhcp_server_timezone;
fc2f9534 141 usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
9b3a67c5
TG
142 uint32_t dhcp_server_pool_offset;
143 uint32_t dhcp_server_pool_size;
fc2f9534
LP
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
ffff9abe 157 bool use_br_vlan;
13b498f9
TJ
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
fc2f9534
LP
162 AddressFamilyBoolean ip_forward;
163 bool ip_masquerade;
164
4f2e437a 165 int ipv6_accept_ra;
8749cbcd 166 int ipv6_dad_transmits;
b69c3180 167 int ipv6_hop_limit;
23d8b221 168 int proxy_arp;
4f2e437a 169
1e7a0e21 170 bool ipv6_accept_ra_use_dns;
eb64b435
SS
171 bool active_slave;
172 bool primary_slave;
1e7a0e21 173 DHCPUseDomains ipv6_accept_ra_use_domains;
2ba31d29 174 uint32_t ipv6_accept_ra_route_table;
1e7a0e21 175
fc2f9534
LP
176 union in_addr_union ipv6_token;
177 IPv6PrivacyExtensions ipv6_privacy_extensions;
178
179 struct ether_addr *mac;
b8b40317 180 size_t mtu;
99d2baa2 181 int arp;
a09dc546 182 bool unmanaged;
413708d1 183 uint32_t iaid;
8341a5c3 184 DUID duid;
fc2f9534 185
8e1ad1ea 186 LLDPMode lldp_mode; /* LLDP reception */
7272b25e 187 LLDPEmit lldp_emit; /* LLDP transmission */
fc2f9534
LP
188
189 LIST_HEAD(Address, static_addresses);
190 LIST_HEAD(Route, static_routes);
191 LIST_HEAD(FdbEntry, static_fdb_entries);
a0e5c15d 192 LIST_HEAD(IPv6ProxyNDPAddress, ipv6_proxy_ndp_addresses);
fc2f9534 193
8c34b963
LP
194 unsigned n_static_addresses;
195 unsigned n_static_routes;
196 unsigned n_static_fdb_entries;
a0e5c15d 197 unsigned n_ipv6_proxy_ndp_addresses;
8c34b963 198
fc2f9534
LP
199 Hashmap *addresses_by_section;
200 Hashmap *routes_by_section;
201 Hashmap *fdb_entries_by_section;
202
5512a963
LP
203 struct in_addr_data *dns;
204 unsigned n_dns;
205
206 char **search_domains, **route_domains, **ntp, **bind_carrier;
fc2f9534
LP
207
208 ResolveSupport llmnr;
aaa297d4 209 ResolveSupport mdns;
ad6c0475 210 DnssecMode dnssec_mode;
8a516214 211 Set *dnssec_negative_trust_anchors;
fc2f9534
LP
212
213 LIST_FIELDS(Network, networks);
214};
215
216void network_free(Network *network);
217
218DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
219#define _cleanup_network_free_ _cleanup_(network_freep)
220
221int network_load(Manager *manager);
222
223int network_get_by_name(Manager *manager, const char *name, Network **ret);
224int network_get(Manager *manager, struct udev_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
7d342c03 225int network_apply(Network *network, Link *link);
fc2f9534 226
439689c6
SS
227bool network_has_static_ipv6_addresses(Network *network);
228
fc2f9534
LP
229int 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);
230int 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);
231int 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);
232int 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 233int 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
234int 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);
235int 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);
236int 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);
237int 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);
238int 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
LP
239int 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);
240int 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 241int 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 242int 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 243int 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 244int 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 245int 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
246
247/* Legacy IPv4LL support */
248int 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
c9f7b4d3 250const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
fc2f9534
LP
251
252extern const sd_bus_vtable network_vtable[];
253
254int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
255int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
256
257const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
258IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
b2a81c0b
LP
259
260const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
261DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
34437b4f
LP
262
263const char* lldp_mode_to_string(LLDPMode m) _const_;
264LLDPMode lldp_mode_from_string(const char *s) _pure_;