Skip to content

Commit ef32125

Browse files
authored
Merge pull request #28387 from yuwata/network-route-table-name
network: cleanups for route table name
2 parents 92ab805 + e8e91a8 commit ef32125

File tree

7 files changed

+36
-20
lines changed

7 files changed

+36
-20
lines changed

man/networkd.conf.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,10 @@
8989
colon, i.e., <literal><replaceable>name</replaceable>:<replaceable>number</replaceable></literal>.
9090
The route table name must not be <literal>default</literal>, <literal>main</literal>, or
9191
<literal>local</literal>, as these route table names are predefined with route table number 253,
92-
254, and 255, respectively. The route table number must be an integer in the range 1…4294967295.
93-
This setting can be specified multiple times. If an empty string is specified, then the list
94-
specified earlier are cleared. Defaults to unset.</para></listitem>
92+
254, and 255, respectively. The route table number must be an integer in the range 1…4294967295,
93+
except for predefined numbers 253, 254, and 255. This setting can be specified multiple times.
94+
If an empty string is specified, then the list specified earlier are cleared. Defaults to unset.
95+
</para></listitem>
9596
</varlistentry>
9697

9798
<varlistentry>

src/network/networkd-json.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ static int route_build_json(Route *route, JsonVariant **ret) {
235235
if (r < 0)
236236
return r;
237237

238-
r = manager_get_route_table_to_string(manager, route->table, &table);
238+
r = manager_get_route_table_to_string(manager, route->table, /* append_num = */ false, &table);
239239
if (r < 0)
240240
return r;
241241

@@ -305,7 +305,7 @@ static int routing_policy_rule_build_json(RoutingPolicyRule *rule, JsonVariant *
305305
assert(rule->manager);
306306
assert(ret);
307307

308-
r = manager_get_route_table_to_string(rule->manager, rule->table, &table);
308+
r = manager_get_route_table_to_string(rule->manager, rule->table, /* append_num = */ false, &table);
309309
if (r < 0 && r != -EINVAL)
310310
return r;
311311

src/network/networkd-route-util.c

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,9 @@ int manager_get_route_table_from_string(const Manager *m, const char *s, uint32_
424424
return 0;
425425
}
426426

427-
int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **ret) {
427+
int manager_get_route_table_to_string(const Manager *m, uint32_t table, bool append_num, char **ret) {
428428
_cleanup_free_ char *str = NULL;
429429
const char *s;
430-
int r;
431430

432431
assert(m);
433432
assert(ret);
@@ -439,13 +438,16 @@ int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **r
439438
if (!s)
440439
s = hashmap_get(m->route_table_names_by_number, UINT32_TO_PTR(table));
441440

442-
if (s)
443-
/* Currently, this is only used in debugging logs. To not confuse any bug
444-
* reports, let's include the table number. */
445-
r = asprintf(&str, "%s(%" PRIu32 ")", s, table);
446-
else
447-
r = asprintf(&str, "%" PRIu32, table);
448-
if (r < 0)
441+
if (s && !append_num) {
442+
str = strdup(s);
443+
if (!str)
444+
return -ENOMEM;
445+
446+
} else if (asprintf(&str, "%s%s%" PRIu32 "%s",
447+
strempty(s),
448+
s ? "(" : "",
449+
table,
450+
s ? ")" : "") < 0)
449451
return -ENOMEM;
450452

451453
*ret = TAKE_PTR(str);
@@ -512,9 +514,10 @@ int config_parse_route_table_names(
512514
"Route table name cannot be numeric. Ignoring assignment: %s:%s", name, num);
513515
continue;
514516
}
515-
if (STR_IN_SET(name, "default", "main", "local")) {
517+
if (route_table_from_string(name) >= 0) {
516518
log_syntax(unit, LOG_WARNING, filename, line, 0,
517-
"Route table name %s is already predefined. Ignoring assignment: %s:%s", name, name, num);
519+
"Route table name %s is predefined for %i. Ignoring assignment: %s:%s",
520+
name, route_table_from_string(name), name, num);
518521
continue;
519522
}
520523

@@ -529,6 +532,12 @@ int config_parse_route_table_names(
529532
"Invalid route table number, ignoring assignment: %s:%s", name, num);
530533
continue;
531534
}
535+
if (route_table_to_string(table)) {
536+
log_syntax(unit, LOG_WARNING, filename, line, 0,
537+
"Route table name for %s is predefined (%s). Ignoring assignment: %s:%s",
538+
num, route_table_to_string(table), name, num);
539+
continue;
540+
}
532541

533542
r = hashmap_ensure_put(&m->route_table_numbers_by_name, &string_hash_ops_free, name, UINT32_TO_PTR(table));
534543
if (r == -ENOMEM)

src/network/networkd-route-util.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@ int route_protocol_full_to_string_alloc(int t, char **ret);
4444
int route_flags_to_string_alloc(uint32_t flags, char **ret);
4545

4646
int manager_get_route_table_from_string(const Manager *m, const char *table, uint32_t *ret);
47-
int manager_get_route_table_to_string(const Manager *m, uint32_t table, char **ret);
47+
int manager_get_route_table_to_string(const Manager *m, uint32_t table, bool append_num, char **ret);
4848

4949
CONFIG_PARSER_PROTOTYPE(config_parse_route_table_names);

src/network/networkd-route.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ static void log_route_debug(const Route *route, const char *str, const Link *lin
597597
if (in_addr_is_set(route->family, &route->prefsrc))
598598
(void) in_addr_to_string(route->family, &route->prefsrc, &prefsrc);
599599
(void) route_scope_to_string_alloc(route->scope, &scope);
600-
(void) manager_get_route_table_to_string(manager, route->table, &table);
600+
(void) manager_get_route_table_to_string(manager, route->table, /* append_num = */ true, &table);
601601
(void) route_protocol_full_to_string_alloc(route->protocol, &proto);
602602
(void) route_flags_to_string_alloc(route->flags, &flags);
603603

src/network/networkd-routing-policy-rule.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ static void log_routing_policy_rule_debug(const RoutingPolicyRule *rule, const c
427427
return;
428428

429429
(void) network_config_state_to_string_alloc(rule->state, &state);
430-
(void) manager_get_route_table_to_string(m, rule->table, &table);
430+
(void) manager_get_route_table_to_string(m, rule->table, /* append_num = */ true, &table);
431431

432432
log_link_debug(link,
433433
"%s %s routing policy rule (%s): priority: %"PRIu32", %s -> %s, iif: %s, oif: %s, table: %s",

src/network/test-network.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,14 @@ static void test_route_tables_one(Manager *manager, const char *name, uint32_t n
114114
}
115115

116116
assert_se(asprintf(&expected, "%s(%" PRIu32 ")", name, number) >= 0);
117-
assert_se(manager_get_route_table_to_string(manager, number, &str) >= 0);
117+
assert_se(manager_get_route_table_to_string(manager, number, /* append_num = */ true, &str) >= 0);
118118
assert_se(streq(str, expected));
119119

120+
str = mfree(str);
121+
122+
assert_se(manager_get_route_table_to_string(manager, number, /* append_num = */ false, &str) >= 0);
123+
assert_se(streq(str, name));
124+
120125
assert_se(manager_get_route_table_from_string(manager, name, &t) >= 0);
121126
assert_se(t == number);
122127

@@ -148,6 +153,7 @@ static void test_route_tables(Manager *manager) {
148153

149154
/* Invalid pairs */
150155
assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "main:123 default:333 local:999", manager, manager) >= 0);
156+
assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "xxx:253 yyy:254 local:255", manager, manager) >= 0);
151157
assert_se(config_parse_route_table_names("manager", "filename", 1, "section", 1, "RouteTable", 0, "1234:321 :567 hoge:foo aaa:-888", manager, manager) >= 0);
152158
assert_se(!manager->route_table_names_by_number);
153159
assert_se(!manager->route_table_numbers_by_name);

0 commit comments

Comments
 (0)