summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-07-08 13:19:28 +0200
committerYu Watanabe <watanabe.yu+github@gmail.com>2019-07-12 02:39:43 +0200
commit41b90a1eb5cb87beab4603b52adbce36b723a6d6 (patch)
tree52d28cd72834de4c6c3e3f062fb524fe89cc4798
parentnetwork: show route scope, table, and type in debugging logs (diff)
downloadsystemd-41b90a1eb5cb87beab4603b52adbce36b723a6d6.tar.xz
systemd-41b90a1eb5cb87beab4603b52adbce36b723a6d6.zip
network: use string table to parse route table or scope
-rw-r--r--man/systemd.network.xml5
-rw-r--r--src/network/networkd-route.c29
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;