]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/network/networkd-dhcp-common.h
Merge pull request #20498 from yuwata/network-fix-gateway
[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
ca5ad760
YW
6#include "conf-parser.h"
7#include "dhcp-identifier.h"
8#include "time-util.h"
9
10#define DHCP_ROUTE_METRIC 1024
11
67c311ab 12typedef struct Link Link;
256c75fd 13typedef struct Manager Manager;
22d37e5d 14typedef struct Network Network;
67c311ab 15
ca5ad760
YW
16typedef enum DHCPUseDomains {
17 DHCP_USE_DOMAINS_NO,
18 DHCP_USE_DOMAINS_YES,
19 DHCP_USE_DOMAINS_ROUTE,
20 _DHCP_USE_DOMAINS_MAX,
2d93c20e 21 _DHCP_USE_DOMAINS_INVALID = -EINVAL,
ca5ad760
YW
22} DHCPUseDomains;
23
2e5580a8
YW
24typedef 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,
e7d5fe17 30 DHCP_OPTION_DATA_IPV6ADDRESS,
2e5580a8
YW
31 _DHCP_OPTION_DATA_MAX,
32 _DHCP_OPTION_DATA_INVALID,
33} DHCPOptionDataType;
34
ca5ad760
YW
35typedef 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;
4e26a5ba 42 bool set;
ca5ad760
YW
43} DUID;
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
ca5ad760
YW
66const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_;
67DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
68
2e5580a8
YW
69const char *dhcp_option_data_type_to_string(DHCPOptionDataType d) _const_;
70DHCPOptionDataType dhcp_option_data_type_from_string(const char *d) _pure_;
71
ca5ad760 72CONFIG_PARSER_PROTOTYPE(config_parse_dhcp);
bdad94d0 73CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_route_metric);
4f7331a8 74CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_dns);
ca5ad760 75CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_domains);
4f7331a8 76CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_ntp);
ca5ad760
YW
77CONFIG_PARSER_PROTOTYPE(config_parse_iaid);
78CONFIG_PARSER_PROTOTYPE(config_parse_section_route_table);
6fda02e1 79CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_user_or_vendor_class);
0e96961d 80CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_option);
35f6a5cb 81CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_request_options);
cde74a65 82CONFIG_PARSER_PROTOTYPE(config_parse_duid_type);
4e26a5ba
YW
83CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_type);
84CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_type);
cde74a65 85CONFIG_PARSER_PROTOTYPE(config_parse_duid_rawdata);
4e26a5ba
YW
86CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_rawdata);
87CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_rawdata);