summaryrefslogtreecommitdiff
path: root/src/network/networkd-radv.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-11-02 03:15:25 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2018-11-04 00:31:46 +0900
commit6b1dec66962cda322556eb8bf130d9ca6f2ec62e (patch)
tree51ed1df2231c27f908cccaa673585e0c0260f005 /src/network/networkd-radv.c
parent8a4871c7d1181cb33794b8011a333e6112802055 (diff)
downloadsystemd-6b1dec66962cda322556eb8bf130d9ca6f2ec62e.tar.gz
network: introduce radv_prefix_delegation_{from,to}_string()
Diffstat (limited to 'src/network/networkd-radv.c')
-rw-r--r--src/network/networkd-radv.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c
index 9b393d82a0..dc8b24a238 100644
--- a/src/network/networkd-radv.c
+++ b/src/network/networkd-radv.c
@@ -12,8 +12,21 @@
#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;
}