-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests: Check if maximum-prefix works for EVPN stuff also
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org> (cherry picked from commit 6b90e61)
- Loading branch information
1 parent
b91ecd1
commit e73e43c
Showing
6 changed files
with
155 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 | ||
!debug route-map detail | ||
! | ||
vni 10 | ||
! | ||
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 | ||
no bgp network import-check | ||
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 | ||
network 10.10.10.10/32 | ||
exit-address-family | ||
! | ||
address-family l2vpn evpn | ||
neighbor 192.168.1.2 activate | ||
advertise-all-vni | ||
advertise ipv4 unicast | ||
exit-address-family | ||
! |
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,25 @@ | ||
! | ||
!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 | ||
neighbor 192.168.1.1 maximum-prefix 2 | ||
advertise-all-vni | ||
exit-address-family | ||
! |
92 changes: 92 additions & 0 deletions
92
tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.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,92 @@ | ||
#!/usr/bin/env python | ||
# SPDX-License-Identifier: ISC | ||
|
||
# Copyright (c) 2024 by | ||
# Donatas Abraitis <donatas@opensourcerouting.org> | ||
# | ||
|
||
import os | ||
import re | ||
import sys | ||
import json | ||
import pytest | ||
import functools | ||
|
||
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 | ||
|
||
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_maximum_prefix(): | ||
tgen = get_topogen() | ||
|
||
if tgen.routers_have_failure(): | ||
pytest.skip(tgen.errors) | ||
|
||
r2 = tgen.gears["r2"] | ||
|
||
def _bgp_converge(): | ||
output = json.loads(r2.vtysh_cmd("show bgp l2vpn evpn summary failed json")) | ||
expected = { | ||
"peers": { | ||
"192.168.1.1": { | ||
"lastNotificationReason": "Cease/Maximum Number of Prefixes Reached", | ||
"lastResetDueTo": "BGP Notification send", | ||
} | ||
}, | ||
} | ||
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, "Can't limit maximum-prefixes for EVPN routes" | ||
|
||
|
||
if __name__ == "__main__": | ||
args = ["-s"] + sys.argv[1:] | ||
sys.exit(pytest.main(args)) |