summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss White <russ@riw.us>2025-02-04 11:42:42 -0500
committerGitHub <noreply@github.com>2025-02-04 11:42:42 -0500
commitd57353db2bcba1b2d1f617e6e3c4017cd5684991 (patch)
tree58b59ff320d0c374dfd451f6f54b24836cdd1e04
parente6228f7880037a0b4e17789180481a7d36b296f7 (diff)
parent9860583e0abcfbc986a854d2170190a1df1db6b2 (diff)
Merge pull request #17918 from lsang6WIND/bgp_evpn_route_map
Add bgpevpn route type-2 route map filter tests
-rw-r--r--tests/topotests/bgp_evpn_route_map_match/r1/frr.conf9
-rw-r--r--tests/topotests/bgp_evpn_route_map_match/r2/frr.conf1
-rw-r--r--tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py102
3 files changed, 99 insertions, 13 deletions
diff --git a/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf b/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf
index 4347052c5e..2390733cc8 100644
--- a/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf
+++ b/tests/topotests/bgp_evpn_route_map_match/r1/frr.conf
@@ -24,19 +24,16 @@ router bgp 65001
!
address-family l2vpn evpn
neighbor 192.168.1.2 activate
- neighbor 192.168.1.2 route-map r2 out
+ neighbor 192.168.1.2 route-map rt5 out
advertise-all-vni
advertise ipv4 unicast
exit-address-family
!
-route-map r2 deny 10
- match evpn route-type macip
-!
-route-map r2 deny 20
+route-map rt5 deny 20
match ip address prefix-list pl
match evpn route-type prefix
!
-route-map r2 permit 30
+route-map rt5 permit 30
!
ip prefix-list pl seq 5 permit 192.168.1.0/24
ip prefix-list pl seq 10 permit 10.10.10.1/32
diff --git a/tests/topotests/bgp_evpn_route_map_match/r2/frr.conf b/tests/topotests/bgp_evpn_route_map_match/r2/frr.conf
index 9ed298d8fe..1c91a3e254 100644
--- a/tests/topotests/bgp_evpn_route_map_match/r2/frr.conf
+++ b/tests/topotests/bgp_evpn_route_map_match/r2/frr.conf
@@ -7,6 +7,7 @@ int lo
int r2-eth0
ip address 192.168.1.2/24
!
+vni 10
router bgp 65002
no bgp ebgp-requires-policy
neighbor 192.168.1.1 remote-as external
diff --git a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
index 36c79d6b2b..925ae1fce8 100644
--- a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
+++ b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
@@ -23,6 +23,7 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, get_topogen
+from lib.topolog import logger
def setup_module(mod):
@@ -63,7 +64,7 @@ def teardown_module(mod):
tgen.stop_topology()
-def test_bgp_evpn_route_map_match_route_type():
+def test_bgp_evpn_route_map_match_route_type5():
tgen = get_topogen()
if tgen.routers_have_failure():
@@ -84,16 +85,12 @@ def test_bgp_evpn_route_map_match_route_type():
"valid": True,
}
},
- "10.10.10.2:2": {
- "[3]:[0]:[32]:[10.10.10.2]": {
- "valid": True,
- }
- },
},
- "totalPrefixCounter": 2,
+ "totalPrefixCounter": 1,
}
return topotest.json_cmp(output, expected)
+ logger.info("Check route type-5 filtering")
test_func = functools.partial(
_bgp_converge,
)
@@ -101,6 +98,97 @@ def test_bgp_evpn_route_map_match_route_type():
assert result is None, "Filtered EVPN routes should not be advertised"
+def test_bgp_evpn_route_map_match_route_type2():
+ tgen = get_topogen()
+
+ # Change to L2VNI
+ for machine in [tgen.gears["r1"], tgen.gears["r2"]]:
+ machine.vtysh_cmd("configure terminal\nno vni 10")
+
+ def _check_l2vni():
+ for machine in [tgen.gears["r1"], tgen.gears["r2"]]:
+ output = json.loads(machine.vtysh_cmd("show evpn vni json"))
+
+ expected = {"10": {"vni": 10, "type": "L2"}}
+ return topotest.json_cmp(output, expected)
+
+ logger.info("Check L2VNI setup")
+ test_func = functools.partial(_check_l2vni)
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assert result is None, "L2VNI setup failed."
+
+ c2_mac = (
+ tgen.gears["c2"]
+ .cmd("ip link show c2-eth0 | awk '/link\/ether/ {print $2}'")
+ .rstrip()
+ )
+ tgen.gears["r1"].vtysh_cmd(
+ "\n".join(
+ [
+ "configure",
+ "route-map rt2 deny 30",
+ "match mac address %s" % c2_mac,
+ "exit",
+ "router bgp 65001",
+ "address-family l2vpn evpn",
+ "neighbor 192.168.1.2 route-map rt2 in",
+ ]
+ )
+ )
+
+ def _check_filter_mac():
+ output = json.loads(
+ tgen.gears["r1"].vtysh_cmd(
+ "show bgp l2vpn evpn neighbors 192.168.1.2 advertised-routes json"
+ )
+ )
+
+ if (
+ output["advertisedRoutes"]
+ .get("10.10.10.2:2", {})
+ .get("[2]:[0]:[48]:[%s]" % c2_mac)
+ ):
+ return False
+
+ return True
+
+ logger.info("check mac filter in, on c2 interface: %s" % c2_mac)
+ test_func = functools.partial(_check_filter_mac)
+ _, result = topotest.run_and_expect(test_func, True, count=60, wait=1)
+ assert result is True, "%s is not filtered" % c2_mac
+
+ tgen.gears["r1"].vtysh_cmd(
+ "\n".join(
+ [
+ "configure",
+ "route-map rt2 deny 30",
+ "no match mac address %s" % c2_mac,
+ "match evpn route-type macip" "exit",
+ "router bgp 65001",
+ "address-family l2vpn evpn",
+ "neighbor 192.168.1.2 route-map rt2 out",
+ ]
+ )
+ )
+
+ def _check_filter_type2():
+ output = json.loads(
+ tgen.gears["r1"].vtysh_cmd(
+ "show bgp l2vpn evpn neighbors 192.168.1.2 advertised-routes json"
+ )
+ )
+
+ if output["totalPrefixCounter"] == 0:
+ return True
+
+ return False
+
+ logger.info("check route type-2 filter out")
+ test_func = functools.partial(_check_filter_type2)
+ _, result = topotest.run_and_expect(test_func, True, count=60, wait=1)
+ assert result is True, "EVPN routes type-2 are not filtered."
+
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))