]>
Commit | Line | Data |
---|---|---|
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 | 6 | #include "conf-parser.h" |
97c3506d | 7 | #include "dhcp-duid-internal.h" |
c995fa02 YW |
8 | #include "in-addr-util.h" |
9 | #include "set.h" | |
ca5ad760 YW |
10 | #include "time-util.h" |
11 | ||
2cba2146 YW |
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 */ | |
dc5cae6c | 15 | #define UPLINK_INDEX_SELF -2 /* the interface itself is uplink */ |
2cba2146 | 16 | |
ca5ad760 | 17 | #define DHCP_ROUTE_METRIC 1024 |
6f812d28 YW |
18 | #define IPV6RA_ROUTE_METRIC_HIGH 512 |
19 | #define IPV6RA_ROUTE_METRIC_MEDIUM 1024 | |
20 | #define IPV6RA_ROUTE_METRIC_LOW 2048 | |
d0619f2c | 21 | #define DHCP6PD_ROUTE_METRIC 256 |
ca5ad760 | 22 | |
67c311ab | 23 | typedef struct Link Link; |
256c75fd | 24 | typedef struct Manager Manager; |
22d37e5d | 25 | typedef struct Network Network; |
67c311ab | 26 | |
ca5ad760 YW |
27 | typedef enum DHCPUseDomains { |
28 | DHCP_USE_DOMAINS_NO, | |
29 | DHCP_USE_DOMAINS_YES, | |
30 | DHCP_USE_DOMAINS_ROUTE, | |
31 | _DHCP_USE_DOMAINS_MAX, | |
2d93c20e | 32 | _DHCP_USE_DOMAINS_INVALID = -EINVAL, |
ca5ad760 YW |
33 | } DHCPUseDomains; |
34 | ||
2e5580a8 YW |
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, | |
e7d5fe17 | 41 | DHCP_OPTION_DATA_IPV6ADDRESS, |
2e5580a8 YW |
42 | _DHCP_OPTION_DATA_MAX, |
43 | _DHCP_OPTION_DATA_INVALID, | |
44 | } DHCPOptionDataType; | |
45 | ||
ca5ad760 YW |
46 | typedef struct DUID { |
47 | /* Value of Type in [DHCP] section */ | |
48 | DUIDType type; | |
49 | ||
50 | uint8_t raw_data_len; | |
92914960 | 51 | uint8_t raw_data[MAX_DUID_DATA_LEN]; |
ca5ad760 | 52 | usec_t llt_time; |
4e26a5ba | 53 | bool set; |
ca5ad760 YW |
54 | } DUID; |
55 | ||
e47bcb7d | 56 | uint32_t link_get_dhcp4_route_table(Link *link); |
52672db3 | 57 | uint32_t link_get_ndisc_route_table(Link *link); |
e47bcb7d | 58 | |
67c311ab YW |
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 | ||
22d37e5d YW |
67 | void network_adjust_dhcp(Network *network); |
68 | ||
28f9667d YW |
69 | const DUID *link_get_duid(Link *link, int family); |
70 | static inline const DUID *link_get_dhcp4_duid(Link *link) { | |
4e26a5ba YW |
71 | return link_get_duid(link, AF_INET); |
72 | } | |
28f9667d | 73 | static inline const DUID *link_get_dhcp6_duid(Link *link) { |
4e26a5ba YW |
74 | return link_get_duid(link, AF_INET6); |
75 | } | |
76 | ||
28f9667d | 77 | int dhcp_configure_duid(Link *link, const DUID *duid); |
4e26a5ba | 78 | int manager_request_product_uuid(Manager *m); |
256c75fd | 79 | |
c995fa02 YW |
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 | ||
6341ea54 YW |
88 | int link_get_captive_portal(Link *link, const char **ret); |
89 | ||
ca5ad760 YW |
90 | const char* dhcp_use_domains_to_string(DHCPUseDomains p) _const_; |
91 | DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_; | |
92 | ||
2e5580a8 YW |
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 | ||
ca5ad760 | 96 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp); |
6f812d28 | 97 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_route_metric); |
52672db3 | 98 | CONFIG_PARSER_PROTOTYPE(config_parse_ndisc_route_metric); |
b90480c8 | 99 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_hostname); |
4f7331a8 | 100 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_dns); |
ca5ad760 | 101 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_domains); |
fb573007 | 102 | CONFIG_PARSER_PROTOTYPE(config_parse_default_dhcp_use_domains); |
4f7331a8 | 103 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_use_ntp); |
ca5ad760 | 104 | CONFIG_PARSER_PROTOTYPE(config_parse_iaid); |
e47bcb7d | 105 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_or_ra_route_table); |
6fda02e1 | 106 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_user_or_vendor_class); |
0e96961d | 107 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_send_option); |
35f6a5cb | 108 | CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_request_options); |
cde74a65 | 109 | CONFIG_PARSER_PROTOTYPE(config_parse_duid_type); |
4e26a5ba YW |
110 | CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_type); |
111 | CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_type); | |
cde74a65 | 112 | CONFIG_PARSER_PROTOTYPE(config_parse_duid_rawdata); |
4e26a5ba YW |
113 | CONFIG_PARSER_PROTOTYPE(config_parse_manager_duid_rawdata); |
114 | CONFIG_PARSER_PROTOTYPE(config_parse_network_duid_rawdata); | |
2cba2146 | 115 | CONFIG_PARSER_PROTOTYPE(config_parse_uplink); |