diff --git a/src/network/networkd-route-util.c b/src/network/networkd-route-util.c index a204fb9631..d49a0b9512 100644 --- a/src/network/networkd-route-util.c +++ b/src/network/networkd-route-util.c @@ -162,9 +162,9 @@ bool gateway_is_ready(Link *link, bool onlink, int family, const union in_addr_u continue; if (FLAGS_SET(a->flags, IFA_F_NOPREFIXROUTE)) continue; - if (in_addr_is_set(a->family, &a->in_addr_peer)) - continue; - if (in_addr_prefix_covers(family, &a->in_addr, a->prefixlen, gw) > 0) + if (in_addr_prefix_covers(a->family, + in_addr_is_set(a->family, &a->in_addr_peer) ? &a->in_addr_peer : &a->in_addr, + a->prefixlen, gw) > 0) return true; } diff --git a/test/test-network/conf/25-route-static.network b/test/test-network/conf/25-route-static.network index 3574f021b0..7ef211d410 100644 --- a/test/test-network/conf/25-route-static.network +++ b/test/test-network/conf/25-route-static.network @@ -108,3 +108,10 @@ MultiPathRoute=2001:1234:5:6fff:ff:ff:ff:ff@test1 20 MultiPathRoute=2001:1234:5:7fff:ff:ff:ff:ff@test1 30 MultiPathRoute=2001:1234:5:8fff:ff:ff:ff:ff@dummy98 10 MultiPathRoute=2001:1234:5:9fff:ff:ff:ff:ff@dummy98 5 + +[Address] +Address=1.1.8.105/31 +Peer=1.1.8.104/31 + +[Route] +Gateway=1.1.8.104 diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py index fb9cf25c02..ea4f8d4b15 100755 --- a/test/test-network/systemd-networkd-tests.py +++ b/test/test-network/systemd-networkd-tests.py @@ -3097,6 +3097,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities): self.assertIn('default via 149.10.125.65 proto static onlink', output) self.assertIn('default via 149.10.124.64 proto static', output) self.assertIn('default proto static', output) + self.assertIn('default via 1.1.8.104 proto static', output) print('### ip -4 route show table local dev dummy98') output = check_output('ip -4 route show table local dev dummy98')