From 4156757e4089debb119a590e6dc65d5233f14ed7 Mon Sep 17 00:00:00 2001 From: Jafar Al-Gharaibeh Date: Mon, 24 Feb 2025 17:17:07 -0600 Subject: [PATCH] Revert "tests: add bgp_l3vpn_hidden topotest" This reverts commit bb79a6562ffd520329246920597f83ca32e9a468. Signed-off-by: Jafar Al-Gharaibeh --- tests/topotests/bgp_l3vpn_hidden/__init__.py | 0 tests/topotests/bgp_l3vpn_hidden/ce1/frr.conf | 52 ---- .../ce1/show_bgp_ipv4_unicast.json | 24 -- .../ce1/show_bgp_ipv4_unicast_step1.json | 1 - .../ce1/show_bgp_ipv6_unicast.json | 25 -- .../ce1/show_bgp_ipv6_unicast_step1.json | 1 - .../ce1/show_bgp_summary.json | 24 -- tests/topotests/bgp_l3vpn_hidden/pe1/frr.conf | 107 ------- .../pe1/show_bgp_ipv4_vpn.json | 29 -- .../pe1/show_bgp_ipv6_vpn.json | 29 -- .../pe1/show_bgp_summary.json | 46 --- tests/topotests/bgp_l3vpn_hidden/rr1/frr.conf | 79 ----- .../rr1/show_bgp_ipv4_vpn.json | 28 -- .../rr1/show_bgp_ipv6_vpn.json | 28 -- .../rr1/show_bgp_summary.json | 24 -- .../bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py | 289 ------------------ 16 files changed, 786 deletions(-) delete mode 100644 tests/topotests/bgp_l3vpn_hidden/__init__.py delete mode 100644 tests/topotests/bgp_l3vpn_hidden/ce1/frr.conf delete mode 100644 tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast.json delete mode 120000 tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast_step1.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast.json delete mode 120000 tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast_step1.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_summary.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/pe1/frr.conf delete mode 100644 tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv4_vpn.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv6_vpn.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_summary.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/rr1/frr.conf delete mode 100644 tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv4_vpn.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv6_vpn.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_summary.json delete mode 100644 tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py diff --git a/tests/topotests/bgp_l3vpn_hidden/__init__.py b/tests/topotests/bgp_l3vpn_hidden/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/topotests/bgp_l3vpn_hidden/ce1/frr.conf b/tests/topotests/bgp_l3vpn_hidden/ce1/frr.conf deleted file mode 100644 index 95d84d5e6b..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/ce1/frr.conf +++ /dev/null @@ -1,52 +0,0 @@ -debug bgp neighbor-events -! -ip prefix-list PLIST-LAN seq 10 permit 172.20.0.0/16 le 24 -! -ipv6 prefix-list PLIST-LAN6 seq 10 permit 2001:db8::/32 le 64 -! -route-map RMAP-LAN permit 10 - match ip address prefix-list PLIST-LAN -exit -! -route-map RMAP-LAN6 permit 10 - match ipv6 address prefix-list PLIST-LAN6 -exit -! -interface eth-lan - ip address 172.20.1.1/24 - ipv6 address 2001:db8:1::ff/64 -exit -! -interface eth-pe1 - ip address 172.16.1.254/24 - ipv6 address 3fff:1::ff/64 -exit -! -router bgp 65501 - bgp router-id 172.16.1.254 - no bgp ebgp-requires-policy - bgp bestpath compare-routerid - neighbor 172.16.1.1 remote-as external - neighbor 172.16.1.1 bfd profile BGP - neighbor 3fff:1::1 remote-as external - neighbor 3fff:1::1 bfd profile BGP - ! - address-family ipv4 unicast - redistribute connected route-map RMAP-LAN - neighbor 172.16.1.1 next-hop-self - no neighbor 3fff:1::1 activate - exit-address-family -! - address-family ipv6 unicast - redistribute connected route-map RMAP-LAN6 - neighbor 3fff:1::1 activate - neighbor 3fff:1::1 next-hop-self - exit-address-family -exit -bfd - profile BGP - transmit-interval 2000 - receive-interval 2000 - exit - ! -exit diff --git a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast.json b/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast.json deleted file mode 100644 index e9741a2fbd..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "vrfName": "default", - "routerId": "172.16.1.254", - "localAS": 65501, - "routes": { - "172.20.1.0/24": [ - { - "valid": true, - "bestpath": true, - "peerId": "(unspec)", - "path": "", - "nexthops": [ - { - "ip": "0.0.0.0", - "hostname": "ce1", - "used": true - } - ] - } - ] - }, - "totalRoutes": 1, - "totalPaths": 1 -} diff --git a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast_step1.json b/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast_step1.json deleted file mode 120000 index 0d02eacc65..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv4_unicast_step1.json +++ /dev/null @@ -1 +0,0 @@ -show_bgp_ipv4_unicast.json \ No newline at end of file diff --git a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast.json b/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast.json deleted file mode 100644 index 1120d30edd..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "vrfName": "default", - "routerId": "172.16.1.254", - "localAS": 65501, - "routes": { - "2001:db8:1::/64": [ - { - "valid": true, - "bestpath": true, - "peerId": "(unspec)", - "path": "", - "nexthops": [ - { - "ip": "::", - "hostname": "ce1", - "scope": "global", - "used": true - } - ] - } - ] - }, - "totalRoutes": 1, - "totalPaths": 1 -} diff --git a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast_step1.json b/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast_step1.json deleted file mode 120000 index 94f8f5bba9..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_ipv6_unicast_step1.json +++ /dev/null @@ -1 +0,0 @@ -show_bgp_ipv6_unicast.json \ No newline at end of file diff --git a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_summary.json b/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_summary.json deleted file mode 100644 index 5a0699ed9b..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/ce1/show_bgp_summary.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "default": { - "ipv4Unicast": { - "routerId": "172.16.1.254", - "peers": { - "172.16.1.1": { - "hostname": "pe1", - "state": "Established" - } - }, - "totalPeers": 1 - }, - "ipv6Unicast": { - "routerId": "172.16.1.254", - "peers": { - "3fff:1::1": { - "hostname": "pe1", - "state": "Established" - } - }, - "totalPeers": 1 - } - } -} diff --git a/tests/topotests/bgp_l3vpn_hidden/pe1/frr.conf b/tests/topotests/bgp_l3vpn_hidden/pe1/frr.conf deleted file mode 100644 index 95a7262b32..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/pe1/frr.conf +++ /dev/null @@ -1,107 +0,0 @@ -mpls label dynamic-block 1000 1048575 -! -interface lo - ip address 192.168.0.1/32 - ipv6 address 3fff::192:168:0:1/128 -! -interface eth-rr1 - ip address 10.0.1.1/24 -! -interface eth-ce1 - ip address 172.16.1.1/24 - ipv6 address 3fff:1::1/64 -! -router bgp 65000 - bgp router-id 192.168.0.1 - no bgp ebgp-requires-policy - no bgp default ipv4-unicast - neighbor 192.168.0.101 remote-as 65000 - neighbor 192.168.0.101 bfd profile BGP - neighbor 192.168.0.101 update-source 192.168.0.1 - neighbor 3fff::192:168:0:101 remote-as 65000 - neighbor 3fff::192:168:0:101 bfd profile BGP - neighbor 3fff::192:168:0:101 update-source 3fff::192:168:0:1 - -! - address-family ipv4 unicast - no neighbor 192.168.0.101 activate - exit-address-family -! - address-family ipv4 vpn - neighbor 192.168.0.101 activate - neighbor 192.168.0.101 soft-reconfiguration inbound - exit-address-family -! - address-family ipv6 vpn - neighbor 3fff::192:168:0:101 activate - neighbor 3fff::192:168:0:101 soft-reconfiguration inbound - exit-address-family -! -router bgp 65000 vrf RED - bgp router-id 192.168.0.1 - no bgp ebgp-requires-policy - bgp bestpath compare-routerid - neighbor 172.16.1.254 remote-as external - neighbor 172.16.1.254 bfd profile BGP - neighbor 3fff:1::ff remote-as external - neighbor 3fff:1::ff bfd profile BGP - ! - address-family ipv4 unicast - label vpn export 100 - rd vpn export 65000:100 - rt vpn both 65000:100 - export vpn - import vpn - neighbor 172.16.1.254 next-hop-self - no neighbor 3fff:1::ff activate - exit-address-family -! - address-family ipv6 unicast - label vpn export 200 - rd vpn export 65000:100 - rt vpn both 65000:100 - export vpn - import vpn - neighbor 3fff:1::ff activate - neighbor 3fff:1::ff next-hop-self - exit-address-family -exit -! -interface lo - ip router isis 1 - isis hello-interval 2 - ipv6 router isis 1 -! -interface eth-rr1 - ip router isis 1 - isis hello-interval 2 - ipv6 router isis 1 -! -router isis 1 - lsp-gen-interval 2 - net 10.0000.0000.0000.0000.0000.0000.0000.0000.0001.00 - metric-style wide - exit -! -mpls ldp - router-id 192.168.0.1 - ! - address-family ipv4 - discovery transport-address 192.168.0.1 - ! - interface eth-rr1 - ! - address-family ipv6 - discovery transport-address 3fff::192:168:0:1 - ! - interface eth-rr1 - ! - ! -! -bfd - profile BGP - transmit-interval 2000 - receive-interval 2000 - exit - ! -exit diff --git a/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv4_vpn.json b/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv4_vpn.json deleted file mode 100644 index d21dd89291..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv4_vpn.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "vrfName": "default", - "routerId": "192.168.0.1", - "localAS": 65000, - "routes": { - "routeDistinguishers": { - "65000:100": { - "172.20.1.0/24": [ - { - "valid": true, - "bestpath": true, - "peerId": "(unspec)", - "path": "65501", - "nhVrfName": "RED", - "nexthops": [ - { - "ip": "172.16.1.254", - "hostname": "pe1", - "used": true - } - ] - } - ] - } - } - }, - "totalRoutes": 1, - "totalPaths": 1 -} diff --git a/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv6_vpn.json b/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv6_vpn.json deleted file mode 100644 index b42656f44f..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_ipv6_vpn.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "vrfName": "default", - "routerId": "192.168.0.1", - "localAS": 65000, - "routes": { - "routeDistinguishers": { - "65000:100": { - "2001:db8:1::/64": [ - { - "valid": true, - "bestpath": true, - "peerId": "(unspec)", - "path": "65501", - "nhVrfName": "RED", - "nexthops": [ - { - "ip": "3fff:1::ff", - "hostname": "pe1", - "used": true - } - ] - } - ] - } - } - }, - "totalRoutes": 1, - "totalPaths": 1 -} diff --git a/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_summary.json b/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_summary.json deleted file mode 100644 index b414d2e4ae..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/pe1/show_bgp_summary.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "default": { - "ipv4Vpn": { - "routerId": "192.168.0.1", - "peers": { - "192.168.0.101": { - "hostname": "rr1", - "state": "Established" - } - }, - "totalPeers": 1 - }, - "ipv6Vpn": { - "routerId": "192.168.0.1", - "peers": { - "3fff::192:168:0:101": { - "hostname": "rr1", - "state": "Established" - } - }, - "totalPeers": 1 - } - }, - "RED": { - "ipv4Unicast": { - "routerId": "192.168.0.1", - "peers": { - "172.16.1.254": { - "hostname": "ce1", - "state": "Established" - } - }, - "totalPeers": 1 - }, - "ipv6Unicast": { - "routerId": "192.168.0.1", - "peers": { - "3fff:1::ff": { - "hostname": "ce1", - "state": "Established" - } - }, - "totalPeers": 1 - } - } -} diff --git a/tests/topotests/bgp_l3vpn_hidden/rr1/frr.conf b/tests/topotests/bgp_l3vpn_hidden/rr1/frr.conf deleted file mode 100644 index b25a7a336b..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/rr1/frr.conf +++ /dev/null @@ -1,79 +0,0 @@ -mpls label dynamic-block 1000 1048575 -! -interface lo - ip address 192.168.0.101/32 - ipv6 address 3fff::192:168:0:101/128 -! -interface eth-pe1 - ip address 10.0.1.101/24 -! -router bgp 65000 - bgp router-id 192.168.0.101 - bgp cluster-id 192.168.0.101 - bgp log-neighbor-changes - no bgp default ipv4-unicast - neighbor PE peer-group - neighbor PE remote-as 65000 - neighbor PE bfd profile BGP - neighbor PE update-source 192.168.0.101 - neighbor PE6 peer-group - neighbor PE6 remote-as 65000 - neighbor PE6 bfd profile BGP - neighbor PE6 update-source 3fff::192:168:0:101 - neighbor 192.168.0.1 peer-group PE - neighbor 3fff::192:168:0:1 peer-group PE6 -! - address-family ipv4 unicast - no neighbor PE activate - exit-address-family -! - address-family ipv4 vpn - neighbor PE activate - neighbor PE route-reflector-client - neighbor PE soft-reconfiguration inbound - exit-address-family -! - address-family ipv6 vpn - neighbor PE6 activate - neighbor PE6 route-reflector-client - neighbor PE6 soft-reconfiguration inbound - exit-address-family -! -! -interface lo - ip router isis 1 - isis hello-interval 2 - ipv6 router isis 1 -! -interface eth-pe1 - ip router isis 1 - isis hello-interval 2 - ipv6 router isis 1 -! -! -router isis 1 - lsp-gen-interval 2 - net 10.0000.0000.0000.0000.0000.0000.0000.0000.0100.00 - metric-style wide - exit -! -mpls ldp - router-id 192.168.0.101 - ! - address-family ipv4 - discovery transport-address 192.168.0.101 - ! - interface eth-pe1 - ! - address-family ipv6 - discovery transport-address 3fff::192:168:0:101 - ! - interface eth-pe1 -! -bfd - profile BGP - transmit-interval 2000 - receive-interval 2000 - exit - ! -exit diff --git a/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv4_vpn.json b/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv4_vpn.json deleted file mode 100644 index 3fd451640c..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv4_vpn.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "vrfName": "default", - "routerId": "192.168.0.101", - "localAS": 65000, - "routes": { - "routeDistinguishers": { - "65000:100": { - "172.20.1.0/24": [ - { - "valid": true, - "bestpath": true, - "peerId": "192.168.0.1", - "path": "65501", - "nexthops": [ - { - "ip": "192.168.0.1", - "hostname": "pe1", - "used": true - } - ] - } - ] - } - } - }, - "totalRoutes": 1, - "totalPaths": 1 -} diff --git a/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv6_vpn.json b/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv6_vpn.json deleted file mode 100644 index c3ecd71c46..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_ipv6_vpn.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "vrfName": "default", - "routerId": "192.168.0.101", - "localAS": 65000, - "routes": { - "routeDistinguishers": { - "65000:100": { - "2001:db8:1::/64": [ - { - "valid": true, - "bestpath": true, - "peerId": "3fff::192:168:0:1", - "path": "65501", - "nexthops": [ - { - "ip": "3fff::192:168:0:1", - "hostname": "pe1", - "used": true - } - ] - } - ] - } - } - }, - "totalRoutes": 1, - "totalPaths": 1 -} diff --git a/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_summary.json b/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_summary.json deleted file mode 100644 index 8d6c15526e..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/rr1/show_bgp_summary.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "default": { - "ipv4Vpn": { - "routerId": "192.168.0.101", - "peers": { - "192.168.0.1": { - "hostname": "pe1", - "state": "Established" - } - }, - "totalPeers": 1 - }, - "ipv6Vpn": { - "routerId": "192.168.0.101", - "peers": { - "3fff::192:168:0:1": { - "hostname": "pe1", - "state": "Established" - } - }, - "totalPeers": 1 - } - } -} diff --git a/tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py b/tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py deleted file mode 100644 index 5ed0bc642d..0000000000 --- a/tests/topotests/bgp_l3vpn_hidden/test_bgp_l3vpn_hidden.py +++ /dev/null @@ -1,289 +0,0 @@ -#!/usr/bin/env python -# SPDX-License-Identifier: ISC - - -""" -Test BGP hidden -See https://github.com/FRRouting/frr/commit/4d0e7a49cf8d4311a485281fa50bbff6ee8ca6cc -""" - -import os -import sys -import re -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.topolog import logger -from lib.topogen import Topogen, TopoRouter, get_topogen -from lib.common_config import step - - -pytestmark = [pytest.mark.bgpd, pytest.mark.bfdd, pytest.mark.isisd, pytest.mark.ldpd] - - -def build_topo(tgen): - """ - +---+ +---+ +---+ - |ce1|---|pe1|---|rr1| - +---+ +---+ +---+ -""" - - def connect_routers(tgen, left, right): - for rname in [left, right]: - if rname not in tgen.routers().keys(): - tgen.add_router(rname) - - switch = tgen.add_switch("s-{}-{}".format(left, right)) - switch.add_link(tgen.gears[left], nodeif="eth-{}".format(right)) - switch.add_link(tgen.gears[right], nodeif="eth-{}".format(left)) - if "ce" not in right and "ce" not in left: - tgen.gears[left].cmd(f"sysctl net.mpls.conf.eth-{right}.input=1") - tgen.gears[right].cmd(f"sysctl net.mpls.conf.eth-{left}.input=1") - - def connect_switchs(tgen, rname, switch): - if rname not in tgen.routers().keys(): - tgen.add_router(rname) - - switch.add_link(tgen.gears[rname], nodeif="eth-{}".format(switch.name)) - - def connect_lan(tgen, rname): - if rname not in tgen.routers().keys(): - tgen.add_router(rname) - - # Extra LAN interfaces. Not used for communication with hosts, just to - # hold an address we use to inject routes - switch = tgen.add_switch("s-{}".format(rname)) - switch.add_link(tgen.gears[rname], nodeif="eth-lan") - - # directly connected without switch routers - connect_routers(tgen, "rr1", "pe1") - connect_routers(tgen, "pe1", "ce1") - connect_lan(tgen, "ce1") - - -def setup_module(mod): - tgen = Topogen(build_topo, mod.__name__) - tgen.start_topology() - - pe1 = tgen.gears["pe1"] - pe1.cmd( - f""" -ip link add RED type vrf table 100 -ip link set RED up -ip link set eth-ce1 master RED -""" - ) - - 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)), - [ - (TopoRouter.RD_ZEBRA, None), - (TopoRouter.RD_MGMTD, None), - (TopoRouter.RD_BFD, None), - (TopoRouter.RD_LDP, None), - (TopoRouter.RD_ISIS, None), - (TopoRouter.RD_BGP, None), - ], - ) - - tgen.start_router() - - -def teardown_module(mod): - tgen = get_topogen() - tgen.stop_topology() - - -def check_bgp_convergence(step=None): - """ - out was generated using - -FRRGIT=/path/git/frr - -vtysh -c 'show bgp vrf all summary json' | jq . | egrep -v 'ersion|idType|connections|peerState|pfx|outq|inq|msg|As|rib|Count|Memory|Uptime|vrf|\"as|failedPeers|displayedPeers|dynamicPeers' | awk '/ "bestPath": {/ {c=3; next} c-- > 0 {next} 1' | sed -E 's|"totalPeers": (.+),|"totalPeers": \1|g;s|"Established",|"Established"|g' | jq . >$FRRGIT/tests/topotests/bgp_l3vpn_hidden/$HOSTNAME/show_bgp_summary.json - -vtysh -c 'show bgp ipv4 vpn json' | jq . | egrep -v 'selectionReason|pathFrom|prefix|locPrf|ersion|weight|origin|vrfId|afi|defaultLocPrf|network|nhVrfId|announceNexthopSelf|metric|multipath|linkLocalOnly|length' | jq . >$FRRGIT/tests/topotests/bgp_l3vpn_hidden/$HOSTNAME/show_bgp_ipv4_vpn_step1.json -vtysh -c 'show bgp ipv6 vpn json' | jq . | egrep -v 'selectionReason|pathFrom|prefix|locPrf|ersion|weight|origin|vrfId|afi|defaultLocPrf|network|fe80|nhVrfId|announceNexthopSelf|metric|multipath|linkLocalOnly|length' | jq . >$FRRGIT/tests/topotests/bgp_l3vpn_hidden/$HOSTNAME/show_bgp_ipv6_vpn_step1.json - -vtysh -c 'show bgp ipv4 unicast json' | jq . | egrep -v 'selectionReason|pathFrom|prefix|locPrf|ersion|weight|origin|vrfId|afi|defaultLocPrf|network|nhVrfId|announceNexthopSelf|metric|multipath|linkLocalOnly|length' | jq . >$FRRGIT/tests/topotests/bgp_l3vpn_hidden/$HOSTNAME/show_bgp_ipv4_unicast.json -vtysh -c 'show bgp ipv6 unicast json' | jq . | egrep -v 'selectionReason|pathFrom|prefix|locPrf|ersion|weight|origin|vrfId|afi|defaultLocPrf|network|fe80|nhVrfId|announceNexthopSelf|metric|multipath|linkLocalOnly|length' | jq . >$FRRGIT/tests/topotests/bgp_l3vpn_hidden/$HOSTNAME/show_bgp_ipv6_unicast.json - """ - tgen = get_topogen() - - logger.info("waiting for bgp convergence") - - step_suffix = f"_step{step}" if step else "" - - if not step: - logger.info("Check BGP summary") - for rname, router in tgen.routers().items(): - reffile = os.path.join(CWD, f"{rname}/show_bgp_summary.json") - expected = json.loads(open(reffile).read()) - cmd = "show bgp vrf all summary json" - test_func = functools.partial( - topotest.router_json_cmp, router, cmd, expected - ) - _, res = topotest.run_and_expect(test_func, None, count=60, wait=1) - assertmsg = f"BGP did not converge. Error on {rname} {cmd}" - assert res is None, assertmsg - - logger.info("Check BGP IPv4/6 unicast/VPN table") - for rname, router in tgen.routers().items(): - for ipv in [4, 6]: - logger.info(f"Check BGP IPv4/6 unicast/VPN table: {rname} IPv{ipv}") - safi = "unicast" if "ce" in rname else "vpn" - reffile = os.path.join( - CWD, f"{rname}/show_bgp_ipv{ipv}_{safi}{step_suffix}.json" - ) - expected = json.loads(open(reffile).read()) - exact = not expected # exact match if json is void (ie. {}) - cmd = f"show bgp ipv{ipv} {safi} json" - test_func = functools.partial( - topotest.router_json_cmp, - router, - cmd, - expected, - exact=exact, - ) - _, res = topotest.run_and_expect(test_func, None, count=120, wait=1) - assertmsg = f"BGP did not converge. Error on {rname} {cmd}" - assert res is None, assertmsg - - -def configure_bgp(vrf=None, router_name="all", activate=False): - tgen = get_topogen() - - vrf_suffix = f" vrf {vrf}" if vrf else "" - as_pattern = re.compile(rf"^router bgp (\d+){vrf_suffix}$") - - for rname, router in tgen.routers().items(): - if router_name != "all" and router_name != rname: - continue - - if "ce" in rname: - continue - - as_number = "" - cmds = [] - router_bgp = False - with open(os.path.join(CWD, f"{rname}/frr.conf"), "r") as f: - for line in f: - line = line.strip() - if "router bgp" in line: - match = as_pattern.match(line) - if match: - as_number = match.group(1) - router_bgp = True - continue - if router_bgp: - # If we already hit "router bgp " once, - # and see another "router bgp" line, break. - break - if not router_bgp: - # Only capture lines after we've matched "router bgp" - continue - cmds.append(line) - - cfg = "configure terminal\n" - if activate: - cfg += f"router bgp {as_number}{vrf_suffix}\n" - for cmd in cmds: - cfg += f"{cmd}\n" - else: - cfg += f"no router bgp {as_number}{vrf_suffix}\n" - - router.vtysh_cmd(cfg) - - -def test_bgp_convergence(): - tgen = get_topogen() - - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - - check_bgp_convergence() - - -def test_bgp_l3vpn_hidden_step1(): - """ - Remove pe1 router bgp blocks - The Default BGP instance becomes hidden - """ - - tgen = get_topogen() - - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - - for vrf in ["RED", None]: - configure_bgp(router_name="pe1", vrf=vrf, activate=False) - - check_bgp_convergence(step=1) - - -def test_bgp_l3vpn_hidden_step2(): - """ - Restore pe1 router bgp blocks - """ - - tgen = get_topogen() - - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - - for vrf in [None, "RED"]: - configure_bgp(router_name="pe1", vrf=vrf, activate=True) - - # identical to the intitial step - check_bgp_convergence(step=None) - - - -def test_bgp_l3vpn_hidden_step3(): - """ - Remove pe1 router bgp blocks - The Default BGP instance becomes hidden - """ - - tgen = get_topogen() - - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - - for vrf in ["RED", None]: - configure_bgp(router_name="pe1", vrf=vrf, activate=False) - - # identical to the intitial step 1 - check_bgp_convergence(step=1) - - -def test_bgp_l3vpn_hidden_step4(): - """ - Restore pe1 router bgp blocks - Reconfigure VRF block first - """ - - tgen = get_topogen() - - if tgen.routers_have_failure(): - pytest.skip(tgen.errors) - - for vrf in [None, "RED"]: - configure_bgp(router_name="pe1", vrf=vrf, activate=True) - - # identical to the intitial step - check_bgp_convergence(step=None) - - -if __name__ == "__main__": - args = ["-s"] + sys.argv[1:] - sys.exit(pytest.main(args)) -- 2.39.5