diff options
author | Susant Sahani <ssahani@users.noreply.github.com> | 2017-08-01 07:44:08 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2017-08-01 09:44:08 +0200 |
commit | 2959fb07cbad2be0c835fb5ae709f884e4b86dc4 (patch) | |
tree | 39b267788b9299b9527e7e2172af081bff06e0cd | |
parent | f19ca6105e9f74b01e799d02c280eec67696c228 (diff) | |
download | systemd-2959fb07cbad2be0c835fb5ae709f884e4b86dc4.tar.gz |
networkd: add scope to address section (#6449)
This work allows to configure address Scope to
host | link | global or a number.
Closes #6446
-rw-r--r-- | man/systemd.network.xml | 8 | ||||
-rw-r--r-- | src/network/networkd-address.c | 45 | ||||
-rw-r--r-- | src/network/networkd-address.h | 1 | ||||
-rw-r--r-- | src/network/networkd-network-gperf.gperf | 1 |
4 files changed, 54 insertions, 1 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 49d97cb604..438e1126dc 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -749,6 +749,14 @@ </listitem> </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> <term><varname>HomeAddress=</varname></term> <listitem> <para>Takes a boolean argument. Designates this address the "home address" as defined in diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c index d66b3a288f..7f536b4ba9 100644 --- a/src/network/networkd-address.c +++ b/src/network/networkd-address.c @@ -927,6 +927,49 @@ int config_parse_address_flags(const char *unit, 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) { assert(a); @@ -1179,4 +1222,4 @@ int config_parse_prefix_lifetime(const char *unit, p = NULL; return 0; -}; +} diff --git a/src/network/networkd-address.h b/src/network/networkd-address.h index 065328482e..3281c6d3c2 100644 --- a/src/network/networkd-address.h +++ b/src/network/networkd-address.h @@ -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_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_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_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); diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index a2d38501a5..a225836598 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -80,6 +80,7 @@ Address.DuplicateAddressDetection, config_parse_address_flags, Address.ManageTemporaryAddress, config_parse_address_flags, 0, 0 Address.PrefixRoute, 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.Label, config_parse_address_label, 0, 0 Route.Gateway, config_parse_gateway, 0, 0 |