network: use string table for route protocol
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 8 Jul 2019 11:36:19 +0000 (20:36 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 12 Jul 2019 00:39:43 +0000 (09:39 +0900)
src/network/networkd-route.c

index cf09e49..798c9ed 100644 (file)
@@ -840,6 +840,14 @@ const char *format_route_table(int table, char *buf, size_t size) {
         return buf;
 }
 
+static const char * const route_protocol_table[] = {
+        [RTPROT_KERNEL] = "kernel",
+        [RTPROT_BOOT]   = "boot",
+        [RTPROT_STATIC] = "static",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(route_protocol, int);
+
 int config_parse_gateway(
                 const char *unit,
                 const char *filename,
@@ -1188,12 +1196,9 @@ int config_parse_route_protocol(
         if (r < 0)
                 return r;
 
-        if (streq(rvalue, "kernel"))
-                n->protocol = RTPROT_KERNEL;
-        else if (streq(rvalue, "boot"))
-                n->protocol = RTPROT_BOOT;
-        else if (streq(rvalue, "static"))
-                n->protocol = RTPROT_STATIC;
+        r = route_protocol_from_string(rvalue);
+        if (r >= 0)
+                n->protocol = r;
         else {
                 r = safe_atou8(rvalue , &n->protocol);
                 if (r < 0) {