tests: Add test to check importing routes to VRF

After implementing ACCEPT_OWN extended community, bgpd can't import VPN
routes to the VRFs whose RD is matched with that of VPN routes. This
commit adds new test to check the effect of the next commit.

Signed-off-by: Ryoga Saito <ryoga.saito@linecorp.com>
This commit is contained in:
Ryoga Saito 2023-01-19 20:51:33 +09:00
parent 69306c44e8
commit 03cc2022d2
16 changed files with 165 additions and 30 deletions

View File

@ -0,0 +1,4 @@
!
ip route 0.0.0.0/0 192.168.3.254
ipv6 route ::/0 2001:3::ffff
!

View File

@ -0,0 +1,6 @@
hostname c31
!
interface eth0
ip address 192.168.3.1/24
ipv6 address 2001:3::1/64
!

View File

@ -0,0 +1,4 @@
!
ip route 0.0.0.0/0 192.168.3.254
ipv6 route ::/0 2001:3::ffff
!

View File

@ -0,0 +1,6 @@
hostname c32
!
interface eth0
ip address 192.168.3.1/24
ipv6 address 2001:3::1/64
!

View File

@ -11,16 +11,21 @@ router bgp 65001
bgp router-id 192.0.2.1
no bgp ebgp-requires-policy
no bgp default ipv4-unicast
neighbor 2001:db8::2 remote-as 65002
neighbor 2001:db8::2 timers 3 10
neighbor 2001:db8::2 timers connect 1
neighbor 2001:db8::2 capability extended-nexthop
neighbor 2001:db8:12::2 remote-as 65002
neighbor 2001:db8:12::2 timers 3 10
neighbor 2001:db8:12::2 timers connect 1
neighbor 2001:db8:12::2 capability extended-nexthop
neighbor 2001:db8:13::3 remote-as 65001
neighbor 2001:db8:13::3 timers 3 10
neighbor 2001:db8:13::3 timers connect 1
neighbor 2001:db8:13::3 capability extended-nexthop
!
segment-routing srv6
locator default
!
address-family ipv4 vpn
neighbor 2001:db8::2 activate
neighbor 2001:db8:12::2 activate
neighbor 2001:db8:13::3 activate
exit-address-family
!
!

View File

@ -1,3 +1,4 @@
!
ipv6 route 2001:db8:2:2::/64 2001:db8::2
ipv6 route 2001:db8:2:2::/64 2001:db8:12::2
ipv6 route 2001:db8:3:3::/64 2001:db8:13::3
!

View File

@ -6,12 +6,15 @@ interface lo
ipv6 address 2001:db8:1:1::1/128
!
interface eth0
ipv6 address 2001:db8::1/64
ipv6 address 2001:db8:12::1/64
!
interface eth1 vrf vrf10
interface eth1
ipv6 address 2001:db8:13::1/64
!
interface eth2 vrf vrf10
ip address 192.168.1.254/24
!
interface eth2 vrf vrf20
interface eth3 vrf vrf20
ip address 192.168.1.254/24
!
segment-routing

View File

@ -11,16 +11,16 @@ router bgp 65002
bgp router-id 192.0.2.2
no bgp ebgp-requires-policy
no bgp default ipv4-unicast
neighbor 2001:db8::1 remote-as 65001
neighbor 2001:db8::1 timers 3 10
neighbor 2001:db8::1 timers connect 1
neighbor 2001:db8::1 capability extended-nexthop
neighbor 2001:db8:12::1 remote-as 65001
neighbor 2001:db8:12::1 timers 3 10
neighbor 2001:db8:12::1 timers connect 1
neighbor 2001:db8:12::1 capability extended-nexthop
!
segment-routing srv6
locator default
!
address-family ipv4 vpn
neighbor 2001:db8::1 activate
neighbor 2001:db8:12::1 activate
exit-address-family
!
!

View File

@ -1,3 +1,4 @@
!
ipv6 route 2001:db8:1:1::/64 2001:db8::1
ipv6 route 2001:db8:1:1::/64 2001:db8:12::1
ipv6 route 2001:db8:3:3::/64 2001:db8:12::1
!

View File

@ -6,7 +6,7 @@ interface lo
ipv6 address 2001:db8:2:2::1/128
!
interface eth0
ipv6 address 2001:db8::2/64
ipv6 address 2001:db8:12::2/64
!
interface eth1 vrf vrf10
ip address 192.168.2.254/24

View File

@ -0,0 +1,52 @@
frr defaults traditional
!
hostname r2
password zebra
!
log stdout notifications
log monitor notifications
log commands
!
router bgp 65001
bgp router-id 192.0.2.3
no bgp ebgp-requires-policy
no bgp default ipv4-unicast
neighbor 2001:db8:13::1 remote-as 65001
neighbor 2001:db8:13::1 timers 3 10
neighbor 2001:db8:13::1 timers connect 1
neighbor 2001:db8:13::1 capability extended-nexthop
!
segment-routing srv6
locator default
!
address-family ipv4 vpn
neighbor 2001:db8:13::1 activate
exit-address-family
!
!
router bgp 65001 vrf vrf10
bgp router-id 192.0.2.3
!
address-family ipv4 unicast
redistribute connected
sid vpn export 1
rd vpn export 65001:10
rt vpn both 0:10
import vpn
export vpn
exit-address-family
!
!
router bgp 65001 vrf vrf20
bgp router-id 192.0.2.2
!
address-family ipv4 unicast
redistribute connected
sid vpn export 2
rd vpn export 65001:20
rt vpn both 0:20
import vpn
export vpn
exit-address-family
!
!

