-
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 #15735 from opensourcerouting/feature/maximum-pref…
…ix_evpn bgpd: Allow using maximum-prefix for EVPN
- Loading branch information
Showing
7 changed files
with
164 additions
and
0 deletions.
There are no files selected for viewing
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
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 <[email protected]> | ||
# | ||
|
||
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)) |