]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/network/networkd-radv.h
Merge pull request #31648 from neighbourhoodie/review-content
[thirdparty/systemd.git] / src / network / networkd-radv.h
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3
4 /***
5 Copyright © 2017 Intel Corporation. All rights reserved.
6 ***/
7
8 #include <inttypes.h>
9 #include <stdbool.h>
10
11 #include "sd-radv.h"
12
13 #include "in-addr-util.h"
14 #include "conf-parser.h"
15 #include "networkd-util.h"
16
17 typedef struct Link Link;
18 typedef struct Network Network;
19
20 typedef enum RADVPrefixDelegation {
21 RADV_PREFIX_DELEGATION_NONE = 0,
22 RADV_PREFIX_DELEGATION_STATIC = 1 << 0,
23 RADV_PREFIX_DELEGATION_DHCP6 = 1 << 1,
24 RADV_PREFIX_DELEGATION_BOTH = RADV_PREFIX_DELEGATION_STATIC | RADV_PREFIX_DELEGATION_DHCP6,
25 _RADV_PREFIX_DELEGATION_MAX,
26 _RADV_PREFIX_DELEGATION_INVALID = -EINVAL,
27 } RADVPrefixDelegation;
28
29 typedef struct Prefix {
30 Network *network;
31 ConfigSection *section;
32
33 struct in6_addr prefix;
34 uint8_t prefixlen;
35 usec_t preferred_lifetime;
36 usec_t valid_lifetime;
37
38 bool onlink;
39 bool address_auto_configuration;
40
41 bool assign;
42 uint32_t route_metric;
43 Set *tokens;
44 } Prefix;
45
46 typedef struct RoutePrefix {
47 Network *network;
48 ConfigSection *section;
49
50 struct in6_addr prefix;
51 uint8_t prefixlen;
52 usec_t lifetime;
53 } RoutePrefix;
54
55 typedef struct pref64Prefix {
56 Network *network;
57 ConfigSection *section;
58
59 struct in6_addr prefix;
60 uint8_t prefixlen;
61 usec_t lifetime;
62 } pref64Prefix;
63
64 Prefix *prefix_free(Prefix *prefix);
65 RoutePrefix *route_prefix_free(RoutePrefix *prefix);
66 pref64Prefix *pref64_prefix_free(pref64Prefix *prefix);
67
68 void network_drop_invalid_prefixes(Network *network);
69 void network_drop_invalid_route_prefixes(Network *network);
70 void network_drop_invalid_pref64_prefixes(Network *network);
71 void network_adjust_radv(Network *network);
72
73 int link_request_radv_addresses(Link *link);
74 int link_reconfigure_radv_address(Address *address, Link *link);
75
76 bool link_radv_enabled(Link *link);
77 int radv_start(Link *link);
78 int radv_update_mac(Link *link);
79 int radv_add_prefix(Link *link, const struct in6_addr *prefix, uint8_t prefix_len,
80 usec_t lifetime_preferred_usec, usec_t lifetime_valid_usec);
81
82 int link_request_radv(Link *link);
83
84 const char* radv_prefix_delegation_to_string(RADVPrefixDelegation i) _const_;
85 RADVPrefixDelegation radv_prefix_delegation_from_string(const char *s) _pure_;
86
87 CONFIG_PARSER_PROTOTYPE(config_parse_router_prefix_delegation);
88 CONFIG_PARSER_PROTOTYPE(config_parse_router_lifetime);
89 CONFIG_PARSER_PROTOTYPE(config_parse_router_retransmit);
90 CONFIG_PARSER_PROTOTYPE(config_parse_router_preference);
91 CONFIG_PARSER_PROTOTYPE(config_parse_prefix);
92 CONFIG_PARSER_PROTOTYPE(config_parse_prefix_boolean);
93 CONFIG_PARSER_PROTOTYPE(config_parse_prefix_lifetime);
94 CONFIG_PARSER_PROTOTYPE(config_parse_prefix_metric);
95 CONFIG_PARSER_PROTOTYPE(config_parse_prefix_token);
96 CONFIG_PARSER_PROTOTYPE(config_parse_radv_dns);
97 CONFIG_PARSER_PROTOTYPE(config_parse_radv_search_domains);
98 CONFIG_PARSER_PROTOTYPE(config_parse_route_prefix);
99 CONFIG_PARSER_PROTOTYPE(config_parse_route_prefix_lifetime);
100 CONFIG_PARSER_PROTOTYPE(config_parse_pref64_prefix);
101 CONFIG_PARSER_PROTOTYPE(config_parse_pref64_prefix_lifetime);
102 CONFIG_PARSER_PROTOTYPE(config_parse_router_home_agent_lifetime);