]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd-dhcp-common.h
io.systemd.Unit.List fix context/runtime split (#38172)
[thirdparty/systemd.git] / src / network / networkd-dhcp-common.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
ca5ad760
YW
2#pragma once
3
cde74a65
YW
4#include <netinet/in.h>
5
97c3506d 6#include "dhcp-duid-internal.h"
c995fa02 7#include "in-addr-util.h"
baa3fadf 8#include "networkd-forward.h"
ca5ad760 9
2cba2146
YW
10/* Special values for *_uplink_index. */
11#define UPLINK_INDEX_AUTO 0 /* uplink will be selected automatically */
12#define UPLINK_INDEX_NONE -1 /* uplink will not be selected automatically */
dc5cae6c 13#define UPLINK_INDEX_SELF -2 /* the interface itself is uplink */
2cba2146 14
ca5ad760 15#define DHCP_ROUTE_METRIC 1024
6f812d28
YW
16#define IPV6RA_ROUTE_METRIC_HIGH 512
17#define IPV6RA_ROUTE_METRIC_MEDIUM 1024
18#define IPV6RA_ROUTE_METRIC_LOW 2048
d0619f2c 19#define DHCP6PD_ROUTE_METRIC 256
ca5ad760 20
2e5580a8
YW
21typedef enum DHCPOptionDataType {
22 DHCP_OPTION_DATA_UINT8,
23 DHCP_OPTION_DATA_UINT16,
24 DHCP_OPTION_DATA_UINT32,
25 DHCP_OPTION_DATA_STRING,
26 DHCP_OPTION_DATA_IPV4ADDRESS,
e7d5fe17 27 DHCP_OPTION_DATA_IPV6ADDRESS,
2e5580a8
YW
28 _DHCP_OPTION_DATA_MAX,
29 _DHCP_OPTION_DATA_INVALID,
30} DHCPOptionDataType;
31
ca5ad760
YW
32typedef struct DUID {
33 /* Value of Type in [DHCP] section */
34 DUIDType type;
35
36 uint8_t raw_data_len;
92914960 37 uint8_t raw_data[MAX_DUID_DATA_LEN];
ca5ad760 38 usec_t llt_time;
4e26a5ba 39 bool set;
ca5ad760
YW
40} DUID;
41
e47bcb7d 42uint32_t link_get_dhcp4_route_table(Link *link);
52672db3 43uint32_t link_get_ndisc_route_table(Link *link);
e47bcb7d 44
67c311ab
YW
45bool link_dhcp_enabled(Link *link, int family);
46static inline bool link_dhcp4_enabled(Link *link) {
47 return link_dhcp_enabled(link, AF_INET);
48}
49static inline bool link_dhcp6_enabled(Link *link) {
50 return link_dhcp_enabled(link, AF_INET6);
51}
52
22d37e5d
YW
53void network_adjust_dhcp(Network *network);
54
28f9667d
YW
55const DUID *link_get_duid(Link *link, int family);
56static inline const DUID *link_get_dhcp4_duid(Link *link) {
4e26a5ba
YW
57 return link_get_duid(link, AF_INET);
58}
28f9667d 59static inline const DUID *link_get_dhcp6_duid(Link *link) {
4e26a5ba
YW
60 return link_get_duid(link, AF_INET6);
61}
62
28f9667d 63int dhcp_configure_duid(Link *link, const DUID *duid);
4e26a5ba 64int manager_request_product_uuid(Manager *m);
256c75fd 65
c995fa02
YW
66bool address_is_filtered(int family, const union in_addr_union *address, uint8_t prefixlen, Set *allow_list, Set *deny_list);
67static inline bool in4_address_is_filtered(const struct in_addr *address, Set *allow_list, Set *deny_list) {
68 return address_is_filtered(AF_INET, &(union in_addr_union) { .in = *address }, 32, allow_list, deny_list);
69}
70static inline bool in6_prefix_is_filtered(const struct in6_addr *prefix, uint8_t prefixlen, Set *allow_list, Set *deny_list) {
71 return address_is_filtered(AF_INET6, &(union in_addr_union) { .in6 = *prefix }, prefixlen, allow_list, deny_list);
72}
73
6341ea54
YW
74int link_get_captive_portal(Link *link, const char **ret);
75
bfd5a068 76const char* dhcp_option_data_type_to_string(DHCPOptionDataType d) _const_;
2e5580a8
YW
77DHCPOptionDataType dhcp_option_data_type_from_string(const char *d) _pure_;
78
ca5ad760 79CONFIG_PARSER_PROTOTYPE(config_parse_dhcp);
6f812d28 80CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_route_metric);
52672db3 81CONFIG_PARSER_PROTOTYPE(config_parse_ndisc_route_metric);
b90480c8 82CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_hostname);
ca5ad760 83CONFIG_PARSER_PROTOTYPE(config_parse_iaid);
e47bcb7d 84CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_or_ra_route_table);
6fda02e1 85CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_user_or_vendor_class);
0e96961d 86CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_option);
35f6a5cb 87CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_request_options);
cde74a65 88CONFIG_PARSER_PROTOTYPE(config_parse_duid_type);
4e26a5ba
YW
89CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_type);
90CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_type);
cde74a65 91CONFIG_PARSER_PROTOTYPE(config_parse_duid_rawdata);
4e26a5ba
YW
92CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_rawdata);
93CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_rawdata);
2cba2146 94CONFIG_PARSER_PROTOTYPE(config_parse_uplink);