From: Yu Watanabe Date: Thu, 1 Nov 2018 18:15:25 +0000 (+0900) Subject: network: introduce radv_prefix_delegation_{from,to}_string() X-Git-Tag: v240~414^2~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6b1dec66962cda322556eb8bf130d9ca6f2ec62e;p=thirdparty%2Fsystemd.git network: introduce radv_prefix_delegation_{from,to}_string() --- diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index 1be7d467353..495fac83d38 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -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_; diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 9b393d82a07..dc8b24a238a 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; }