]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-dhcp-common.h
c3e6a6d51cd8d39eab018d3a0b840c0626947ff5
[thirdparty/systemd.git] / src / network / networkd-dhcp-common.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 #include <netinet/in.h>
5
6 #include "conf-parser.h"
7 #include "dhcp-duid-internal.h"
8 #include "in-addr-util.h"
9 #include "set.h"
10 #include "time-util.h"
11
12 /* Special values for *_uplink_index. */
13 #define UPLINK_INDEX_AUTO 0 /* uplink will be selected automatically */
14 #define UPLINK_INDEX_NONE -1 /* uplink will not be selected automatically */
15 #define UPLINK_INDEX_SELF -2 /* the interface itself is uplink */
16
17 #define DHCP_ROUTE_METRIC 1024
18 #define IPV6RA_ROUTE_METRIC_HIGH 512
19 #define IPV6RA_ROUTE_METRIC_MEDIUM 1024
20 #define IPV6RA_ROUTE_METRIC_LOW 2048
21 #define DHCP6PD_ROUTE_METRIC 256
22
23 typedef struct Link Link;
24 typedef struct Manager Manager;
25 typedef struct Network Network;
26
27 typedef enum DHCPUseDomains {
28 DHCP_USE_DOMAINS_NO,
29 DHCP_USE_DOMAINS_YES,
30 DHCP_USE_DOMAINS_ROUTE,
31 _DHCP_USE_DOMAINS_MAX,
32 _DHCP_USE_DOMAINS_INVALID = -EINVAL,
33 } DHCPUseDomains;
34
35 typedef enum DHCPOptionDataType {
36 DHCP_OPTION_DATA_UINT8,
37 DHCP_OPTION_DATA_UINT16,
38 DHCP_OPTION_DATA_UINT32,
39 DHCP_OPTION_DATA_STRING,
40 DHCP_OPTION_DATA_IPV4ADDRESS,
41 DHCP_OPTION_DATA_IPV6ADDRESS,
42 _DHCP_OPTION_DATA_MAX,
43 _DHCP_OPTION_DATA_INVALID,
44 } DHCPOptionDataType;
45
46 typedef struct DUID {
47 /* Value of Type in [DHCP] section */
48 DUIDType type;
49
50 uint8_t raw_data_len;
51 uint8_t raw_data[MAX_DUID_DATA_LEN];
52 usec_t llt_time;
53 bool set;
54 } DUID;
55
56 uint32_t link_get_dhcp4_route_table(Link *link);
57 uint32_t link_get_ndisc_route_table(Link *link);
58
59 bool link_dhcp_enabled(Link *link, int family);
60 static inline bool link_dhcp4_enabled(Link *link) {
61 return link_dhcp_enabled(link, AF_INET);
62 }
63 static inline bool link_dhcp6_enabled(Link *link) {
64 return link_dhcp_enabled(link, AF_INET6);
65 }
66
67 void network_adjust_dhcp(Network *network);
68
69 const DUID *link_get_duid(Link *link, int family);
70 static inline const DUID *link_get_dhcp4_duid(Link *link) {
71 return link_get_duid(link, AF_INET);
72 }
73 static inline const DUID *link_get_dhcp6_duid(Link *link) {
74 return link_get_duid(link, AF_INET6);
75 }
76
77 int dhcp_configure_duid(Link *link, const DUID *duid);
78 int manager_request_product_uuid(Manager *m);
79
80 bool address_is_filtered(int family, const union in_addr_union *address, uint8_t prefixlen, Set *allow_list, Set *deny_list);
81 static inline bool in4_address_is_filtered(const struct in_addr *address, Set *allow_list, Set *deny_list) {
82 return address_is_filtered(AF_INET, &(union in_addr_union) { .in = *address }, 32, allow_list, deny_list);
83 }
84 static inline bool in6_prefix_is_filtered(const struct in6_addr *prefix, uint8_t prefixlen, Set *allow_list, Set *deny_list) {
85 return address_is_filtered(AF_INET6, &(union in_addr_union) { .in6 = *prefix }, prefixlen, allow_list, deny_list);
86 }
87
88 int link_get_captive_portal(Link *link, const char **ret);
89
90 const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
91 DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
92
93 const char *dhcp_option_data_type_to_string(DHCPOptionDataType d) _const_;
94 DHCPOptionDataType dhcp_option_data_type_from_string(const char *d) _pure_;
95
96 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp);
97 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_route_metric);
98 CONFIG_PARSER_PROTOTYPE(config_parse_ndisc_route_metric);
99 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_hostname);
100 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_dns);
101 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_domains);
102 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_ntp);
103 CONFIG_PARSER_PROTOTYPE(config_parse_iaid);
104 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_or_ra_route_table);
105 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_user_or_vendor_class);
106 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_option);
107 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_request_options);
108 CONFIG_PARSER_PROTOTYPE(config_parse_duid_type);
109 CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_type);
110 CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_type);
111 CONFIG_PARSER_PROTOTYPE(config_parse_duid_rawdata);
112 CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_rawdata);
113 CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_rawdata);
114 CONFIG_PARSER_PROTOTYPE(config_parse_uplink);