-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #14599 from opensourcerouting/fix/issue_14419
tests: Check if evpn route-map match by route type works
- Loading branch information
Showing
6 changed files
with
172 additions
and
0 deletions.
There are no files selected for viewing
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
! | ||
int c1-eth0 | ||
ip address 192.168.0.1/24 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
! | ||
int c2-eth0 | ||
ip address 192.168.0.2/24 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
! | ||
!debug bgp neighbor | ||
! | ||
int lo | ||
ip address 10.10.10.1/32 | ||
! | ||
int r1-eth1 | ||
ip address 192.168.1.1/24 | ||
! | ||
router bgp 65001 | ||
no bgp ebgp-requires-policy | ||
neighbor 192.168.1.2 remote-as external | ||
neighbor 192.168.1.2 timers 1 3 | ||
neighbor 192.168.1.2 timers connect 1 | ||
! | ||
address-family ipv4 unicast | ||
redistribute connected | ||
exit-address-family | ||
! | ||
address-family l2vpn evpn | ||
neighbor 192.168.1.2 activate | ||
neighbor 192.168.1.2 route-map r2 out | ||
advertise-all-vni | ||
exit-address-family | ||
! | ||
route-map r2 deny 10 | ||
match evpn route-type macip | ||
! | ||
route-map r2 permit 20 | ||
! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
! | ||
!debug bgp neighbor | ||
! | ||
int lo | ||
ip address 10.10.10.2/32 | ||
! | ||
int r2-eth0 | ||
ip address 192.168.1.2/24 | ||
! | ||
router bgp 65002 | ||
no bgp ebgp-requires-policy | ||
neighbor 192.168.1.1 remote-as external | ||
neighbor 192.168.1.1 timers 1 3 | ||
neighbor 192.168.1.1 timers connect 1 | ||
! | ||
address-family ipv4 unicast | ||
redistribute connected | ||
exit-address-family | ||
! | ||
address-family l2vpn evpn | ||
neighbor 192.168.1.1 activate | ||
advertise-all-vni | ||
exit-address-family | ||
! |
110 changes: 110 additions & 0 deletions
110
tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
#!/usr/bin/env python | ||
# SPDX-License-Identifier: ISC | ||
|
||
# Copyright (c) 2023 by | ||
# Donatas Abraitis <[email protected]> | ||
# | ||
|
||
""" | ||
Test if route-map match by EVPN route-type works. | ||
""" | ||
|
||
import os | ||
import re | ||
import sys | ||
import json | ||
import pytest | ||
import functools | ||
|
||
pytestmark = pytest.mark.bgpd | ||
|
||
CWD = os.path.dirname(os.path.realpath(__file__)) | ||
sys.path.append(os.path.join(CWD, "../")) | ||
|
||
# pylint: disable=C0413 | ||
from lib import topotest | ||
from lib.topogen import Topogen, TopoRouter, get_topogen | ||
from lib.common_config import step | ||
|
||
pytestmark = [pytest.mark.bgpd] | ||
|
||
|
||
def setup_module(mod): | ||
topodef = {"s1": ("c1", "r1"), "s2": ("r1", "r2"), "s3": ("r2", "c2")} | ||
tgen = Topogen(topodef, mod.__name__) | ||
tgen.start_topology() | ||
|
||
tgen.net["r1"].cmd( | ||
""" | ||
ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.1 nolearning | ||
ip link add name br10 type bridge | ||
ip link set dev vxlan10 master br10 | ||
ip link set dev r1-eth0 master br10 | ||
ip link set up dev br10 | ||
ip link set up dev vxlan10""" | ||
) | ||
|
||
tgen.net["r2"].cmd( | ||
""" | ||
ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.2 nolearning | ||
ip link add name br10 type bridge | ||
ip link set dev vxlan10 master br10 | ||
ip link set dev r2-eth1 master br10 | ||
ip link set up dev br10 | ||
ip link set up dev vxlan10""" | ||
) | ||
|
||
router_list = tgen.routers() | ||
|
||
for _, (rname, router) in enumerate(router_list.items(), 1): | ||
router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname))) | ||
|
||
tgen.start_router() | ||
|
||
|
||
def teardown_module(mod): | ||
tgen = get_topogen() | ||
tgen.stop_topology() | ||
|
||
|
||
def test_bgp_evpn_route_map_match_route_type(): | ||
tgen = get_topogen() | ||
|
||
if tgen.routers_have_failure(): | ||
pytest.skip(tgen.errors) | ||
|
||
r1 = tgen.gears["r1"] | ||
|
||
def _bgp_converge(): | ||
output = json.loads( | ||
r1.vtysh_cmd( | ||
"show bgp l2vpn evpn neighbor 192.168.1.2 advertised-routes json" | ||
) | ||
) | ||
expected = { | ||
"advertisedRoutes": { | ||
"10.10.10.1:2": { | ||
"[3]:[0]:[32]:[10.10.10.1]": { | ||
"valid": True, | ||
} | ||
}, | ||
"10.10.10.2:2": { | ||
"[3]:[0]:[32]:[10.10.10.2]": { | ||
"valid": True, | ||
} | ||
}, | ||
}, | ||
"totalPrefixCounter": 2, | ||
} | ||
return topotest.json_cmp(output, expected) | ||
|
||
test_func = functools.partial( | ||
_bgp_converge, | ||
) | ||
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1) | ||
assert result is None, "MAC-IP EVPN routes should not be advertised" | ||
|
||
|
||
if __name__ == "__main__": | ||
args = ["-s"] + sys.argv[1:] | ||
sys.exit(pytest.main(args)) |