networkd: add scope to address section (#6449)
This work allows to configure address Scope to host | link | global or a number. Closes #6446
This commit is contained in:
parent
f19ca6105e
commit
2959fb07cb
|
@ -748,6 +748,14 @@
|
||||||
which is then configured to use them explicitly.</para>
|
which is then configured to use them explicitly.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>Scope=</varname></term>
|
||||||
|
<listitem>
|
||||||
|
<para>The scope of the address, which can be <literal>global</literal>,
|
||||||
|
<literal>link</literal> or <literal>host</literal> or an unsigned integer ranges 0 to 255.
|
||||||
|
Defaults to <literal>global</literal>.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>HomeAddress=</varname></term>
|
<term><varname>HomeAddress=</varname></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
|
|
|
@ -927,6 +927,49 @@ int config_parse_address_flags(const char *unit,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int config_parse_address_scope(const char *unit,
|
||||||
|
const char *filename,
|
||||||
|
unsigned line,
|
||||||
|
const char *section,
|
||||||
|
unsigned section_line,
|
||||||
|
const char *lvalue,
|
||||||
|
int ltype,
|
||||||
|
const char *rvalue,
|
||||||
|
void *data,
|
||||||
|
void *userdata) {
|
||||||
|
Network *network = userdata;
|
||||||
|
_cleanup_address_free_ Address *n = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(filename);
|
||||||
|
assert(section);
|
||||||
|
assert(lvalue);
|
||||||
|
assert(rvalue);
|
||||||
|
assert(data);
|
||||||
|
|
||||||
|
r = address_new_static(network, filename, section_line, &n);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
if (streq(rvalue, "host"))
|
||||||
|
n->scope = RT_SCOPE_HOST;
|
||||||
|
else if (streq(rvalue, "link"))
|
||||||
|
n->scope = RT_SCOPE_LINK;
|
||||||
|
else if (streq(rvalue, "global"))
|
||||||
|
n->scope = RT_SCOPE_UNIVERSE;
|
||||||
|
else {
|
||||||
|
r = safe_atou8(rvalue , &n->scope);
|
||||||
|
if (r < 0) {
|
||||||
|
log_syntax(unit, LOG_ERR, filename, line, r, "Could not parse address scope \"%s\", ignoring assignment: %m", rvalue);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
n = NULL;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool address_is_ready(const Address *a) {
|
bool address_is_ready(const Address *a) {
|
||||||
assert(a);
|
assert(a);
|
||||||
|
|
||||||
|
@ -1179,4 +1222,4 @@ int config_parse_prefix_lifetime(const char *unit,
|
||||||
p = NULL;
|
p = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
};
|
}
|
||||||
|
|
|
@ -102,6 +102,7 @@ int config_parse_broadcast(const char *unit, const char *filename, unsigned line
|
||||||
int config_parse_label(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_label(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_lifetime(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_lifetime(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_address_flags(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_address_flags(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
|
int config_parse_address_scope(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_router_preference(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_router_preference(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_prefix(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_prefix(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_prefix_flags(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_prefix_flags(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
|
|
|
@ -80,6 +80,7 @@ Address.DuplicateAddressDetection, config_parse_address_flags,
|
||||||
Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0
|
Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0
|
||||||
Address.PrefixRoute, config_parse_address_flags, 0, 0
|
Address.PrefixRoute, config_parse_address_flags, 0, 0
|
||||||
Address.AutoJoin, config_parse_address_flags, 0, 0
|
Address.AutoJoin, config_parse_address_flags, 0, 0
|
||||||
|
Address.Scope, config_parse_address_scope, 0, 0
|
||||||
IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0
|
IPv6AddressLabel.Prefix, config_parse_address_label_prefix, 0, 0
|
||||||
IPv6AddressLabel.Label, config_parse_address_label, 0, 0
|
IPv6AddressLabel.Label, config_parse_address_label, 0, 0
|
||||||
Route.Gateway, config_parse_gateway, 0, 0
|
Route.Gateway, config_parse_gateway, 0, 0
|
||||||
|
|
Loading…
Reference in a new issue