Skip to content

Commit

Permalink
bgpd: Fix bgp core with a possible Intf delete
Browse files Browse the repository at this point in the history
Although trigger unknown, based on the backtrace in one of the internal
testing, we do see some delete in the Intf where we can have the peer
ifp pointer null and we try to dereference it while trying to install
the route leading to a crash

Skip updating the ifindex in such cases and since the nexthop is not
properly updated, BGP skips sending it to zebra.

BackTrace:
0  0x00007faef05e7ebc in ?? () from /lib/x86_64-linux-gnu/libc.so.6
1  0x00007faef0598fb2 in raise () from /lib/x86_64-linux-gnu/libc.so.6
2  0x00007faef09900dc in core_handler (signo=11, siginfo=0x7ffdde8cb4b0, context=<optimized out>) at lib/sigevent.c:274
3  <signal handler called>
4  0x00005560aad4b7d8 in update_ipv6nh_for_route_install (api_nh=0x7ffdde8cbe94, is_evpn=false, best_pi=0x5560b21187d0, pi=0x5560b21187d0, ifindex=0, nexthop=0x5560b03cb0dc,
   nh_bgp=0x5560ace04df0, nh_othervrf=0) at bgpd/bgp_zebra.c:1273
5  bgp_zebra_announce_actual (dest=dest@entry=0x5560afcfa950, info=0x5560b21187d0, bgp=0x5560ace04df0) at bgpd/bgp_zebra.c:1521
6  0x00005560aad4bc85 in bgp_handle_route_announcements_to_zebra (e=<optimized out>) at bgpd/bgp_zebra.c:1896
7  0x00007faef09a1c0d in thread_call (thread=thread@entry=0x7ffdde8d7580) at lib/thread.c:2008
8  0x00007faef095a598 in frr_run (master=0x5560ac7e5190) at lib/libfrr.c:1223
9  0x00005560aac65db6 in main (argc=<optimized out>, argv=<optimized out>) at bgpd/bgp_main.c:557

(gdb) f 4
4  0x00005560aad4b7d8 in update_ipv6nh_for_route_install (api_nh=0x7ffdde8cbe94, is_evpn=false, best_pi=0x5560b21187d0, pi=0x5560b21187d0, ifindex=0, nexthop=0x5560b03cb0dc,
    nh_bgp=0x5560ace04df0, nh_othervrf=0) at bgpd/bgp_zebra.c:1273
1273	in bgpd/bgp_zebra.c
(gdb) p pi->peer->ifp
$26 = (struct interface *) 0x0

Ticket :#4203904

Signed-off-by: Rajasekar Raja <rajasekarr@nvidia.com>
(cherry picked from commit 9b0b9282d317a9aeab36d9a8b08a35fe9a172c4b)