View File

@ -0,0 +1,6 @@
!
ipv6 route 2001:db8:12::/64 2001:db8:13::1
!
ipv6 route 2001:db8:1:1::/64 2001:db8:13::1
ipv6 route 2001:db8:2:2::/64 2001:db8:13::1
!

View File

@ -0,0 +1,29 @@
log file zebra.log
!
hostname r2
!
interface lo
ipv6 address 2001:db8:3:3::1/128
!
interface eth0
ipv6 address 2001:db8:13::3/64
!
interface eth1 vrf vrf10
ip address 192.168.3.254/24
!
interface eth2 vrf vrf20
ip address 192.168.3.254/24
!
segment-routing
srv6
locators
locator default
prefix 2001:db8:3:3::/64
!
!
!
ip forwarding
ipv6 forwarding
!
line vty
!

View File

@ -44,17 +44,23 @@ pytestmark = [pytest.mark.bgpd]
def build_topo(tgen):
tgen.add_router("r1")
tgen.add_router("r2")
tgen.add_router("r3")
tgen.add_router("c11")
tgen.add_router("c12")
tgen.add_router("c21")
tgen.add_router("c22")
tgen.add_router("c31")
tgen.add_router("c32")
tgen.add_link(tgen.gears["r1"], tgen.gears["r2"], "eth0", "eth0")
tgen.add_link(tgen.gears["r1"], tgen.gears["c11"], "eth1", "eth0")
tgen.add_link(tgen.gears["r1"], tgen.gears["c12"], "eth2", "eth0")
tgen.add_link(tgen.gears["r1"], tgen.gears["r3"], "eth1", "eth0")
tgen.add_link(tgen.gears["r1"], tgen.gears["c11"], "eth2", "eth0")
tgen.add_link(tgen.gears["r1"], tgen.gears["c12"], "eth3", "eth0")
tgen.add_link(tgen.gears["r2"], tgen.gears["c21"], "eth1", "eth0")
tgen.add_link(tgen.gears["r2"], tgen.gears["c22"], "eth2", "eth0")
tgen.add_link(tgen.gears["r3"], tgen.gears["c31"], "eth1", "eth0")
tgen.add_link(tgen.gears["r3"], tgen.gears["c32"], "eth2", "eth0")
def setup_module(mod):
@ -66,20 +72,23 @@ def setup_module(mod):
tgen.start_topology()
for rname, router in tgen.routers().items():
router.load_config(TopoRouter.RD_ZEBRA,
os.path.join(CWD, '{}/zebra.conf'.format(rname)))
router.load_config(TopoRouter.RD_STATIC,
os.path.join(CWD, '{}/staticd.conf'.format(rname)))
router.load_config(TopoRouter.RD_BGP,
os.path.join(CWD, '{}/bgpd.conf'.format(rname)))
router.load_config(
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
)
router.load_config(
TopoRouter.RD_STATIC, os.path.join(CWD, "{}/staticd.conf".format(rname))
)
router.load_config(
TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
)
tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
tgen.gears["r1"].run("ip link set vrf10 up")
tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
tgen.gears["r1"].run("ip link set vrf20 up")
tgen.gears["r1"].run("ip link set eth1 master vrf10")
tgen.gears["r1"].run("ip link set eth2 master vrf20")
tgen.gears["r1"].run("ip link set eth2 master vrf10")
tgen.gears["r1"].run("ip link set eth3 master vrf20")
tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
@ -89,6 +98,14 @@ def setup_module(mod):
tgen.gears["r2"].run("ip link set eth1 master vrf10")
tgen.gears["r2"].run("ip link set eth2 master vrf20")
tgen.gears["r3"].run("sysctl net.vrf.strict_mode=1")
tgen.gears["r3"].run("ip link add vrf10 type vrf table 10")
tgen.gears["r3"].run("ip link set vrf10 up")
tgen.gears["r3"].run("ip link add vrf20 type vrf table 20")
tgen.gears["r3"].run("ip link set vrf20 up")
tgen.gears["r3"].run("ip link set eth1 master vrf10")
tgen.gears["r3"].run("ip link set eth2 master vrf20")
tgen.start_router()
@ -115,12 +132,13 @@ def check_ping4(name, dest_addr, expected):
def test_ping():
tgen = get_topogen()
logger.info(tgen.gears["c11"].run("ip route show"))
# tests for ipv4-vpn
check_ping4("c11", "192.168.2.1", True)
check_ping4("c11", "192.168.3.1", True)
check_ping4("c12", "192.168.2.1", True)
check_ping4("c21", "192.168.1.1", True)
check_ping4("c22", "192.168.1.1", True)
check_ping4("c12", "192.168.3.1", True)
check_ping4("c21", "192.168.3.1", True)
check_ping4("c22", "192.168.3.1", True)
if __name__ == "__main__":