]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd-network.h
networkd: added support for vrf interfaces (#3316)
[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"
71d35b6b
TA
34#include "networkd-netdev.h"
35#include "networkd-route.h"
fc2f9534
LP
36#include "networkd-util.h"
37
38#define DHCP_ROUTE_METRIC 1024
39#define IPV4LL_ROUTE_METRIC 2048
40
13b498f9
TJ
41#define BRIDGE_VLAN_BITMAP_MAX 4096
42#define BRIDGE_VLAN_BITMAP_LEN (BRIDGE_VLAN_BITMAP_MAX / 32)
43
fc2f9534
LP
44typedef enum DCHPClientIdentifier {
45 DHCP_CLIENT_ID_MAC,
46 DHCP_CLIENT_ID_DUID,
47 _DHCP_CLIENT_ID_MAX,
48 _DHCP_CLIENT_ID_INVALID = -1,
49} DCHPClientIdentifier;
50
51typedef enum IPv6PrivacyExtensions {
52 /* The values map to the kernel's /proc/sys/net/ipv6/conf/xxx/use_tempaddr values */
53 IPV6_PRIVACY_EXTENSIONS_NO,
54 IPV6_PRIVACY_EXTENSIONS_PREFER_PUBLIC,
55 IPV6_PRIVACY_EXTENSIONS_YES, /* aka prefer-temporary */
56 _IPV6_PRIVACY_EXTENSIONS_MAX,
57 _IPV6_PRIVACY_EXTENSIONS_INVALID = -1,
58} IPv6PrivacyExtensions;
59
b2a81c0b
LP
60typedef enum DHCPUseDomains {
61 DHCP_USE_DOMAINS_NO,
62 DHCP_USE_DOMAINS_YES,
63 DHCP_USE_DOMAINS_ROUTE,
64 _DHCP_USE_DOMAINS_MAX,
65 _DHCP_USE_DOMAINS_INVALID = -1,
66} DHCPUseDomains;
67
34437b4f
LP
68typedef enum LLDPMode {
69 LLDP_MODE_NO = 0,
70 LLDP_MODE_YES = 1,
71 LLDP_MODE_ROUTERS_ONLY = 2,
72 _LLDP_MODE_MAX,
73 _LLDP_MODE_INVALID = -1,
74} LLDPMode;
75
8341a5c3
ZJS
76typedef struct DUID {
77 /* Value of Type in [DHCP] section */
78 DUIDType type;
79
80 uint8_t raw_data_len;
81 uint8_t raw_data[MAX_DUID_LEN];
82} DUID;
83
634f0f98
ZJS
84typedef struct Manager Manager;
85
fc2f9534
LP
86struct Network {
87 Manager *manager;
88
89 char *filename;
90 char *name;
91
92 struct ether_addr *match_mac;
93 char **match_path;
94 char **match_driver;
95 char **match_type;
96 char **match_name;
97
98 Condition *match_host;
99 Condition *match_virt;
100 Condition *match_kernel;
101 Condition *match_arch;
102
103 char *description;
104
105 NetDev *bridge;
106 NetDev *bond;
107 Hashmap *stacked_netdevs;
108
109 /* DHCP Client Support */
110 AddressFamilyBoolean dhcp;
111 DCHPClientIdentifier dhcp_client_identifier;
112 char *dhcp_vendor_class_identifier;
27cb34f5
LP
113 char *dhcp_hostname;
114 bool dhcp_use_dns;
115 bool dhcp_use_ntp;
116 bool dhcp_use_mtu;
117 bool dhcp_use_hostname;
b2a81c0b 118 DHCPUseDomains dhcp_use_domains;
27cb34f5 119 bool dhcp_send_hostname;
fc2f9534
LP
120 bool dhcp_broadcast;
121 bool dhcp_critical;
27cb34f5
LP
122 bool dhcp_use_routes;
123 bool dhcp_use_timezone;
fc2f9534
LP
124 unsigned dhcp_route_metric;
125
126 /* DHCP Server Support */
127 bool dhcp_server;
1a04db0f
LP
128 bool dhcp_server_emit_dns;
129 struct in_addr *dhcp_server_dns;
130 unsigned n_dhcp_server_dns;
131 bool dhcp_server_emit_ntp;
132 struct in_addr *dhcp_server_ntp;
133 unsigned n_dhcp_server_ntp;
77ff6022 134 bool dhcp_server_emit_router;
fc2f9534 135 bool dhcp_server_emit_timezone;
1a04db0f 136 char *dhcp_server_timezone;
fc2f9534 137 usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
9b3a67c5
TG
138 uint32_t dhcp_server_pool_offset;
139 uint32_t dhcp_server_pool_size;
fc2f9534
LP
140
141 /* IPV4LL Support */
142 AddressFamilyBoolean link_local;
143 bool ipv4ll_route;
144
145 /* Bridge Support */
146 bool use_bpdu;
147 bool hairpin;
148 bool fast_leave;
149 bool allow_port_to_be_root;
150 bool unicast_flood;
151 unsigned cost;
152
13b498f9
TJ
153 uint16_t pvid;
154 uint32_t br_vid_bitmap[BRIDGE_VLAN_BITMAP_LEN];
155 uint32_t br_untagged_bitmap[BRIDGE_VLAN_BITMAP_LEN];
156
fc2f9534
LP
157 AddressFamilyBoolean ip_forward;
158 bool ip_masquerade;
159
4f2e437a 160 int ipv6_accept_ra;
8749cbcd 161 int ipv6_dad_transmits;
b69c3180 162 int ipv6_hop_limit;
23d8b221 163 int proxy_arp;
4f2e437a 164
1e7a0e21
LP
165 bool ipv6_accept_ra_use_dns;
166 DHCPUseDomains ipv6_accept_ra_use_domains;
167
fc2f9534
LP
168 union in_addr_union ipv6_token;
169 IPv6PrivacyExtensions ipv6_privacy_extensions;
170
171 struct ether_addr *mac;
172 unsigned mtu;
413708d1 173 uint32_t iaid;
8341a5c3 174 DUID duid;
fc2f9534 175
8e1ad1ea 176 LLDPMode lldp_mode; /* LLDP reception */
7272b25e 177 LLDPEmit lldp_emit; /* LLDP transmission */
fc2f9534
LP
178
179 LIST_HEAD(Address, static_addresses);
180 LIST_HEAD(Route, static_routes);
181 LIST_HEAD(FdbEntry, static_fdb_entries);
182
8c34b963
LP
183 unsigned n_static_addresses;
184 unsigned n_static_routes;
185 unsigned n_static_fdb_entries;
186
fc2f9534
LP
187 Hashmap *addresses_by_section;
188 Hashmap *routes_by_section;
189 Hashmap *fdb_entries_by_section;
190
3df9bec5 191 char **search_domains, **route_domains, **dns, **ntp, **bind_carrier;
fc2f9534
LP
192
193 ResolveSupport llmnr;
aaa297d4 194 ResolveSupport mdns;
ad6c0475 195 DnssecMode dnssec_mode;
8a516214 196 Set *dnssec_negative_trust_anchors;
fc2f9534
LP
197
198 LIST_FIELDS(Network, networks);
199};
200
201void network_free(Network *network);
202
203DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
204#define _cleanup_network_free_ _cleanup_(network_freep)
205
206int network_load(Manager *manager);
207
208int network_get_by_name(Manager *manager, const char *name, Network **ret);
209int network_get(Manager *manager, struct udev_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
210int network_apply(Manager *manager, Network *network, Link *link);
211
439689c6
SS
212bool network_has_static_ipv6_addresses(Network *network);
213
fc2f9534
LP
214int 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);
215int 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);
216int 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);
217int 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);
218int 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);
219int 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);
220int 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);
221int 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);
222int 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
223int 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);
224int 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 225int 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 226int 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 227int 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);
fc2f9534
LP
228
229/* Legacy IPv4LL support */
230int 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);
231
232const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
233
234extern const sd_bus_vtable network_vtable[];
235
236int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
237int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
238
239const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
240IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
b2a81c0b
LP
241
242const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
243DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
34437b4f
LP
244
245const char* lldp_mode_to_string(LLDPMode m) _const_;
246LLDPMode lldp_mode_from_string(const char *s) _pure_;