# Conflicts:
#	.clang-format
#	.git-blame-ignore-revs
#	.github/workflows/conflicts.yml
#	.gitignore
#	babeld/babel_interface.c
#	babeld/babel_interface.h
#	babeld/babel_main.c
#	babeld/babeld.c
#	babeld/babeld.h
#	babeld/message.c
#	babeld/neighbour.c
#	babeld/util.c
#	babeld/util.h
#	bfdd/bfd.c
#	bfdd/bfd.h
#	bfdd/bfd_packet.c
#	bfdd/bfdd.c
#	bfdd/bfdd_cli.c
#	bfdd/bfdd_vty.c
#	bfdd/dplane.c
#	bfdd/ptm_adapter.c
#	bfdd/subdir.am
#	bgpd/bgp_addpath.c
#	bgpd/bgp_addpath.h
#	bgpd/bgp_advertise.c
#	bgpd/bgp_advertise.h
#	bgpd/bgp_aspath.c
#	bgpd/bgp_aspath.h
#	bgpd/bgp_attr.c
#	bgpd/bgp_attr.h
#	bgpd/bgp_attr_evpn.c
#	bgpd/bgp_attr_evpn.h
#	bgpd/bgp_bfd.c
#	bgpd/bgp_bmp.c
#	bgpd/bgp_bmp.h
#	bgpd/bgp_btoa.c
#	bgpd/bgp_clist.c
#	bgpd/bgp_clist.h
#	bgpd/bgp_community.c
#	bgpd/bgp_community_alias.c
#	bgpd/bgp_community_alias.h
#	bgpd/bgp_conditional_adv.c
#	bgpd/bgp_damp.c
#	bgpd/bgp_damp.h
#	bgpd/bgp_debug.c
#	bgpd/bgp_debug.h
#	bgpd/bgp_ecommunity.c
#	bgpd/bgp_ecommunity.h
#	bgpd/bgp_evpn.c
#	bgpd/bgp_evpn.h
#	bgpd/bgp_evpn_mh.c
#	bgpd/bgp_evpn_mh.h
#	bgpd/bgp_evpn_private.h
#	bgpd/bgp_evpn_vty.c
#	bgpd/bgp_flowspec.c
#	bgpd/bgp_flowspec_util.c
#	bgpd/bgp_fsm.c
#	bgpd/bgp_fsm.h
#	bgpd/bgp_io.c
#	bgpd/bgp_label.c
#	bgpd/bgp_label.h
#	bgpd/bgp_mac.c
#	bgpd/bgp_main.c
#	bgpd/bgp_memory.c
#	bgpd/bgp_memory.h
#	bgpd/bgp_mpath.c
#	bgpd/bgp_mpath.h
#	bgpd/bgp_mplsvpn.c
#	bgpd/bgp_mplsvpn.h
#	bgpd/bgp_mplsvpn_snmp.c
#	bgpd/bgp_network.c
#	bgpd/bgp_network.h
#	bgpd/bgp_nexthop.c
#	bgpd/bgp_nexthop.h
#	bgpd/bgp_nht.c
#	bgpd/bgp_open.c
#	bgpd/bgp_open.h
#	bgpd/bgp_packet.c
#	bgpd/bgp_packet.h
#	bgpd/bgp_pbr.c
#	bgpd/bgp_route.c
#	bgpd/bgp_route.h
#	bgpd/bgp_routemap.c
#	bgpd/bgp_routemap_nb.c
#	bgpd/bgp_routemap_nb.h
#	bgpd/bgp_routemap_nb_config.c
#	bgpd/bgp_rpki.c
#	bgpd/bgp_script.h
#	bgpd/bgp_snmp.c
#	bgpd/bgp_snmp_bgp4v2.c
#	bgpd/bgp_table.c
#	bgpd/bgp_table.h
#	bgpd/bgp_trace.c
#	bgpd/bgp_updgrp.c
#	bgpd/bgp_updgrp.h
#	bgpd/bgp_updgrp_adv.c
#	bgpd/bgp_updgrp_packet.c
#	bgpd/bgp_vty.c
#	bgpd/bgp_vty.h
#	bgpd/bgp_zebra.c
#	bgpd/bgp_zebra.h
#	bgpd/bgpd.c
#	bgpd/bgpd.h
#	bgpd/rfapi/bgp_rfapi_cfg.c
#	bgpd/rfapi/rfapi.c
#	bgpd/rfapi/rfapi_import.c
#	bgpd/rfapi/rfapi_rib.c
#	bgpd/rfapi/rfapi_vty.c
#	bgpd/rfapi/vnc_export_bgp.c
#	bgpd/rfapi/vnc_import_bgp.c
#	configure.ac
#	debian/changelog
#	debian/control
#	debian/copyright
#	debian/rules
#	doc/developer/bgpd.rst
#	doc/developer/building-libyang.rst
#	doc/developer/checkpatch.rst
#	doc/developer/conf.py
#	doc/developer/cross-compiling.rst
#	doc/developer/logging.rst
#	doc/developer/mgmtd-dev.rst
#	doc/developer/northbound/advanced-topics.rst
#	doc/developer/northbound/architecture.rst
#	doc/developer/northbound/demos.rst
#	doc/developer/northbound/links.rst
#	doc/developer/northbound/operational-data-rpcs-and-notifications.rst
#	doc/developer/northbound/plugins-sysrepo.rst
#	doc/developer/northbound/yang-tools.rst
#	doc/developer/ospf.rst
#	doc/developer/packaging-debian.rst
#	doc/developer/packaging-redhat.rst
#	doc/developer/scripting.rst
#	doc/developer/static-linking.rst
#	doc/developer/topotests-markers.rst
#	doc/developer/topotests.rst
#	doc/developer/workflow.rst
#	doc/developer/zebra.rst
#	doc/manpages/bfd-options.rst
#	doc/manpages/conf.py
#	doc/user/bfd.rst
#	doc/user/bgp.rst
#	doc/user/bmp.rst
#	doc/user/conf.py
#	doc/user/evpn.rst
#	doc/user/filter.rst
#	doc/user/index.rst
#	doc/user/installation.rst
#	doc/user/isisd.rst
#	doc/user/ldpd.rst
#	doc/user/mgmtd.rst
#	doc/user/nhrpd.rst
#	doc/user/ospf6d.rst
#	doc/user/ospf_fundamentals.rst
#	doc/user/ospfd.rst
#	doc/user/pim.rst
#	doc/user/pimv6.rst
#	doc/user/ripngd.rst
#	doc/user/routemap.rst
#	doc/user/rpki.rst
#	doc/user/snmptrap.rst
#	doc/user/subdir.am
#	doc/user/vrrp.rst
#	doc/user/zebra.rst
#	docker/alpine/Dockerfile
#	docker/alpine/libyang/APKBUILD
#	docker/debian/Dockerfile
#	docker/ubuntu-ci/Dockerfile
#	docker/ubuntu-ci/docker-start
#	docker/ubuntu22-ci/README.md
#	eigrpd/eigrp_main.c
#	eigrpd/eigrp_routemap.h
#	fpm/fpm.h
#	fpm/fpm.proto
#	fpm/fpm_pb.c
#	fpm/fpm_pb.h
#	grpc/subdir.am
#	include/subdir.am
#	isisd/isis_adjacency.c
#	isisd/isis_circuit.c
#	isisd/isis_events.c
#	isisd/isis_lfa.c
#	isisd/isis_lfa.h
#	isisd/isis_lsp.c
#	isisd/isis_lsp.h
#	isisd/isis_main.c
#	isisd/isis_misc.c
#	isisd/isis_mt.c
#	isisd/isis_nb_config.c
#	isisd/isis_nb_state.c
#	isisd/isis_pdu.c
#	isisd/isis_route.h
#	isisd/isis_snmp.c
#	isisd/isis_spf.c
#	isisd/isis_spf.h
#	isisd/isis_sr.c
#	isisd/isis_sr.h
#	isisd/isis_srv6.c
#	isisd/isis_srv6.h
#	isisd/isis_te.c
#	isisd/isis_te.h
#	isisd/isis_tlvs.c
#	isisd/isis_vty_fabricd.c
#	isisd/isis_zebra.c
#	isisd/isis_zebra.h
#	isisd/isisd.c
#	isisd/isisd.h
#	ldpd/lde.c
#	ldpd/ldpd.c
#	ldpd/ldpd.h
#	ldpd/ldpe.c
#	ldpd/log.h
#	ldpd/subdir.am
#	lib/affinitymap.c
#	lib/agentx.c
#	lib/atomlist.h
#	lib/base64.c
#	lib/base64.h
#	lib/bfd.c
#	lib/bfd.h
#	lib/checksum.c
#	lib/checksum.h
#	lib/command.c
#	lib/command.h
#	lib/command_graph.c
#	lib/command_graph.h
#	lib/command_py.c
#	lib/compiler.h
#	lib/csv.c
#	lib/darr.h
#	lib/debug.c
#	lib/debug.h
#	lib/defun_lex.l
#	lib/elf_py.c
#	lib/event.c
#	lib/explicit_bzero.c
#	lib/filter.c
#	lib/flex_algo.c
#	lib/flex_algo.h
#	lib/frr_pthread.c
#	lib/frr_pthread.h
#	lib/frr_zmq.c
#	lib/frrcu.h
#	lib/frrevent.h
#	lib/frrlua.c
#	lib/frrlua.h
#	lib/frrscript.c
#	lib/grammar_sandbox_main.c
#	lib/hash.c
#	lib/hash.h
#	lib/if.c
#	lib/if.h
#	lib/ipaddr.h
#	lib/keychain.c
#	lib/keychain.h
#	lib/lib_errors.c
#	lib/lib_errors.h
#	lib/libfrr.c
#	lib/libfrr.h
#	lib/libfrr_trace.c
#	lib/libospf.h
#	lib/link_state.c
#	lib/link_state.h
#	lib/linklist.h
#	lib/log.c
#	lib/memory.c
#	lib/memory.h
#	lib/mgmt.proto
#	lib/mgmt_be_client.c
#	lib/mgmt_be_client.h
#	lib/mgmt_fe_client.c
#	lib/mgmt_fe_client.h
#	lib/mgmt_msg_native.c
#	lib/mgmt_msg_native.h
#	lib/module.c
#	lib/module.h
#	lib/netns_linux.c
#	lib/netns_other.c
#	lib/nexthop.c
#	lib/nexthop.h
#	lib/nexthop_group.c
#	lib/nexthop_group.h
#	lib/northbound.c
#	lib/northbound.h
#	lib/northbound_cli.c
#	lib/northbound_cli.h
#	lib/northbound_grpc.cpp
#	lib/northbound_oper.c
#	lib/northbound_sysrepo.c
#	lib/ntop.c
#	lib/openbsd-queue.h
#	lib/openbsd-tree.h
#	lib/plist.c
#	lib/prefix.c
#	lib/prefix.h
#	lib/printf/README
#	lib/printf/printflocal.h
#	lib/printf/vfprintf.c
#	lib/ptm_lib.c
#	lib/routemap.c
#	lib/routemap.h
#	lib/routemap_cli.c
#	lib/routemap_northbound.c
#	lib/routing_nb.h
#	lib/seqlock.c
#	lib/sigevent.c
#	lib/smux.h
#	lib/sockopt.c
#	lib/sockopt.h
#	lib/sockunion.c
#	lib/sockunion.h
#	lib/srv6.c
#	lib/srv6.h
#	lib/stream.c
#	lib/stream.h
#	lib/subdir.am
#	lib/table.c
#	lib/table.h
#	lib/termtable.c
#	lib/termtable.h
#	lib/typerb.h
#	lib/typesafe.h
#	lib/vector.c
#	lib/vector.h
#	lib/vty.c
#	lib/vty.h
#	lib/wheel.c
#	lib/wheel.h
#	lib/yang.c
#	lib/yang.h
#	lib/yang_translator.c
#	lib/yang_wrappers.c
#	lib/yang_wrappers.h
#	lib/zclient.c
#	lib/zclient.h
#	lib/zlog.c
#	lib/zlog.h
#	lib/zlog_5424_cli.c
#	mgmtd/.gitignore
#	mgmtd/mgmt.c
#	mgmtd/mgmt_be_adapter.c
#	mgmtd/mgmt_be_adapter.h
#	mgmtd/mgmt_fe_adapter.c
#	mgmtd/mgmt_fe_adapter.h
#	mgmtd/mgmt_main.c
#	mgmtd/mgmt_memory.c
#	mgmtd/mgmt_memory.h
#	mgmtd/mgmt_testc.c
#	mgmtd/mgmt_txn.c
#	mgmtd/mgmt_txn.h
#	mgmtd/mgmt_vty.c
#	mgmtd/subdir.am
#	mlag/subdir.am
#	nhrpd/debug.h
#	nhrpd/nhrp_interface.c
#	nhrpd/nhrp_nhs.c
#	nhrpd/nhrp_packet.c
#	nhrpd/nhrp_peer.c
#	nhrpd/nhrp_protocol.h
#	nhrpd/nhrp_shortcut.c
#	nhrpd/nhrp_vty.c
#	nhrpd/nhrpd.h
#	nhrpd/os.h
#	nhrpd/reqid.c
#	nhrpd/subdir.am
#	nhrpd/vici.h
#	ospf6d/ospf6_abr.c
#	ospf6d/ospf6_abr.h
#	ospf6d/ospf6_asbr.c
#	ospf6d/ospf6_asbr.h
#	ospf6d/ospf6_auth_trailer.c
#	ospf6d/ospf6_flood.c
#	ospf6d/ospf6_gr.c
#	ospf6d/ospf6_gr.h
#	ospf6d/ospf6_gr_helper.c
#	ospf6d/ospf6_interface.c
#	ospf6d/ospf6_intra.c
#	ospf6d/ospf6_intra.h
#	ospf6d/ospf6_lsa.c
#	ospf6d/ospf6_lsa.h
#	ospf6d/ospf6_lsdb.c
#	ospf6d/ospf6_main.c
#	ospf6d/ospf6_message.c
#	ospf6d/ospf6_neighbor.c
#	ospf6d/ospf6_nssa.c
#	ospf6d/ospf6_proto.h
#	ospf6d/ospf6_route.h
#	ospf6d/ospf6_snmp.c
#	ospf6d/ospf6_spf.c
#	ospf6d/ospf6_top.c
#	ospf6d/ospf6_zebra.c
#	ospf6d/ospf6d.c
#	ospf6d/subdir.am
#	ospfclient/subdir.am
#	ospfd/ospf_abr.c
#	ospfd/ospf_apiserver.c
#	ospfd/ospf_apiserver.h
#	ospfd/ospf_asbr.c
#	ospfd/ospf_asbr.h
#	ospfd/ospf_ase.c
#	ospfd/ospf_flood.c
#	ospfd/ospf_flood.h
#	ospfd/ospf_interface.c
#	ospfd/ospf_interface.h
#	ospfd/ospf_ism.c
#	ospfd/ospf_ldp_sync.c
#	ospfd/ospf_lsa.c
#	ospfd/ospf_lsa.h
#	ospfd/ospf_lsdb.c
#	ospfd/ospf_lsdb.h
#	ospfd/ospf_main.c
#	ospfd/ospf_memory.c
#	ospfd/ospf_memory.h
#	ospfd/ospf_neighbor.c
#	ospfd/ospf_neighbor.h
#	ospfd/ospf_nsm.c
#	ospfd/ospf_opaque.c
#	ospfd/ospf_packet.c
#	ospfd/ospf_packet.h
#	ospfd/ospf_ri.c
#	ospfd/ospf_sr.c
#	ospfd/ospf_te.c
#	ospfd/ospf_vty.c
#	ospfd/ospf_zebra.c
#	ospfd/ospf_zebra.h
#	ospfd/ospfd.c
#	pathd/path_cli.c
#	pathd/path_main.c
#	pathd/path_pcep.c
#	pathd/path_pcep.h
#	pathd/path_pcep_cli.c
#	pathd/path_ted.c
#	pathd/path_ted.h
#	pathd/path_zebra.c
#	pathd/pathd.c
#	pathd/pathd.h
#	pbrd/pbr_debug.c
#	pbrd/pbr_debug.h
#	pbrd/pbr_vrf.c
#	pbrd/pbr_vty.c
#	pimd/pim6_cmd.c
#	pimd/pim6_cmd.h
#	pimd/pim6_main.c
#	pimd/pim6_mld.c
#	pimd/pim_addr.h
#	pimd/pim_bsm.c
#	pimd/pim_bsm.h
#	pimd/pim_cmd.c
#	pimd/pim_cmd.h
#	pimd/pim_cmd_common.c
#	pimd/pim_cmd_common.h
#	pimd/pim_iface.c
#	pimd/pim_iface.h
#	pimd/pim_ifchannel.c
#	pimd/pim_igmp.c
#	pimd/pim_igmp.h
#	pimd/pim_igmpv2.c
#	pimd/pim_igmpv3.c
#	pimd/pim_instance.c
#	pimd/pim_instance.h
#	pimd/pim_join.c
#	pimd/pim_main.c
#	pimd/pim_memory.c
#	pimd/pim_memory.h
#	pimd/pim_mroute.c
#	pimd/pim_msdp.c
#	pimd/pim_msdp.h
#	pimd/pim_msdp_packet.c
#	pimd/pim_msdp_packet.h
#	pimd/pim_msdp_socket.c
#	pimd/pim_msdp_socket.h
#	pimd/pim_msg.h
#	pimd/pim_nb.c
#	pimd/pim_nb.h
#	pimd/pim_nb_config.c
#	pimd/pim_nht.c
#	pimd/pim_nht.h
#	pimd/pim_pim.c
#	pimd/pim_pim.h
#	pimd/pim_rp.c
#	pimd/pim_rp.h
#	pimd/pim_sock.c
#	pimd/pim_sock.h
#	pimd/pim_tib.c
#	pimd/pim_tib.h
#	pimd/pim_tlv.c
#	pimd/pim_util.c
#	pimd/pim_util.h
#	pimd/pim_vty.c
#	pimd/pim_zebra.c
#	pimd/pim_zlookup.c
#	pimd/pimd.c
#	pimd/pimd.h
#	pimd/subdir.am
#	python/clippy/__init__.py
#	python/clippy/elf.py
#	python/firstheader.py
#	python/makefile.py
#	python/xref2vtysh.py
#	python/xrelfo.py
#	qpb/qpb.c
#	redhat/frr.logrotate
#	redhat/frr.spec.in
#	ripd/rip_cli.c
#	ripd/rip_main.c
#	ripd/rip_nb_rpcs.c
#	ripd/ripd.c
#	ripd/subdir.am
#	ripngd/ripng_cli.c
#	ripngd/ripng_nb_rpcs.c
#	ripngd/ripngd.c
#	ripngd/subdir.am
#	sharpd/sharp_main.c
#	sharpd/sharp_vty.c
#	sharpd/sharp_zebra.c
#	sharpd/sharp_zebra.h
#	snapcraft/scripts/bfdd-service
#	snapcraft/snapcraft.yaml.in
#	staticd/static_debug.c
#	staticd/static_debug.h
#	staticd/static_vty.c
#	staticd/static_zebra.c
#	tests/bgpd/subdir.am
#	tests/bgpd/test_mp_attr.c
#	tests/bgpd/test_peer_attr.c
#	tests/helpers/c/main.c
#	tests/helpers/c/prng.c
#	tests/isisd/test_fuzz_isis_tlv.c
#	tests/isisd/test_fuzz_isis_tlv_tests.h.gz
#	tests/isisd/test_isis_spf.c
#	tests/isisd/test_isis_spf.refout
#	tests/lib/cli/common_cli.c
#	tests/lib/cli/test_cli.refout.in
#	tests/lib/cli/test_commands.c
#	tests/lib/northbound/test_oper_data.c
#	tests/lib/northbound/test_oper_data.in
#	tests/lib/northbound/test_oper_data.refout
#	tests/lib/subdir.am
#	tests/lib/test_atomlist.c
#	tests/lib/test_darr.c
#	tests/lib/test_frrlua.c
#	tests/lib/test_frrscript.c
#	tests/lib/test_grpc.cpp
#	tests/lib/test_printfrr.c
#	tests/lib/test_seqlock.c
#	tests/lib/test_ttable.c
#	tests/lib/test_typelist.c
#	tests/lib/test_zmq.c
#	tests/ospf6d/test_lsdb.c
#	tests/topotests/Dockerfile
#	tests/topotests/all_protocol_startup/r1/ip_nht.ref
#	tests/topotests/all_protocol_startup/r1/ipv4_routes.ref
#	tests/topotests/all_protocol_startup/r1/ipv6_nht.ref
#	tests/topotests/all_protocol_startup/r1/ipv6_routes.ref
#	tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post4.1.ref
#	tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post5.0.ref
#	tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post6.1.ref
#	tests/topotests/all_protocol_startup/r1/show_bgp_ipv4.ref
#	tests/topotests/all_protocol_startup/r1/show_bgp_ipv6-post4.1.ref
#	tests/topotests/all_protocol_startup/r1/show_bgp_ipv6.ref
#	tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_post6.1.ref
#	tests/topotests/all_protocol_startup/r1/show_ip_ospf_interface.ref
#	tests/topotests/all_protocol_startup/r1/show_route_map.ref
#	tests/topotests/all_protocol_startup/test_all_protocol_startup.py
#	tests/topotests/analyze.py
#	tests/topotests/babel_topo1/test_babel_topo1.py
#	tests/topotests/bfd_bgp_cbit_topo3/r1/bgp_ipv6_routes_down.json
#	tests/topotests/bfd_bgp_cbit_topo3/r1/bgpd.conf
#	tests/topotests/bfd_bgp_cbit_topo3/r1/ipv6_routes.json
#	tests/topotests/bfd_bgp_cbit_topo3/r3/bgpd.conf
#	tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.py
#	tests/topotests/bfd_isis_topo1/rt1/step1/show_ipv6_route.ref
#	tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_healthy.ref
#	tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt2_down.ref
#	tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt3_down.ref
#	tests/topotests/bfd_isis_topo1/rt1/zebra.conf
#	tests/topotests/bfd_isis_topo1/rt2/zebra.conf
#	tests/topotests/bfd_isis_topo1/rt3/zebra.conf
#	tests/topotests/bfd_isis_topo1/rt4/zebra.conf
#	tests/topotests/bfd_isis_topo1/rt5/zebra.conf
#	tests/topotests/bfd_ospf_topo1/rt1/step1/show_ipv6_route.ref
#	tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_healthy.ref
#	tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt2_down.ref
#	tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt3_down.ref
#	tests/topotests/bfd_ospf_topo1/rt1/zebra.conf
#	tests/topotests/bfd_ospf_topo1/rt2/zebra.conf
#	tests/topotests/bfd_ospf_topo1/rt3/zebra.conf
#	tests/topotests/bfd_ospf_topo1/rt4/zebra.conf
#	tests/topotests/bfd_ospf_topo1/rt5/zebra.conf
#	tests/topotests/bfd_ospf_topo1/test_bfd_ospf_topo1.py
#	tests/topotests/bfd_profiles_topo1/r2/bgpd.conf
#	tests/topotests/bfd_profiles_topo1/r3/bgpd.conf
#	tests/topotests/bfd_profiles_topo1/r4/bgpd.conf
#	tests/topotests/bfd_topo3/test_bfd_topo3.py
#	tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.py
#	tests/topotests/bfd_vrflite_topo1/test_bfd_vrflite_topo1.py
#	tests/topotests/bgp_accept_own/test_bgp_accept_own.py
#	tests/topotests/bgp_addpath_best_selected/test_bgp_addpath_best_selected.py
#	tests/topotests/bgp_aggregate_address_matching_med/test_bgp_aggregate_address_matching_med.py
#	tests/topotests/bgp_aggregate_address_origin/test_bgp_aggregate-address_origin.py
#	tests/topotests/bgp_aggregate_address_route_map/test_bgp_aggregate-address_route-map.py
#	tests/topotests/bgp_aggregate_address_topo1/r1/bgpd.conf
#	tests/topotests/bgp_aggregate_address_topo1/r2/bgpd.conf
#	tests/topotests/bgp_aggregator_zero/r1/bgpd.conf
#	tests/topotests/bgp_aggregator_zero/test_bgp_aggregator_zero.py
#	tests/topotests/bgp_aigp/r1/bgpd.conf
#	tests/topotests/bgp_aigp/r1/zebra.conf
#	tests/topotests/bgp_aigp/test_bgp_aigp.py
#	tests/topotests/bgp_as_allow_in/test_bgp_as_allow_in.py
#	tests/topotests/bgp_as_override/test_bgp_as_override.py
#	tests/topotests/bgp_as_wide_bgp_identifier/test_bgp_as_wide_bgp_identifier.py
#	tests/topotests/bgp_asdot_regex/test_bgp_asdot_regex.py
#	tests/topotests/bgp_aspath_zero/r1/bgpd.conf
#	tests/topotests/bgp_aspath_zero/test_bgp_aspath_zero.py
#	tests/topotests/bgp_auth/bgp_auth_common.py
#	tests/topotests/bgp_auth/test_bgp_auth1.py
#	tests/topotests/bgp_auth/test_bgp_auth2.py
#	tests/topotests/bgp_auth/test_bgp_auth3.py
#	tests/topotests/bgp_auth/test_bgp_auth4.py
#	tests/topotests/bgp_basic_functionality_topo1/test_bgp_basic_functionality.py
#	tests/topotests/bgp_bfd_down_cease_notification/r1/bfdd.conf
#	tests/topotests/bgp_bfd_down_cease_notification/r1/bgpd.conf
#	tests/topotests/bgp_bfd_down_cease_notification/test_bgp_bfd_down_cease_notification.py
#	tests/topotests/bgp_blackhole_community/test_bgp_blackhole_community.py
#	tests/topotests/bgp_color_extcommunities/r1/bgpd.conf
#	tests/topotests/bgp_color_extcommunities/test_bgp_color_extcommunities.py
#	tests/topotests/bgp_comm_list_delete/test_bgp_comm-list_delete.py
#	tests/topotests/bgp_comm_list_match/test_bgp_comm_list_match.py
#	tests/topotests/bgp_communities_topo1/test_bgp_communities_topo2.py
#	tests/topotests/bgp_community_alias/test_bgp-community-alias.py
#	tests/topotests/bgp_community_change_update/test_bgp_community_change_update.py
#	tests/topotests/bgp_conditional_advertisement/test_bgp_conditional_advertisement.py
#	tests/topotests/bgp_conditional_advertisement_static_route/test_bgp_conditional_advertisement_static_route.py
#	tests/topotests/bgp_conditional_advertisement_track_peer/test_bgp_conditional_advertisement_track_peer.py
#	tests/topotests/bgp_confed1/test_bgp_confed1.py
#	tests/topotests/bgp_confederation_astype/test_bgp_confederation_astype.py
#	tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py
#	tests/topotests/bgp_default_originate/test_bgp_default_originate_2links.py
#	tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_1.py
#	tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_2.py
#	tests/topotests/bgp_default_originate/test_default_orginate_vrf.py
#	tests/topotests/bgp_default_originate/test_default_originate_conditional_routemap.py
#	tests/topotests/bgp_default_originate_timer/test_bgp_default_originate_timer.py
#	tests/topotests/bgp_default_originate_withdraw/test_bgp_default_originate_withdraw.py
#	tests/topotests/bgp_default_route/test_bgp_default-originate.py
#	tests/topotests/bgp_default_route_route_map_match/test_bgp_default-originate_route-map_match.py
#	tests/topotests/bgp_default_route_route_map_match2/test_bgp_default-originate_route-map_match2.py
#	tests/topotests/bgp_default_route_route_map_match_set/test_bgp_default-originate_route-map_match_set.py
#	tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py
#	tests/topotests/bgp_disable_addpath_rx/test_disable_addpath_rx.py
#	tests/topotests/bgp_distance_change/test_bgp_admin_dist.py
#	tests/topotests/bgp_distance_change/test_bgp_distance_change.py
#	tests/topotests/bgp_dont_capability_negotiate/test_bgp_dont_capability_negotiate.py
#	tests/topotests/bgp_dynamic_capability/r1/frr.conf
#	tests/topotests/bgp_dynamic_capability/r2/frr.conf
#	tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_addpath.py
#	tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_fqdn.py
#	tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_graceful_restart.py
#	tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_orf.py
#	tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_role.py
#	tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_software_version.py
#	tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py
#	tests/topotests/bgp_ebgp_requires_policy/test_bgp_ebgp_requires_policy.py
#	tests/topotests/bgp_ecmp_topo1/r1/bgpd.conf
#	tests/topotests/bgp_ecmp_topo2/test_ibgp_ecmp_topo2.py
#	tests/topotests/bgp_evpn_mh/leaf1/evpn.conf
#	tests/topotests/bgp_evpn_mh/leaf2/evpn.conf
#	tests/topotests/bgp_evpn_mh/spine1/evpn.conf
#	tests/topotests/bgp_evpn_mh/spine2/evpn.conf
#	tests/topotests/bgp_evpn_mh/test_evpn_mh.py
#	tests/topotests/bgp_evpn_mh/torm11/evpn.conf
#	tests/topotests/bgp_evpn_mh/torm12/evpn.conf
#	tests/topotests/bgp_evpn_mh/torm21/evpn.conf
#	tests/topotests/bgp_evpn_mh/torm22/evpn.conf
#	tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
#	tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
#	tests/topotests/bgp_evpn_rt5/r1/bgpd.conf
#	tests/topotests/bgp_evpn_rt5/r1/zebra.conf
#	tests/topotests/bgp_evpn_rt5/r2/bgpd.conf
#	tests/topotests/bgp_evpn_rt5/r2/zebra.conf
#	tests/topotests/bgp_evpn_rt5/test_bgp_evpn.py
#	tests/topotests/bgp_evpn_vxlan_svd_topo1/PE1/evpn.vni.json
#	tests/topotests/bgp_evpn_vxlan_svd_topo1/PE2/evpn.vni.json
#	tests/topotests/bgp_extcomm_list_delete/test_bgp_extcomm-list_delete.py
#	tests/topotests/bgp_extended_optional_parameters_length/test_bgp_extended_optional_parameters_length.py
#	tests/topotests/bgp_features/r1/ip_route.json
#	tests/topotests/bgp_features/r1/ip_route_norib.json
#	tests/topotests/bgp_features/test_bgp_features.py
#	tests/topotests/bgp_flowspec/r1/bgpd.conf
#	tests/topotests/bgp_gr_functionality_topo1/test_bgp_gr_functionality_topo1-1.py
#	tests/topotests/bgp_gr_functionality_topo1/test_bgp_gr_functionality_topo1-2.py
#	tests/topotests/bgp_gr_functionality_topo1/test_bgp_gr_functionality_topo1-3.py
#	tests/topotests/bgp_gr_functionality_topo1/test_bgp_gr_functionality_topo1-4.py
#	tests/topotests/bgp_gr_functionality_topo2/test_bgp_gr_functionality_topo2-1.py
#	tests/topotests/bgp_gr_functionality_topo2/test_bgp_gr_functionality_topo2-2.py
#	tests/topotests/bgp_gr_functionality_topo2/test_bgp_gr_functionality_topo2-3.py
#	tests/topotests/bgp_gr_functionality_topo2/test_bgp_gr_functionality_topo2-4.py
#	tests/topotests/bgp_gr_functionality_topo3/test_bgp_gr_functionality_topo3.py
#	tests/topotests/bgp_gr_notification/r1/bgpd.conf
#	tests/topotests/bgp_gr_notification/r2/bgpd.conf
#	tests/topotests/bgp_gr_notification/test_bgp_gr_notification.py
#	tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_restart_retain_routes.py
#	tests/topotests/bgp_gshut/test_bgp_gshut.py
#	tests/topotests/bgp_ipv4_class_e_peer/test_bgp_ipv4_class_e_peer.py
#	tests/topotests/bgp_ipv4_over_ipv6/test_rfc5549_ebgp_unnumbered_nbr.py
#	tests/topotests/bgp_ipv6_ll_peering/test_bgp_ipv6_ll_peering.py
#	tests/topotests/bgp_l3vpn_label_export/test_bgp_l3vpn_label_export.py
#	tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/add_routes.py
#	tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/adjacencies.py
#	tests/topotests/bgp_l3vpn_to_bgp_vrf/scripts/scale_up.py
#	tests/topotests/bgp_l3vpn_to_bgp_vrf/test_bgp_l3vpn_to_bgp_vrf.py
#	tests/topotests/bgp_labeled_unicast_addpath/test_bgp_labeled_unicast_addpath.py
#	tests/topotests/bgp_labeled_unicast_default_originate/test_bgp_labeled_unicast_default_originate.py
#	tests/topotests/bgp_large_comm_list_match/test_bgp_large_comm_list_match.py
#	tests/topotests/bgp_link_bw_ip/r1/ip-route-1.json
#	tests/topotests/bgp_link_bw_ip/r1/ip-route-2.json
#	tests/topotests/bgp_link_bw_ip/r1/ip-route-3.json
#	tests/topotests/bgp_link_bw_ip/r1/ip-route-6.json
#	tests/topotests/bgp_link_bw_ip/r1/ip-route-7.json
#	tests/topotests/bgp_link_bw_ip/r1/ip-route-8.json
#	tests/topotests/bgp_link_bw_ip/r1/ip-route-9.json
#	tests/topotests/bgp_link_bw_ip/r2/bgp-route-3.json
#	tests/topotests/bgp_link_bw_ip/r2/ip-route-2.json
#	tests/topotests/bgp_link_bw_ip/r5/bgpd.conf
#	tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
#	tests/topotests/bgp_llgr/test_bgp_llgr.py
#	tests/topotests/bgp_local_as/test_bgp_local_as.py
#	tests/topotests/bgp_local_as_dotplus_private_remove/test_bgp_local_as_dotplus_private_remove.py
#	tests/topotests/bgp_local_as_private_remove/test_bgp_local_as_private_remove.py
#	tests/topotests/bgp_local_asn/test_bgp_local_asn_agg.py
#	tests/topotests/bgp_local_asn/test_bgp_local_asn_ecmp.py
#	tests/topotests/bgp_local_asn/test_bgp_local_asn_topo1.py
#	tests/topotests/bgp_local_asn/test_bgp_local_asn_topo2.py
#	tests/topotests/bgp_local_asn/test_bgp_local_asn_vrf_topo1.py
#	tests/topotests/bgp_local_asn/test_bgp_local_asn_vrf_topo2.py
#	tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_agg.py
#	tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_ecmp.py
#	tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_topo1.py
#	tests/topotests/bgp_lu_explicitnull/test_bgp_lu_explicitnull.py
#	tests/topotests/bgp_lu_topo1/R3/bgpd.conf
#	tests/topotests/bgp_lu_topo1/R3/zebra.conf
#	tests/topotests/bgp_lu_topo2/R3/bgpd.conf
#	tests/topotests/bgp_lu_topo2/R3/staticd.conf
#	tests/topotests/bgp_lu_topo2/R3/zebra.conf
#	tests/topotests/bgp_max_med_on_startup/r1/bgpd.conf
#	tests/topotests/bgp_max_med_on_startup/test_bgp_max_med_on_startup.py
#	tests/topotests/bgp_maximum_prefix_invalid_update/test_bgp_maximum_prefix_invalid_update.py
#	tests/topotests/bgp_maximum_prefix_out/test_bgp_maximum_prefix_out.py
#	tests/topotests/bgp_minimum_holdtime/test_bgp_minimum_holdtime.py
#	tests/topotests/bgp_multi_vrf_topo2/test_bgp_multi_vrf_topo2.py
#	tests/topotests/bgp_multiview_topo1/r1/bgpd.conf
#	tests/topotests/bgp_node_target_extcommunities/test_bgp_node_target_extcommunities.py
#	tests/topotests/bgp_oad/test_bgp_oad.py
#	tests/topotests/bgp_orf/test_bgp_orf.py
#	tests/topotests/bgp_path_attribute_discard/r1/frr.conf
#	tests/topotests/bgp_path_attribute_discard/r2/frr.conf
#	tests/topotests/bgp_path_attribute_discard/test_bgp_path_attribute_discard.py
#	tests/topotests/bgp_path_attributes_topo1/test_bgp_path_attributes.py
#	tests/topotests/bgp_path_selection/test_bgp_path_selection.py
#	tests/topotests/bgp_peer_graceful_shutdown/test_bgp_peer_graceful_shutdown.py
#	tests/topotests/bgp_peer_group/test_bgp_peer-group.py
#	tests/topotests/bgp_peer_type_multipath_relax/r1/bgpd.conf
#	tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json
#	tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json
#	tests/topotests/bgp_peer_type_multipath_relax/r2/bgpd.conf
#	tests/topotests/bgp_peer_type_multipath_relax/test_bgp_peer-type_multipath-relax.py
#	tests/topotests/bgp_prefix_list_any/r1/bgpd.conf
#	tests/topotests/bgp_prefix_list_any/r2/bgpd.conf
#	tests/topotests/bgp_prefix_list_any/test_bgp_prefix_list_any.py
#	tests/topotests/bgp_prefix_sid/r1/bgpd.conf
#	tests/topotests/bgp_prefix_sid/test_bgp_prefix_sid.py
#	tests/topotests/bgp_prefix_sid2/r1/bgpd.conf
#	tests/topotests/bgp_prefix_sid2/test_bgp_prefix_sid2.py
#	tests/topotests/bgp_redistribute_table/test_bgp_redistribute_table.py
#	tests/topotests/bgp_reject_as_sets/test_bgp_reject_as_sets.py
#	tests/topotests/bgp_remove_private_as/test_bgp_remove_private_as.py
#	tests/topotests/bgp_remove_private_as_route_map/test_bgp_remove_private_as_route_map.py
#	tests/topotests/bgp_rmap_extcommunity_none/test_bgp_rmap_extcommunity_none.py
#	tests/topotests/bgp_roles_capability/test_bgp_roles_capability.py
#	tests/topotests/bgp_roles_filtering/test_bgp_roles_filtering.py
#	tests/topotests/bgp_route_aggregation/test_bgp_aggregation.py
#	tests/topotests/bgp_route_map_delay_timer/test_bgp_route_map_delay_timer.py
#	tests/topotests/bgp_route_map_match_ipv6_nexthop/r1/bgpd.conf
#	tests/topotests/bgp_route_map_match_ipv6_nexthop/r2/bgpd.conf
#	tests/topotests/bgp_route_map_match_ipv6_nexthop/test_bgp_route_map_match_ipv6_nexthop.py
#	tests/topotests/bgp_route_map_match_source_protocol/test_bgp_route_map_match_source_protocol.py
#	tests/topotests/bgp_route_map_on_match_next/test_bgp_route_map_on_match_next.py
#	tests/topotests/bgp_route_map_vpn_import/test_bgp_route_map_vpn_import.py
#	tests/topotests/bgp_route_origin_parser/test_bgp_route_origin_parser.py
#	tests/topotests/bgp_route_server_client/r1/bgpd.conf
#	tests/topotests/bgp_route_server_client/r2/bgpd.conf
#	tests/topotests/bgp_route_server_client/r3/bgpd.conf
#	tests/topotests/bgp_route_server_client/test_bgp_route_server_client.py
#	tests/topotests/bgp_rpki_topo1/r2/bgpd.conf
#	tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
#	tests/topotests/bgp_rr_ibgp/test_bgp_rr_ibgp_topo1.py
#	tests/topotests/bgp_sender_as_path_loop_detection/test_bgp_sender-as-path-loop-detection.py
#	tests/topotests/bgp_set_aspath_exclude/test_bgp_set_aspath_exclude.py
#	tests/topotests/bgp_set_aspath_replace/test_bgp_set_aspath_replace.py
#	tests/topotests/bgp_set_local_preference_add_subtract/test_bgp_set_local-preference_add_subtract.py
#	tests/topotests/bgp_snmp_mplsl3vpn/ce1/bgpd.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/ce1/zebra.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/ce2/bgpd.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/ce2/zebra.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/ce3/bgpd.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/ce3/zebra.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/ce4/bgpd.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/ce4/zebra.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/r1/bgpd.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/r2/zebra.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/r3/zebra.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/r4/bgpd.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/r4/zebra.conf
#	tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py
#	tests/topotests/bgp_software_version/test_bgp_software_version.py
#	tests/topotests/bgp_soo/test_bgp_soo.py
#	tests/topotests/bgp_srv6l3vpn_over_ipv6/test_bgp_srv6l3vpn_over_ipv6.py
#	tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py
#	tests/topotests/bgp_srv6l3vpn_sid/test_bgp_srv6l3vpn_sid.py
#	tests/topotests/bgp_srv6l3vpn_to_bgp_vrf/test_bgp_srv6l3vpn_to_bgp_vrf.py
#	tests/topotests/bgp_srv6l3vpn_to_bgp_vrf2/test_bgp_srv6l3vpn_to_bgp_vrf2.py
#	tests/topotests/bgp_srv6l3vpn_to_bgp_vrf3/test_bgp_srv6l3vpn_to_bgp_vrf3.py
#	tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
#	tests/topotests/bgp_tcp_mss/r1/bgpd.conf
#	tests/topotests/bgp_tcp_mss/r1/zebra.conf
#	tests/topotests/bgp_tcp_mss/r2/bgpd.conf
#	tests/topotests/bgp_tcp_mss/r2/zebra.conf
#	tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
#	tests/topotests/bgp_tcp_mss/test_bgp_vrf_tcp_mss.py
#	tests/topotests/bgp_tcp_mss_passive/test_bgp_tcp_mss_passive.py
#	tests/topotests/bgp_unnumbered/test_bgp_unnumbered.py
#	tests/topotests/bgp_update_delay/test_bgp_update_delay.py
#	tests/topotests/bgp_vpn_5549_route_map/test_bgp_vpn_5549_route_map.py
#	tests/topotests/bgp_vpnv4_asbr/test_bgp_vpnv4_asbr.py
#	tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py
#	tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py
#	tests/topotests/bgp_vpnv4_noretain/r1/ipv4_vrf_all_routes_init.json
#	tests/topotests/bgp_vpnv4_noretain/r1/ipv4_vrf_all_routes_plus_r1_vrf1.json
#	tests/topotests/bgp_vpnv4_noretain/r1/ipv4_vrf_all_routes_plus_r2_vrf2.json
#	tests/topotests/bgp_vpnv4_noretain/r1/ipv4_vrf_all_routes_plus_r2_vrf3.json
#	tests/topotests/bgp_vpnv4_noretain/test_bgp_vpnv4_noretain.py
#	tests/topotests/bgp_vpnv4_per_nexthop_label/test_bgp_vpnv4_per_nexthop_label.py
#	tests/topotests/bgp_vpnv6_per_nexthop_label/test_bgp_vpnv6_per_nexthop_label.py
#	tests/topotests/bgp_vrf_dynamic_route_leak/test_bgp_vrf_dynamic_route_leak_topo2.py
#	tests/topotests/bgp_vrf_dynamic_route_leak_topo3/test_bgp_vrf_dynamic_route_leak_topo3.py
#	tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-1.py
#	tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-2.py
#	tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-3.py
#	tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py
#	tests/topotests/bgp_vrf_lite_best_path_test/test_bgp_vrf_lite_best_path_topo1.py
#	tests/topotests/bgp_vrf_lite_best_path_test/test_bgp_vrf_lite_best_path_topo2.py
#	tests/topotests/bgp_vrf_netns/r1/bgpd.conf
#	tests/topotests/bgp_vrf_route_leak_basic/r1/bgpd.conf
#	tests/topotests/bgp_vrf_route_leak_basic/test_bgp-vrf-route-leak-basic.py
#	tests/topotests/config_timing/test_config_timing.py
#	tests/topotests/conftest.py
#	tests/topotests/docker/README.md
#	tests/topotests/docker/build.sh
#	tests/topotests/docker/frr-topotests.sh
#	tests/topotests/docker/inner/compile_frr.sh
#	tests/topotests/docker/inner/entrypoint.sh
#	tests/topotests/eigrp_topo1/test_eigrp_topo1.py
#	tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
#	tests/topotests/evpn_type5_test_topo1/test_evpn_type5_topo1.py
#	tests/topotests/example_munet/r1/frr.conf
#	tests/topotests/example_munet/r2/frr.conf
#	tests/topotests/example_munet/r3/frr.conf
#	tests/topotests/example_munet/test_munet.py
#	tests/topotests/example_test/test_template.py
#	tests/topotests/grpc_basic/test_basic_grpc.py
#	tests/topotests/isis_advertise_high_metrics/test_isis_advertise_high_metrics.py
#	tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
#	tests/topotests/isis_lsp_bits_topo1/test_isis_lsp_bits_topo1.py
#	tests/topotests/isis_rlfa_topo1/test_isis_rlfa_topo1.py
#	tests/topotests/isis_snmp/test_isis_snmp.py
#	tests/topotests/isis_sr_flex_algo_topo1/test_isis_sr_flex_algo_topo1.py
#	tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
#	tests/topotests/isis_sr_te_topo1/test_isis_sr_te_topo1.py
#	tests/topotests/isis_sr_topo1/test_isis_sr_topo1.py
#	tests/topotests/isis_srv6_topo1/rt1/step1/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt1/step3/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt1/step5/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt1/step7/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt1/step9/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step1/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step2/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step3/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step4/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step5/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step6/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step7/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step8/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt2/step9/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step1/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step2/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step3/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step4/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step5/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step6/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step7/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step8/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt3/step9/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step1/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step2/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step3/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step4/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step5/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step6/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step7/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step8/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt4/step9/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step1/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step2/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step3/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step4/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step5/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step6/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step7/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step8/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt5/step9/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step1/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step2/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step3/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step4/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step5/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step6/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step7/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step8/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/rt6/step9/show_srv6_locator_table.ref
#	tests/topotests/isis_srv6_topo1/test_isis_srv6_topo1.py
#	tests/topotests/isis_te_topo1/test_isis_te_topo1.py
#	tests/topotests/isis_tilfa_topo1/rt1/step1/show_mpls_table.ref
#	tests/topotests/isis_tilfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
#	tests/topotests/isis_tilfa_topo1/rt2/step1/show_ipv6_route.ref
#	tests/topotests/isis_tilfa_topo1/rt2/step1/show_mpls_table.ref
#	tests/topotests/isis_tilfa_topo1/rt3/step1/show_ipv6_route.ref
#	tests/topotests/isis_tilfa_topo1/rt3/step1/show_mpls_table.ref
#	tests/topotests/isis_tilfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
#	tests/topotests/isis_tilfa_topo1/rt4/step1/show_ipv6_route.ref
#	tests/topotests/isis_tilfa_topo1/rt4/step1/show_mpls_table.ref
#	tests/topotests/isis_tilfa_topo1/rt5/step1/show_ipv6_route.ref
#	tests/topotests/isis_tilfa_topo1/rt5/step1/show_mpls_table.ref
#	tests/topotests/isis_tilfa_topo1/rt6/step1/show_ipv6_route.ref
#	tests/topotests/isis_tilfa_topo1/rt6/step1/show_mpls_table.ref
#	tests/topotests/isis_tilfa_topo1/rt6/zebra.conf
#	tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
#	tests/topotests/isis_topo1/r1/r1_topology.json
#	tests/topotests/isis_topo1/r2/r2_topology.json
#	tests/topotests/isis_topo1/r3/r3_topology.json
#	tests/topotests/isis_topo1/r4/r4_topology.json
#	tests/topotests/isis_topo1/r5/r5_topology.json
#	tests/topotests/isis_topo1/test_isis_topo1.py
#	tests/topotests/isis_topo1_vrf/r1/r1_topology.json
#	tests/topotests/isis_topo1_vrf/r2/r2_topology.json
#	tests/topotests/isis_topo1_vrf/r3/r3_topology.json
#	tests/topotests/isis_topo1_vrf/r4/r4_topology.json
#	tests/topotests/isis_topo1_vrf/r5/r5_topology.json
#	tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.py
#	tests/topotests/kinds.yaml
#	tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py
#	tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py
#	tests/topotests/ldp_snmp/test_ldp_snmp_topo1.py
#	tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.py
#	tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py
#	tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.py
#	tests/topotests/lib/bgp.py
#	tests/topotests/lib/bgprib.py
#	tests/topotests/lib/bmp_collector/bgp/open/__init__.py
#	tests/topotests/lib/bmp_collector/bgp/update/__init__.py
#	tests/topotests/lib/bmp_collector/bgp/update/af.py
#	tests/topotests/lib/bmp_collector/bgp/update/nlri.py
#	tests/topotests/lib/bmp_collector/bgp/update/path_attributes.py
#	tests/topotests/lib/bmp_collector/bgp/update/rd.py
#	tests/topotests/lib/bmp_collector/bmp.py
#	tests/topotests/lib/checkping.py
#	tests/topotests/lib/common_config.py
#	tests/topotests/lib/fe_client.py
#	tests/topotests/lib/grpc-query.py
#	tests/topotests/lib/ospf.py
#	tests/topotests/lib/pim.py
#	tests/topotests/lib/snmptest.py
#	tests/topotests/lib/topogen.py
#	tests/topotests/lib/topojson.py
#	tests/topotests/lib/topotest.py
#	tests/topotests/mgmt_debug_flags/test_debug.py
#	tests/topotests/mgmt_fe_client/mgmt_pb2.py
#	tests/topotests/mgmt_notif/test_notif.py
#	tests/topotests/mgmt_oper/oper-results/result-lib-vrf-default.json
#	tests/topotests/mgmt_oper/oper-results/result-lib-vrf-nokey.json
#	tests/topotests/mgmt_oper/oper-results/result-lib-vrf-zebra-ribs.json
#	tests/topotests/mgmt_oper/oper-results/result-lib-vrf-zebra.json
#	tests/topotests/mgmt_oper/oper-results/result-lib.json
#	tests/topotests/mgmt_oper/oper-results/result-ribs-rib-ipv4-unicast.json
#	tests/topotests/mgmt_oper/oper-results/result-ribs-rib-nokeys.json
#	tests/topotests/mgmt_oper/oper.py
#	tests/topotests/mgmt_oper/simple-results/result-intf-eth0-exact.json
#	tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json
#	tests/topotests/mgmt_oper/simple-results/result-intf-state-mtu.json
#	tests/topotests/mgmt_oper/simple-results/result-intf-state.json
#	tests/topotests/mgmt_oper/simple-results/result-lib-vrf-default.json
#	tests/topotests/mgmt_oper/simple-results/result-lib-vrf-nokey.json
#	tests/topotests/mgmt_oper/simple-results/result-lib-vrf-red.json
#	tests/topotests/mgmt_oper/simple-results/result-lib-vrf-zebra-ribs.json
#	tests/topotests/mgmt_oper/simple-results/result-lib-vrf-zebra.json
#	tests/topotests/mgmt_oper/simple-results/result-lib.json
#	tests/topotests/mgmt_oper/simple-results/result-ribs-rib-ipv4-unicast.json
#	tests/topotests/mgmt_oper/simple-results/result-ribs-rib-nokeys.json
#	tests/topotests/mgmt_oper/simple-results/result-ribs-rib-route-nokey.json
#	tests/topotests/mgmt_oper/simple-results/result-ribs-rib-route-prefix.json
#	tests/topotests/mgmt_oper/test_oper.py
#	tests/topotests/mgmt_oper/test_scale.py
#	tests/topotests/mgmt_oper/test_simple.py
#	tests/topotests/mgmt_tests/test_yang_mgmt.py
#	tests/topotests/msdp_topo1/r1/pimd.conf
#	tests/topotests/msdp_topo1/r2/pimd.conf
#	tests/topotests/msdp_topo1/r4/pimd.conf
#	tests/topotests/msdp_topo1/test_msdp_topo1.py
#	tests/topotests/multicast_pim6_sm_topo1/test_multicast_pim6_sm1.py
#	tests/topotests/multicast_pim6_sm_topo1/test_multicast_pim6_sm2.py
#	tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py
#	tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py
#	tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_ospf_topo2.py
#	tests/topotests/multicast_pim_dr_nondr_test/test_pim_dr_nondr_with_transit_router_topo3.py
#	tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py
#	tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py
#	tests/topotests/multicast_pim_sm_topo3/igmp_group_all_detail.json
#	tests/topotests/multicast_pim_sm_topo3/igmp_single_if_group_all_brief.json
#	tests/topotests/multicast_pim_sm_topo3/igmp_single_if_group_all_detail.json
#	tests/topotests/multicast_pim_sm_topo3/igmp_single_if_single_group_brief.json
#	tests/topotests/multicast_pim_sm_topo3/igmp_single_if_single_group_detail.json
#	tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py
#	tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py
#	tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py
#	tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp1.py
#	tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp2.py
#	tests/topotests/multicast_pim_uplink_topo1/test_multicast_pim_uplink_topo1.py
#	tests/topotests/multicast_pim_uplink_topo2/test_multicast_pim_uplink_topo2.py
#	tests/topotests/munet/__main__.py
#	tests/topotests/munet/base.py
#	tests/topotests/munet/cleanup.py
#	tests/topotests/munet/cli.py
#	tests/topotests/munet/logconf-mutest.yaml
#	tests/topotests/munet/mucmd.py
#	tests/topotests/munet/mulog.py
#	tests/topotests/munet/munet-schema.json
#	tests/topotests/munet/mutest/__main__.py
#	tests/topotests/munet/mutest/userapi.py
#	tests/topotests/munet/mutini.py
#	tests/topotests/munet/native.py
#	tests/topotests/munet/parser.py
#	tests/topotests/munet/testing/fixtures.py
#	tests/topotests/munet/testing/hooks.py
#	tests/topotests/munet/testing/util.py
#	tests/topotests/nb_config/test_nb_config.py
#	tests/topotests/nhrp_redundancy/test_nhrp_redundancy.py
#	tests/topotests/nhrp_topo/r1/nhrpd.conf
#	tests/topotests/nhrp_topo/r1/zebra.conf
#	tests/topotests/nhrp_topo/r2/nhrp4_cache.json
#	tests/topotests/nhrp_topo/r2/nhrp_route4.json
#	tests/topotests/nhrp_topo/r2/nhrpd.conf
#	tests/topotests/nhrp_topo/r2/zebra.conf
#	tests/topotests/nhrp_topo/test_nhrp_topo.py
#	tests/topotests/ospf6_ecmp_inter_area/r5/ospf6d.conf
#	tests/topotests/ospf6_ecmp_inter_area/r6/ospf6d.conf
#	tests/topotests/ospf6_ecmp_inter_area/r7/ospf6d.conf
#	tests/topotests/ospf6_ecmp_inter_area/r7/zebra.conf
#	tests/topotests/ospf6_ecmp_inter_area/r8/ospf6d.conf
#	tests/topotests/ospf6_ecmp_inter_area/r8/zebra.conf
#	tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py
#	tests/topotests/ospf6_gr_topo1/test_ospf6_gr_topo1.py
#	tests/topotests/ospf6_loopback_cost/test_ospf6_loopback_cost.py
#	tests/topotests/ospf6_point_to_multipoint/test_ospf6_point_to_multipoint.py
#	tests/topotests/ospf6_topo1/test_ospf6_topo1.py
#	tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py
#	tests/topotests/ospf_basic_functionality/test_ospf_asbr_summary_topo1.py
#	tests/topotests/ospf_basic_functionality/test_ospf_asbr_summary_type7_lsa.py
#	tests/topotests/ospf_basic_functionality/test_ospf_authentication.py
#	tests/topotests/ospf_basic_functionality/test_ospf_chaos.py
#	tests/topotests/ospf_basic_functionality/test_ospf_ecmp.py
#	tests/topotests/ospf_basic_functionality/test_ospf_flood_reduction.py
#	tests/topotests/ospf_basic_functionality/test_ospf_nssa.py
#	tests/topotests/ospf_basic_functionality/test_ospf_p2mp.py
#	tests/topotests/ospf_basic_functionality/test_ospf_routemaps.py
#	tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py
#	tests/topotests/ospf_basic_functionality/test_ospf_single_area.py
#	tests/topotests/ospf_dual_stack/test_ospf_dual_stack.py
#	tests/topotests/ospf_gr_helper/test_ospf_gr_helper1.py
#	tests/topotests/ospf_gr_helper/test_ospf_gr_helper2.py
#	tests/topotests/ospf_gr_helper/test_ospf_gr_helper3.py
#	tests/topotests/ospf_gr_topo1/test_ospf_gr_topo1.py
#	tests/topotests/ospf_instance_redistribute/test_ospf_instance_redistribute.py
#	tests/topotests/ospf_metric_propagation/h1/frr.conf
#	tests/topotests/ospf_metric_propagation/h2/frr.conf
#	tests/topotests/ospf_metric_propagation/r1/frr.conf
#	tests/topotests/ospf_metric_propagation/r1/show_ip_route-1.json
#	tests/topotests/ospf_metric_propagation/r1/show_ip_route-2.json
#	tests/topotests/ospf_metric_propagation/r1/show_ip_route-3.json
#	tests/topotests/ospf_metric_propagation/r1/show_ip_route-4.json
#	tests/topotests/ospf_metric_propagation/r1/show_ip_route-5.json
#	tests/topotests/ospf_metric_propagation/r1/show_ip_route-6.json
#	tests/topotests/ospf_metric_propagation/r2/frr.conf
#	tests/topotests/ospf_metric_propagation/r3/frr.conf
#	tests/topotests/ospf_metric_propagation/r4/frr.conf
#	tests/topotests/ospf_metric_propagation/ra/frr.conf
#	tests/topotests/ospf_metric_propagation/rb/frr.conf
#	tests/topotests/ospf_metric_propagation/rc/frr.conf
#	tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r1/frr.conf
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r1/zebra-vrf-default.txt
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r1/zebra-vrf-neno.txt
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r2/frr.conf
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r2/zebra-vrf-default.txt
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r2/zebra-vrf-ray.txt
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r3/frr.conf
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r3/zebra-vrf-default.txt
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r4/frr.conf
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/r4/zebra-vrf-default.txt
#	tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py
#	tests/topotests/ospf_netns_vrf/r1/ospfd.conf
#	tests/topotests/ospf_netns_vrf/r1/zebra.conf
#	tests/topotests/ospf_netns_vrf/r1/zebraroute.txt
#	tests/topotests/ospf_netns_vrf/r1/zebraroutedown.txt
#	tests/topotests/ospf_netns_vrf/r2/ospfd.conf
#	tests/topotests/ospf_netns_vrf/r2/zebra.conf
#	tests/topotests/ospf_netns_vrf/r2/zebraroute.txt
#	tests/topotests/ospf_netns_vrf/r2/zebraroutedown.txt
#	tests/topotests/ospf_netns_vrf/r3/ospfd.conf
#	tests/topotests/ospf_netns_vrf/r3/zebra.conf
#	tests/topotests/ospf_netns_vrf/r3/zebraroute.txt
#	tests/topotests/ospf_netns_vrf/r3/zebraroutedown.txt
#	tests/topotests/ospf_netns_vrf/test_ospf_netns_vrf.py
#	tests/topotests/ospf_nssa_topo1/test_ospf_nssa_topo1.py
#	tests/topotests/ospf_prefix_suppression/r1/frr.conf
#	tests/topotests/ospf_prefix_suppression/r2/frr.conf
#	tests/topotests/ospf_prefix_suppression/r3/frr.conf
#	tests/topotests/ospf_prefix_suppression/test_ospf_prefix_suppression.py
#	tests/topotests/ospf_sr_te_topo1/test_ospf_sr_te_topo1.py
#	tests/topotests/ospf_sr_topo1/test_ospf_sr_topo1.py
#	tests/topotests/ospf_suppress_fa/r2/ospfd.conf
#	tests/topotests/ospf_suppress_fa/test_ospf_suppress_fa.py
#	tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py
#	tests/topotests/ospf_topo1/test_ospf_topo1.py
#	tests/topotests/ospf_topo2/test_ospf_topo2.py
#	tests/topotests/ospf_unnumbered/test_ospf_unnumbered.py
#	tests/topotests/ospf_unnumbered_point_to_multipoint/test_ospf_unnumbered_point_to_multipoint.py
#	tests/topotests/ospfapi/test_ospf_clientapi.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_asbr_summary_topo1.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_authentication.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_ecmp.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_ecmp_lan.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_nssa.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_nssa2.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_routemaps.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_rte_calc.py
#	tests/topotests/ospfv3_basic_functionality/test_ospfv3_single_area.py
#	tests/topotests/pim_acl/test_pim_acl.py
#	tests/topotests/pim_basic/test_pim.py
#	tests/topotests/pim_igmp_vrf/r1/ospfd.conf
#	tests/topotests/pim_igmp_vrf/r1/pimd.conf
#	tests/topotests/pim_igmp_vrf/r11/ospfd.conf
#	tests/topotests/pim_igmp_vrf/r12/ospfd.conf
#	tests/topotests/pim_igmp_vrf/test_pim_vrf.py
#	tests/topotests/pytest.ini
#	tests/topotests/rip_allow_ecmp/test_rip_allow_ecmp.py
#	tests/topotests/rip_bfd_topo1/test_rip_bfd_topo1.py
#	tests/topotests/rip_passive_interface/test_rip_passive_interface.py
#	tests/topotests/rip_topo1/r1/show_ip_rip.ref
#	tests/topotests/rip_topo1/r2/show_ip_rip.ref
#	tests/topotests/rip_topo1/r3/show_ip_rip.ref
#	tests/topotests/ripng_allow_ecmp/test_ripng_allow_ecmp.py
#	tests/topotests/ripng_route_map/test_ripng_route_map.py
#	tests/topotests/ripng_topo1/r1/show_ipv6_ripng.ref
#	tests/topotests/ripng_topo1/r2/show_ipv6_ripng.ref
#	tests/topotests/ripng_topo1/r3/show_ipv6_ripng.ref
#	tests/topotests/route_scale/scale_test_common.py
#	tests/topotests/route_scale/test_route_scale1.py
#	tests/topotests/route_scale/test_route_scale2.py
#	tests/topotests/simple_snmp_test/r1/bgpd.conf
#	tests/topotests/simple_snmp_test/r1/isisd.conf
#	tests/topotests/simple_snmp_test/r1/zebra.conf
#	tests/topotests/simple_snmp_test/test_simple_snmp.py
#	tests/topotests/srv6_encap_src_addr/r1/zebra.conf
#	tests/topotests/srv6_encap_src_addr/test_srv6_encap_src_addr.py
#	tests/topotests/srv6_locator/test_srv6_locator.py
#	tests/topotests/srv6_locator_custom_bits_length/test_srv6_locator_custom_bits_length.py
#	tests/topotests/srv6_locator_usid/test_srv6_locator_usid.py
#	tests/topotests/srv6_static_route/test_srv6_route.py
#	tests/topotests/static_routing_mpls/test_static_routing_mpls.py
#	tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py
#	tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py
#	tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py
#	tests/topotests/static_routing_with_ibgp/test_static_routes_topo1_ibgp.py
#	tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py
#	tests/topotests/static_routing_with_ibgp/test_static_routes_topo3_ibgp.py
#	tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py
#	tests/topotests/static_simple/test_static_simple.py
#	tests/topotests/tc_basic/test_tc_basic.py
#	tests/topotests/zebra_multiple_connected/test_zebra_multiple_connected.py
#	tests/topotests/zebra_netlink/test_zebra_netlink.py
#	tests/topotests/zebra_nht_resolution/test_verify_nh_resolution.py
#	tests/topotests/zebra_opaque/test_zebra_opaque.py
#	tests/topotests/zebra_rib/r1/sharp_rmap.ref
#	tests/topotests/zebra_rib/r1/static_rmap.ref
#	tests/topotests/zebra_rib/test_zebra_rib.py
#	tests/topotests/zebra_seg6_route/test_zebra_seg6_route.py
#	tests/topotests/zebra_seg6local_route/r1/routes.json
#	tests/topotests/zebra_seg6local_route/test_zebra_seg6local_route.py
#	tools/checkpatch.pl
#	tools/cocci.h
#	tools/etc/frr/support_bundle_commands.conf
#	tools/etc/iproute2/rt_protos.d/frr.conf
#	tools/etc/logrotate.d/frr
#	tools/etc/rsyslog.d/45-frr.conf
#	tools/frr-reload.py
#	tools/frr_babeltrace.py
#	tools/gcc-plugins/frr-format.c
#	tools/gen_northbound_callbacks.c
#	tools/gen_yang_deviations.c
#	tools/indent.py
#	tools/start-stop-daemon.c
#	tools/subdir.am
#	vrrpd/vrrp_debug.c
#	vrrpd/vrrp_debug.h
#	vrrpd/vrrp_vty.c
#	vtysh/.gitignore
#	vtysh/subdir.am
#	vtysh/vtysh.c
#	vtysh/vtysh.h
#	vtysh/vtysh_config.c
#	vtysh/vtysh_main.c
#	yang/frr-bfdd.yang
#	yang/frr-bgp-common.yang
#	yang/frr-bgp-route-map.yang
#	yang/frr-eigrpd.yang
#	yang/frr-gmp.yang
#	yang/frr-isisd.yang
#	yang/frr-ospf-route-map.yang
#	yang/frr-ospf6-route-map.yang
#	yang/frr-pim-rp.yang
#	yang/frr-pim.yang
#	yang/frr-route-map.yang
#	yang/frr-test-module.yang
#	yang/frr-zebra.yang
#	yang/ietf/ietf-bgp-types.yang
#	yang/subdir.am
#	zebra/.gitignore
#	zebra/connected.c
#	zebra/debug.c
#	zebra/debug.h
#	zebra/debug_nl.c
#	zebra/dpdk/zebra_dplane_dpdk.c
#	zebra/dpdk/zebra_dplane_dpdk.h
#	zebra/dplane_fpm_nl.c
#	zebra/if_ioctl.c
#	zebra/if_netlink.c
#	zebra/if_netlink.h
#	zebra/if_sysctl.c
#	zebra/interface.c
#	zebra/interface.h
#	zebra/ioctl.c
#	zebra/ipforward_proc.c
#	zebra/kernel_netlink.c
#	zebra/kernel_netlink.h
#	zebra/kernel_socket.c
#	zebra/main.c
#	zebra/redistribute.c
#	zebra/redistribute.h
#	zebra/rib.h
#	zebra/rt_netlink.c
#	zebra/rt_socket.c
#	zebra/rtadv.c
#	zebra/subdir.am
#	zebra/table_manager.h
#	zebra/tc_netlink.c
#	zebra/tc_netlink.h
#	zebra/zapi_msg.c
#	zebra/zapi_msg.h
#	zebra/zebra_cli.c
#	zebra/zebra_dplane.c
#	zebra/zebra_dplane.h
#	zebra/zebra_errors.c
#	zebra/zebra_errors.h
#	zebra/zebra_evpn.c
#	zebra/zebra_evpn.h
#	zebra/zebra_evpn_mac.c
#	zebra/zebra_evpn_mh.c
#	zebra/zebra_evpn_mh.h
#	zebra/zebra_fpm_netlink.c
#	zebra/zebra_gr.c
#	zebra/zebra_l2.c
#	zebra/zebra_l2.h
#	zebra/zebra_mpls.c
#	zebra/zebra_mpls.h
#	zebra/zebra_mpls_openbsd.c
#	zebra/zebra_mpls_vty.c
#	zebra/zebra_nb.c
#	zebra/zebra_nb.h
#	zebra/zebra_nb_config.c
#	zebra/zebra_nb_rpcs.c
#	zebra/zebra_nb_state.c
#	zebra/zebra_neigh.c
#	zebra/zebra_netns_id.c
#	zebra/zebra_netns_notify.c
#	zebra/zebra_nhg.c
#	zebra/zebra_nhg.h
#	zebra/zebra_ns.c
#	zebra/zebra_ns.h
#	zebra/zebra_pw.c
#	zebra/zebra_pw.h
#	zebra/zebra_rib.c
#	zebra/zebra_rnh.c
#	zebra/zebra_rnh.h
#	zebra/zebra_routemap.c
#	zebra/zebra_routemap.h
#	zebra/zebra_routemap_nb_config.c
#	zebra/zebra_router.c
#	zebra/zebra_router.h
#	zebra/zebra_script.c
#	zebra/zebra_srte.c
#	zebra/zebra_srv6.c
#	zebra/zebra_srv6.h
#	zebra/zebra_srv6_vty.c
#	zebra/zebra_trace.c
#	zebra/zebra_trace.h
#	zebra/zebra_vrf.c
#	zebra/zebra_vrf.h
#	zebra/zebra_vty.c
#	zebra/zebra_vxlan.c
#	zebra/zebra_vxlan.h
#	zebra/zebra_vxlan_if.c
#	zebra/zserv.c
#	zebra/zserv.h
  • Loading branch information
