]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce radv_prefix_delegation_{from,to}_string()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 1 Nov 2018 18:15:25 +0000 (03:15 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 3 Nov 2018 15:31:46 +0000 (00:31 +0900)
src/network/networkd-network.h
src/network/networkd-radv.c

index 1be7d467353b92e6a6d9d1b1b36b840b749b6dbe..495fac83d38d421cd11b455dadbfc9bd21dedc2d 100644 (file)
@@ -78,6 +78,8 @@ typedef enum RADVPrefixDelegation {
         RADV_PREFIX_DELEGATION_STATIC,
         RADV_PREFIX_DELEGATION_DHCP6,
         RADV_PREFIX_DELEGATION_BOTH,
+        _RADV_PREFIX_DELEGATION_MAX,
+        _RADV_PREFIX_DELEGATION_INVALID = -1,
 } RADVPrefixDelegation;
 
 typedef struct NetworkConfigSection {
@@ -316,3 +318,6 @@ DHCPUseDomains dhcp_use_domains_from_string(const char *s) _pure_;
 
 const char* lldp_mode_to_string(LLDPMode m) _const_;
 LLDPMode lldp_mode_from_string(const char *s) _pure_;
+
+const char* radv_prefix_delegation_to_string(RADVPrefixDelegation i) _const_;
+RADVPrefixDelegation radv_prefix_delegation_from_string(const char *s) _pure_;
index 9b393d82a07640e55b36dafcd2cc742ceca88db2..dc8b24a238aabca31d976452bbef10f83f609b7b 100644 (file)
 #include "parse-util.h"
 #include "sd-radv.h"
 #include "string-util.h"
+#include "string-table.h"
 #include "strv.h"
 
+static const char * const radv_prefix_delegation_table[_RADV_PREFIX_DELEGATION_MAX] = {
+        [RADV_PREFIX_DELEGATION_NONE] = "no",
+        [RADV_PREFIX_DELEGATION_STATIC] = "static",
+        [RADV_PREFIX_DELEGATION_DHCP6] = "dhcpv6",
+        [RADV_PREFIX_DELEGATION_BOTH] = "yes",
+};
+
+DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(
+                radv_prefix_delegation,
+                RADVPrefixDelegation,
+                RADV_PREFIX_DELEGATION_BOTH);
+
 int config_parse_router_prefix_delegation(
                 const char *unit,
                 const char *filename,
@@ -27,7 +40,7 @@ int config_parse_router_prefix_delegation(
                 void *userdata) {
 
         Network *network = userdata;
-        int d;
+        RADVPrefixDelegation d;
 
         assert(filename);
         assert(section);
@@ -35,21 +48,14 @@ int config_parse_router_prefix_delegation(
         assert(rvalue);
         assert(data);
 
-        if (streq(rvalue, "static"))
-                network->router_prefix_delegation = RADV_PREFIX_DELEGATION_STATIC;
-        else if (streq(rvalue, "dhcpv6"))
-                network->router_prefix_delegation = RADV_PREFIX_DELEGATION_DHCP6;
-        else {
-                d = parse_boolean(rvalue);
-                if (d > 0)
-                        network->router_prefix_delegation = RADV_PREFIX_DELEGATION_BOTH;
-                else
-                        network->router_prefix_delegation = RADV_PREFIX_DELEGATION_NONE;
-
-                if (d < 0)
-                        log_syntax(unit, LOG_ERR, filename, line, -EINVAL, "Router prefix delegation '%s' is invalid, ignoring assignment: %m", rvalue);
+        d = radv_prefix_delegation_from_string(rvalue);
+        if (d < 0) {
+                log_syntax(unit, LOG_ERR, filename, line, -EINVAL, "Invalid router prefix delegation '%s', ignoring assignment.", rvalue);
+                return 0;
         }
 
+        network->router_prefix_delegation = d;
+
         return 0;
 }