]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-dhcp-common.h
network: make IAID and DUID for DHCPv6 configurable explicitly
[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-identifier.h"
8 #include "time-util.h"
9
10 #define DHCP_ROUTE_METRIC 1024
11
12 typedef struct Link Link;
13 typedef struct Manager Manager;
14 typedef struct Network Network;
15
16 typedef enum DHCPUseDomains {
17 DHCP_USE_DOMAINS_NO,
18 DHCP_USE_DOMAINS_YES,
19 DHCP_USE_DOMAINS_ROUTE,
20 _DHCP_USE_DOMAINS_MAX,
21 _DHCP_USE_DOMAINS_INVALID = -EINVAL,
22 } DHCPUseDomains;
23
24 typedef enum DHCPOptionDataType {
25 DHCP_OPTION_DATA_UINT8,
26 DHCP_OPTION_DATA_UINT16,
27 DHCP_OPTION_DATA_UINT32,
28 DHCP_OPTION_DATA_STRING,
29 DHCP_OPTION_DATA_IPV4ADDRESS,
30 DHCP_OPTION_DATA_IPV6ADDRESS,
31 _DHCP_OPTION_DATA_MAX,
32 _DHCP_OPTION_DATA_INVALID,
33 } DHCPOptionDataType;
34
35 typedef struct DUID {
36 /* Value of Type in [DHCP] section */
37 DUIDType type;
38
39 uint8_t raw_data_len;
40 uint8_t raw_data[MAX_DUID_LEN];
41 usec_t llt_time;
42 bool set;
43 } DUID;
44
45 bool link_dhcp_enabled(Link *link, int family);
46 static inline bool link_dhcp4_enabled(Link *link) {
47 return link_dhcp_enabled(link, AF_INET);
48 }
49 static inline bool link_dhcp6_enabled(Link *link) {
50 return link_dhcp_enabled(link, AF_INET6);
51 }
52
53 void network_adjust_dhcp(Network *network);
54
55 DUID *link_get_duid(Link *link, int family);
56 static inline DUID *link_get_dhcp4_duid(Link *link) {
57 return link_get_duid(link, AF_INET);
58 }
59 static inline DUID *link_get_dhcp6_duid(Link *link) {
60 return link_get_duid(link, AF_INET6);
61 }
62
63 int link_configure_duid(Link *link);
64 int manager_request_product_uuid(Manager *m);
65
66 const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
67 DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
68
69 const char *dhcp_option_data_type_to_string(DHCPOptionDataType d) _const_;
70 DHCPOptionDataType dhcp_option_data_type_from_string(const char *d) _pure_;
71
72 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp);
73 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_route_metric);
74 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_dns);
75 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_domains);
76 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_ntp);
77 CONFIG_PARSER_PROTOTYPE(config_parse_iaid);
78 CONFIG_PARSER_PROTOTYPE(config_parse_section_route_table);
79 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_user_or_vendor_class);
80 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_option);
81 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_request_options);
82 CONFIG_PARSER_PROTOTYPE(config_parse_duid_type);
83 CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_type);
84 CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_type);
85 CONFIG_PARSER_PROTOTYPE(config_parse_duid_rawdata);
86 CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_rawdata);
87 CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_rawdata);