raja-rajasekar authored and mergify[bot] committed Dec 11, 2024
1 parent e11efcd commit f84dc9c
Show file tree
Hide file tree
Showing 1,992 changed files with 169,050 additions and 211 deletions.
28 changes: 28 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# SPDX-License-Identifier: GPL-2.0
# clang-format configuration file. Intended for clang-format >= 11.
<<<<<<< HEAD
=======
# If the version is changed also check that CI tool frrbot is updated.
>>>>>>> 9b0b9282d (bgpd: Fix bgp core with a possible Intf delete)
#
# For more information, see:
#
Expand Down Expand Up @@ -206,4 +210,28 @@ SpacesInSquareBrackets: false
Standard: Cpp03
TabWidth: 8
UseTab: Always
<<<<<<< HEAD
=======
WhitespaceSensitiveMacros:
- "DEFPY"
- "DEFPY_HIDDEN"
- "DEFPY_NOSH"
- "DEFPY_YANG"
- "DEFPY_YANG_HIDDEN"
- "DEFPY_YANG_NOSH"
- "DEFSH"
- "DEFSH_HIDDEN"
- "DEFUN"
- "DEFUN_HIDDEN"
- "DEFUN_NOSH"
- "DEFUN_YANG"
- "DEFUN_YANG_HIDDEN"
- "DEFUN_YANG_NOSH"
- "DEFUNSH"
- "DEFUNSH_HIDDEN"
- "ALIAS"
- "ALIAS_HIDDEN"
- "ALIAS_YANG"
- "ALIAS_DEPRECATED"
>>>>>>> 9b0b9282d (bgpd: Fix bgp core with a possible Intf delete)
...
5 changes: 5 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,8 @@ c14777c6bfd0a446c85243d3a9835054a259c276
8451921b70044a2c1075e7ba391f095fabee2550
bf8d3d6aca3f20255a621ed1c148fd05b3a8ae5c
96941f80927ce31a41f7d1905717f099187be723
<<<<<<< HEAD
=======
# apply `black` python formatting for all tests/topotests
1a1c2a9f84d0ad1bdadc0cb47d6175d4ccc32544
>>>>>>> 9b0b9282d (bgpd: Fix bgp core with a possible Intf delete)
78 changes: 78 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Bug report
description: Report a bug in the FRRouting software
labels: triage
body:
- type: markdown
attributes:
value: >
**This form is only for reporting a bug in the FRRouting software.**
If you need help troubleshooting your configuration, have a problem
building or installing the software, or want to ask a question or
discuss the project, learn how to [connect with the FRRouting
community](https://frrouting.org/community/).
**Do not include sensitive information in this report.** IP addresses
should be masked (example: 192.XXX.XXX.32/24).
- type: textarea
id: description
attributes:
label: Description
description: Provide a clear and concise description of the bug.
validations:
required: true
- type: textarea
id: version
attributes:
label: Version
description: >
Run the `show version` command in the VTY shell, and provide the output
here. (If possible, test the current development version of FRRouting
for this bug.)
render: text
validations:
required: true
- type: textarea
id: how-to-reproduce
attributes:
label: How to reproduce
description: >
Give a list of steps that someone else can follow to observe
the bug. Be as descriptive as possible, including any relevant
configuration files and commands used. Topology diagrams are
helpful when the bug involves more than one router.
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
description: >
What do you expect to happen when following the steps above?
validations:
required: true
- type: textarea
id: actual-behavior
attributes:
label: Actual behavior
description: >
What actually happens when following the steps above? Include
screenshots, log file snippets, and/or platform routing tables
as appropriate. If a crash occurs, provide a backtrace.
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Additional context
description: >
Include any other relevant information about this bug here.
- type: checkboxes
id: checklist
attributes:
label: Checklist
options:
- label: I have searched the open issues for this bug.
required: true
- label: I have not included sensitive information in this report.
required: true
163 changes: 163 additions & 0 deletions .github/workflows/build-test-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
name: build-test

on:
pull_request:
push:
branches:
- 'master'
- 'stable/**'

defaults:
run:
shell: bash

jobs:
build-docker:
name: Build the ubuntu 22.04 docker image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Build docker image
run: |
docker build -t frr-ubuntu22 -f docker/ubuntu-ci/Dockerfile .
docker save --output /tmp/frr-ubuntu22.tar frr-ubuntu22
- name: Upload docker image artifact
uses: actions/upload-artifact@v4
with:
name: ubuntu-image
path: /tmp/frr-ubuntu22.tar
- name: Clear any previous results
# So if all jobs are re-run then all tests will be re-run
run: |
rm -rf test-results*
mkdir -p test-results
touch test-results/cleared-results.txt
- name: Save cleared previous results
uses: actions/upload-artifact@v4
with:
name: test-results
path: test-results
overwrite: true
- name: Cleanup
if: ${{ always() }}
run: rm -rf test-results* /tmp/frr-ubuntu22.tar

test-docker:
name: Test ubuntu docker image
needs: build-docker
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Fetch docker image artifact
uses: actions/download-artifact@v4
with:
name: ubuntu-image
path: /tmp
- name: Fetch previous results
if: ${{ github.run_attempt > 1 }}
uses: actions/download-artifact@v4
with:
name: test-results
path: test-results
- name: Run topotests
run: |
uname -a
MODPKGVER=$(uname -r)
sudo apt-get update -y
# Github is running old kernels but installing newer packages :(
sudo apt-get install -y linux-modules-extra-azure linux-modules-${MODPKGVER} linux-modules-extra-${MODPKGVER} python3-xmltodict
sudo modprobe vrf || true
sudo modprobe mpls-iptunnel
sudo modprobe mpls-router
docker load --input /tmp/frr-ubuntu22.tar
if ! grep CONFIG_IP_MROUTE_MULTIPLE_TABLES=y /boot/config*; then
ADD_DOCKER_ENV+="-e MROUTE_VRF_MISSING=1"
fi
echo "ADD_DOCKER_ENV: ${ADD_DOCKER_ENV}"
if [ -f test-results/topotests.xml ]; then
./tests/topotests/analyze.py -r test-results
ls -l test-results/topotests.xml
run_tests=$(./tests/topotests/analyze.py -r test-results | cut -f1 -d: | sort -u)
else
echo "No test results dir"
run_tests=""
fi
rm -rf test-results* /tmp/topotests
echo RUN_TESTS: $run_tests
if docker run --init -i --privileged --name frr-ubuntu-cont ${ADD_DOCKER_ENV} -v /lib/modules:/lib/modules frr-ubuntu22 \
bash -c 'cd ~/frr/tests/topotests ; sudo -E pytest -n$(($(nproc) * 5 / 2)) --dist=loadfile '$run_tests; then
echo "All tests passed."
exit 0
fi
# Grab the results from the container
if ! ./tests/topotests/analyze.py -Ar test-results -C frr-ubuntu-cont; then
if [ ! -d test-results ]; then
echo "ERROR: Basic failure in docker run, no test results directory available." >&2
exit 1;
fi
if [ ! -f test-results/topotests.xml ]; then
# In this case we may be missing topotests.xml
echo "ERROR: No topotests.xml available perhaps docker run aborted?" >&2
exit 1;
fi
echo "WARNING: analyyze.py returned error but grabbed results anyway." >&2
fi
# Save some information useful for debugging
cp /boot/config* test-results/
sysctl -a > test-results/sysctl.out 2> /dev/null
# Now get the failed tests (if any) from the archived results directory.
rerun_tests=$(./tests/topotests/analyze.py -r test-results | cut -f1 -d: | sort -u)
if [ -z "$rerun_tests" ]; then
echo "All tests passed during parallel run."
exit 0
fi
echo "ERROR: Some tests failed during parallel run, rerunning serially." >&2
echo RERUN_TESTS: $rerun_tests >&2
docker stop frr-ubuntu-cont
docker rm frr-ubuntu-cont
mv test-results test-results-initial
if docker run --init -i --privileged --name frr-ubuntu-cont ${ADD_DOCKER_ENV} -v /lib/modules:/lib/modules frr-ubuntu22 \
bash -c 'cd ~/frr/tests/topotests ; sudo -E pytest '$rerun_tests; then
echo "All rerun tests passed."
exit 0
fi
echo "Some rerun tests still failed."
exit 1
- name: Gather results
if: ${{ always() }}
run: |
if [ ! -d test-results ]; then
if ! ./tests/topotests/analyze.py -Ar test-results -C frr-ubuntu-cont; then
echo "ERROR: gathering results produced an error, perhaps due earlier run cancellation." >&2
fi
fi
- name: Upload test results
if: ${{ always() }}
uses: actions/upload-artifact@v4
with:
name: test-results
path: |
test-results
test-results-initial
overwrite: true
- name: Cleanup
if: ${{ always() }}
run: |
rm -rf test-results* /tmp/frr-ubuntu22.tar
docker stop frr-ubuntu-cont || true
docker rm frr-ubuntu-cont || true
5 changes: 5 additions & 0 deletions .github/workflows/conflicts.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
name: Add a conflict label if PR needs to rebase

on:
<<<<<<< HEAD
push:
pull_request_target:
types: [synchronize]
=======
pull_request_target:
types: [opened, reopened, synchronize]
>>>>>>> 9b0b9282d (bgpd: Fix bgp core with a possible Intf delete)

jobs:
conflicts:
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,10 @@
*.cg.dot
*.cg.svg
*.xref
<<<<<<< HEAD
=======
*_tsexpand.h
>>>>>>> 9b0b9282d (bgpd: Fix bgp core with a possible Intf delete)

### gcov outputs

Expand Down
Loading

0 comments on commit f84dc9c

Please sign in to comment.