]> git.proxmox.com Git - mirror_frr.git/blame - tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py
Merge pull request #12798 from donaldsharp/rib_match_multicast
[mirror_frr.git] / tests / topotests / bgp_srv6l3vpn_over_ipv6 / test_bgp_srv6l3vpn_over_ipv6.py
CommitLineData
3db8aa87 1#!/usr/bin/env python
acddc0ed 2# SPDX-License-Identifier: ISC
3db8aa87
RS
3
4#
5# Part of NetDEF Topology Tests
6#
7# Copyright (c) 2018, LabN Consulting, L.L.C.
8# Authored by Lou Berger <lberger@labn.net>
9#
3db8aa87
RS
10
11import os
12import re
13import sys
14import json
15import functools
16import pytest
17
18CWD = os.path.dirname(os.path.realpath(__file__))
19sys.path.append(os.path.join(CWD, "../"))
20
21# pylint: disable=C0413
22# Import topogen and topotest helpers
23from lib import topotest
24from lib.topogen import Topogen, TopoRouter, get_topogen
25from lib.topolog import logger
26from lib.common_config import required_linux_kernel_version
27
28pytestmark = [pytest.mark.bgpd]
29
30
31def build_topo(tgen):
32 tgen.add_router("r1")
33 tgen.add_router("r2")
03cc2022 34 tgen.add_router("r3")
3db8aa87
RS
35
36 tgen.add_router("c11")
37 tgen.add_router("c12")
38 tgen.add_router("c21")
39 tgen.add_router("c22")
03cc2022
RS
40 tgen.add_router("c31")
41 tgen.add_router("c32")
3db8aa87
RS
42
43 tgen.add_link(tgen.gears["r1"], tgen.gears["r2"], "eth0", "eth0")
03cc2022
RS
44 tgen.add_link(tgen.gears["r1"], tgen.gears["r3"], "eth1", "eth0")
45 tgen.add_link(tgen.gears["r1"], tgen.gears["c11"], "eth2", "eth0")
46 tgen.add_link(tgen.gears["r1"], tgen.gears["c12"], "eth3", "eth0")
3db8aa87
RS
47 tgen.add_link(tgen.gears["r2"], tgen.gears["c21"], "eth1", "eth0")
48 tgen.add_link(tgen.gears["r2"], tgen.gears["c22"], "eth2", "eth0")
03cc2022
RS
49 tgen.add_link(tgen.gears["r3"], tgen.gears["c31"], "eth1", "eth0")
50 tgen.add_link(tgen.gears["r3"], tgen.gears["c32"], "eth2", "eth0")
3db8aa87
RS
51
52
53def setup_module(mod):
54 result = required_linux_kernel_version("5.15")
55 if result is not True:
56 pytest.skip("Kernel requirements are not met")
57
58 tgen = Topogen(build_topo, mod.__name__)
59 tgen.start_topology()
60
61 for rname, router in tgen.routers().items():
03cc2022
RS
62 router.load_config(
63 TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
64 )
65 router.load_config(
66 TopoRouter.RD_STATIC, os.path.join(CWD, "{}/staticd.conf".format(rname))
67 )
68 router.load_config(
69 TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
70 )
3db8aa87
RS
71
72 tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
73 tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
74 tgen.gears["r1"].run("ip link set vrf10 up")
75 tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
76 tgen.gears["r1"].run("ip link set vrf20 up")
03cc2022
RS
77 tgen.gears["r1"].run("ip link set eth2 master vrf10")
78 tgen.gears["r1"].run("ip link set eth3 master vrf20")
3db8aa87
RS
79
80 tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
81 tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
82 tgen.gears["r2"].run("ip link set vrf10 up")
83 tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
84 tgen.gears["r2"].run("ip link set vrf20 up")
85 tgen.gears["r2"].run("ip link set eth1 master vrf10")
86 tgen.gears["r2"].run("ip link set eth2 master vrf20")
87
03cc2022
RS
88 tgen.gears["r3"].run("sysctl net.vrf.strict_mode=1")
89 tgen.gears["r3"].run("ip link add vrf10 type vrf table 10")
90 tgen.gears["r3"].run("ip link set vrf10 up")
91 tgen.gears["r3"].run("ip link add vrf20 type vrf table 20")
92 tgen.gears["r3"].run("ip link set vrf20 up")
93 tgen.gears["r3"].run("ip link set eth1 master vrf10")
94 tgen.gears["r3"].run("ip link set eth2 master vrf20")
95
3db8aa87
RS
96 tgen.start_router()
97
98
99def teardown_module(mod):
100 tgen = get_topogen()
101 tgen.stop_topology()
102
103
104def check_ping4(name, dest_addr, expected):
105 def _check(name, dest_addr, match):
106 tgen = get_topogen()
107 output = tgen.gears[name].run("ping {} -c 1 -w 1".format(dest_addr))
108 logger.info(output)
109 if match not in output:
110 return "ping fail"
111
112 match = ", {} packet loss".format("0%" if expected else "100%")
113 logger.info("[+] check {} {} {}".format(name, dest_addr, match))
114 tgen = get_topogen()
115 func = functools.partial(_check, name, dest_addr, match)
116 success, result = topotest.run_and_expect(func, None, count=10, wait=1)
117 assert result is None, "Failed"
118
119
120def test_ping():
121 tgen = get_topogen()
03cc2022 122
3db8aa87 123 check_ping4("c11", "192.168.2.1", True)
03cc2022 124 check_ping4("c11", "192.168.3.1", True)
3db8aa87 125 check_ping4("c12", "192.168.2.1", True)
03cc2022
RS
126 check_ping4("c12", "192.168.3.1", True)
127 check_ping4("c21", "192.168.3.1", True)
128 check_ping4("c22", "192.168.3.1", True)
3db8aa87
RS
129
130
131if __name__ == "__main__":
132 args = ["-s"] + sys.argv[1:]
133 sys.exit(pytest.main(args))