diff --git a/man/systemd.network.xml b/man/systemd.network.xml
index b0efd62dbd..bd078ecdca 100644
--- a/man/systemd.network.xml
+++ b/man/systemd.network.xml
@@ -1682,7 +1682,8 @@ NFTSet=prefix:netdev:filter:eth_ipv4_prefix
one of predefined names default, main, and
local, and names defined in RouteTable= in
networkd.conf5,
- or a number between 1 and 4294967295. Defaults to main.
+ or a number between 1 and 4294967295. Defaults to main.
+ Ignored if L3MasterDevice= is true.
@@ -2053,7 +2054,7 @@ NFTSet=prefix:netdev:filter:eth_ipv4_prefix
ip route show table num. If unset and
Type= is local, broadcast,
anycast, or nat, then local is used.
- In other cases, defaults to main. Ignored if L3MasterDevice= is true.
+ In other cases, defaults to main.
diff --git a/src/network/networkd-routing-policy-rule.c b/src/network/networkd-routing-policy-rule.c
index 886b4da8e0..c6b3779908 100644
--- a/src/network/networkd-routing-policy-rule.c
+++ b/src/network/networkd-routing-policy-rule.c
@@ -483,9 +483,7 @@ static int routing_policy_rule_set_netlink_message(const RoutingPolicyRule *rule
return r;
}
- if (rule->l3mdev)
- r = sd_rtnl_message_routing_policy_rule_set_table(m, RT_TABLE_UNSPEC);
- else if (rule->table < 256)
+ if (rule->table < 256)
r = sd_rtnl_message_routing_policy_rule_set_table(m, rule->table);
else {
r = sd_rtnl_message_routing_policy_rule_set_table(m, RT_TABLE_UNSPEC);
@@ -1784,6 +1782,9 @@ static int routing_policy_rule_section_verify(RoutingPolicyRule *rule) {
/* rule->family can be AF_UNSPEC only when Family=both. */
}
+ if (rule->l3mdev)
+ rule->table = RT_TABLE_UNSPEC;
+
return 0;
}