]> git.puffer.fish Git - matthieu/frr.git/commitdiff
tests: Add test to check importing routes to VRF
authorRyoga Saito <ryoga.saito@linecorp.com>
Thu, 19 Jan 2023 11:51:33 +0000 (20:51 +0900)
committerRyoga Saito <ryoga.saito@linecorp.com>
Fri, 20 Jan 2023 06:28:35 +0000 (15:28 +0900)
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>
16 files changed:
tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/bgpd.conf
tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/staticd.conf
tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/zebra.conf
tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/bgpd.conf
tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/staticd.conf
tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/zebra.conf
tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py

diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/bgpd.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/staticd.conf
new file mode 100644 (file)
index 0000000..0c88575
--- /dev/null
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.3.254
+ipv6 route ::/0 2001:3::ffff
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c31/zebra.conf
new file mode 100644 (file)
index 0000000..3f75641
--- /dev/null
@@ -0,0 +1,6 @@
+hostname c31
+!
+interface eth0
+ ip address 192.168.3.1/24
+ ipv6 address 2001:3::1/64
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/bgpd.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/staticd.conf
new file mode 100644 (file)
index 0000000..0c88575
--- /dev/null
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.3.254
+ipv6 route ::/0 2001:3::ffff
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c32/zebra.conf
new file mode 100644 (file)
index 0000000..c06a7d1
--- /dev/null
@@ -0,0 +1,6 @@
+hostname c32
+!
+interface eth0
+ ip address 192.168.3.1/24
+ ipv6 address 2001:3::1/64
+!
index 048702f91874736f8a4c57c7c9140309dd2291b0..22b901429155adf7284c38e688848260461c5548 100644 (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
  !
 !
index 662856f476ba9dcb7f851a00f3b5df26594c64fa..49b64fd7afc78ca022b4d33afb1f2e8f207a617b 100644 (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
 !
index 066748bec58e7e43f7398470a55438d184c2abb2..79dbf955930883137c02ad4f56882de379a7f528 100644 (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
index 33b9103aaf7a6531ca7019d7cef0bdc6ef2c5960..42b9d511d950d6b695298b29c62ef71fdc0eb037 100644 (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
  !
 !
index a2f54b7333339109ea2085797a0e474621500f73..8d80c1ead2cf3d06129acc1e06f572a75401f6ba 100644 (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
 !
index dc03389fcb6ce987127af6e170f3e226ba8edf38..09a65b989c1abe2a37e81aad572961d3d5d984bf 100644 (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
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/bgpd.conf
new file mode 100644 (file)
index 0000000..339b4eb
--- /dev/null
@@ -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
+ !
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/staticd.conf
new file mode 100644 (file)
index 0000000..9d672d5
--- /dev/null
@@ -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
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r3/zebra.conf
new file mode 100644 (file)
index 0000000..a20cb76
--- /dev/null
@@ -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
+!
index 6a75fb82f4f470b8ae6b8fb1a30bee490b9ba078..0b8870cdcac1321665ce7e8736f2e920c865a467 100755 (executable)
@@ -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__":