-
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
disable-addpath-rx
knob works
Signed-off-by: Donatas Abraitis <donatas.abraitis@gmail.com>
- Loading branch information
Showing
10 changed files
with
204 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,8 @@ | ||
! | ||
router bgp 65001 | ||
no bgp ebgp-requires-policy | ||
neighbor 192.168.1.2 remote-as external | ||
address-family ipv4 unicast | ||
neighbor 192.168.1.2 disable-addpath-rx | ||
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,4 @@ | ||
! | ||
int r1-eth0 | ||
ip address 192.168.1.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,9 @@ | ||
router bgp 65002 | ||
no bgp ebgp-requires-policy | ||
neighbor 192.168.1.1 remote-as external | ||
neighbor 192.168.2.3 remote-as external | ||
neighbor 192.168.2.4 remote-as external | ||
address-family ipv4 unicast | ||
neighbor 192.168.1.1 addpath-tx-all-paths | ||
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,7 @@ | ||
! | ||
int r2-eth0 | ||
ip address 192.168.1.2/24 | ||
! | ||
int r2-eth1 | ||
ip address 192.168.2.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,7 @@ | ||
router bgp 65003 | ||
no bgp ebgp-requires-policy | ||
neighbor 192.168.2.2 remote-as external | ||
address-family ipv4 unicast | ||
redistribute connected | ||
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,7 @@ | ||
! | ||
int lo | ||
ip address 172.16.16.254/32 | ||
! | ||
int r3-eth0 | ||
ip address 192.168.2.3/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,7 @@ | ||
router bgp 65004 | ||
no bgp ebgp-requires-policy | ||
neighbor 192.168.2.2 remote-as external | ||
address-family ipv4 unicast | ||
redistribute connected | ||
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,7 @@ | ||
! | ||
int lo | ||
ip address 172.16.16.254/32 | ||
! | ||
int r4-eth0 | ||
ip address 192.168.2.4/24 | ||
! |
148 changes: 148 additions & 0 deletions
148
tests/topotests/bgp_disable_addpath_rx/test_disable_addpath_rx.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,148 @@ | ||
#!/usr/bin/env python | ||
|
||
# Copyright (c) 2021 by | ||
# Donatas Abraitis <donatas.abraitis@gmail.com> | ||
# | ||
# Permission to use, copy, modify, and/or distribute this software | ||
# for any purpose with or without fee is hereby granted, provided | ||
# that the above copyright notice and this permission notice appear | ||
# in all copies. | ||
# | ||
# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES | ||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR | ||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY | ||
# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, | ||
# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS | ||
# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE | ||
# OF THIS SOFTWARE. | ||
# | ||
|
||
""" | ||
Test if AddPath RX direction is not negotiated via AddPath capability. | ||
""" | ||
|
||
import os | ||
import sys | ||
import json | ||
import time | ||
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 | ||
from lib.topolog import logger | ||
from mininet.topo import Topo | ||
from lib.common_config import step | ||
|
||
pytestmark = [pytest.mark.bgpd] | ||
|
||
|
||
class TemplateTopo(Topo): | ||
def build(self, *_args, **_opts): | ||
tgen = get_topogen(self) | ||
|
||
for routern in range(1, 5): | ||
tgen.add_router("r{}".format(routern)) | ||
|
||
switch = tgen.add_switch("s1") | ||
switch.add_link(tgen.gears["r1"]) | ||
switch.add_link(tgen.gears["r2"]) | ||
|
||
switch = tgen.add_switch("s2") | ||
switch.add_link(tgen.gears["r2"]) | ||
switch.add_link(tgen.gears["r3"]) | ||
switch.add_link(tgen.gears["r4"]) | ||
|
||
|
||
def setup_module(mod): | ||
tgen = Topogen(TemplateTopo, mod.__name__) | ||
tgen.start_topology() | ||
|
||
router_list = tgen.routers() | ||
|
||
for i, (rname, router) in enumerate(router_list.items(), 1): | ||
router.load_config( | ||
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname)) | ||
) | ||
router.load_config( | ||
TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname)) | ||
) | ||
|
||
tgen.start_router() | ||
|
||
|
||
def teardown_module(mod): | ||
tgen = get_topogen() | ||
tgen.stop_topology() | ||
|
||
|
||
def test_bgp_disable_addpath_rx(): | ||
tgen = get_topogen() | ||
|
||
if tgen.routers_have_failure(): | ||
pytest.skip(tgen.errors) | ||
|
||
r1 = tgen.gears["r1"] | ||
r2 = tgen.gears["r2"] | ||
|
||
step( | ||
"Check if r2 advertised only 2 paths to r1 (despite addpath-tx-all-paths enabled on r2)." | ||
) | ||
|
||
def check_bgp_advertised_routes(router): | ||
output = json.loads( | ||
router.vtysh_cmd( | ||
"show bgp ipv4 unicast neighbor 192.168.1.1 advertised-routes json" | ||
) | ||
) | ||
expected = { | ||
"advertisedRoutes": { | ||
"172.16.16.254/32": { | ||
"addrPrefix": "172.16.16.254", | ||
"prefixLen": 32, | ||
}, | ||
"192.168.2.0/24": { | ||
"addrPrefix": "192.168.2.0", | ||
"prefixLen": 24, | ||
}, | ||
}, | ||
"totalPrefixCounter": 2, | ||
} | ||
|
||
return topotest.json_cmp(output, expected) | ||
|
||
test_func = functools.partial(check_bgp_advertised_routes, r2) | ||
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) | ||
assert result is None, "AddPath TX not working." | ||
|
||
step("Check if AddPath RX is disabled on r1 and we receive only 2 paths.") | ||
|
||
def check_bgp_disabled_addpath_rx(router): | ||
output = json.loads(router.vtysh_cmd("show bgp neighbor 192.168.1.2 json")) | ||
expected = { | ||
"192.168.1.2": { | ||
"bgpState": "Established", | ||
"neighborCapabilities": { | ||
"addPath": { | ||
"ipv4Unicast": {"txReceived": True, "rxReceived": True} | ||
}, | ||
}, | ||
"addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}}, | ||
} | ||
} | ||
|
||
return topotest.json_cmp(output, expected) | ||
|
||
test_func = functools.partial(check_bgp_disabled_addpath_rx, r1) | ||
success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) | ||
assert result is None, "AddPath RX advertised, but should not." | ||
|
||
|
||
if __name__ == "__main__": | ||
args = ["-s"] + sys.argv[1:] | ||
sys.exit(pytest.main(args)) |