02e9e34bd9
This allows users to configure a subnet id that should be used instead of automatically (sequentially) assigned subnets. The previous attempt had the downside that the subnet id would not be the same between networkd restarts. In some setups it is desirable to have predictable subnet ids across restarts of services and systems. The code for the assignment had to be broken up into two pieces. One of them is the old (sequential) assignment of prefixes and the other is the new assignment based on configured subnet ids. The new assignment code has to be executed first and has to be taken into account when (later on) allocating the "old" subnets from the same pool. Instead of having one iteration through the links we are now trying to allocate a prefix for every link on every delegated prefix, unless they received an assignment in a previous iteration.
70 lines
2 KiB
C
70 lines
2 KiB
C
/* SPDX-License-Identifier: LGPL-2.1+ */
|
|
#pragma once
|
|
|
|
/***
|
|
Copyright © 2017 Intel Corporation. All rights reserved.
|
|
***/
|
|
|
|
#include "conf-parser.h"
|
|
#include "networkd-address.h"
|
|
#include "networkd-link.h"
|
|
#include "networkd-util.h"
|
|
|
|
typedef struct Prefix Prefix;
|
|
typedef struct RoutePrefix RoutePrefix;
|
|
|
|
typedef enum RADVPrefixDelegation {
|
|
RADV_PREFIX_DELEGATION_NONE,
|
|
RADV_PREFIX_DELEGATION_STATIC,
|
|
RADV_PREFIX_DELEGATION_DHCP6,
|
|
RADV_PREFIX_DELEGATION_BOTH,
|
|
_RADV_PREFIX_DELEGATION_MAX,
|
|
_RADV_PREFIX_DELEGATION_INVALID = -1,
|
|
} RADVPrefixDelegation;
|
|
|
|
struct Prefix {
|
|
Network *network;
|
|
NetworkConfigSection *section;
|
|
|
|
sd_radv_prefix *radv_prefix;
|
|
|
|
bool assign;
|
|
|
|
LIST_FIELDS(Prefix, prefixes);
|
|
};
|
|
|
|
struct RoutePrefix {
|
|
Network *network;
|
|
NetworkConfigSection *section;
|
|
|
|
sd_radv_route_prefix *radv_route_prefix;
|
|
|
|
LIST_FIELDS(RoutePrefix, route_prefixes);
|
|
};
|
|
|
|
void prefix_free(Prefix *prefix);
|
|
|
|
DEFINE_NETWORK_SECTION_FUNCTIONS(Prefix, prefix_free);
|
|
|
|
void route_prefix_free(RoutePrefix *prefix);
|
|
|
|
DEFINE_NETWORK_SECTION_FUNCTIONS(RoutePrefix, route_prefix_free);
|
|
|
|
int radv_emit_dns(Link *link);
|
|
int radv_configure(Link *link);
|
|
|
|
const char* radv_prefix_delegation_to_string(RADVPrefixDelegation i) _const_;
|
|
RADVPrefixDelegation radv_prefix_delegation_from_string(const char *s) _pure_;
|
|
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_router_prefix_delegation);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_router_preference);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_router_prefix_subnet_id);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_prefix);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_prefix_flags);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_prefix_lifetime);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_prefix_assign);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_radv_dns);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_radv_search_domains);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_route_prefix);
|
|
CONFIG_PARSER_PROTOTYPE(config_parse_route_prefix_lifetime);
|