diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-07-08 13:19:28 +0200 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2019-07-12 02:39:43 +0200 |
commit | 41b90a1eb5cb87beab4603b52adbce36b723a6d6 (patch) | |
tree | 52d28cd72834de4c6c3e3f062fb524fe89cc4798 | |
parent | network: show route scope, table, and type in debugging logs (diff) | |
download | systemd-41b90a1eb5cb87beab4603b52adbce36b723a6d6.tar.xz systemd-41b90a1eb5cb87beab4603b52adbce36b723a6d6.zip |
network: use string table to parse route table or scope
-rw-r--r-- | man/systemd.network.xml | 5 | ||||
-rw-r--r-- | src/network/networkd-route.c | 29 |
2 files changed, 18 insertions, 16 deletions
diff --git a/man/systemd.network.xml b/man/systemd.network.xml index 70abb14c45..c9d6fd4d72 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1086,8 +1086,9 @@ <varlistentry> <term><varname>Table=</varname></term> <listitem> - <para>Specifies the routing table identifier to lookup if the rule - selector matches. The table identifier for a route (a number between 1 and 4294967295).</para> + <para>Specifies the routing table identifier to lookup if the rule selector matches. Takes + one of <literal>default</literal>, <literal>main</literal>, and <literal>local</literal>, + or a number between 1 and 4294967295. Defaults to <literal>main</literal>.</para> </listitem> </varlistentry> <varlistentry> diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c index 98fc8e4fe0..cf09e49018 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -804,7 +804,7 @@ static const char * const route_scope_table[] = { [RT_SCOPE_NOWHERE] = "nowhere", }; -DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(route_scope, int); +DEFINE_PRIVATE_STRING_TABLE_LOOKUP(route_scope, int); const char *format_route_scope(int scope, char *buf, size_t size) { const char *s; @@ -825,7 +825,7 @@ static const char * const route_table_table[] = { [RT_TABLE_LOCAL] = "local", }; -DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(route_table, int); +DEFINE_PRIVATE_STRING_TABLE_LOOKUP(route_table, int); const char *format_route_table(int table, char *buf, size_t size) { const char *s; @@ -1039,17 +1039,13 @@ int config_parse_route_scope( if (r < 0) return r; - if (streq(rvalue, "host")) - n->scope = RT_SCOPE_HOST; - else if (streq(rvalue, "link")) - n->scope = RT_SCOPE_LINK; - else if (streq(rvalue, "global")) - n->scope = RT_SCOPE_UNIVERSE; - else { + r = route_scope_from_string(rvalue); + if (r < 0) { log_syntax(unit, LOG_ERR, filename, line, 0, "Unknown route scope: %s", rvalue); return 0; } + n->scope = r; n->scope_set = true; TAKE_PTR(n); return 0; @@ -1081,11 +1077,16 @@ int config_parse_route_table( if (r < 0) return r; - r = safe_atou32(rvalue, &n->table); - if (r < 0) { - log_syntax(unit, LOG_ERR, filename, line, r, - "Could not parse route table number \"%s\", ignoring assignment: %m", rvalue); - return 0; + r = route_table_from_string(rvalue); + if (r >= 0) + n->table = r; + else { + r = safe_atou32(rvalue, &n->table); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, + "Could not parse route table number \"%s\", ignoring assignment: %m", rvalue); + return 0; + } } n->table_set = true; |