| /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
| #pragma once |
| |
| #include "conf-parser.h" |
| #include "networkd-address.h" |
| #include "networkd-link.h" |
| #include "networkd-route.h" |
| #include "time-util.h" |
| |
| typedef struct IPv6Token IPv6Token; |
| |
| typedef enum IPv6TokenAddressGeneration { |
| IPV6_TOKEN_ADDRESS_GENERATION_NONE, |
| IPV6_TOKEN_ADDRESS_GENERATION_STATIC, |
| IPV6_TOKEN_ADDRESS_GENERATION_PREFIXSTABLE, |
| _IPV6_TOKEN_ADDRESS_GENERATION_MAX, |
| _IPV6_TOKEN_ADDRESS_GENERATION_INVALID = -1, |
| } IPv6TokenAddressGeneration; |
| |
| typedef enum IPv6AcceptRAStartDHCP6Client { |
| IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO, |
| IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS, |
| IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES, |
| _IPV6_ACCEPT_RA_START_DHCP6_CLIENT_MAX, |
| _IPV6_ACCEPT_RA_START_DHCP6_CLIENT_INVALID = -1, |
| } IPv6AcceptRAStartDHCP6Client; |
| |
| typedef struct NDiscAddress { |
| /* Used when GC'ing old DNS servers when configuration changes. */ |
| bool marked; |
| struct in6_addr router; |
| Address *address; |
| } NDiscAddress; |
| |
| typedef struct NDiscRoute { |
| /* Used when GC'ing old DNS servers when configuration changes. */ |
| bool marked; |
| struct in6_addr router; |
| Route *route; |
| } NDiscRoute; |
| |
| typedef struct NDiscRDNSS { |
| /* Used when GC'ing old DNS servers when configuration changes. */ |
| bool marked; |
| struct in6_addr router; |
| usec_t valid_until; |
| struct in6_addr address; |
| } NDiscRDNSS; |
| |
| typedef struct NDiscDNSSL { |
| /* Used when GC'ing old domains when configuration changes. */ |
| bool marked; |
| struct in6_addr router; |
| usec_t valid_until; |
| /* The domain name follows immediately. */ |
| } NDiscDNSSL; |
| |
| struct IPv6Token { |
| IPv6TokenAddressGeneration address_generation_type; |
| |
| uint8_t dad_counter; |
| struct in6_addr prefix; |
| }; |
| |
| int ipv6token_new(IPv6Token **ret); |
| DEFINE_TRIVIAL_CLEANUP_FUNC(IPv6Token *, freep); |
| |
| static inline char* NDISC_DNSSL_DOMAIN(const NDiscDNSSL *n) { |
| return ((char*) n) + ALIGN(sizeof(NDiscDNSSL)); |
| } |
| |
| bool link_ipv6_accept_ra_enabled(Link *link); |
| |
| void network_adjust_ipv6_accept_ra(Network *network); |
| |
| int ndisc_configure(Link *link); |
| void ndisc_vacuum(Link *link); |
| void ndisc_flush(Link *link); |
| |
| CONFIG_PARSER_PROTOTYPE(config_parse_ndisc_deny_listed_prefix); |
| CONFIG_PARSER_PROTOTYPE(config_parse_address_generation_type); |
| CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_accept_ra_start_dhcp6_client); |
| |
| const char* ipv6_accept_ra_start_dhcp6_client_to_string(IPv6AcceptRAStartDHCP6Client i) _const_; |
| IPv6AcceptRAStartDHCP6Client ipv6_accept_ra_start_dhcp6_client_from_string(const char *s) _pure_; |