Merge pull request #14941 from yuwata/network-vrf-static

network: use VRF's route table if VRF= is set
This commit is contained in:
Yu Watanabe
2020-02-26 23:58:44 +09:00
committed by GitHub
3 changed files with 31 additions and 1 deletions
+6 -1
View File
@@ -17,7 +17,7 @@
#include "string-util.h"
#include "strxcpyx.h"
#include "sysctl-util.h"
#include "util.h"
#include "vrf.h"
#define ROUTES_DEFAULT_MAX_PER_FAMILY 4096U
@@ -1700,6 +1700,11 @@ int route_section_verify(Route *route, Network *network) {
route->section->filename, route->section->line);
}
if (!route->table_set && network->vrf) {
route->table = VRF(network->vrf)->table;
route->table_set = true;
}
if (!route->table_set && IN_SET(route->type, RTN_LOCAL, RTN_BROADCAST, RTN_ANYCAST, RTN_NAT))
route->table = RT_TABLE_LOCAL;
@@ -0,0 +1,7 @@
[Match]
Name=dummy98
[Network]
VRF=vrf99
Address=192.168.100.2/24
Gateway=192.168.100.1
@@ -1589,6 +1589,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
'ip6gretun97',
'test1',
'veth99',
'vrf99',
]
units = [
@@ -1628,12 +1629,14 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
'25-qdisc-teql.network',
'25-route-ipv6-src.network',
'25-route-static.network',
'25-route-vrf.network',
'25-gateway-static.network',
'25-gateway-next-static.network',
'25-sysctl-disable-ipv6.network',
'25-sysctl.network',
'25-veth-peer.network',
'25-veth.netdev',
'25-vrf.netdev',
'26-link-local-addressing-ipv6.network',
'configure-without-carrier.network',
'routing-policy-rule-dummy98.network',
@@ -1910,6 +1913,21 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
self.assertRegex(output, 'via 2001:1234:5:8fff:ff:ff:ff:ff dev dummy98')
self.assertRegex(output, 'via 2001:1234:5:9fff:ff:ff:ff:ff dev dummy98')
@expectedFailureIfModuleIsNotAvailable('vrf')
def test_route_vrf(self):
copy_unit_to_networkd_unit_path('25-route-vrf.network', '12-dummy.netdev',
'25-vrf.netdev', '25-vrf.network')
start_networkd()
self.wait_online(['dummy98:routable', 'vrf99:carrier'])
output = check_output('ip route show vrf vrf99')
print(output)
self.assertRegex(output, 'default via 192.168.100.1')
output = check_output('ip route show')
print(output)
self.assertNotRegex(output, 'default via 192.168.100.1')
def test_gateway_reconfigure(self):
copy_unit_to_networkd_unit_path('25-gateway-static.network', '12-dummy.netdev')
start_networkd()