-
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.
tests: Check if underlay IGP metric is reflected into BGP after cost …
…changes Signed-off-by: Donatas Abraitis <[email protected]>
- Loading branch information
Showing
7 changed files
with
288 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,13 @@ | ||
! | ||
int r1-eth0 | ||
ip address 10.0.0.1/24 | ||
! | ||
int r1-eth1 | ||
ip address 10.0.1.1/24 | ||
! | ||
router bgp 65001 | ||
no bgp ebgp-requires-policy | ||
no bgp network import-check | ||
neighbor 10.0.0.2 remote-as external | ||
neighbor 10.0.1.2 remote-as external | ||
! |
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,36 @@ | ||
! | ||
int r2-eth0 | ||
ip address 10.0.0.2/24 | ||
ip router isis n2 | ||
isis circuit-type level-2-only | ||
isis fast-reroute lfa level-2 | ||
isis network point-to-point | ||
isis hello-interval 1 | ||
isis hello-multiplier 10 | ||
! | ||
int r2-eth1 | ||
ip address 10.0.2.1/24 | ||
ip router isis n2 | ||
isis circuit-type level-2-only | ||
isis fast-reroute lfa level-2 | ||
isis network point-to-point | ||
isis hello-interval 1 | ||
isis hello-multiplier 10 | ||
! | ||
router bgp 65002 | ||
no bgp ebgp-requires-policy | ||
neighbor 10.0.0.1 remote-as external | ||
neighbor 10.0.2.2 remote-as internal | ||
address-family ipv4 unicast | ||
neighbor 10.0.0.1 route-map igp out | ||
exit-address-family | ||
! | ||
router isis n2 | ||
is-type level-2-only | ||
net 49.0001.0000.0000.0002.00 | ||
lsp-mtu 1440 | ||
exit | ||
! | ||
route-map igp permit 10 | ||
set metric igp | ||
exit |
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,38 @@ | ||
! | ||
int r3-eth0 | ||
ip address 10.0.1.2/24 | ||
ip router isis n3 | ||
isis circuit-type level-2-only | ||
isis fast-reroute lfa level-2 | ||
isis network point-to-point | ||
isis hello-interval 1 | ||
isis hello-multiplier 10 | ||
! | ||
int r3-eth1 | ||
ip address 10.0.3.1/24 | ||
ip router isis n3 | ||
isis circuit-type level-2-only | ||
isis fast-reroute lfa level-2 | ||
isis metric level-1 10 | ||
isis metric level-2 100 | ||
isis network point-to-point | ||
isis hello-interval 1 | ||
isis hello-multiplier 10 | ||
! | ||
router bgp 65002 | ||
no bgp ebgp-requires-policy | ||
neighbor 10.0.1.1 remote-as external | ||
neighbor 10.0.3.2 remote-as internal | ||
address-family ipv4 unicast | ||
neighbor 10.0.1.1 route-map igp out | ||
exit-address-family | ||
! | ||
router isis n3 | ||
is-type level-2-only | ||
net 49.0001.0000.0000.0003.00 | ||
lsp-mtu 1440 | ||
exit | ||
! | ||
route-map igp permit 10 | ||
set metric igp | ||
exit |
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,41 @@ | ||
! | ||
int r4-eth0 | ||
ip address 10.0.2.2/24 | ||
ip router isis n4 | ||
isis circuit-type level-2-only | ||
isis fast-reroute lfa level-2 | ||
isis network point-to-point | ||
isis hello-interval 1 | ||
isis hello-multiplier 10 | ||
! | ||
int r4-eth1 | ||
ip address 10.0.3.2/24 | ||
ip router isis n4 | ||
isis circuit-type level-2-only | ||
isis fast-reroute lfa level-2 | ||
isis metric level-1 10 | ||
isis metric level-2 100 | ||
isis network point-to-point | ||
isis hello-interval 1 | ||
isis hello-multiplier 10 | ||
! | ||
int r4-eth2 | ||
ip address 10.0.4.1/24 | ||
ip router isis n4 | ||
isis circuit-type level-2-only | ||
isis fast-reroute lfa level-2 | ||
isis network point-to-point | ||
isis hello-interval 1 | ||
isis hello-multiplier 10 | ||
! | ||
router bgp 65002 | ||
no bgp ebgp-requires-policy | ||
neighbor 10.0.2.1 remote-as internal | ||
neighbor 10.0.3.1 remote-as internal | ||
neighbor 10.0.4.2 remote-as external | ||
! | ||
router isis n4 | ||
is-type level-2-only | ||
net 49.0001.0000.0000.0004.00 | ||
lsp-mtu 1440 | ||
exit |
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,14 @@ | ||
! | ||
int r5-eth0 | ||
ip address 10.0.4.2/24 | ||
! | ||
router bgp 65005 | ||
no bgp ebgp-requires-policy | ||
no bgp network import-check | ||
neighbor 10.0.4.1 remote-as external | ||
neighbor 10.0.4.1 timers 1 3 | ||
neighbor 10.0.4.1 timers connect 1 | ||
address-family ipv4 unicast | ||
network 10.5.5.5/32 | ||
exit-address-family | ||
! |
146 changes: 146 additions & 0 deletions
146
tests/topotests/bgp_set_metric_igp/test_bgp_set_metric_igp.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,146 @@ | ||
#!/usr/bin/env python | ||
# SPDX-License-Identifier: ISC | ||
|
||
# Copyright (c) 2024 by | ||
# Donatas Abraitis <[email protected]> | ||
# | ||
|
||
import os | ||
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, get_topogen | ||
|
||
pytestmark = [pytest.mark.bgpd] | ||
|
||
|
||
def setup_module(mod): | ||
topodef = { | ||
"s1": ("r1", "r2"), | ||
"s2": ("r1", "r3"), | ||
"s3": ("r2", "r4"), | ||
"s4": ("r3", "r4"), | ||
"s5": ("r4", "r5"), | ||
} | ||
tgen = Topogen(topodef, mod.__name__) | ||
tgen.start_topology() | ||
|
||
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_set_metric_igp(): | ||
tgen = get_topogen() | ||
|
||
if tgen.routers_have_failure(): | ||
pytest.skip(tgen.errors) | ||
|
||
r1 = tgen.gears["r1"] | ||
r2 = tgen.gears["r2"] | ||
|
||
def _bgp_converge(): | ||
output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast json")) | ||
expected = { | ||
"routes": { | ||
"10.5.5.5/32": [ | ||
{ | ||
"valid": True, | ||
"bestpath": True, | ||
"selectionReason": "MED", | ||
"metric": 20, | ||
"nexthops": [ | ||
{ | ||
"ip": "10.0.0.2", | ||
"hostname": "r2", | ||
} | ||
], | ||
}, | ||
{ | ||
"valid": True, | ||
"bestpath": None, | ||
"metric": 110, | ||
"nexthops": [ | ||
{ | ||
"ip": "10.0.1.2", | ||
"hostname": "r3", | ||
} | ||
], | ||
}, | ||
] | ||
} | ||
} | ||
return topotest.json_cmp(output, expected) | ||
|
||
test_func = functools.partial( | ||
_bgp_converge, | ||
) | ||
_, result = topotest.run_and_expect(test_func, None, count=120, wait=5) | ||
assert result is None, "10.5.5.5/32 best path is not via r2 (MED == 20)" | ||
|
||
r2.vtysh_cmd( | ||
""" | ||
configure terminal | ||
interface r2-eth1 | ||
isis metric level-2 6000 | ||
""" | ||
) | ||
|
||
def _bgp_converge_after_isis_metric_changes(): | ||
output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast json")) | ||
expected = { | ||
"routes": { | ||
"10.5.5.5/32": [ | ||
{ | ||
"valid": True, | ||
"bestpath": None, | ||
"metric": 6010, | ||
"nexthops": [ | ||
{ | ||
"ip": "10.0.0.2", | ||
"hostname": "r2", | ||
} | ||
], | ||
}, | ||
{ | ||
"valid": True, | ||
"bestpath": True, | ||
"selectionReason": "MED", | ||
"metric": 110, | ||
"nexthops": [ | ||
{ | ||
"ip": "10.0.1.2", | ||
"hostname": "r3", | ||
} | ||
], | ||
}, | ||
] | ||
} | ||
} | ||
return topotest.json_cmp(output, expected) | ||
|
||
test_func = functools.partial( | ||
_bgp_converge_after_isis_metric_changes, | ||
) | ||
_, result = topotest.run_and_expect(test_func, None, count=120, wait=5) | ||
assert result is None, "10.5.5.5/32 best path is not via r3 (MED == 110)" | ||
|
||
|
||
if __name__ == "__main__": | ||
args = ["-s"] + sys.argv[1:] | ||
sys.exit(pytest.main(args)) |