Merge pull request #12970 from ddstreet/gh12969
src/network/networkd-dhcp4.c: set prefsrc for classless or static routes
This commit is contained in:
commit
16e233d0bb
|
@ -147,6 +147,8 @@ static int link_set_dhcp_routes(Link *link) {
|
|||
route->priority = link->network->dhcp_route_metric;
|
||||
route->table = table;
|
||||
route->scope = route_scope_from_address(route, &address);
|
||||
if (IN_SET(route->scope, RT_SCOPE_LINK, RT_SCOPE_UNIVERSE))
|
||||
route->prefsrc.in = address;
|
||||
|
||||
r = route_configure(route, link, dhcp4_route_handler);
|
||||
if (r < 0)
|
||||
|
@ -277,6 +279,8 @@ static int dhcp_remove_routes(Link *link, sd_dhcp_lease *lease, sd_dhcp_lease *n
|
|||
route->priority = link->network->dhcp_route_metric;
|
||||
route->table = table;
|
||||
route->scope = route_scope_from_address(route, address);
|
||||
if (IN_SET(route->scope, RT_SCOPE_LINK, RT_SCOPE_UNIVERSE))
|
||||
route->prefsrc.in = *address;
|
||||
|
||||
if (route_present_in_routes(route, new_routes, m))
|
||||
continue;
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
[Match]
|
||||
Name=veth99
|
||||
|
||||
[Network]
|
||||
DHCP=ipv4
|
||||
IPv6AcceptRA=no
|
||||
Address=192.168.5.250
|
|
@ -2123,6 +2123,7 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
|
|||
'dhcp-client-vrf.network',
|
||||
'dhcp-client-with-ipv4ll-fallback-with-dhcp-server.network',
|
||||
'dhcp-client-with-ipv4ll-fallback-without-dhcp-server.network',
|
||||
'dhcp-client-with-static-address.network',
|
||||
'dhcp-client.network',
|
||||
'dhcp-server-veth-peer.network',
|
||||
'dhcp-v4-server-veth-peer.network',
|
||||
|
@ -2273,6 +2274,26 @@ class NetworkdDHCPClientTests(unittest.TestCase, Utilities):
|
|||
print(output)
|
||||
self.assertRegex(output, '192.168.5.* dynamic')
|
||||
|
||||
def test_dhcp_client_with_static_address(self):
|
||||
copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network',
|
||||
'dhcp-client-with-static-address.network')
|
||||
start_networkd()
|
||||
wait_online(['veth-peer:carrier'])
|
||||
start_dnsmasq()
|
||||
wait_online(['veth99:routable', 'veth-peer:routable'])
|
||||
|
||||
output = check_output('ip address show dev veth99 scope global')
|
||||
print(output)
|
||||
self.assertRegex(output, r'inet 192.168.5.250/24 brd 192.168.5.255 scope global veth99')
|
||||
self.assertRegex(output, r'inet 192.168.5.[0-9]*/24 brd 192.168.5.255 scope global secondary dynamic veth99')
|
||||
|
||||
output = check_output('ip route show dev veth99')
|
||||
print(output)
|
||||
self.assertRegex(output, r'default via 192.168.5.1 proto dhcp src 192.168.5.[0-9]* metric 1024')
|
||||
self.assertRegex(output, r'192.168.5.0/24 proto kernel scope link src 192.168.5.250')
|
||||
self.assertRegex(output, r'192.168.5.0/24 via 192.168.5.5 proto dhcp src 192.168.5.[0-9]* metric 1024')
|
||||
self.assertRegex(output, r'192.168.5.1 proto dhcp scope link src 192.168.5.[0-9]* metric 1024')
|
||||
|
||||
def test_dhcp_route_table_id(self):
|
||||
copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-route-table.network')
|
||||
start_networkd()
|
||||
|
|
Loading…
Reference in New Issue