]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: add scope to address section (#6449)
authorSusant Sahani <ssahani@users.noreply.github.com>
Tue, 1 Aug 2017 07:44:08 +0000 (07:44 +0000)
committerLennart Poettering <lennart@poettering.net>
Tue, 1 Aug 2017 07:44:08 +0000 (09:44 +0200)
This work allows to configure address Scope to

host | link | global or a number.

Closes #6446

man/systemd.network.xml
src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-network-gperf.gperf

index 49d97cb604f691821bdc62c0620cd50392911fa9..438e1126dc58953750dc2cd1674594ad3820ff8e 100644 (file)
             which is then configured to use them explicitly.</para>
           </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>
index d66b3a288f26cd8e2e1926cc16c64e2e978c2953..7f536b4ba9a5574bd1b61c73e4c7276473a434b4 100644 (file)
@@ -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;
-};
+}
index 065328482ef647f2abd5fc968beb9012fc912b98..3281c6d3c24b60026d531c86c9cff89fb91bd9d5 100644 (file)
@@ -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);
index a2d38501a533ba390b62fea1038fd559b4b8ae32..a225836598e3889e690202e6170f73e570acb035 100644 (file)
@@ -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