]> git.proxmox.com Git - mirror_frr.git/commitdiff
tests: Add topotest for l3vpn over ipv6 peer
authorRyoga Saito <ryoga.saito@linecorp.com>
Wed, 16 Nov 2022 23:37:55 +0000 (08:37 +0900)
committerRyoga Saito <ryoga.saito@linecorp.com>
Thu, 17 Nov 2022 10:08:37 +0000 (19:08 +0900)
To check the effect of the next patch, I added topotest.

Signed-off-by: Ryoga Saito <ryoga.saito@linecorp.com>
19 files changed:
tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/staticd.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py [new file with mode: 0755]

diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/bgpd.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/staticd.conf
new file mode 100644 (file)
index 0000000..bcf5a04
--- /dev/null
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.1.254
+ipv6 route ::/0 2001:1::ffff
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c11/zebra.conf
new file mode 100644 (file)
index 0000000..0615cf9
--- /dev/null
@@ -0,0 +1,6 @@
+hostname c11
+!
+interface eth0
+ ip address 192.168.1.1/24
+ ipv6 address 2001:1::1/64
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/bgpd.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/staticd.conf
new file mode 100644 (file)
index 0000000..bcf5a04
--- /dev/null
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.1.254
+ipv6 route ::/0 2001:1::ffff
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c12/zebra.conf
new file mode 100644 (file)
index 0000000..18985aa
--- /dev/null
@@ -0,0 +1,6 @@
+hostname c12
+!
+interface eth0
+ ip address 192.168.1.1/24
+ ipv6 address 2001:1::1/64
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/bgpd.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/staticd.conf
new file mode 100644 (file)
index 0000000..608e600
--- /dev/null
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.2.254
+ipv6 route ::/0 2001:2::ffff
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c21/zebra.conf
new file mode 100644 (file)
index 0000000..b8b70ac
--- /dev/null
@@ -0,0 +1,6 @@
+hostname c21
+!
+interface eth0
+ ip address 192.168.2.1/24
+ ipv6 address 2001:2::1/64
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/bgpd.conf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/staticd.conf
new file mode 100644 (file)
index 0000000..277aae9
--- /dev/null
@@ -0,0 +1,5 @@
+
+!
+ip route 0.0.0.0/0 192.168.2.254
+ipv6 route ::/0 2001:2::ffff
+!
\ No newline at end of file
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/c22/zebra.conf
new file mode 100644 (file)
index 0000000..cc764cc
--- /dev/null
@@ -0,0 +1,9 @@
+hostname c22
+!
+interface eth0
+ ip address 192.168.2.1/24
+ ipv6 address 2001:2::1/64
+!
+ip route 0.0.0.0/0 192.168.2.254
+ipv6 route ::/0 2001:2::ffff
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/bgpd.conf
new file mode 100644 (file)
index 0000000..048702f
--- /dev/null
@@ -0,0 +1,52 @@
+frr defaults traditional
+!
+hostname r1
+password zebra
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+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
+ !
+ segment-routing srv6
+  locator default
+ !
+ address-family ipv4 vpn
+  neighbor 2001:db8::2 activate
+ exit-address-family
+ !
+!
+router bgp 65001 vrf vrf10
+ bgp router-id 192.0.2.1
+ !
+ 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.1
+ !
+ 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/r1/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/staticd.conf
new file mode 100644 (file)
index 0000000..662856f
--- /dev/null
@@ -0,0 +1,3 @@
+!
+ipv6 route 2001:db8:2:2::/64 2001:db8::2
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r1/zebra.conf
new file mode 100644 (file)
index 0000000..066748b
--- /dev/null
@@ -0,0 +1,29 @@
+log file zebra.log
+!
+hostname r1
+!
+interface lo
+ ipv6 address 2001:db8:1:1::1/128
+!
+interface eth0
+ ipv6 address 2001:db8::1/64
+!
+interface eth1 vrf vrf10
+ ip address 192.168.1.254/24
+!
+interface eth2 vrf vrf20
+ ip address 192.168.1.254/24
+!
+segment-routing
+ srv6
+  locators
+   locator default
+    prefix 2001:db8:1:1::/64
+  !
+ !
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/bgpd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/bgpd.conf
new file mode 100644 (file)
index 0000000..33b9103
--- /dev/null
@@ -0,0 +1,52 @@
+frr defaults traditional
+!
+hostname r2
+password zebra
+!
+log stdout notifications
+log monitor notifications
+log commands
+!
+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
+ !
+ segment-routing srv6
+  locator default
+ !
+ address-family ipv4 vpn
+  neighbor 2001:db8::1 activate
+ exit-address-family
+ !
+!
+router bgp 65002 vrf vrf10
+ bgp router-id 192.0.2.2
+ !
+ address-family ipv4 unicast
+  redistribute connected
+  sid vpn export 1
+  rd vpn export 65002:10
+  rt vpn both 0:10
+  import vpn
+  export vpn
+ exit-address-family
+ !
+!
+router bgp 65002 vrf vrf20
+ bgp router-id 192.0.2.2
+ !
+ address-family ipv4 unicast
+  redistribute connected
+  sid vpn export 2 
+  rd vpn export 65002:20
+  rt vpn both 0:20
+  import vpn
+  export vpn
+ exit-address-family
+ !
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/staticd.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/staticd.conf
new file mode 100644 (file)
index 0000000..a2f54b7
--- /dev/null
@@ -0,0 +1,3 @@
+!
+ipv6 route 2001:db8:1:1::/64 2001:db8::1
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/zebra.conf b/tests/topotests/bgp_srv6l3vpn_over_ipv6/r2/zebra.conf
new file mode 100644 (file)
index 0000000..dc03389
--- /dev/null
@@ -0,0 +1,29 @@
+log file zebra.log
+!
+hostname r2
+!
+interface lo
+ ipv6 address 2001:db8:2:2::1/128
+!
+interface eth0
+ ipv6 address 2001:db8::2/64
+!
+interface eth1 vrf vrf10
+ ip address 192.168.2.254/24
+!
+interface eth2 vrf vrf20
+ ip address 192.168.2.254/24
+!
+segment-routing
+ srv6
+  locators
+   locator default
+    prefix 2001:db8:2:2::/64
+  !
+ !
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py b/tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py
new file mode 100755 (executable)
index 0000000..6a75fb8
--- /dev/null
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+
+#
+# Part of NetDEF Topology Tests
+#
+# Copyright (c) 2018, LabN Consulting, L.L.C.
+# Authored by Lou Berger <lberger@labn.net>
+#
+# Permission to use, copy, modify, and/or distribute this software
+# for any purpose with or without fee is hereby granted, provided
+# that the above copyright notice and this permission notice appear
+# in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
+# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+# OF THIS SOFTWARE.
+#
+
+import os
+import re
+import sys
+import json
+import functools
+import pytest
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+# Import topogen and topotest helpers
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.topolog import logger
+from lib.common_config import required_linux_kernel_version
+
+pytestmark = [pytest.mark.bgpd]
+
+
+def build_topo(tgen):
+    tgen.add_router("r1")
+    tgen.add_router("r2")
+
+    tgen.add_router("c11")
+    tgen.add_router("c12")
+    tgen.add_router("c21")
+    tgen.add_router("c22")
+
+    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["r2"], tgen.gears["c21"], "eth1", "eth0")
+    tgen.add_link(tgen.gears["r2"], tgen.gears["c22"], "eth2", "eth0")
+
+
+def setup_module(mod):
+    result = required_linux_kernel_version("5.15")
+    if result is not True:
+        pytest.skip("Kernel requirements are not met")
+
+    tgen = Topogen(build_topo, mod.__name__)
+    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)))
+
+    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["r2"].run("sysctl net.vrf.strict_mode=1")
+    tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
+    tgen.gears["r2"].run("ip link set vrf10 up")
+    tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
+    tgen.gears["r2"].run("ip link set vrf20 up")
+    tgen.gears["r2"].run("ip link set eth1 master vrf10")
+    tgen.gears["r2"].run("ip link set eth2 master vrf20")
+
+    tgen.start_router()
+
+
+def teardown_module(mod):
+    tgen = get_topogen()
+    tgen.stop_topology()
+
+
+def check_ping4(name, dest_addr, expected):
+    def _check(name, dest_addr, match):
+        tgen = get_topogen()
+        output = tgen.gears[name].run("ping {} -c 1 -w 1".format(dest_addr))
+        logger.info(output)
+        if match not in output:
+            return "ping fail"
+
+    match = ", {} packet loss".format("0%" if expected else "100%")
+    logger.info("[+] check {} {} {}".format(name, dest_addr, match))
+    tgen = get_topogen()
+    func = functools.partial(_check, name, dest_addr, match)
+    success, result = topotest.run_and_expect(func, None, count=10, wait=1)
+    assert result is None, "Failed"
+
+
+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("c12", "192.168.2.1", True)
+    check_ping4("c21", "192.168.1.1", True)
+    check_ping4("c22", "192.168.1.1", True)
+
+
+if __name__ == "__main__":
+    args = ["-s"] + sys.argv[1:]
+    sys.exit(pytest.main(args))