diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-11-02 03:15:25 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2018-11-04 00:31:46 +0900 |
commit | 6b1dec66962cda322556eb8bf130d9ca6f2ec62e (patch) | |
tree | 51ed1df2231c27f908cccaa673585e0c0260f005 /src/network/networkd-radv.c | |
parent | 8a4871c7d1181cb33794b8011a333e6112802055 (diff) | |
download | systemd-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.c | 34 |
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; } |