]> git.proxmox.com Git - systemd.git/blame - src/network/networkd-network.h
Imported Upstream version 231
[systemd.git] / src / network / networkd-network.h
CommitLineData
d9dfd233
MP
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
aa27b158
MP
22#include "sd-bus.h"
23#include "udev.h"
24
d9dfd233 25#include "condition.h"
aa27b158
MP
26#include "dhcp-identifier.h"
27#include "hashmap.h"
4c89c718 28#include "resolve-util.h"
d9dfd233 29
d9dfd233 30#include "networkd-address.h"
5a920b42 31#include "networkd-brvlan.h"
d9dfd233 32#include "networkd-fdb.h"
aa27b158 33#include "networkd-lldp-tx.h"
4c89c718
MP
34#include "networkd-netdev.h"
35#include "networkd-route.h"
d9dfd233
MP
36#include "networkd-util.h"
37
38#define DHCP_ROUTE_METRIC 1024
39#define IPV4LL_ROUTE_METRIC 2048
40
5a920b42
MP
41#define BRIDGE_VLAN_BITMAP_MAX 4096
42#define BRIDGE_VLAN_BITMAP_LEN (BRIDGE_VLAN_BITMAP_MAX / 32)
43
d9dfd233
MP
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
4c89c718
MP
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
aa27b158
MP
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
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
84typedef struct Manager Manager;
85
d9dfd233
MP
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;
5a920b42 107 NetDev *vrf;
d9dfd233
MP
108 Hashmap *stacked_netdevs;
109
110 /* DHCP Client Support */
111 AddressFamilyBoolean dhcp;
112 DCHPClientIdentifier dhcp_client_identifier;
113 char *dhcp_vendor_class_identifier;
4c89c718
MP
114 char *dhcp_hostname;
115 bool dhcp_use_dns;
116 bool dhcp_use_ntp;
117 bool dhcp_use_mtu;
118 bool dhcp_use_hostname;
119 DHCPUseDomains dhcp_use_domains;
120 bool dhcp_send_hostname;
d9dfd233
MP
121 bool dhcp_broadcast;
122 bool dhcp_critical;
4c89c718
MP
123 bool dhcp_use_routes;
124 bool dhcp_use_timezone;
d9dfd233
MP
125 unsigned dhcp_route_metric;
126
127 /* DHCP Server Support */
128 bool dhcp_server;
129 bool dhcp_server_emit_dns;
130 struct in_addr *dhcp_server_dns;
131 unsigned n_dhcp_server_dns;
132 bool dhcp_server_emit_ntp;
133 struct in_addr *dhcp_server_ntp;
134 unsigned n_dhcp_server_ntp;
aa27b158 135 bool dhcp_server_emit_router;
d9dfd233
MP
136 bool dhcp_server_emit_timezone;
137 char *dhcp_server_timezone;
138 usec_t dhcp_server_default_lease_time_usec, dhcp_server_max_lease_time_usec;
139 uint32_t dhcp_server_pool_offset;
140 uint32_t dhcp_server_pool_size;
141
142 /* IPV4LL Support */
143 AddressFamilyBoolean link_local;
144 bool ipv4ll_route;
145
146 /* Bridge Support */
147 bool use_bpdu;
148 bool hairpin;
149 bool fast_leave;
150 bool allow_port_to_be_root;
151 bool unicast_flood;
152 unsigned cost;
153
5a920b42
MP
154 uint16_t pvid;
155 uint32_t br_vid_bitmap[BRIDGE_VLAN_BITMAP_LEN];
156 uint32_t br_untagged_bitmap[BRIDGE_VLAN_BITMAP_LEN];
157
d9dfd233
MP
158 AddressFamilyBoolean ip_forward;
159 bool ip_masquerade;
160
6300502b 161 int ipv6_accept_ra;
db2df898
MP
162 int ipv6_dad_transmits;
163 int ipv6_hop_limit;
aa27b158 164 int proxy_arp;
6300502b 165
5a920b42
MP
166 bool ipv6_accept_ra_use_dns;
167 DHCPUseDomains ipv6_accept_ra_use_domains;
168
d9dfd233
MP
169 union in_addr_union ipv6_token;
170 IPv6PrivacyExtensions ipv6_privacy_extensions;
171
172 struct ether_addr *mac;
173 unsigned mtu;
aa27b158
MP
174 uint32_t iaid;
175 DUID duid;
d9dfd233 176
aa27b158
MP
177 LLDPMode lldp_mode; /* LLDP reception */
178 LLDPEmit lldp_emit; /* LLDP transmission */
d9dfd233
MP
179
180 LIST_HEAD(Address, static_addresses);
181 LIST_HEAD(Route, static_routes);
182 LIST_HEAD(FdbEntry, static_fdb_entries);
183
5a920b42
MP
184 unsigned n_static_addresses;
185 unsigned n_static_routes;
186 unsigned n_static_fdb_entries;
187
d9dfd233
MP
188 Hashmap *addresses_by_section;
189 Hashmap *routes_by_section;
190 Hashmap *fdb_entries_by_section;
191
4c89c718 192 char **search_domains, **route_domains, **dns, **ntp, **bind_carrier;
d9dfd233
MP
193
194 ResolveSupport llmnr;
4c89c718
MP
195 ResolveSupport mdns;
196 DnssecMode dnssec_mode;
197 Set *dnssec_negative_trust_anchors;
d9dfd233
MP
198
199 LIST_FIELDS(Network, networks);
200};
201
202void network_free(Network *network);
203
204DEFINE_TRIVIAL_CLEANUP_FUNC(Network*, network_free);
205#define _cleanup_network_free_ _cleanup_(network_freep)
206
207int network_load(Manager *manager);
208
209int network_get_by_name(Manager *manager, const char *name, Network **ret);
210int network_get(Manager *manager, struct udev_device *device, const char *ifname, const struct ether_addr *mac, Network **ret);
211int network_apply(Manager *manager, Network *network, Link *link);
212
aa27b158
MP
213bool network_has_static_ipv6_addresses(Network *network);
214
d9dfd233
MP
215int 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);
216int 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);
217int 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);
218int 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);
219int 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);
220int 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);
221int 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);
222int 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);
223int 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);
224int 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);
225int 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);
4c89c718
MP
226int 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);
227int 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);
aa27b158 228int 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);
d9dfd233
MP
229
230/* Legacy IPv4LL support */
231int 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);
232
233const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, unsigned length);
234
235extern const sd_bus_vtable network_vtable[];
236
237int network_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
238int network_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
239
240const char* ipv6_privacy_extensions_to_string(IPv6PrivacyExtensions i) _const_;
241IPv6PrivacyExtensions ipv6_privacy_extensions_from_string(const char *s) _pure_;
4c89c718
MP
242
243const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
244DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
aa27b158
MP
245
246const char* lldp_mode_to_string(LLDPMode m) _const_;
247LLDPMode lldp_mode_from_string(const char *s) _pure_;