1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 #include <netinet/in.h>
6 #include "conf-parser.h"
7 #include "dhcp-duid-internal.h"
8 #include "in-addr-util.h"
10 #include "time-util.h"
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 */
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
23 typedef struct Link Link
;
24 typedef struct Manager Manager
;
25 typedef struct Network Network
;
27 typedef enum DHCPUseDomains
{
30 DHCP_USE_DOMAINS_ROUTE
,
31 _DHCP_USE_DOMAINS_MAX
,
32 _DHCP_USE_DOMAINS_INVALID
= -EINVAL
,
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
,
47 /* Value of Type in [DHCP] section */
51 uint8_t raw_data
[MAX_DUID_DATA_LEN
];
56 uint32_t link_get_dhcp4_route_table(Link
*link
);
57 uint32_t link_get_ndisc_route_table(Link
*link
);
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
);
63 static inline bool link_dhcp6_enabled(Link
*link
) {
64 return link_dhcp_enabled(link
, AF_INET6
);
67 void network_adjust_dhcp(Network
*network
);
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
);
73 static inline const DUID
*link_get_dhcp6_duid(Link
*link
) {
74 return link_get_duid(link
, AF_INET6
);
77 int dhcp_configure_duid(Link
*link
, const DUID
*duid
);
78 int manager_request_product_uuid(Manager
*m
);
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
);
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
);
88 int link_get_captive_portal(Link
*link
, const char **ret
);
90 const char* dhcp_use_domains_to_string(DHCPUseDomains p
) _const_
;
91 DHCPUseDomains
dhcp_use_domains_from_string(const char *s
) _pure_
;
93 const char *dhcp_option_data_type_to_string(DHCPOptionDataType d
) _const_
;
94 DHCPOptionDataType
dhcp_option_data_type_from_string(const char *d
) _pure_
;
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_default_dhcp_use_domains
);
103 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_ntp
);
104 CONFIG_PARSER_PROTOTYPE(config_parse_iaid
);
105 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_or_ra_route_table
);
106 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_user_or_vendor_class
);
107 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_option
);
108 CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_request_options
);
109 CONFIG_PARSER_PROTOTYPE(config_parse_duid_type
);
110 CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_type
);
111 CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_type
);
112 CONFIG_PARSER_PROTOTYPE(config_parse_duid_rawdata
);
113 CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_rawdata
);
114 CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_rawdata
);
115 CONFIG_PARSER_PROTOTYPE(config_parse_uplink
);