summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.git-blame-ignore-revs1
-rw-r--r--.travis.yml4
-rw-r--r--Makefile.am10
-rw-r--r--babeld/babeld.c94
-rw-r--r--bgpd/bgp_clist.c3
-rw-r--r--bgpd/bgp_community.c5
-rw-r--r--bgpd/bgp_community_alias.c154
-rw-r--r--bgpd/bgp_community_alias.h46
-rw-r--r--bgpd/bgp_conditional_adv.c2
-rw-r--r--bgpd/bgp_dump.c7
-rw-r--r--bgpd/bgp_evpn.c34
-rw-r--r--bgpd/bgp_evpn_mh.c58
-rw-r--r--bgpd/bgp_evpn_mh.h6
-rw-r--r--bgpd/bgp_io.c1
-rw-r--r--bgpd/bgp_lcommunity.c5
-rw-r--r--bgpd/bgp_main.c16
-rw-r--r--bgpd/bgp_memory.c2
-rw-r--r--bgpd/bgp_memory.h2
-rw-r--r--bgpd/bgp_nb.c2
-rw-r--r--bgpd/bgp_nb_config.c104
-rw-r--r--bgpd/bgp_network.c11
-rw-r--r--bgpd/bgp_nht.c4
-rw-r--r--bgpd/bgp_open.c6
-rw-r--r--bgpd/bgp_packet.c207
-rw-r--r--bgpd/bgp_pbr.c4
-rw-r--r--bgpd/bgp_route.c1
-rw-r--r--bgpd/bgp_routemap_nb.c2
-rw-r--r--bgpd/bgp_routemap_nb_config.c2
-rw-r--r--bgpd/bgp_trace.c2
-rw-r--r--bgpd/bgp_vty.c178
-rw-r--r--bgpd/bgp_vty.h1
-rw-r--r--bgpd/bgp_zebra.c25
-rw-r--r--bgpd/bgpd.c89
-rw-r--r--bgpd/bgpd.h18
-rw-r--r--bgpd/subdir.am2
-rw-r--r--configure.ac2
-rw-r--r--doc/developer/lists.rst10
-rw-r--r--doc/developer/topotests.rst12
-rw-r--r--doc/user/basic.rst6
-rw-r--r--doc/user/bgp.rst181
-rw-r--r--doc/user/isisd.rst7
-rw-r--r--doc/user/kernel.rst20
-rw-r--r--doc/user/ospf6d.rst48
-rw-r--r--doc/user/pathd.rst40
-rw-r--r--doc/user/pim.rst50
-rw-r--r--doc/user/ripd.rst15
-rw-r--r--doc/user/ripngd.rst32
-rw-r--r--doc/user/sharp.rst5
-rw-r--r--eigrpd/eigrp_main.c2
-rw-r--r--eigrpd/eigrp_metric.c2
-rw-r--r--eigrpd/eigrp_packet.c11
-rw-r--r--eigrpd/eigrp_routemap.c45
-rw-r--r--include/linux/if_packet.h16
-rw-r--r--include/linux/if_tunnel.h71
-rw-r--r--isisd/isis_adjacency.h2
-rw-r--r--isisd/isis_bfd.c421
-rw-r--r--isisd/isis_bfd.h8
-rw-r--r--isisd/isis_circuit.c5
-rw-r--r--isisd/isis_circuit.h8
-rw-r--r--isisd/isis_cli.c68
-rw-r--r--isisd/isis_lfa.c5
-rw-r--r--isisd/isis_main.c2
-rw-r--r--isisd/isis_nb.c12
-rw-r--r--isisd/isis_nb.h4
-rw-r--r--isisd/isis_nb_config.c93
-rw-r--r--isisd/isis_snmp.c6
-rw-r--r--isisd/isis_vty_fabricd.c15
-rw-r--r--isisd/isis_zebra.c2
-rw-r--r--isisd/isisd.c3
-rw-r--r--ldpd/lde.c24
-rw-r--r--ldpd/lde.h1
-rw-r--r--ldpd/ldp_vty.h1
-rw-r--r--ldpd/ldp_vty_cmds.c11
-rw-r--r--ldpd/ldp_vty_conf.c16
-rw-r--r--ldpd/ldp_zebra.c9
-rw-r--r--ldpd/ldpd.c10
-rw-r--r--ldpd/ldpd.h2
-rw-r--r--lib/assert/assert.h98
-rw-r--r--lib/bfd.c419
-rw-r--r--lib/bfd.h78
-rw-r--r--lib/clippy.c14
-rw-r--r--lib/command.h1
-rw-r--r--lib/compiler.h6
-rw-r--r--lib/distribute.c174
-rw-r--r--lib/distribute.h6
-rw-r--r--lib/filter_cli.c42
-rw-r--r--lib/if.h3
-rw-r--r--lib/libfrr_trace.c2
-rw-r--r--lib/link_state.c2
-rw-r--r--lib/linklist.c17
-rw-r--r--lib/linklist.h13
-rw-r--r--lib/log.c16
-rw-r--r--lib/log.h2
-rw-r--r--lib/log_vty.c13
-rw-r--r--lib/nexthop.c102
-rw-r--r--lib/nexthop.h5
-rw-r--r--lib/privs.c4
-rw-r--r--lib/privs.h1
-rw-r--r--lib/routing_nb.c2
-rw-r--r--lib/routing_nb_config.c2
-rw-r--r--lib/sockopt.c36
-rw-r--r--lib/sockopt.h20
-rw-r--r--lib/subdir.am5
-rw-r--r--lib/thread.c7
-rw-r--r--lib/typerb.h1
-rw-r--r--lib/typesafe.h71
-rw-r--r--lib/xref.h1
-rw-r--r--lib/zassert.h45
-rw-r--r--lib/zclient.c25
-rw-r--r--lib/zclient.h6
-rw-r--r--lib/zebra.h2
-rw-r--r--lib/zlog.c45
-rw-r--r--lib/zlog.h5
-rw-r--r--nhrpd/linux.c22
-rw-r--r--nhrpd/netlink.h11
-rw-r--r--nhrpd/netlink_arp.c8
-rw-r--r--nhrpd/netlink_gre.c152
-rw-r--r--nhrpd/nhrp_cache.c2
-rw-r--r--nhrpd/nhrp_interface.c93
-rw-r--r--nhrpd/nhrp_main.c2
-rw-r--r--nhrpd/nhrp_route.c78
-rw-r--r--nhrpd/nhrpd.h33
-rw-r--r--nhrpd/subdir.am1
-rw-r--r--nhrpd/zbuf.c4
-rw-r--r--nhrpd/zbuf.h1
-rw-r--r--ospf6d/ospf6_abr.c27
-rw-r--r--ospf6d/ospf6_abr.h2
-rw-r--r--ospf6d/ospf6_area.c234
-rw-r--r--ospf6d/ospf6_area.h1
-rw-r--r--ospf6d/ospf6_asbr.c71
-rw-r--r--ospf6d/ospf6_flood.c6
-rw-r--r--ospf6d/ospf6_interface.c311
-rw-r--r--ospf6d/ospf6_interface.h1
-rw-r--r--ospf6d/ospf6_intra.c34
-rw-r--r--ospf6d/ospf6_main.c7
-rw-r--r--ospf6d/ospf6_message.c393
-rw-r--r--ospf6d/ospf6_message.h32
-rw-r--r--ospf6d/ospf6_neighbor.c108
-rw-r--r--ospf6d/ospf6_route.c61
-rw-r--r--ospf6d/ospf6_routemap_nb.c2
-rw-r--r--ospf6d/ospf6_routemap_nb_config.c2
-rw-r--r--ospf6d/ospf6_top.c384
-rw-r--r--ospf6d/ospf6_top.h6
-rw-r--r--ospf6d/ospf6_zebra.c23
-rw-r--r--ospf6d/ospf6d.c1057
-rw-r--r--ospf6d/ospf6d.h12
-rw-r--r--ospfd/ospf_asbr.c94
-rw-r--r--ospfd/ospf_flood.c10
-rw-r--r--ospfd/ospf_gr_helper.c53
-rw-r--r--ospfd/ospf_nsm.c2
-rw-r--r--ospfd/ospf_packet.c2
-rw-r--r--ospfd/ospf_routemap_nb.c2
-rw-r--r--ospfd/ospf_routemap_nb_config.c2
-rw-r--r--ospfd/ospf_spf.c2
-rw-r--r--ospfd/ospf_sr.c3
-rw-r--r--ospfd/ospf_vty.c31
-rw-r--r--ospfd/ospf_zebra.c493
-rw-r--r--ospfd/ospf_zebra.h6
-rw-r--r--ospfd/ospfd.c37
-rw-r--r--pathd/path_cli.c299
-rw-r--r--pathd/path_debug.c2
-rw-r--r--pathd/path_main.c4
-rw-r--r--pathd/path_nb.c9
-rw-r--r--pathd/path_nb.h2
-rw-r--r--pathd/path_nb_config.c41
-rw-r--r--pathd/path_pcep_config.c89
-rw-r--r--pathd/path_pcep_debug.c2
-rw-r--r--pathd/path_ted.c726
-rw-r--r--pathd/path_ted.h178
-rw-r--r--pathd/path_zebra.c58
-rw-r--r--pathd/pathd.c278
-rw-r--r--pathd/pathd.h70
-rw-r--r--pathd/subdir.am8
-rw-r--r--pbrd/pbr_zebra.c4
-rw-r--r--pceplib/pcep_msg_messages.c4
-rw-r--r--pceplib/pcep_msg_messages_encoding.c4
-rw-r--r--pceplib/pcep_msg_object_error_types.c4
-rw-r--r--pceplib/pcep_msg_objects.c4
-rw-r--r--pceplib/pcep_msg_objects_encoding.c4
-rw-r--r--pceplib/pcep_msg_tlvs.c4
-rw-r--r--pceplib/pcep_msg_tools.c4
-rw-r--r--pceplib/pcep_session_logic.c4
-rw-r--r--pceplib/pcep_session_logic_counters.c4
-rw-r--r--pceplib/pcep_session_logic_loop.c4
-rw-r--r--pceplib/pcep_session_logic_states.c4
-rw-r--r--pceplib/pcep_socket_comm_loop.c4
-rw-r--r--pceplib/pcep_socket_comm_mock.c4
-rw-r--r--pceplib/pcep_timers.c4
-rw-r--r--pceplib/pcep_timers_event_loop.c4
-rw-r--r--pceplib/pcep_utils_double_linked_list.c4
-rw-r--r--pceplib/pcep_utils_logging.c4
-rw-r--r--pceplib/pcep_utils_memory.c4
-rw-r--r--pceplib/pcep_utils_ordered_list.c4
-rw-r--r--pceplib/pcep_utils_queue.c4
-rw-r--r--pceplib/test/pcep_msg_messages_test.c46
-rw-r--r--pceplib/test/pcep_msg_messages_tests.c4
-rw-r--r--pceplib/test/pcep_msg_object_error_types_test.c4
-rw-r--r--pceplib/test/pcep_msg_objects_test.c23
-rw-r--r--pceplib/test/pcep_msg_tlvs_test.c25
-rw-r--r--pceplib/test/pcep_msg_tools_test.c27
-rw-r--r--pceplib/test/pcep_pcc_api_test.c14
-rw-r--r--pceplib/test/pcep_pcc_api_tests.c4
-rw-r--r--pceplib/test/pcep_session_logic_loop_test.c9
-rw-r--r--pceplib/test/pcep_session_logic_states_test.c14
-rw-r--r--pceplib/test/pcep_session_logic_test.c21
-rw-r--r--pceplib/test/pcep_session_logic_tests.c4
-rw-r--r--pceplib/test/pcep_socket_comm_loop_test.c4
-rw-r--r--pceplib/test/pcep_socket_comm_test.c17
-rw-r--r--pceplib/test/pcep_socket_comm_tests.c4
-rw-r--r--pceplib/test/pcep_timers_event_loop_test.c4
-rw-r--r--pceplib/test/pcep_timers_test.c4
-rw-r--r--pceplib/test/pcep_timers_tests.c4
-rw-r--r--pceplib/test/pcep_utils_counters_test.c7
-rw-r--r--pceplib/test/pcep_utils_double_linked_list_test.c18
-rw-r--r--pceplib/test/pcep_utils_memory_test.c4
-rw-r--r--pceplib/test/pcep_utils_ordered_list_test.c9
-rw-r--r--pceplib/test/pcep_utils_queue_test.c6
-rw-r--r--pceplib/test/pcep_utils_tests.c4
-rw-r--r--pimd/pim_assert.c2
-rw-r--r--pimd/pim_bsm.c173
-rw-r--r--pimd/pim_bsm.h43
-rw-r--r--pimd/pim_cmd.c667
-rw-r--r--pimd/pim_hello.c8
-rw-r--r--pimd/pim_iface.c42
-rw-r--r--pimd/pim_ifchannel.c12
-rw-r--r--pimd/pim_igmp.c46
-rw-r--r--pimd/pim_igmpv2.c2
-rw-r--r--pimd/pim_igmpv3.c52
-rw-r--r--pimd/pim_join.c4
-rw-r--r--pimd/pim_msdp.c20
-rw-r--r--pimd/pim_msdp.h2
-rw-r--r--pimd/pim_nb_config.c32
-rw-r--r--pimd/pim_neighbor.c32
-rw-r--r--pimd/pim_oil.c4
-rw-r--r--pimd/pim_pim.c16
-rw-r--r--pimd/pim_rp.c2
-rw-r--r--pimd/pim_ssmpingd.c6
-rw-r--r--pimd/pim_time.c6
-rw-r--r--pimd/pim_tlv.c2
-rw-r--r--pimd/pim_upstream.c22
-rw-r--r--pimd/pim_upstream.h1
-rw-r--r--pimd/pim_vty.c34
-rw-r--r--pimd/pim_zebra.c4
-rw-r--r--pimd/pimd.c5
-rw-r--r--python/firstheader.py92
-rw-r--r--qpb/subdir.am1
-rw-r--r--ripd/rip_cli.c45
-rw-r--r--ripd/ripd.c3
-rw-r--r--ripngd/ripng_cli.c47
-rw-r--r--ripngd/ripngd.c3
-rw-r--r--sharpd/sharp_vty.c28
-rw-r--r--sharpd/sharp_zebra.c6
-rw-r--r--sharpd/sharp_zebra.h2
-rw-r--r--staticd/static_nb.c2
-rw-r--r--staticd/static_nb_config.c2
-rw-r--r--tests/.gitignore3
-rw-r--r--tests/bgpd/test_aspath.c6
-rw-r--r--tests/bgpd/test_capability.c2
-rw-r--r--tests/bgpd/test_mp_attr.c2
-rw-r--r--tests/lib/cxxcompat.c1
-rw-r--r--tests/lib/test_assert.c64
-rw-r--r--tests/lib/test_assert.py56
-rw-r--r--tests/lib/test_nexthop.c201
-rw-r--r--tests/lib/test_nexthop.py8
-rw-r--r--tests/lib/test_ringbuf.c2
-rw-r--r--tests/lib/test_seqlock.c3
-rw-r--r--tests/lib/test_typelist.h126
-rw-r--r--tests/subdir.am14
-rw-r--r--tests/topotests/Dockerfile1
-rw-r--r--tests/topotests/all_protocol_startup/r1/babeld.conf (renamed from tests/topotests/all-protocol-startup/r1/babeld.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/bgpd.conf (renamed from tests/topotests/all-protocol-startup/r1/bgpd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ip_nht.ref (renamed from tests/topotests/all-protocol-startup/r1/ip_nht.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ipv4_routes.ref (renamed from tests/topotests/all-protocol-startup/r1/ipv4_routes.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ipv6_nht.ref (renamed from tests/topotests/all-protocol-startup/r1/ipv6_nht.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ipv6_routes.ref (renamed from tests/topotests/all-protocol-startup/r1/ipv6_routes.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/isisd.conf (renamed from tests/topotests/all-protocol-startup/r1/isisd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ldpd.conf (renamed from tests/topotests/all-protocol-startup/r1/ldpd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/nhrpd.conf (renamed from tests/topotests/all-protocol-startup/r1/nhrpd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ospf6d.conf (renamed from tests/topotests/all-protocol-startup/r1/ospf6d.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ospf6d.conf-pre-v4 (renamed from tests/topotests/all-protocol-startup/r1/ospf6d.conf-pre-v4)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ospfd.conf (renamed from tests/topotests/all-protocol-startup/r1/ospfd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/pbrd.conf (renamed from tests/topotests/all-protocol-startup/r1/pbrd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/rip_status.ref (renamed from tests/topotests/all-protocol-startup/r1/rip_status.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ripd.conf (renamed from tests/topotests/all-protocol-startup/r1/ripd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ripng_status.ref (renamed from tests/topotests/all-protocol-startup/r1/ripng_status.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/ripngd.conf (renamed from tests/topotests/all-protocol-startup/r1/ripngd.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post4.1.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post4.1.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post5.0.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post5.0.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post6.1.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post6.1.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv4.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv6-post4.1.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv6-post4.1.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv6.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv6.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_post6.1.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv6_post6.1.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_summary.ref (renamed from tests/topotests/all-protocol-startup/r1/show_bgp_ipv6_summary.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_ip_bgp_summary.ref (renamed from tests/topotests/all-protocol-startup/r1/show_ip_bgp_summary.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_ip_ospf_interface.ref (renamed from tests/topotests/all-protocol-startup/r1/show_ip_ospf_interface.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_ipv6_ospf6_interface (renamed from tests/topotests/all-protocol-startup/r1/show_ipv6_ospf6_interface)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_ipv6_ospf6_interface.ref (renamed from tests/topotests/all-protocol-startup/r1/show_ipv6_ospf6_interface.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_isis_interface_detail.ref (renamed from tests/topotests/all-protocol-startup/r1/show_isis_interface_detail.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_mpls_ldp_interface.ref (renamed from tests/topotests/all-protocol-startup/r1/show_mpls_ldp_interface.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_route_map.ref (renamed from tests/topotests/all-protocol-startup/r1/show_route_map.ref)0
-rw-r--r--tests/topotests/all_protocol_startup/r1/zebra.conf (renamed from tests/topotests/all-protocol-startup/r1/zebra.conf)0
-rw-r--r--tests/topotests/all_protocol_startup/test_all_protocol_startup.dot (renamed from tests/topotests/all-protocol-startup/test_all_protocol_startup.dot)0
-rw-r--r--tests/topotests/all_protocol_startup/test_all_protocol_startup.pdf (renamed from tests/topotests/all-protocol-startup/test_all_protocol_startup.pdf)bin21760 -> 21760 bytes
-rw-r--r--tests/topotests/all_protocol_startup/test_all_protocol_startup.py (renamed from tests/topotests/all-protocol-startup/test_all_protocol_startup.py)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/__init__.py (renamed from tests/topotests/bfd-bgp-cbit-topo3/__init__.py)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/bfdd.conf (renamed from tests/topotests/bfd-bgp-cbit-topo3/r1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/bgp_ipv6_routes_down.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r1/bgp_ipv6_routes_down.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/bgpd.conf (renamed from tests/topotests/bfd-bgp-cbit-topo3/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/ipv6_routes.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r1/ipv6_routes.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/peers.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r1/peers.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/peers_down.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r1/peers_down.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/zebra.conf (renamed from tests/topotests/bfd-bgp-cbit-topo3/r1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r2/zebra.conf (renamed from tests/topotests/bfd-bgp-cbit-topo3/r2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r3/bfdd.conf (renamed from tests/topotests/bfd-bgp-cbit-topo3/r3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r3/bgp_ipv6_routes_down.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r3/bgp_ipv6_routes_down.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r3/bgpd.conf (renamed from tests/topotests/bfd-bgp-cbit-topo3/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r3/ipv6_routes.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r3/ipv6_routes.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r3/peers.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r3/peers.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r3/peers_down.json (renamed from tests/topotests/bfd-bgp-cbit-topo3/r3/peers_down.json)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r3/zebra.conf (renamed from tests/topotests/bfd-bgp-cbit-topo3/r3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.dot (renamed from tests/topotests/bfd-bgp-cbit-topo3/test_bfd_bgp_cbit_topo3.dot)0
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.py (renamed from tests/topotests/bfd-bgp-cbit-topo3/test_bfd_bgp_cbit_topo3.py)0
-rw-r--r--tests/topotests/bfd_isis_topo1/__init__.py (renamed from tests/topotests/bfd-isis-topo1/__init__.py)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/bfdd.conf (renamed from tests/topotests/bfd-isis-topo1/rt1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/isisd.conf (renamed from tests/topotests/bfd-isis-topo1/rt1/isisd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step1/show_ip_route.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step1/show_ipv6_route.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step2/show_bfd_peers.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step2/show_bfd_peers.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_healthy.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_healthy.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_rt2_down.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_rt2_down.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_rt3_down.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_rt3_down.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_healthy.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_healthy.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_rt2_down.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_rt2_down.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_rt3_down.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_rt3_down.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_healthy.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_healthy.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt2_down.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_rt2_down.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt3_down.ref (renamed from tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_rt3_down.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt1/zebra.conf (renamed from tests/topotests/bfd-isis-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt2/bfdd.conf (renamed from tests/topotests/bfd-isis-topo1/rt2/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt2/isisd.conf (renamed from tests/topotests/bfd-isis-topo1/rt2/isisd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt2/step2/show_bfd_peers.ref (renamed from tests/topotests/bfd-isis-topo1/rt2/step2/show_bfd_peers.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt2/zebra.conf (renamed from tests/topotests/bfd-isis-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt3/bfdd.conf (renamed from tests/topotests/bfd-isis-topo1/rt3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt3/isisd.conf (renamed from tests/topotests/bfd-isis-topo1/rt3/isisd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt3/step2/show_bfd_peers.ref (renamed from tests/topotests/bfd-isis-topo1/rt3/step2/show_bfd_peers.ref)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt3/zebra.conf (renamed from tests/topotests/bfd-isis-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt4/bfdd.conf (renamed from tests/topotests/bfd-isis-topo1/rt4/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt4/isisd.conf (renamed from tests/topotests/bfd-isis-topo1/rt4/isisd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt4/zebra.conf (renamed from tests/topotests/bfd-isis-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt5/bfdd.conf (renamed from tests/topotests/bfd-isis-topo1/rt5/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt5/isisd.conf (renamed from tests/topotests/bfd-isis-topo1/rt5/isisd.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/rt5/zebra.conf (renamed from tests/topotests/bfd-isis-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/bfd_isis_topo1/test_bfd_isis_topo1.py (renamed from tests/topotests/bfd-isis-topo1/test_bfd_isis_topo1.py)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/__init__.py (renamed from tests/topotests/bfd-ospf-topo1/__init__.py)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/bfdd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/ospf6d.conf (renamed from tests/topotests/bfd-ospf-topo1/rt1/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/ospfd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt1/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step1/show_ip_route.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step1/show_ipv6_route.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step2/show_bfd_peers.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step2/show_bfd_peers.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_healthy.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_healthy.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_rt2_down.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_rt2_down.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_rt3_down.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_rt3_down.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_healthy.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_healthy.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_rt2_down.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_rt2_down.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_rt3_down.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_rt3_down.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_healthy.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_healthy.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt2_down.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_rt2_down.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt3_down.ref (renamed from tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_rt3_down.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt1/zebra.conf (renamed from tests/topotests/bfd-ospf-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt2/bfdd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt2/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt2/ospf6d.conf (renamed from tests/topotests/bfd-ospf-topo1/rt2/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt2/ospfd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt2/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt2/step2/show_bfd_peers.ref (renamed from tests/topotests/bfd-ospf-topo1/rt2/step2/show_bfd_peers.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt2/zebra.conf (renamed from tests/topotests/bfd-ospf-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt3/bfdd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt3/ospf6d.conf (renamed from tests/topotests/bfd-ospf-topo1/rt3/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt3/ospfd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt3/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt3/step2/show_bfd_peers.ref (renamed from tests/topotests/bfd-ospf-topo1/rt3/step2/show_bfd_peers.ref)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt3/zebra.conf (renamed from tests/topotests/bfd-ospf-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt4/bfdd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt4/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt4/ospf6d.conf (renamed from tests/topotests/bfd-ospf-topo1/rt4/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt4/ospfd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt4/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt4/zebra.conf (renamed from tests/topotests/bfd-ospf-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt5/bfdd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt5/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt5/ospf6d.conf (renamed from tests/topotests/bfd-ospf-topo1/rt5/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt5/ospfd.conf (renamed from tests/topotests/bfd-ospf-topo1/rt5/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_ospf_topo1/rt5/zebra.conf (renamed from tests/topotests/bfd-ospf-topo1/rt5/zebra.conf)0
-rwxr-xr-xtests/topotests/bfd_ospf_topo1/test_bfd_ospf_topo1.py (renamed from tests/topotests/bfd-ospf-topo1/test_bfd_ospf_topo1.py)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/__init__.py (renamed from tests/topotests/bfd-profiles-topo1/__init__.py)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r1/bfd-peers-initial.json (renamed from tests/topotests/bfd-profiles-topo1/r1/bfd-peers-initial.json)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r1/bfdd.conf (renamed from tests/topotests/bfd-profiles-topo1/r1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r1/ospfd.conf (renamed from tests/topotests/bfd-profiles-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r1/zebra.conf (renamed from tests/topotests/bfd-profiles-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r2/bfd-peers-initial.json (renamed from tests/topotests/bfd-profiles-topo1/r2/bfd-peers-initial.json)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r2/bfdd.conf (renamed from tests/topotests/bfd-profiles-topo1/r2/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r2/bgpd.conf (renamed from tests/topotests/bfd-profiles-topo1/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r2/zebra.conf (renamed from tests/topotests/bfd-profiles-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r3/bfd-peers-initial.json (renamed from tests/topotests/bfd-profiles-topo1/r3/bfd-peers-initial.json)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r3/bfdd.conf (renamed from tests/topotests/bfd-profiles-topo1/r3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r3/bgpd.conf (renamed from tests/topotests/bfd-profiles-topo1/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r3/isisd.conf (renamed from tests/topotests/bfd-profiles-topo1/r3/isisd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r3/zebra.conf (renamed from tests/topotests/bfd-profiles-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r4/bfd-peers-initial.json (renamed from tests/topotests/bfd-profiles-topo1/r4/bfd-peers-initial.json)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r4/bfdd.conf (renamed from tests/topotests/bfd-profiles-topo1/r4/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r4/bgpd.conf (renamed from tests/topotests/bfd-profiles-topo1/r4/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r4/isisd.conf (renamed from tests/topotests/bfd-profiles-topo1/r4/isisd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r4/ospf6d.conf (renamed from tests/topotests/bfd-profiles-topo1/r4/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r4/zebra.conf (renamed from tests/topotests/bfd-profiles-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r5/bfd-peers-initial.json (renamed from tests/topotests/bfd-profiles-topo1/r5/bfd-peers-initial.json)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r5/bfdd.conf (renamed from tests/topotests/bfd-profiles-topo1/r5/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r5/ospf6d.conf (renamed from tests/topotests/bfd-profiles-topo1/r5/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r5/zebra.conf (renamed from tests/topotests/bfd-profiles-topo1/r5/zebra.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r6/bfd-peers-initial.json (renamed from tests/topotests/bfd-profiles-topo1/r6/bfd-peers-initial.json)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r6/bfdd.conf (renamed from tests/topotests/bfd-profiles-topo1/r6/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r6/ospfd.conf (renamed from tests/topotests/bfd-profiles-topo1/r6/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/r6/zebra.conf (renamed from tests/topotests/bfd-profiles-topo1/r6/zebra.conf)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.dot (renamed from tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.dot)0
-rw-r--r--tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.png (renamed from tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.png)bin43508 -> 43508 bytes
-rw-r--r--tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.py (renamed from tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.py)0
-rw-r--r--tests/topotests/bfd_topo1/__init__.py (renamed from tests/topotests/bfd-topo1/__init__.py)0
-rw-r--r--tests/topotests/bfd_topo1/r1/bfdd.conf (renamed from tests/topotests/bfd-topo1/r1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r1/bgp_prefixes.json (renamed from tests/topotests/bfd-topo1/r1/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_topo1/r1/bgp_summary.json (renamed from tests/topotests/bfd-topo1/r1/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_topo1/r1/bgpd.conf (renamed from tests/topotests/bfd-topo1/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r1/peers.json (renamed from tests/topotests/bfd-topo1/r1/peers.json)0
-rw-r--r--tests/topotests/bfd_topo1/r1/zebra.conf (renamed from tests/topotests/bfd-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r2/bfdd.conf (renamed from tests/topotests/bfd-topo1/r2/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r2/bgp_prefixes.json (renamed from tests/topotests/bfd-topo1/r2/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_topo1/r2/bgp_summary.json (renamed from tests/topotests/bfd-topo1/r2/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_topo1/r2/bgpd.conf (renamed from tests/topotests/bfd-topo1/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r2/peers.json (renamed from tests/topotests/bfd-topo1/r2/peers.json)0
-rw-r--r--tests/topotests/bfd_topo1/r2/zebra.conf (renamed from tests/topotests/bfd-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r3/bfdd.conf (renamed from tests/topotests/bfd-topo1/r3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r3/bgp_prefixes.json (renamed from tests/topotests/bfd-topo1/r3/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_topo1/r3/bgp_summary.json (renamed from tests/topotests/bfd-topo1/r3/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_topo1/r3/bgpd.conf (renamed from tests/topotests/bfd-topo1/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r3/peers.json (renamed from tests/topotests/bfd-topo1/r3/peers.json)0
-rw-r--r--tests/topotests/bfd_topo1/r3/zebra.conf (renamed from tests/topotests/bfd-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r4/bfdd.conf (renamed from tests/topotests/bfd-topo1/r4/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r4/bgp_prefixes.json (renamed from tests/topotests/bfd-topo1/r4/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_topo1/r4/bgp_summary.json (renamed from tests/topotests/bfd-topo1/r4/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_topo1/r4/bgpd.conf (renamed from tests/topotests/bfd-topo1/r4/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo1/r4/peers.json (renamed from tests/topotests/bfd-topo1/r4/peers.json)0
-rw-r--r--tests/topotests/bfd_topo1/r4/zebra.conf (renamed from tests/topotests/bfd-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo1/test_bfd_topo1.dot (renamed from tests/topotests/bfd-topo1/test_bfd_topo1.dot)0
-rw-r--r--tests/topotests/bfd_topo1/test_bfd_topo1.jpg (renamed from tests/topotests/bfd-topo1/test_bfd_topo1.jpg)bin25713 -> 25713 bytes
-rw-r--r--tests/topotests/bfd_topo1/test_bfd_topo1.py (renamed from tests/topotests/bfd-topo1/test_bfd_topo1.py)0
-rw-r--r--tests/topotests/bfd_topo2/__init__.py (renamed from tests/topotests/bfd-topo2/__init__.py)0
-rw-r--r--tests/topotests/bfd_topo2/r1/bfdd.conf (renamed from tests/topotests/bfd-topo2/r1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r1/bgpd.conf (renamed from tests/topotests/bfd-topo2/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r1/ipv4_routes.json (renamed from tests/topotests/bfd-topo2/r1/ipv4_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r1/ipv6_routes.json (renamed from tests/topotests/bfd-topo2/r1/ipv6_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r1/peers.json (renamed from tests/topotests/bfd-topo2/r1/peers.json)0
-rw-r--r--tests/topotests/bfd_topo2/r1/zebra.conf (renamed from tests/topotests/bfd-topo2/r1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r2/bfdd.conf (renamed from tests/topotests/bfd-topo2/r2/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r2/bgpd.conf (renamed from tests/topotests/bfd-topo2/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r2/ipv4_routes.json (renamed from tests/topotests/bfd-topo2/r2/ipv4_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r2/ipv6_routes.json (renamed from tests/topotests/bfd-topo2/r2/ipv6_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r2/ospf6d.conf (renamed from tests/topotests/bfd-topo2/r2/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r2/ospfd.conf (renamed from tests/topotests/bfd-topo2/r2/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r2/peers.json (renamed from tests/topotests/bfd-topo2/r2/peers.json)0
-rw-r--r--tests/topotests/bfd_topo2/r2/zebra.conf (renamed from tests/topotests/bfd-topo2/r2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r3/bfdd.conf (renamed from tests/topotests/bfd-topo2/r3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r3/ipv4_routes.json (renamed from tests/topotests/bfd-topo2/r3/ipv4_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r3/ipv6_routes.json (renamed from tests/topotests/bfd-topo2/r3/ipv6_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r3/ospfd.conf (renamed from tests/topotests/bfd-topo2/r3/ospfd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r3/peers.json (renamed from tests/topotests/bfd-topo2/r3/peers.json)0
-rw-r--r--tests/topotests/bfd_topo2/r3/zebra.conf (renamed from tests/topotests/bfd-topo2/r3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r4/bfdd.conf (renamed from tests/topotests/bfd-topo2/r4/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r4/ipv4_routes.json (renamed from tests/topotests/bfd-topo2/r4/ipv4_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r4/ipv6_routes.json (renamed from tests/topotests/bfd-topo2/r4/ipv6_routes.json)0
-rw-r--r--tests/topotests/bfd_topo2/r4/ospf6d.conf (renamed from tests/topotests/bfd-topo2/r4/ospf6d.conf)0
-rw-r--r--tests/topotests/bfd_topo2/r4/peers.json (renamed from tests/topotests/bfd-topo2/r4/peers.json)0
-rw-r--r--tests/topotests/bfd_topo2/r4/zebra.conf (renamed from tests/topotests/bfd-topo2/r4/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo2/test_bfd_topo2.dot (renamed from tests/topotests/bfd-topo2/test_bfd_topo2.dot)0
-rw-r--r--tests/topotests/bfd_topo2/test_bfd_topo2.jpg (renamed from tests/topotests/bfd-topo2/test_bfd_topo2.jpg)bin24206 -> 24206 bytes
-rw-r--r--tests/topotests/bfd_topo2/test_bfd_topo2.py (renamed from tests/topotests/bfd-topo2/test_bfd_topo2.py)0
-rw-r--r--tests/topotests/bfd_topo3/__init__.py (renamed from tests/topotests/bfd-topo3/__init__.py)0
-rw-r--r--tests/topotests/bfd_topo3/r1/bfd-peers.json (renamed from tests/topotests/bfd-topo3/r1/bfd-peers.json)0
-rw-r--r--tests/topotests/bfd_topo3/r1/bfdd.conf (renamed from tests/topotests/bfd-topo3/r1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r1/bgpd.conf (renamed from tests/topotests/bfd-topo3/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r1/zebra.conf (renamed from tests/topotests/bfd-topo3/r1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r2/bfd-peers.json (renamed from tests/topotests/bfd-topo3/r2/bfd-peers.json)0
-rw-r--r--tests/topotests/bfd_topo3/r2/bfdd.conf (renamed from tests/topotests/bfd-topo3/r2/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r2/bgpd.conf (renamed from tests/topotests/bfd-topo3/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r2/zebra.conf (renamed from tests/topotests/bfd-topo3/r2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r3/bfd-peers.json (renamed from tests/topotests/bfd-topo3/r3/bfd-peers.json)0
-rw-r--r--tests/topotests/bfd_topo3/r3/bfdd.conf (renamed from tests/topotests/bfd-topo3/r3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r3/bgpd.conf (renamed from tests/topotests/bfd-topo3/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r3/zebra.conf (renamed from tests/topotests/bfd-topo3/r3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r4/bfd-peers.json (renamed from tests/topotests/bfd-topo3/r4/bfd-peers.json)0
-rw-r--r--tests/topotests/bfd_topo3/r4/bfdd.conf (renamed from tests/topotests/bfd-topo3/r4/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r4/bgpd.conf (renamed from tests/topotests/bfd-topo3/r4/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_topo3/r4/zebra.conf (renamed from tests/topotests/bfd-topo3/r4/zebra.conf)0
-rw-r--r--tests/topotests/bfd_topo3/test_bfd_topo3.dot (renamed from tests/topotests/bfd-topo3/test_bfd_topo3.dot)0
-rw-r--r--tests/topotests/bfd_topo3/test_bfd_topo3.jpg (renamed from tests/topotests/bfd-topo3/test_bfd_topo3.jpg)bin34705 -> 34705 bytes
-rw-r--r--tests/topotests/bfd_topo3/test_bfd_topo3.py (renamed from tests/topotests/bfd-topo3/test_bfd_topo3.py)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/__init__.py (renamed from tests/topotests/bfd-vrf-topo1/__init__.py)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r1/bfdd.conf (renamed from tests/topotests/bfd-vrf-topo1/r1/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r1/bgp_prefixes.json (renamed from tests/topotests/bfd-vrf-topo1/r1/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r1/bgp_summary.json (renamed from tests/topotests/bfd-vrf-topo1/r1/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r1/bgpd.conf (renamed from tests/topotests/bfd-vrf-topo1/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r1/peers.json (renamed from tests/topotests/bfd-vrf-topo1/r1/peers.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r1/zebra.conf (renamed from tests/topotests/bfd-vrf-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r2/bfdd.conf (renamed from tests/topotests/bfd-vrf-topo1/r2/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r2/bgp_prefixes.json (renamed from tests/topotests/bfd-vrf-topo1/r2/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r2/bgp_summary.json (renamed from tests/topotests/bfd-vrf-topo1/r2/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r2/bgpd.conf (renamed from tests/topotests/bfd-vrf-topo1/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r2/peers.json (renamed from tests/topotests/bfd-vrf-topo1/r2/peers.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r2/zebra.conf (renamed from tests/topotests/bfd-vrf-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r3/bfdd.conf (renamed from tests/topotests/bfd-vrf-topo1/r3/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r3/bgp_prefixes.json (renamed from tests/topotests/bfd-vrf-topo1/r3/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r3/bgp_summary.json (renamed from tests/topotests/bfd-vrf-topo1/r3/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r3/bgpd.conf (renamed from tests/topotests/bfd-vrf-topo1/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r3/peers.json (renamed from tests/topotests/bfd-vrf-topo1/r3/peers.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r3/zebra.conf (renamed from tests/topotests/bfd-vrf-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r4/bfdd.conf (renamed from tests/topotests/bfd-vrf-topo1/r4/bfdd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r4/bgp_prefixes.json (renamed from tests/topotests/bfd-vrf-topo1/r4/bgp_prefixes.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r4/bgp_summary.json (renamed from tests/topotests/bfd-vrf-topo1/r4/bgp_summary.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r4/bgpd.conf (renamed from tests/topotests/bfd-vrf-topo1/r4/bgpd.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r4/peers.json (renamed from tests/topotests/bfd-vrf-topo1/r4/peers.json)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/r4/zebra.conf (renamed from tests/topotests/bfd-vrf-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.dot (renamed from tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.dot)0
-rw-r--r--tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.jpg (renamed from tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.jpg)bin25713 -> 25713 bytes
-rw-r--r--tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.py (renamed from tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.py)0
-rw-r--r--tests/topotests/bgp_aggregate_address_origin/__init__.py (renamed from tests/topotests/bgp-aggregator-zero/__init__.py)0
-rw-r--r--tests/topotests/bgp_aggregate_address_origin/r1/bgpd.conf (renamed from tests/topotests/bgp_aggregate-address_origin/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_origin/r1/zebra.conf (renamed from tests/topotests/bgp_aggregate-address_origin/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_origin/r2/bgpd.conf (renamed from tests/topotests/bgp_aggregate-address_origin/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_origin/r2/zebra.conf (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_origin/test_bgp_aggregate-address_origin.py (renamed from tests/topotests/bgp_aggregate-address_origin/test_bgp_aggregate-address_origin.py)0
-rw-r--r--tests/topotests/bgp_aggregate_address_route_map/__init__.py (renamed from tests/topotests/bgp-basic-functionality-topo1/__init__.py)0
-rw-r--r--tests/topotests/bgp_aggregate_address_route_map/r1/bgpd.conf (renamed from tests/topotests/bgp_aggregate-address_route-map/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_route_map/r1/zebra.conf (renamed from tests/topotests/bgp_aggregate-address_route-map/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_route_map/r2/bgpd.conf (renamed from tests/topotests/bgp_aggregate-address_route-map/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_route_map/r2/zebra.conf (renamed from tests/topotests/bgp_aggregate-address_origin/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_aggregate_address_route_map/test_bgp_aggregate-address_route-map.py (renamed from tests/topotests/bgp_aggregate-address_route-map/test_bgp_aggregate-address_route-map.py)0
-rw-r--r--tests/topotests/bgp_aggregator_zero/__init__.py (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/__init__.py)0
-rw-r--r--tests/topotests/bgp_aggregator_zero/exabgp.env (renamed from tests/topotests/bgp-aggregator-zero/exabgp.env)0
-rw-r--r--tests/topotests/bgp_aggregator_zero/peer1/exabgp.cfg (renamed from tests/topotests/bgp-aggregator-zero/peer1/exabgp.cfg)0
-rw-r--r--tests/topotests/bgp_aggregator_zero/r1/bgpd.conf (renamed from tests/topotests/bgp-aggregator-zero/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_aggregator_zero/r1/zebra.conf (renamed from tests/topotests/bgp-aggregator-zero/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_aggregator_zero/test_bgp_aggregator_zero.py (renamed from tests/topotests/bgp-aggregator-zero/test_bgp_aggregator_zero.py)0
-rw-r--r--tests/topotests/bgp_auth/R1/bgpd.conf (renamed from tests/topotests/bgp-auth/R1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/bgpd_multi_vrf.conf (renamed from tests/topotests/bgp-auth/R1/bgpd_multi_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/bgpd_multi_vrf_prefix.conf (renamed from tests/topotests/bgp-auth/R1/bgpd_multi_vrf_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/bgpd_prefix.conf (renamed from tests/topotests/bgp-auth/R1/bgpd_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/bgpd_vrf.conf (renamed from tests/topotests/bgp-auth/R1/bgpd_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/bgpd_vrf_prefix.conf (renamed from tests/topotests/bgp-auth/R1/bgpd_vrf_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/ospfd.conf (renamed from tests/topotests/bgp-auth/R1/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/ospfd_multi_vrf.conf (renamed from tests/topotests/bgp-auth/R1/ospfd_multi_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/ospfd_vrf.conf (renamed from tests/topotests/bgp-auth/R1/ospfd_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R1/zebra.conf (renamed from tests/topotests/bgp-auth/R1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/bgpd.conf (renamed from tests/topotests/bgp-auth/R2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/bgpd_multi_vrf.conf (renamed from tests/topotests/bgp-auth/R2/bgpd_multi_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/bgpd_multi_vrf_prefix.conf (renamed from tests/topotests/bgp-auth/R2/bgpd_multi_vrf_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/bgpd_prefix.conf (renamed from tests/topotests/bgp-auth/R2/bgpd_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/bgpd_vrf.conf (renamed from tests/topotests/bgp-auth/R2/bgpd_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/bgpd_vrf_prefix.conf (renamed from tests/topotests/bgp-auth/R2/bgpd_vrf_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/ospfd.conf (renamed from tests/topotests/bgp-auth/R2/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/ospfd_multi_vrf.conf (renamed from tests/topotests/bgp-auth/R2/ospfd_multi_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/ospfd_vrf.conf (renamed from tests/topotests/bgp-auth/R2/ospfd_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R2/zebra.conf (renamed from tests/topotests/bgp-auth/R2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/bgpd.conf (renamed from tests/topotests/bgp-auth/R3/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/bgpd_multi_vrf.conf (renamed from tests/topotests/bgp-auth/R3/bgpd_multi_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/bgpd_multi_vrf_prefix.conf (renamed from tests/topotests/bgp-auth/R3/bgpd_multi_vrf_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/bgpd_prefix.conf (renamed from tests/topotests/bgp-auth/R3/bgpd_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/bgpd_vrf.conf (renamed from tests/topotests/bgp-auth/R3/bgpd_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/bgpd_vrf_prefix.conf (renamed from tests/topotests/bgp-auth/R3/bgpd_vrf_prefix.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/ospfd.conf (renamed from tests/topotests/bgp-auth/R3/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/ospfd_multi_vrf.conf (renamed from tests/topotests/bgp-auth/R3/ospfd_multi_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/ospfd_vrf.conf (renamed from tests/topotests/bgp-auth/R3/ospfd_vrf.conf)0
-rw-r--r--tests/topotests/bgp_auth/R3/zebra.conf (renamed from tests/topotests/bgp-auth/R3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_auth/test_bgp_auth.py (renamed from tests/topotests/bgp-auth/test_bgp_auth.py)153
-rw-r--r--tests/topotests/bgp_basic_functionality_topo1/__init__.py (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/__init__.py)0
-rw-r--r--tests/topotests/bgp_basic_functionality_topo1/bgp_basic_functionality.json (renamed from tests/topotests/bgp-basic-functionality-topo1/bgp_basic_functionality.json)0
-rw-r--r--tests/topotests/bgp_basic_functionality_topo1/test_bgp_basic_functionality.py (renamed from tests/topotests/bgp-basic-functionality-topo1/test_bgp_basic_functionality.py)0
-rw-r--r--tests/topotests/bgp_comm_list_delete/__init__.py (renamed from tests/topotests/bgp-ecmp-topo1/__init__.py)0
-rw-r--r--tests/topotests/bgp_comm_list_delete/r1/bgpd.conf (renamed from tests/topotests/bgp_comm-list_delete/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_comm_list_delete/r1/zebra.conf (renamed from tests/topotests/bgp_comm-list_delete/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_comm_list_delete/r2/bgpd.conf (renamed from tests/topotests/bgp_comm-list_delete/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_comm_list_delete/r2/zebra.conf (renamed from tests/topotests/bgp_aggregate-address_route-map/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_comm_list_delete/test_bgp_comm-list_delete.py (renamed from tests/topotests/bgp_comm-list_delete/test_bgp_comm-list_delete.py)0
-rw-r--r--tests/topotests/bgp_community_alias/__init__.py (renamed from tests/topotests/bgp-evpn-vxlan_topo1/__init__.py)0
-rw-r--r--tests/topotests/bgp_community_alias/r1/bgpd.conf9
-rw-r--r--tests/topotests/bgp_community_alias/r1/zebra.conf4
-rw-r--r--tests/topotests/bgp_community_alias/r2/bgpd.conf12
-rw-r--r--tests/topotests/bgp_community_alias/r2/zebra.conf4
-rw-r--r--tests/topotests/bgp_community_alias/test_bgp-community-alias.py106
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/__init__.py (renamed from tests/topotests/bgp-path-attributes-topo1/__init__.py)0
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/r1/bgpd.conf (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/r1/zebra.conf (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/r2/bgpd.conf (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/r2/zebra.conf (renamed from tests/topotests/bgp_comm-list_delete/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/r3/bgpd.conf (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/r3/zebra.conf (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/r3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_ipv4_ipv6_unicast/test_bgp-default-ipv4-ipv6-unicast.py (renamed from tests/topotests/bgp-default-ipv4-ipv6-unicast/test_bgp-default-ipv4-ipv6-unicast.py)0
-rw-r--r--tests/topotests/bgp_default_route/__init__.py (renamed from tests/topotests/bgp-prefix-list-topo1/__init__.py)0
-rw-r--r--tests/topotests/bgp_default_route/r1/bgpd.conf (renamed from tests/topotests/bgp_default-route/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route/r1/zebra.conf (renamed from tests/topotests/bgp_default-route/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route/r2/bgpd.conf (renamed from tests/topotests/bgp_default-route/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route/r2/zebra.conf (renamed from tests/topotests/bgp_default-route/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route/test_bgp_default-originate.py (renamed from tests/topotests/bgp_default-route/test_bgp_default-originate.py)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match/__init__.py (renamed from tests/topotests/bgp_aggregate-address_origin/__init__.py)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match/r1/bgpd.conf (renamed from tests/topotests/bgp_default-route_route-map_match/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match/r1/zebra.conf (renamed from tests/topotests/bgp_default-route_route-map_match/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match/r2/bgpd.conf (renamed from tests/topotests/bgp_default-route_route-map_match/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match/r2/zebra.conf (renamed from tests/topotests/bgp_default-route_route-map_match/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match/test_bgp_default-originate_route-map_match.py (renamed from tests/topotests/bgp_default-route_route-map_match/test_bgp_default-originate_route-map_match.py)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match_set/__init__.py (renamed from tests/topotests/bgp_aggregate-address_route-map/__init__.py)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match_set/r1/bgpd.conf (renamed from tests/topotests/bgp_default-route_route-map_match_set/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match_set/r1/zebra.conf (renamed from tests/topotests/bgp_default-route_route-map_match_set/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match_set/r2/bgpd.conf (renamed from tests/topotests/bgp_default-route_route-map_match_set/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match_set/r2/zebra.conf (renamed from tests/topotests/bgp_default-route_route-map_match_set/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_match_set/test_bgp_default-originate_route-map_match_set.py (renamed from tests/topotests/bgp_default-route_route-map_match_set/test_bgp_default-originate_route-map_match_set.py)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/__init__.py (renamed from tests/topotests/bgp_comm-list_delete/__init__.py)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf (renamed from tests/topotests/bgp_default-route_route-map_set/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf (renamed from tests/topotests/bgp_default-route_route-map_set/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf (renamed from tests/topotests/bgp_default-route_route-map_set/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf (renamed from tests/topotests/bgp_default-route_route-map_set/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py (renamed from tests/topotests/bgp_default-route_route-map_set/test_bgp_default-originate_route-map_set.py)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/__init__.py (renamed from tests/topotests/bgp_default-route/__init__.py)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r1/bgpd.conf (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r1/zebra.conf (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r2/bgpd.conf (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r2/zebra.conf (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r3/bgpd.conf (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r3/zebra.conf (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py (renamed from tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/__init__.py (renamed from tests/topotests/bgp_default-route_route-map_match/__init__.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/bgp-ecmp-topo1.dot (renamed from tests/topotests/bgp-ecmp-topo1/bgp-ecmp-topo1.dot)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/bgp-ecmp-topo1.pdf (renamed from tests/topotests/bgp-ecmp-topo1/bgp-ecmp-topo1.pdf)bin21367 -> 21367 bytes
-rw-r--r--tests/topotests/bgp_ecmp_topo1/exabgp.env (renamed from tests/topotests/bgp-ecmp-topo1/exabgp.env)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer1/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer1/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer1/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer1/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer1/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer1/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer10/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer10/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer10/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer10/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer10/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer10/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer11/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer11/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer11/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer11/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer11/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer11/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer12/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer12/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer12/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer12/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer12/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer12/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer13/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer13/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer13/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer13/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer13/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer13/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer14/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer14/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer14/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer14/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer14/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer14/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer15/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer15/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer15/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer15/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer15/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer15/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer16/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer16/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer16/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer16/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer16/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer16/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer17/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer17/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer17/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer17/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer17/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer17/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer18/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer18/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer18/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer18/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer18/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer18/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer19/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer19/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer19/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer19/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer19/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer19/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer2/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer2/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer2/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer2/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer2/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer2/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer20/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer20/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer20/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer20/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer20/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer20/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer3/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer3/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer3/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer3/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer3/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer3/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer4/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer4/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer4/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer4/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer4/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer4/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer5/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer5/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer5/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer5/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer5/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer5/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer6/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer6/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer6/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer6/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer6/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer6/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer7/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer7/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer7/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer7/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer7/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer7/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer8/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer8/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer8/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer8/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer8/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer8/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer9/exa-receive.py (renamed from tests/topotests/bgp-ecmp-topo1/peer9/exa-receive.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo1/peer9/exa-send.py (renamed from tests/topotests/bgp-ecmp-topo1/peer9/exa-send.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/peer9/exabgp.cfg (renamed from tests/topotests/bgp-ecmp-topo1/peer9/exabgp.cfg)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/r1/bgpd.conf (renamed from tests/topotests/bgp-ecmp-topo1/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/r1/summary.txt (renamed from tests/topotests/bgp-ecmp-topo1/r1/summary.txt)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/r1/summary20.txt (renamed from tests/topotests/bgp-ecmp-topo1/r1/summary20.txt)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/r1/zebra.conf (renamed from tests/topotests/bgp-ecmp-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_ecmp_topo1/test_bgp_ecmp_topo1.py (renamed from tests/topotests/bgp-ecmp-topo1/test_bgp_ecmp_topo1.py)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo2/ebgp_ecmp_topo2.json (renamed from tests/topotests/bgp-ecmp-topo2/ebgp_ecmp_topo2.json)0
-rwxr-xr-xtests/topotests/bgp_ecmp_topo2/ibgp_ecmp_topo2.json (renamed from tests/topotests/bgp-ecmp-topo2/ibgp_ecmp_topo2.json)0
-rw-r--r--tests/topotests/bgp_ecmp_topo2/test_ebgp_ecmp_topo2.py (renamed from tests/topotests/bgp-ecmp-topo2/test_ebgp_ecmp_topo2.py)0
-rw-r--r--tests/topotests/bgp_ecmp_topo2/test_ibgp_ecmp_topo2.py (renamed from tests/topotests/bgp-ecmp-topo2/test_ibgp_ecmp_topo2.py)0
-rw-r--r--tests/topotests/bgp_evpn_mh/evpn-mh-topo-tests.pdf (renamed from tests/topotests/bgp-evpn-mh/evpn-mh-topo-tests.pdf)bin90963 -> 90963 bytes
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd11/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/hostd11/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd11/pim.conf (renamed from tests/topotests/bgp-evpn-mh/hostd11/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd11/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/hostd11/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd12/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/hostd12/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd12/pim.conf (renamed from tests/topotests/bgp-evpn-mh/hostd12/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd12/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/hostd12/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd21/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/hostd21/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd21/pim.conf (renamed from tests/topotests/bgp-evpn-mh/hostd21/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd21/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/hostd21/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd22/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/hostd22/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd22/pim.conf (renamed from tests/topotests/bgp-evpn-mh/hostd22/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/hostd22/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/hostd22/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/spine1/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/spine1/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/spine1/pim.conf (renamed from tests/topotests/bgp-evpn-mh/spine1/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/spine1/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/spine1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/spine2/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/spine2/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/spine2/pim.conf (renamed from tests/topotests/bgp-evpn-mh/spine2/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/spine2/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/spine2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/test_evpn_mh.py (renamed from tests/topotests/bgp-evpn-mh/test_evpn_mh.py)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm11/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/torm11/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm11/pim.conf (renamed from tests/topotests/bgp-evpn-mh/torm11/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm11/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/torm11/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm12/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/torm12/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm12/pim.conf (renamed from tests/topotests/bgp-evpn-mh/torm12/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm12/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/torm12/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm21/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/torm21/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm21/pim.conf (renamed from tests/topotests/bgp-evpn-mh/torm21/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm21/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/torm21/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm22/evpn.conf (renamed from tests/topotests/bgp-evpn-mh/torm22/evpn.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm22/pim.conf (renamed from tests/topotests/bgp-evpn-mh/torm22/pim.conf)0
-rw-r--r--tests/topotests/bgp_evpn_mh/torm22/zebra.conf (renamed from tests/topotests/bgp-evpn-mh/torm22/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/P1/bgpd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/P1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/P1/ospfd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/P1/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/P1/zebra.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/P1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE1/bgpd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE1/evpn.vni.json (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE1/evpn.vni.json)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE1/ospfd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE1/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE1/zebra.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE2/bgpd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE2/evpn.vni.json (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE2/evpn.vni.json)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE2/ospfd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE2/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/PE2/zebra.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/PE2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/__init__.py (renamed from tests/topotests/bgp_default-route_route-map_match_set/__init__.py)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/host1/bgpd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/host1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/host1/ospfd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/host1/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/host1/zebra.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/host1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/host2/bgpd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/host2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/host2/ospfd.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/host2/ospfd.conf)0
-rw-r--r--tests/topotests/bgp_evpn_vxlan_topo1/host2/zebra.conf (renamed from tests/topotests/bgp-evpn-vxlan_topo1/host2/zebra.conf)0
-rwxr-xr-xtests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py (renamed from tests/topotests/bgp-evpn-vxlan_topo1/test_bgp_evpn_vxlan.py)0
-rw-r--r--tests/topotests/bgp_path_attributes_topo1/__init__.py (renamed from tests/topotests/bgp_default-route_route-map_set/__init__.py)0
-rw-r--r--tests/topotests/bgp_path_attributes_topo1/bgp_path_attributes.json (renamed from tests/topotests/bgp-path-attributes-topo1/bgp_path_attributes.json)0
-rw-r--r--tests/topotests/bgp_path_attributes_topo1/test_bgp_path_attributes.py (renamed from tests/topotests/bgp-path-attributes-topo1/test_bgp_path_attributes.py)0
-rw-r--r--tests/topotests/bgp_peer_group/__init__.py (renamed from tests/topotests/bgp_peer-group/__init__.py)0
-rw-r--r--tests/topotests/bgp_peer_group/r1/bgpd.conf (renamed from tests/topotests/bgp_peer-group/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_peer_group/r1/zebra.conf (renamed from tests/topotests/bgp_peer-group/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_peer_group/r2/bgpd.conf (renamed from tests/topotests/bgp_peer-group/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_peer_group/r2/zebra.conf (renamed from tests/topotests/bgp_peer-group/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_peer_group/r3/bgpd.conf (renamed from tests/topotests/bgp_peer-group/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_peer_group/r3/zebra.conf (renamed from tests/topotests/bgp_peer-group/r3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_peer_group/test_bgp_peer-group.py (renamed from tests/topotests/bgp_peer-group/test_bgp_peer-group.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/exabgp.env (renamed from tests/topotests/bgp_peer-type_multipath-relax/exabgp.env)0
-rwxr-xr-xtests/topotests/bgp_peer_type_multipath_relax/peer1/exa-receive.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer1/exa-receive.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer1/exa_readpipe.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer1/exa_readpipe.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer1/exabgp.cfg (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer1/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_peer_type_multipath_relax/peer2/exa-receive.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer2/exa-receive.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer2/exa_readpipe.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer2/exa_readpipe.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer2/exabgp.cfg (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer2/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_peer_type_multipath_relax/peer3/exa-receive.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer3/exa-receive.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer3/exa_readpipe.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer3/exa_readpipe.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer3/exabgp.cfg (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer3/exabgp.cfg)0
-rwxr-xr-xtests/topotests/bgp_peer_type_multipath_relax/peer4/exa-receive.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer4/exa-receive.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer4/exa_readpipe.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer4/exa_readpipe.py)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/peer4/exabgp.cfg (renamed from tests/topotests/bgp_peer-type_multipath-relax/peer4/exabgp.cfg)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/bgpd.conf (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/multipath.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/multipath.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/not-multipath.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/not-multipath.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-eBGP-confed.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-eBGP-iBGP.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-no-recursive.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-no-recursive.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-recursive.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-recursive.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-ip-route.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-ip-route.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-no-recursive.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-no-recursive.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-recursive.json (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-recursive.json)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r1/zebra.conf (renamed from tests/topotests/bgp_peer-type_multipath-relax/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r2/bgpd.conf (renamed from tests/topotests/bgp_peer-type_multipath-relax/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r2/staticd.conf (renamed from tests/topotests/bgp_peer-type_multipath-relax/r2/staticd.conf)0
-rw-r--r--tests/topotests/bgp_peer_type_multipath_relax/r2/zebra.conf (renamed from tests/topotests/bgp_peer-type_multipath-relax/r2/zebra.conf)0
-rwxr-xr-xtests/topotests/bgp_peer_type_multipath_relax/test_bgp_peer-type_multipath-relax.py (renamed from tests/topotests/bgp_peer-type_multipath-relax/test_bgp_peer-type_multipath-relax.py)0
-rw-r--r--tests/topotests/bgp_prefix_list_topo1/__init__.py (renamed from tests/topotests/bgp_sender-as-path-loop-detection/__init__.py)0
-rw-r--r--tests/topotests/bgp_prefix_list_topo1/prefix_lists.json (renamed from tests/topotests/bgp-prefix-list-topo1/prefix_lists.json)0
-rw-r--r--tests/topotests/bgp_prefix_list_topo1/test_prefix_lists.py (renamed from tests/topotests/bgp-prefix-list-topo1/test_prefix_lists.py)0
-rw-r--r--tests/topotests/bgp_recursive_route_ebgp_multi_hop/test_bgp_recursive_route_ebgp_multi_hop.py30
-rw-r--r--tests/topotests/bgp_route_map/bgp_route_map_topo1.json (renamed from tests/topotests/bgp-route-map/bgp_route_map_topo1.json)0
-rwxr-xr-xtests/topotests/bgp_route_map/bgp_route_map_topo2.json (renamed from tests/topotests/bgp-route-map/bgp_route_map_topo2.json)0
-rw-r--r--tests/topotests/bgp_route_map/test_route_map_topo1.py (renamed from tests/topotests/bgp-route-map/test_route_map_topo1.py)0
-rw-r--r--tests/topotests/bgp_route_map/test_route_map_topo2.py (renamed from tests/topotests/bgp-route-map/test_route_map_topo2.py)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/__init__.py (renamed from tests/topotests/bgp_set_local-preference_add_subtract/__init__.py)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/r1/bgpd.conf (renamed from tests/topotests/bgp_sender-as-path-loop-detection/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/r1/zebra.conf (renamed from tests/topotests/bgp_sender-as-path-loop-detection/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/r2/bgpd.conf (renamed from tests/topotests/bgp_sender-as-path-loop-detection/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/r2/zebra.conf (renamed from tests/topotests/bgp_sender-as-path-loop-detection/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/r3/bgpd.conf (renamed from tests/topotests/bgp_sender-as-path-loop-detection/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/r3/zebra.conf (renamed from tests/topotests/bgp_sender-as-path-loop-detection/r3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/test_bgp_sender-as-path-loop-detection.py (renamed from tests/topotests/bgp_sender-as-path-loop-detection/test_bgp_sender-as-path-loop-detection.py)0
-rw-r--r--[-rwxr-xr-x]tests/topotests/bgp_set_local_preference_add_subtract/__init__.py (renamed from tests/topotests/example-test/__init__.py)0
-rw-r--r--tests/topotests/bgp_set_local_preference_add_subtract/r1/bgpd.conf (renamed from tests/topotests/bgp_set_local-preference_add_subtract/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_set_local_preference_add_subtract/r1/zebra.conf (renamed from tests/topotests/bgp_set_local-preference_add_subtract/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_set_local_preference_add_subtract/r2/bgpd.conf (renamed from tests/topotests/bgp_set_local-preference_add_subtract/r2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_set_local_preference_add_subtract/r2/zebra.conf (renamed from tests/topotests/bgp_set_local-preference_add_subtract/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_set_local_preference_add_subtract/r3/bgpd.conf (renamed from tests/topotests/bgp_set_local-preference_add_subtract/r3/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_set_local_preference_add_subtract/r3/zebra.conf (renamed from tests/topotests/bgp_set_local-preference_add_subtract/r3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_set_local_preference_add_subtract/test_bgp_set_local-preference_add_subtract.py (renamed from tests/topotests/bgp_set_local-preference_add_subtract/test_bgp_set_local-preference_add_subtract.py)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce1/bgpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce1/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce1/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce1/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce2/bgpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce2/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce2/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce2/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce2/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce3/bgpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce3/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce3/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce3/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce3/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce4/bgpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce4/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce4/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce4/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/ce4/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/ce4/zebra.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r1/bgpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r1/isisd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r1/isisd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r1/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r1/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r1/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r2/isisd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r2/isisd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r2/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r2/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r2/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r2/zebra.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r3/isisd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r3/isisd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r3/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r3/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r3/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r3/zebra.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r4/bgpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r4/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r4/isisd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r4/isisd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r4/snmpd.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r4/snmpd.conf)0
-rw-r--r--tests/topotests/bgp_snmp_mplsl3vpn/r4/zebra.conf (renamed from tests/topotests/bgp-snmp-mplsl3vpn/r4/zebra.conf)0
-rwxr-xr-xtests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py (renamed from tests/topotests/bgp-snmp-mplsl3vpn/test_bgp_snmp_mplsvpn.py)0
-rw-r--r--[-rwxr-xr-x]tests/topotests/bgp_tcp_mss/__init__.py (renamed from tests/topotests/example-topojson-test/__init__.py)0
-rw-r--r--tests/topotests/bgp_tcp_mss/r1/bgpd.conf6
-rw-r--r--tests/topotests/bgp_tcp_mss/r1/zebra.conf6
-rw-r--r--tests/topotests/bgp_tcp_mss/r2/bgpd.conf6
-rw-r--r--tests/topotests/bgp_tcp_mss/r2/zebra.conf6
-rw-r--r--tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py178
-rw-r--r--tests/topotests/bgp_vrf_route_leak_basic/r1/bgpd.conf (renamed from tests/topotests/bgp-vrf-route-leak-basic/r1/bgpd.conf)0
-rw-r--r--tests/topotests/bgp_vrf_route_leak_basic/r1/zebra.conf (renamed from tests/topotests/bgp-vrf-route-leak-basic/r1/zebra.conf)0
-rw-r--r--tests/topotests/bgp_vrf_route_leak_basic/setup_vrfs (renamed from tests/topotests/bgp-vrf-route-leak-basic/setup_vrfs)0
-rw-r--r--tests/topotests/bgp_vrf_route_leak_basic/test_bgp-vrf-route-leak-basic.py (renamed from tests/topotests/bgp-vrf-route-leak-basic/test_bgp-vrf-route-leak-basic.py)0
-rw-r--r--tests/topotests/eigrp_topo1/r1/eigrpd.conf (renamed from tests/topotests/eigrp-topo1/r1/eigrpd.conf)0
-rw-r--r--tests/topotests/eigrp_topo1/r1/show_ip_eigrp.json (renamed from tests/topotests/eigrp-topo1/r1/show_ip_eigrp.json)0
-rw-r--r--tests/topotests/eigrp_topo1/r1/show_ip_eigrp.ref (renamed from tests/topotests/eigrp-topo1/r1/show_ip_eigrp.ref)0
-rw-r--r--tests/topotests/eigrp_topo1/r1/show_ip_route.json_ref (renamed from tests/topotests/eigrp-topo1/r1/show_ip_route.json_ref)0
-rw-r--r--tests/topotests/eigrp_topo1/r1/zebra.conf (renamed from tests/topotests/eigrp-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/eigrp_topo1/r2/eigrpd.conf (renamed from tests/topotests/eigrp-topo1/r2/eigrpd.conf)0
-rw-r--r--tests/topotests/eigrp_topo1/r2/show_ip_eigrp.json (renamed from tests/topotests/eigrp-topo1/r2/show_ip_eigrp.json)0
-rw-r--r--tests/topotests/eigrp_topo1/r2/show_ip_eigrp.ref (renamed from tests/topotests/eigrp-topo1/r2/show_ip_eigrp.ref)0
-rw-r--r--tests/topotests/eigrp_topo1/r2/show_ip_route.json_ref (renamed from tests/topotests/eigrp-topo1/r2/show_ip_route.json_ref)0
-rw-r--r--tests/topotests/eigrp_topo1/r2/zebra.conf (renamed from tests/topotests/eigrp-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/eigrp_topo1/r3/eigrpd.conf (renamed from tests/topotests/eigrp-topo1/r3/eigrpd.conf)0
-rw-r--r--tests/topotests/eigrp_topo1/r3/show_ip_eigrp.json (renamed from tests/topotests/eigrp-topo1/r3/show_ip_eigrp.json)0
-rw-r--r--tests/topotests/eigrp_topo1/r3/show_ip_eigrp.ref (renamed from tests/topotests/eigrp-topo1/r3/show_ip_eigrp.ref)0
-rw-r--r--tests/topotests/eigrp_topo1/r3/show_ip_route.json_ref (renamed from tests/topotests/eigrp-topo1/r3/show_ip_route.json_ref)0
-rw-r--r--tests/topotests/eigrp_topo1/r3/zebra.conf (renamed from tests/topotests/eigrp-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/eigrp_topo1/test_eigrp_topo1.dot (renamed from tests/topotests/eigrp-topo1/test_eigrp_topo1.dot)0
-rw-r--r--tests/topotests/eigrp_topo1/test_eigrp_topo1.py (renamed from tests/topotests/eigrp-topo1/test_eigrp_topo1.py)0
-rw-r--r--tests/topotests/evpn_pim_1/host1/bgpd.conf (renamed from tests/topotests/evpn-pim-1/host1/bgpd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/host1/pimd.conf (renamed from tests/topotests/evpn-pim-1/host1/pimd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/host1/zebra.conf (renamed from tests/topotests/evpn-pim-1/host1/zebra.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/host2/bgpd.conf (renamed from tests/topotests/evpn-pim-1/host2/bgpd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/host2/pimd.conf (renamed from tests/topotests/evpn-pim-1/host2/pimd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/host2/zebra.conf (renamed from tests/topotests/evpn-pim-1/host2/zebra.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/leaf1/bgpd.conf (renamed from tests/topotests/evpn-pim-1/leaf1/bgpd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/leaf1/pimd.conf (renamed from tests/topotests/evpn-pim-1/leaf1/pimd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/leaf1/zebra.conf (renamed from tests/topotests/evpn-pim-1/leaf1/zebra.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/leaf2/bgpd.conf (renamed from tests/topotests/evpn-pim-1/leaf2/bgpd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/leaf2/pimd.conf (renamed from tests/topotests/evpn-pim-1/leaf2/pimd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/leaf2/zebra.conf (renamed from tests/topotests/evpn-pim-1/leaf2/zebra.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/spine/bgp.summ.json (renamed from tests/topotests/evpn-pim-1/spine/bgp.summ.json)0
-rw-r--r--tests/topotests/evpn_pim_1/spine/bgpd.conf (renamed from tests/topotests/evpn-pim-1/spine/bgpd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/spine/join-info.json (renamed from tests/topotests/evpn-pim-1/spine/join-info.json)0
-rw-r--r--tests/topotests/evpn_pim_1/spine/pimd.conf (renamed from tests/topotests/evpn-pim-1/spine/pimd.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/spine/zebra.conf (renamed from tests/topotests/evpn-pim-1/spine/zebra.conf)0
-rw-r--r--tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py (renamed from tests/topotests/evpn-pim-1/test_evpn_pim_topo1.py)0
-rwxr-xr-xtests/topotests/example_test/__init__.py (renamed from tests/topotests/example-topojson-test/test_topo_json_multiple_links/__init__.py)0
-rwxr-xr-xtests/topotests/example_test/test_example.py (renamed from tests/topotests/example-test/test_example.py)0
-rw-r--r--tests/topotests/example_test/test_template.dot (renamed from tests/topotests/example-test/test_template.dot)0
-rw-r--r--tests/topotests/example_test/test_template.jpg (renamed from tests/topotests/example-test/test_template.jpg)bin15470 -> 15470 bytes
-rw-r--r--tests/topotests/example_test/test_template.py (renamed from tests/topotests/example-test/test_template.py)0
-rwxr-xr-xtests/topotests/example_topojson_test/__init__.py (renamed from tests/topotests/example-topojson-test/test_topo_json_single_link/__init__.py)0
-rwxr-xr-xtests/topotests/example_topojson_test/test_topo_json_multiple_links/__init__.py (renamed from tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/__init__.py)0
-rw-r--r--tests/topotests/example_topojson_test/test_topo_json_multiple_links/example_topojson_multiple_links.json (renamed from tests/topotests/example-topojson-test/test_topo_json_multiple_links/example_topojson_multiple_links.json)0
-rwxr-xr-xtests/topotests/example_topojson_test/test_topo_json_multiple_links/test_example_topojson_multiple_links.py (renamed from tests/topotests/example-topojson-test/test_topo_json_multiple_links/test_example_topojson_multiple_links.py)0
-rwxr-xr-x[-rw-r--r--]tests/topotests/example_topojson_test/test_topo_json_single_link/__init__.py (renamed from tests/topotests/isis-lfa-topo1/__init__.py)0
-rw-r--r--tests/topotests/example_topojson_test/test_topo_json_single_link/example_topojson.json (renamed from tests/topotests/example-topojson-test/test_topo_json_single_link/example_topojson.json)0
-rwxr-xr-xtests/topotests/example_topojson_test/test_topo_json_single_link/test_example_topojson.py (renamed from tests/topotests/example-topojson-test/test_topo_json_single_link/test_example_topojson.py)0
-rwxr-xr-x[-rw-r--r--]tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/__init__.py (renamed from tests/topotests/isis-lsp-bits-topo1/__init__.py)0
-rw-r--r--tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/example_topojson.json (renamed from tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/example_topojson.json)0
-rwxr-xr-xtests/topotests/example_topojson_test/test_topo_json_single_link_loopback/test_example_topojson.py (renamed from tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/test_example_topojson.py)0
-rw-r--r--tests/topotests/isis-topo1/r5/r5_topology.json152
-rw-r--r--tests/topotests/isis_lfa_topo1/__init__.py (renamed from tests/topotests/isis-rlfa-topo1/__init__.py)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/isisd.conf (renamed from tests/topotests/isis-lfa-topo1/rt1/isisd.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lfa-topo1/rt1/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step10/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step10/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step11/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step11/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step12/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step12/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step13/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step13/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-lfa-topo1/rt1/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt1/zebra.conf (renamed from tests/topotests/isis-lfa-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt2/isisd.conf (renamed from tests/topotests/isis-lfa-topo1/rt2/isisd.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt2/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lfa-topo1/rt2/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lfa-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt2/zebra.conf (renamed from tests/topotests/isis-lfa-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt3/isisd.conf (renamed from tests/topotests/isis-lfa-topo1/rt3/isisd.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt3/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lfa-topo1/rt3/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lfa-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt3/zebra.conf (renamed from tests/topotests/isis-lfa-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt4/isisd.conf (renamed from tests/topotests/isis-lfa-topo1/rt4/isisd.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt4/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lfa-topo1/rt4/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lfa-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt4/zebra.conf (renamed from tests/topotests/isis-lfa-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt5/isisd.conf (renamed from tests/topotests/isis-lfa-topo1/rt5/isisd.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt5/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lfa-topo1/rt5/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lfa-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt5/zebra.conf (renamed from tests/topotests/isis-lfa-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt6/isisd.conf (renamed from tests/topotests/isis-lfa-topo1/rt6/isisd.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt6/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lfa-topo1/rt6/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lfa-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt6/zebra.conf (renamed from tests/topotests/isis-lfa-topo1/rt6/zebra.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt7/isisd.conf (renamed from tests/topotests/isis-lfa-topo1/rt7/isisd.conf)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt7/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lfa-topo1/rt7/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt7/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lfa-topo1/rt7/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lfa_topo1/rt7/zebra.conf (renamed from tests/topotests/isis-lfa-topo1/rt7/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py (renamed from tests/topotests/isis-lfa-topo1/test_isis_lfa_topo1.py)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/__init__.py (renamed from tests/topotests/isis-sr-topo1/__init__.py)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/isisd.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/isisd.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step2/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step3/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step4/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt1/zebra.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt2/isisd.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt2/isisd.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt2/zebra.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt3/isisd.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt3/isisd.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt3/zebra.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt4/isisd.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt4/isisd.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt4/zebra.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt5/isisd.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt5/isisd.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt5/zebra.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/isisd.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/isisd.conf)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step2/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step3/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step4/show_ip_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_lsp_bits_topo1/rt6/zebra.conf (renamed from tests/topotests/isis-lsp-bits-topo1/rt6/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_lsp_bits_topo1/test_isis_lsp_bits_topo1.py (renamed from tests/topotests/isis-lsp-bits-topo1/test_isis_lsp_bits_topo1.py)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/__init__.py (renamed from tests/topotests/isis-tilfa-topo1/__init__.py)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt1/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt1/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step1/show_ip_route.ref (renamed from tests/topotests/isis-rlfa-topo1/rt1/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-rlfa-topo1/rt1/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-rlfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step10/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step10/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step10/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step10/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step2/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step3/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step4/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step4/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step5/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step5/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step6/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step7/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step7/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step8/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step8/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step9/show_ip_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step9/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-rlfa-topo1/rt1/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt1/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt2/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt2/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt2/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt2/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt2/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt3/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt3/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt3/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt3/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt3/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt4/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt4/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt4/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt4/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt4/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt5/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt5/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt5/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt5/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt5/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt6/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt6/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt6/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt6/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt6/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt6/zebra.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt7/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt7/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt7/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt7/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt7/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt7/zebra.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt8/isisd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt8/isisd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt8/ldpd.conf (renamed from tests/topotests/isis-rlfa-topo1/rt8/ldpd.conf)0
-rw-r--r--tests/topotests/isis_rlfa_topo1/rt8/zebra.conf (renamed from tests/topotests/isis-rlfa-topo1/rt8/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_rlfa_topo1/test_isis_rlfa_topo1.py (renamed from tests/topotests/isis-rlfa-topo1/test_isis_rlfa_topo1.py)0
-rw-r--r--tests/topotests/isis_snmp/ce3/zebra.conf (renamed from tests/topotests/isis-snmp/ce3/zebra.conf)0
-rw-r--r--tests/topotests/isis_snmp/r1/isisd.conf (renamed from tests/topotests/isis-snmp/r1/isisd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r1/ldpd.conf (renamed from tests/topotests/isis-snmp/r1/ldpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r1/show_ip_route.ref (renamed from tests/topotests/isis-snmp/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_snmp/r1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-snmp/r1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_snmp/r1/snmpd.conf (renamed from tests/topotests/isis-snmp/r1/snmpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r1/zebra.conf (renamed from tests/topotests/isis-snmp/r1/zebra.conf)0
-rw-r--r--tests/topotests/isis_snmp/r2/isisd.conf (renamed from tests/topotests/isis-snmp/r2/isisd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r2/ldpd.conf (renamed from tests/topotests/isis-snmp/r2/ldpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r2/show_ip_route.ref (renamed from tests/topotests/isis-snmp/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_snmp/r2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-snmp/r2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_snmp/r2/snmpd.conf (renamed from tests/topotests/isis-snmp/r2/snmpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r2/zebra.conf (renamed from tests/topotests/isis-snmp/r2/zebra.conf)0
-rw-r--r--tests/topotests/isis_snmp/r3/isisd.conf (renamed from tests/topotests/isis-snmp/r3/isisd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r3/ldpd.conf (renamed from tests/topotests/isis-snmp/r3/ldpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r3/show_ip_route.ref (renamed from tests/topotests/isis-snmp/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_snmp/r3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-snmp/r3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_snmp/r3/snmpd.conf (renamed from tests/topotests/isis-snmp/r3/snmpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r3/zebra.conf (renamed from tests/topotests/isis-snmp/r3/zebra.conf)0
-rw-r--r--tests/topotests/isis_snmp/r4/isisd.conf (renamed from tests/topotests/isis-snmp/r4/isisd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r4/ldpd.conf (renamed from tests/topotests/isis-snmp/r4/ldpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r4/show_ip_route.ref (renamed from tests/topotests/isis-snmp/r4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_snmp/r4/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-snmp/r4/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_snmp/r4/snmpd.conf (renamed from tests/topotests/isis-snmp/r4/snmpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r4/zebra.conf (renamed from tests/topotests/isis-snmp/r4/zebra.conf)0
-rw-r--r--tests/topotests/isis_snmp/r5/isisd.conf (renamed from tests/topotests/isis-snmp/r5/isisd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r5/ldpd.conf (renamed from tests/topotests/isis-snmp/r5/ldpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r5/ldpdconf (renamed from tests/topotests/isis-snmp/r5/ldpdconf)0
-rw-r--r--tests/topotests/isis_snmp/r5/show_ip_route.ref (renamed from tests/topotests/isis-snmp/r5/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_snmp/r5/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-snmp/r5/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_snmp/r5/snmpd.conf (renamed from tests/topotests/isis-snmp/r5/snmpd.conf)0
-rw-r--r--tests/topotests/isis_snmp/r5/zebra.conf (renamed from tests/topotests/isis-snmp/r5/zebra.conf)0
-rw-r--r--tests/topotests/isis_snmp/test_isis_snmp.dot (renamed from tests/topotests/isis-snmp/test_isis_snmp.dot)0
-rwxr-xr-xtests/topotests/isis_snmp/test_isis_snmp.py (renamed from tests/topotests/isis-snmp/test_isis_snmp.py)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/dst/zebra.conf (renamed from tests/topotests/isis-sr-te-topo1/dst/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/bgpd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt1/bgpd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/isisd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt1/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/pathd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt1/pathd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step1/show_mpls_table_with_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step1/show_mpls_table_with_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step1/show_mpls_table_without_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step1/show_mpls_table_without_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step2/show_operational_data.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step2/show_operational_data.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step2/show_operational_data_with_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step2/show_operational_data_with_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step3/show_operational_data_with_single_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step3/show_operational_data_with_single_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step3/show_operational_data_with_two_candidates.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step3/show_operational_data_with_two_candidates.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table_add_segment.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table_add_segment.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table_change_segment.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table_change_segment.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step5/show_ip_route_bgp_active_srte.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step5/show_ip_route_bgp_active_srte.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step5/show_ip_route_bgp_inactive_srte.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step5/show_ip_route_bgp_inactive_srte.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step5/show_operational_data_active.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step5/show_operational_data_active.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/step5/show_operational_data_inactive.ref (renamed from tests/topotests/isis-sr-te-topo1/rt1/step5/show_operational_data_inactive.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt1/zebra.conf (renamed from tests/topotests/isis-sr-te-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt2/isisd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt2/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt2/zebra.conf (renamed from tests/topotests/isis-sr-te-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt3/isisd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt3/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt3/zebra.conf (renamed from tests/topotests/isis-sr-te-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt4/isisd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt4/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt4/zebra.conf (renamed from tests/topotests/isis-sr-te-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt5/isisd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt5/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt5/zebra.conf (renamed from tests/topotests/isis-sr-te-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/bgpd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt6/bgpd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/isisd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt6/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/pathd.conf (renamed from tests/topotests/isis-sr-te-topo1/rt6/pathd.conf)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/step1/show_mpls_table_with_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt6/step1/show_mpls_table_with_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/step1/show_mpls_table_without_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt6/step1/show_mpls_table_without_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/step2/show_operational_data.ref (renamed from tests/topotests/isis-sr-te-topo1/rt6/step2/show_operational_data.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/step2/show_operational_data_with_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt6/step2/show_operational_data_with_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/step3/show_operational_data_with_single_candidate.ref (renamed from tests/topotests/isis-sr-te-topo1/rt6/step3/show_operational_data_with_single_candidate.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/step3/show_operational_data_with_two_candidates.ref (renamed from tests/topotests/isis-sr-te-topo1/rt6/step3/show_operational_data_with_two_candidates.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-te-topo1/rt6/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_te_topo1/rt6/zebra.conf (renamed from tests/topotests/isis-sr-te-topo1/rt6/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_sr_te_topo1/test_isis_sr_te_topo1.py (renamed from tests/topotests/isis-sr-te-topo1/test_isis_sr_te_topo1.py)0
-rw-r--r--tests/topotests/isis_sr_topo1/__init__.py (renamed from tests/topotests/isis-topo1-vrf/__init__.py)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/isisd.conf (renamed from tests/topotests/isis-sr-topo1/rt1/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step1/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step1/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step10/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step10/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step10/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step10/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step10/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step2/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step2/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step3/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step3/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step4/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step4/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step4/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step5/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step5/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step5/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step5/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step5/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step6/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step6/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step6/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step6/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step6/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step7/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step7/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step7/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step7/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step7/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step8/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step8/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step8/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step8/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step8/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step9/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step9/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/step9/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt1/step9/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt1/step9/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt1/zebra.conf (renamed from tests/topotests/isis-sr-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/isisd.conf (renamed from tests/topotests/isis-sr-topo1/rt2/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step1/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step1/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step10/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step10/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step10/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step10/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step10/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step2/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step2/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step3/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step3/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step4/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step4/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step4/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step5/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step5/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step5/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step5/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step5/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step6/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step6/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step6/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step6/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step6/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step7/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step7/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step7/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step7/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step7/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step8/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step8/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step8/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step8/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step8/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step9/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step9/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/step9/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt2/step9/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt2/step9/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt2/zebra.conf (renamed from tests/topotests/isis-sr-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/isisd.conf (renamed from tests/topotests/isis-sr-topo1/rt3/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step1/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step1/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step10/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step10/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step10/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step10/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step10/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step2/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step2/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step3/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step3/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step4/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step4/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step4/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step5/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step5/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step5/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step5/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step5/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step6/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step6/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step6/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step6/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step6/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step7/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step7/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step7/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step7/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step7/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step8/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step8/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step8/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step8/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step8/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step9/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step9/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/step9/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt3/step9/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt3/step9/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt3/zebra.conf (renamed from tests/topotests/isis-sr-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/isisd.conf (renamed from tests/topotests/isis-sr-topo1/rt4/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step1/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step1/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step10/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step10/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step10/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt4/step10/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step10/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step2/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step2/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step3/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step3/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step4/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt4/step4/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step4/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step5/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step5/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step5/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt4/step5/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step5/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step6/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step6/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step6/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt4/step6/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step6/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step7/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step7/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step7/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt4/step7/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step7/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step8/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step8/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step8/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt4/step8/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step8/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step9/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step9/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/step9/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt4/step9/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt4/step9/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt4/zebra.conf (renamed from tests/topotests/isis-sr-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/isisd.conf (renamed from tests/topotests/isis-sr-topo1/rt5/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step1/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step1/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step10/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step10/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step10/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step10/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt5/step10/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step10/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step2/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step2/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step3/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step3/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step4/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step4/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step4/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step5/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step5/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step5/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step5/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt5/step5/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step5/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step6/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step6/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step6/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step6/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt5/step6/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step6/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step7/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step7/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step7/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step7/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt5/step7/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step7/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step8/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step8/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step8/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step8/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt5/step8/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step8/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step9/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step9/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step9/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/step9/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt5/step9/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt5/step9/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt5/zebra.conf (renamed from tests/topotests/isis-sr-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/isisd.conf (renamed from tests/topotests/isis-sr-topo1/rt6/isisd.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step1/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step1/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step10/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step10/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step10/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step10/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step10/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step2/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step2/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step2/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step3/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step3/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step3/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step4/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step4/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step4/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step4/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step4/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step5/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step5/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step5/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step5/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step5/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step6/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step6/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step6/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step6/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step6/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step7/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step7/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step7/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step7/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step7/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step8/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step8/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step8/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step8/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step8/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step9/show_ip_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step9/show_ipv6_route.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/step9/show_mpls_table.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref)0
l---------tests/topotests/isis_sr_topo1/rt6/step9/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-sr-topo1/rt6/step9/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_sr_topo1/rt6/zebra.conf (renamed from tests/topotests/isis-sr-topo1/rt6/zebra.conf)0
-rw-r--r--tests/topotests/isis_sr_topo1/test_isis_sr_topo1.py (renamed from tests/topotests/isis-sr-topo1/test_isis_sr_topo1.py)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/__init__.py (renamed from tests/topotests/isis-topo1/__init__.py)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/isisd.conf (renamed from tests/topotests/isis-tilfa-topo1/rt1/isisd.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step1/show_ip_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt1/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt1/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step1/show_mpls_table.ref (renamed from tests/topotests/isis-tilfa-topo1/rt1/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-tilfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step2/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step3/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step6/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/zebra.conf (renamed from tests/topotests/isis-tilfa-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/isisd.conf (renamed from tests/topotests/isis-tilfa-topo1/rt2/isisd.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step1/show_ip_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt2/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step1/show_mpls_table.ref (renamed from tests/topotests/isis-tilfa-topo1/rt2/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-tilfa-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step4/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step5/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step5/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step6/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step7/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step8/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step9/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/zebra.conf (renamed from tests/topotests/isis-tilfa-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/isisd.conf (renamed from tests/topotests/isis-tilfa-topo1/rt3/isisd.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step1/show_ip_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt3/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt3/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step1/show_mpls_table.ref (renamed from tests/topotests/isis-tilfa-topo1/rt3/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-tilfa-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step2/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step3/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step4/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step5/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step5/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step7/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step8/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step8/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step9/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/zebra.conf (renamed from tests/topotests/isis-tilfa-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/isisd.conf (renamed from tests/topotests/isis-tilfa-topo1/rt4/isisd.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step1/show_ip_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt4/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step1/show_mpls_table.ref (renamed from tests/topotests/isis-tilfa-topo1/rt4/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-tilfa-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step2/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step3/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step9/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/zebra.conf (renamed from tests/topotests/isis-tilfa-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/isisd.conf (renamed from tests/topotests/isis-tilfa-topo1/rt5/isisd.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step1/show_ip_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt5/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step1/show_mpls_table.ref (renamed from tests/topotests/isis-tilfa-topo1/rt5/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-tilfa-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step2/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step3/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step7/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step7/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step8/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step8/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step9/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt5/step9/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/zebra.conf (renamed from tests/topotests/isis-tilfa-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/isisd.conf (renamed from tests/topotests/isis-tilfa-topo1/rt6/isisd.conf)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step1/show_ip_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step1/show_ipv6_route.ref (renamed from tests/topotests/isis-tilfa-topo1/rt6/step1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step1/show_mpls_table.ref (renamed from tests/topotests/isis-tilfa-topo1/rt6/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/isis-tilfa-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step2/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step3/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step4/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step7/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step9/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step9/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref.diff (renamed from tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/zebra.conf (renamed from tests/topotests/isis-tilfa-topo1/rt6/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py (renamed from tests/topotests/isis-tilfa-topo1/test_isis_tilfa_topo1.py)0
-rw-r--r--tests/topotests/isis_topo1/__init__.py (renamed from tests/topotests/ldp-vpls-topo1/__init__.py)0
-rw-r--r--tests/topotests/isis_topo1/r1/isisd.conf (renamed from tests/topotests/isis-topo1/r1/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1/r1/r1_route.json (renamed from tests/topotests/isis-topo1/r1/r1_route.json)0
-rw-r--r--tests/topotests/isis_topo1/r1/r1_route6.json (renamed from tests/topotests/isis-topo1/r1/r1_route6.json)0
-rw-r--r--tests/topotests/isis_topo1/r1/r1_route6_linux.json (renamed from tests/topotests/isis-topo1/r1/r1_route6_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r1/r1_route_linux.json (renamed from tests/topotests/isis-topo1/r1/r1_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r1/r1_topology.json (renamed from tests/topotests/isis-topo1/r1/r1_topology.json)60
-rw-r--r--tests/topotests/isis_topo1/r1/zebra.conf (renamed from tests/topotests/isis-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/isis_topo1/r2/isisd.conf (renamed from tests/topotests/isis-topo1/r2/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1/r2/r2_route.json (renamed from tests/topotests/isis-topo1/r2/r2_route.json)0
-rw-r--r--tests/topotests/isis_topo1/r2/r2_route6.json (renamed from tests/topotests/isis-topo1/r2/r2_route6.json)0
-rw-r--r--tests/topotests/isis_topo1/r2/r2_route6_linux.json (renamed from tests/topotests/isis-topo1/r2/r2_route6_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r2/r2_route_linux.json (renamed from tests/topotests/isis-topo1/r2/r2_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r2/r2_topology.json (renamed from tests/topotests/isis-topo1/r2/r2_topology.json)60
-rw-r--r--tests/topotests/isis_topo1/r2/zebra.conf (renamed from tests/topotests/isis-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/isis_topo1/r3/isisd.conf (renamed from tests/topotests/isis-topo1/r3/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1/r3/r3_route.json (renamed from tests/topotests/isis-topo1/r3/r3_route.json)0
-rw-r--r--tests/topotests/isis_topo1/r3/r3_route6.json (renamed from tests/topotests/isis-topo1/r3/r3_route6.json)0
-rw-r--r--tests/topotests/isis_topo1/r3/r3_route6_linux.json (renamed from tests/topotests/isis-topo1/r3/r3_route6_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r3/r3_route_linux.json (renamed from tests/topotests/isis-topo1/r3/r3_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r3/r3_topology.json (renamed from tests/topotests/isis-topo1/r3/r3_topology.json)139
-rw-r--r--tests/topotests/isis_topo1/r3/zebra.conf (renamed from tests/topotests/isis-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/isis_topo1/r4/isisd.conf (renamed from tests/topotests/isis-topo1/r4/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1/r4/r4_route.json (renamed from tests/topotests/isis-topo1/r4/r4_route.json)0
-rw-r--r--tests/topotests/isis_topo1/r4/r4_route6.json (renamed from tests/topotests/isis-topo1/r4/r4_route6.json)0
-rw-r--r--tests/topotests/isis_topo1/r4/r4_route6_linux.json (renamed from tests/topotests/isis-topo1/r4/r4_route6_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r4/r4_route_linux.json (renamed from tests/topotests/isis-topo1/r4/r4_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r4/r4_topology.json (renamed from tests/topotests/isis-topo1/r4/r4_topology.json)139
-rw-r--r--tests/topotests/isis_topo1/r4/zebra.conf (renamed from tests/topotests/isis-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/isis_topo1/r5/isisd.conf (renamed from tests/topotests/isis-topo1/r5/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1/r5/r5_route.json (renamed from tests/topotests/isis-topo1/r5/r5_route.json)0
-rw-r--r--tests/topotests/isis_topo1/r5/r5_route6.json (renamed from tests/topotests/isis-topo1/r5/r5_route6.json)0
-rw-r--r--tests/topotests/isis_topo1/r5/r5_route6_linux.json (renamed from tests/topotests/isis-topo1/r5/r5_route6_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r5/r5_route_linux.json (renamed from tests/topotests/isis-topo1/r5/r5_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1/r5/r5_topology.json156
-rw-r--r--tests/topotests/isis_topo1/r5/zebra.conf (renamed from tests/topotests/isis-topo1/r5/zebra.conf)0
-rw-r--r--tests/topotests/isis_topo1/test_isis_topo1.dot (renamed from tests/topotests/isis-topo1/test_isis_topo1.dot)0
-rw-r--r--tests/topotests/isis_topo1/test_isis_topo1.jpg (renamed from tests/topotests/isis-topo1/test_isis_topo1.jpg)bin74340 -> 74340 bytes
-rw-r--r--tests/topotests/isis_topo1/test_isis_topo1.py (renamed from tests/topotests/isis-topo1/test_isis_topo1.py)62
-rw-r--r--tests/topotests/isis_topo1_vrf/__init__.py (renamed from tests/topotests/multicast-pim-static-rp-topo1/__init__.py)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r1/isisd.conf (renamed from tests/topotests/isis-topo1-vrf/r1/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r1/r1_route.json (renamed from tests/topotests/isis-topo1-vrf/r1/r1_route.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r1/r1_route6.json (renamed from tests/topotests/isis-topo1-vrf/r1/r1_route6.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r1/r1_route6_linux.json (renamed from tests/topotests/isis-topo1-vrf/r1/r1_route6_linux.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r1/r1_route_linux.json (renamed from tests/topotests/isis-topo1-vrf/r1/r1_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r1/r1_topology.json (renamed from tests/topotests/isis-topo1-vrf/r1/r1_topology.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r1/zebra.conf (renamed from tests/topotests/isis-topo1-vrf/r1/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r2/isisd.conf (renamed from tests/topotests/isis-topo1-vrf/r2/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r2/r2_route.json (renamed from tests/topotests/isis-topo1-vrf/r2/r2_route.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r2/r2_route6.json (renamed from tests/topotests/isis-topo1-vrf/r2/r2_route6.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r2/r2_route6_linux.json (renamed from tests/topotests/isis-topo1-vrf/r2/r2_route6_linux.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r2/r2_route_linux.json (renamed from tests/topotests/isis-topo1-vrf/r2/r2_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r2/r2_topology.json (renamed from tests/topotests/isis-topo1-vrf/r2/r2_topology.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r2/zebra.conf (renamed from tests/topotests/isis-topo1-vrf/r2/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r3/isisd.conf (renamed from tests/topotests/isis-topo1-vrf/r3/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r3/r3_route.json (renamed from tests/topotests/isis-topo1-vrf/r3/r3_route.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r3/r3_route6.json (renamed from tests/topotests/isis-topo1-vrf/r3/r3_route6.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r3/r3_route6_linux.json (renamed from tests/topotests/isis-topo1-vrf/r3/r3_route6_linux.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r3/r3_route_linux.json (renamed from tests/topotests/isis-topo1-vrf/r3/r3_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r3/r3_topology.json (renamed from tests/topotests/isis-topo1-vrf/r3/r3_topology.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r3/zebra.conf (renamed from tests/topotests/isis-topo1-vrf/r3/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r4/isisd.conf (renamed from tests/topotests/isis-topo1-vrf/r4/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r4/r4_route.json (renamed from tests/topotests/isis-topo1-vrf/r4/r4_route.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r4/r4_route6.json (renamed from tests/topotests/isis-topo1-vrf/r4/r4_route6.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r4/r4_route6_linux.json (renamed from tests/topotests/isis-topo1-vrf/r4/r4_route6_linux.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r4/r4_route_linux.json (renamed from tests/topotests/isis-topo1-vrf/r4/r4_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r4/r4_topology.json (renamed from tests/topotests/isis-topo1-vrf/r4/r4_topology.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r4/zebra.conf (renamed from tests/topotests/isis-topo1-vrf/r4/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r5/isisd.conf (renamed from tests/topotests/isis-topo1-vrf/r5/isisd.conf)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r5/r5_route.json (renamed from tests/topotests/isis-topo1-vrf/r5/r5_route.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r5/r5_route6.json (renamed from tests/topotests/isis-topo1-vrf/r5/r5_route6.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r5/r5_route6_linux.json (renamed from tests/topotests/isis-topo1-vrf/r5/r5_route6_linux.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r5/r5_route_linux.json (renamed from tests/topotests/isis-topo1-vrf/r5/r5_route_linux.json)0
-rw-r--r--tests/topotests/isis_topo1_vrf/r5/r5_topology.json (renamed from tests/topotests/isis-topo1-vrf/r5/r5_topology.json)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/r5/zebra.conf (renamed from tests/topotests/isis-topo1-vrf/r5/zebra.conf)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.dot (renamed from tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.dot)0
-rwxr-xr-xtests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.jpg (renamed from tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.jpg)bin74340 -> 74340 bytes
-rw-r--r--tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.py (renamed from tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.py)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/ldpd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r1/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/ospfd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-acl-topo1/r1/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/show_ip_route.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_all_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_all_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r1/zebra.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/ldpd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r2/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/ospfd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-acl-topo1/r2/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/show_ip_route.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_all_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_all_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r2/zebra.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/ldpd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r3/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/ospfd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-acl-topo1/r3/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/show_ip_route.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_all_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_all_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r3/zebra.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/ldpd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r4/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/ospfd.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r4/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-acl-topo1/r4/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/show_ip_route.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_all_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_all_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/r4/zebra.conf (renamed from tests/topotests/ldp-oc-acl-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.dot (renamed from tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.dot)0
-rw-r--r--tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py (renamed from tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.py)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/ldpd.conf (renamed from tests/topotests/ldp-oc-topo1/r1/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/ospfd.conf (renamed from tests/topotests/ldp-oc-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-topo1/r1/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/show_ip_route.ref (renamed from tests/topotests/ldp-oc-topo1/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-topo1/r1/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-topo1/r1/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-topo1/r1/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r1/zebra.conf (renamed from tests/topotests/ldp-oc-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/ldpd.conf (renamed from tests/topotests/ldp-oc-topo1/r2/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/ospfd.conf (renamed from tests/topotests/ldp-oc-topo1/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-topo1/r2/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/show_ip_route.ref (renamed from tests/topotests/ldp-oc-topo1/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-topo1/r2/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-topo1/r2/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-topo1/r2/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r2/zebra.conf (renamed from tests/topotests/ldp-oc-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/ldpd.conf (renamed from tests/topotests/ldp-oc-topo1/r3/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/ospfd.conf (renamed from tests/topotests/ldp-oc-topo1/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-topo1/r3/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/show_ip_route.ref (renamed from tests/topotests/ldp-oc-topo1/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-topo1/r3/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-topo1/r3/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-topo1/r3/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r3/zebra.conf (renamed from tests/topotests/ldp-oc-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/ldpd.conf (renamed from tests/topotests/ldp-oc-topo1/r4/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/ospfd.conf (renamed from tests/topotests/ldp-oc-topo1/r4/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-oc-topo1/r4/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/show_ip_route.ref (renamed from tests/topotests/ldp-oc-topo1/r4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/show_ldp_binding.ref (renamed from tests/topotests/ldp-oc-topo1/r4/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/show_ldp_discovery.ref (renamed from tests/topotests/ldp-oc-topo1/r4/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-oc-topo1/r4/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_oc_topo1/r4/zebra.conf (renamed from tests/topotests/ldp-oc-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.dot (renamed from tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.dot)0
-rw-r--r--tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py (renamed from tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.py)0
-rw-r--r--tests/topotests/ldp_snmp/ce1/zebra.conf (renamed from tests/topotests/ldp-snmp/ce1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_snmp/ce2/zebra.conf (renamed from tests/topotests/ldp-snmp/ce2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_snmp/ce3/zebra.conf (renamed from tests/topotests/ldp-snmp/ce3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r1/isisd.conf (renamed from tests/topotests/ldp-snmp/r1/isisd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r1/ldpd.conf (renamed from tests/topotests/ldp-snmp/r1/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_ip_route.ref (renamed from tests/topotests/ldp-snmp/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_isis_interface_detail.ref (renamed from tests/topotests/ldp-snmp/r1/show_isis_interface_detail.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_isis_interface_detail_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r1/show_isis_interface_detail_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_isis_interface_detail_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r1/show_isis_interface_detail_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_isis_ldp_sync.ref (renamed from tests/topotests/ldp-snmp/r1/show_isis_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-snmp/r1/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-snmp/r1/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_ldp_binding.ref (renamed from tests/topotests/ldp-snmp/r1/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_ldp_discovery.ref (renamed from tests/topotests/ldp-snmp/r1/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-snmp/r1/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-snmp/r1/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/ldp-snmp/r1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r1/snmpd.conf (renamed from tests/topotests/ldp-snmp/r1/snmpd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r1/zebra.conf (renamed from tests/topotests/ldp-snmp/r1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r2/isisd.conf (renamed from tests/topotests/ldp-snmp/r2/isisd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r2/ldpd.conf (renamed from tests/topotests/ldp-snmp/r2/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r2/ospfd.conf (renamed from tests/topotests/ldp-snmp/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_ip_route.ref (renamed from tests/topotests/ldp-snmp/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_isis_interface_detail.ref (renamed from tests/topotests/ldp-snmp/r2/show_isis_interface_detail.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_isis_interface_detail_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r2/show_isis_interface_detail_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_isis_interface_detail_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r2/show_isis_interface_detail_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_isis_ldp_sync.ref (renamed from tests/topotests/ldp-snmp/r2/show_isis_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-snmp/r2/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-snmp/r2/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_ldp_binding.ref (renamed from tests/topotests/ldp-snmp/r2/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_ldp_discovery.ref (renamed from tests/topotests/ldp-snmp/r2/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-snmp/r2/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-snmp/r2/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/ldp-snmp/r2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r2/snmpd.conf (renamed from tests/topotests/ldp-snmp/r2/snmpd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r2/zebra.conf (renamed from tests/topotests/ldp-snmp/r2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r3/isisd.conf (renamed from tests/topotests/ldp-snmp/r3/isisd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r3/ldpd.conf (renamed from tests/topotests/ldp-snmp/r3/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_ip_route.ref (renamed from tests/topotests/ldp-snmp/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_isis_interface_detail.ref (renamed from tests/topotests/ldp-snmp/r3/show_isis_interface_detail.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_isis_interface_detail_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r3/show_isis_interface_detail_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_isis_interface_detail_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r3/show_isis_interface_detail_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_isis_ldp_sync.ref (renamed from tests/topotests/ldp-snmp/r3/show_isis_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-snmp/r3/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-snmp/r3/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_ldp_binding.ref (renamed from tests/topotests/ldp-snmp/r3/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_ldp_discovery.ref (renamed from tests/topotests/ldp-snmp/r3/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-snmp/r3/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-snmp/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-snmp/r3/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/ldp-snmp/r3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/ldp_snmp/r3/zebra.conf (renamed from tests/topotests/ldp-snmp/r3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_snmp/test_ldp_snmp_topo1.py (renamed from tests/topotests/ldp-snmp/test_ldp_snmp_topo1.py)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/ce1/zebra.conf (renamed from tests/topotests/ldp-sync-isis-topo1/ce1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/ce2/zebra.conf (renamed from tests/topotests/ldp-sync-isis-topo1/ce2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/ce3/zebra.conf (renamed from tests/topotests/ldp-sync-isis-topo1/ce3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/isisd.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r1/isisd.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/ldpd.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r1/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_ip_route.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_binding.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_discovery.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r1/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r1/zebra.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/isisd.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r2/isisd.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/ldpd.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r2/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_ip_route.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_binding.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_discovery.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r2/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r2/zebra.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/isisd.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r3/isisd.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/ldpd.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r3/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_ip_route.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_binding.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_discovery.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/show_yang_interface_isis_adjacencies.ref (renamed from tests/topotests/ldp-sync-isis-topo1/r3/show_yang_interface_isis_adjacencies.ref)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/r3/zebra.conf (renamed from tests/topotests/ldp-sync-isis-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.dot (renamed from tests/topotests/ldp-sync-isis-topo1/test_ldp_sync_isis_topo1.dot)0
-rw-r--r--tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.py (renamed from tests/topotests/ldp-sync-isis-topo1/test_ldp_sync_isis_topo1.py)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/ce1/zebra.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/ce1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/ce2/zebra.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/ce2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/ce3/zebra.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/ce3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/ldpd.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/ospf-nbrs.txt (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/ospf-nbrs.txt)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/ospfd.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_route.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_binding.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_discovery.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r1/zebra.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/ldpd.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/ospfd.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_route.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_binding.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_discovery.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/zebra.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/ldpd.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/ospfd.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_route.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_binding.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_discovery.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_igp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/zebra.conf (renamed from tests/topotests/ldp-sync-ospf-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.dot (renamed from tests/topotests/ldp-sync-ospf-topo1/test_ldp_sync_ospf_topo1.dot)0
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py (renamed from tests/topotests/ldp-sync-ospf-topo1/test_ldp_sync_ospf_topo1.py)0
-rw-r--r--tests/topotests/ldp_topo1/r1/ip_mpls_route.ref (renamed from tests/topotests/ldp-topo1/r1/ip_mpls_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r1/ldpd.conf (renamed from tests/topotests/ldp-topo1/r1/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r1/ospfd.conf (renamed from tests/topotests/ldp-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r1/show_ipv4_route.ref (renamed from tests/topotests/ldp-topo1/r1/show_ipv4_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r1/show_mpls_ldp_binding.ref (renamed from tests/topotests/ldp-topo1/r1/show_mpls_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r1/show_mpls_ldp_discovery.ref (renamed from tests/topotests/ldp-topo1/r1/show_mpls_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r1/show_mpls_ldp_interface.ref (renamed from tests/topotests/ldp-topo1/r1/show_mpls_ldp_interface.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r1/show_mpls_ldp_neighbor.ref (renamed from tests/topotests/ldp-topo1/r1/show_mpls_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r1/show_mpls_table.ref (renamed from tests/topotests/ldp-topo1/r1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r1/zebra.conf (renamed from tests/topotests/ldp-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r2/ip_mpls_route.ref (renamed from tests/topotests/ldp-topo1/r2/ip_mpls_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r2/ldpd.conf (renamed from tests/topotests/ldp-topo1/r2/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r2/ospfd.conf (renamed from tests/topotests/ldp-topo1/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r2/show_ipv4_route.ref (renamed from tests/topotests/ldp-topo1/r2/show_ipv4_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r2/show_mpls_ldp_binding.ref (renamed from tests/topotests/ldp-topo1/r2/show_mpls_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r2/show_mpls_ldp_discovery.ref (renamed from tests/topotests/ldp-topo1/r2/show_mpls_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r2/show_mpls_ldp_interface.ref (renamed from tests/topotests/ldp-topo1/r2/show_mpls_ldp_interface.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r2/show_mpls_ldp_neighbor.ref (renamed from tests/topotests/ldp-topo1/r2/show_mpls_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r2/show_mpls_table.ref (renamed from tests/topotests/ldp-topo1/r2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r2/zebra.conf (renamed from tests/topotests/ldp-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r3/ip_mpls_route.ref (renamed from tests/topotests/ldp-topo1/r3/ip_mpls_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r3/ldpd.conf (renamed from tests/topotests/ldp-topo1/r3/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r3/ospfd.conf (renamed from tests/topotests/ldp-topo1/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r3/show_ipv4_route.ref (renamed from tests/topotests/ldp-topo1/r3/show_ipv4_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r3/show_mpls_ldp_binding.ref (renamed from tests/topotests/ldp-topo1/r3/show_mpls_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r3/show_mpls_ldp_discovery.ref (renamed from tests/topotests/ldp-topo1/r3/show_mpls_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r3/show_mpls_ldp_interface.ref (renamed from tests/topotests/ldp-topo1/r3/show_mpls_ldp_interface.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r3/show_mpls_ldp_neighbor.ref (renamed from tests/topotests/ldp-topo1/r3/show_mpls_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r3/show_mpls_table.ref (renamed from tests/topotests/ldp-topo1/r3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r3/zebra.conf (renamed from tests/topotests/ldp-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r4/ip_mpls_route.ref (renamed from tests/topotests/ldp-topo1/r4/ip_mpls_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r4/ldpd.conf (renamed from tests/topotests/ldp-topo1/r4/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r4/ospfd.conf (renamed from tests/topotests/ldp-topo1/r4/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_topo1/r4/show_ipv4_route.ref (renamed from tests/topotests/ldp-topo1/r4/show_ipv4_route.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r4/show_mpls_ldp_binding.ref (renamed from tests/topotests/ldp-topo1/r4/show_mpls_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r4/show_mpls_ldp_discovery.ref (renamed from tests/topotests/ldp-topo1/r4/show_mpls_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r4/show_mpls_ldp_interface.ref (renamed from tests/topotests/ldp-topo1/r4/show_mpls_ldp_interface.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r4/show_mpls_ldp_neighbor.ref (renamed from tests/topotests/ldp-topo1/r4/show_mpls_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r4/show_mpls_table.ref (renamed from tests/topotests/ldp-topo1/r4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ldp_topo1/r4/zebra.conf (renamed from tests/topotests/ldp-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/ldp_topo1/test_ldp_topo1.py (renamed from tests/topotests/ldp-topo1/test_ldp_topo1.py)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/__init__.py (renamed from tests/topotests/ospf-sr-topo1/__init__.py)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/ce1/zebra.conf (renamed from tests/topotests/ldp-vpls-topo1/ce1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/ce2/zebra.conf (renamed from tests/topotests/ldp-vpls-topo1/ce2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/ce3/zebra.conf (renamed from tests/topotests/ldp-vpls-topo1/ce3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/ldpd.conf (renamed from tests/topotests/ldp-vpls-topo1/r1/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/ospf-nbrs.txt (renamed from tests/topotests/ldp-vpls-topo1/r1/ospf-nbrs.txt)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/ospfd.conf (renamed from tests/topotests/ldp-vpls-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-vpls-topo1/r1/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/show_ip_route.ref (renamed from tests/topotests/ldp-vpls-topo1/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-vpls-topo1/r1/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-vpls-topo1/r1/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/show_ldp_binding.ref (renamed from tests/topotests/ldp-vpls-topo1/r1/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/show_ldp_discovery.ref (renamed from tests/topotests/ldp-vpls-topo1/r1/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-vpls-topo1/r1/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r1/zebra.conf (renamed from tests/topotests/ldp-vpls-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/ldpd.conf (renamed from tests/topotests/ldp-vpls-topo1/r2/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/ospfd.conf (renamed from tests/topotests/ldp-vpls-topo1/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-vpls-topo1/r2/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/show_ip_route.ref (renamed from tests/topotests/ldp-vpls-topo1/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-vpls-topo1/r2/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-vpls-topo1/r2/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/show_ldp_binding.ref (renamed from tests/topotests/ldp-vpls-topo1/r2/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/show_ldp_discovery.ref (renamed from tests/topotests/ldp-vpls-topo1/r2/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-vpls-topo1/r2/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r2/zebra.conf (renamed from tests/topotests/ldp-vpls-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/ldpd.conf (renamed from tests/topotests/ldp-vpls-topo1/r3/ldpd.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/ospfd.conf (renamed from tests/topotests/ldp-vpls-topo1/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/show_ip_ospf_neighbor.json (renamed from tests/topotests/ldp-vpls-topo1/r3/show_ip_ospf_neighbor.json)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/show_ip_route.ref (renamed from tests/topotests/ldp-vpls-topo1/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/show_l2vpn_binding.ref (renamed from tests/topotests/ldp-vpls-topo1/r3/show_l2vpn_binding.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/show_l2vpn_vc.ref (renamed from tests/topotests/ldp-vpls-topo1/r3/show_l2vpn_vc.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/show_ldp_binding.ref (renamed from tests/topotests/ldp-vpls-topo1/r3/show_ldp_binding.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/show_ldp_discovery.ref (renamed from tests/topotests/ldp-vpls-topo1/r3/show_ldp_discovery.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/show_ldp_neighbor.ref (renamed from tests/topotests/ldp-vpls-topo1/r3/show_ldp_neighbor.ref)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/r3/zebra.conf (renamed from tests/topotests/ldp-vpls-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.dot (renamed from tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.dot)0
-rw-r--r--tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.pdf (renamed from tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.pdf)bin16693 -> 16693 bytes
-rw-r--r--tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.py (renamed from tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.py)0
-rw-r--r--tests/topotests/multicast_pim_bsm_topo1/mcast_pim_bsmp_01.json (renamed from tests/topotests/multicast-pim-bsm-topo1/mcast_pim_bsmp_01.json)0
-rw-r--r--tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py (renamed from tests/topotests/multicast-pim-bsm-topo1/test_mcast_pim_bsmp_01.py)0
-rw-r--r--tests/topotests/multicast_pim_bsm_topo2/mcast_pim_bsmp_02.json (renamed from tests/topotests/multicast-pim-bsm-topo2/mcast_pim_bsmp_02.json)0
-rw-r--r--tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py (renamed from tests/topotests/multicast-pim-bsm-topo2/test_mcast_pim_bsmp_02.py)0
-rw-r--r--tests/topotests/multicast_pim_sm_topo1/multicast_pim_sm_topo1.json (renamed from tests/topotests/multicast-pim-sm-topo1/multicast_pim_sm_topo1.json)0
-rwxr-xr-xtests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py (renamed from tests/topotests/multicast-pim-sm-topo1/test_multicast_pim_sm_topo1.py)0
-rw-r--r--tests/topotests/multicast_pim_sm_topo2/multicast_pim_sm_topo2.json (renamed from tests/topotests/multicast-pim-sm-topo2/multicast_pim_sm_topo2.json)0
-rwxr-xr-xtests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py (renamed from tests/topotests/multicast-pim-sm-topo2/test_multicast_pim_sm_topo2.py)0
-rw-r--r--tests/topotests/multicast_pim_sm_topo3/multicast_pim_sm_topo3.json (renamed from tests/topotests/multicast-pim-sm-topo3/multicast_pim_sm_topo3.json)0
-rw-r--r--tests/topotests/multicast_pim_sm_topo3/multicast_pim_sm_topo4.json (renamed from tests/topotests/multicast-pim-sm-topo3/multicast_pim_sm_topo4.json)0
-rwxr-xr-xtests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py (renamed from tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo3.py)0
-rwxr-xr-xtests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py (renamed from tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo4.py)0
-rw-r--r--[-rwxr-xr-x]tests/topotests/multicast_pim_static_rp_topo1/__init__.py (renamed from tests/topotests/ospf-te-topo1/__init__.py)0
-rw-r--r--tests/topotests/multicast_pim_static_rp_topo1/multicast_pim_static_rp.json (renamed from tests/topotests/multicast-pim-static-rp-topo1/multicast_pim_static_rp.json)0
-rwxr-xr-xtests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py (renamed from tests/topotests/multicast-pim-static-rp-topo1/test_multicast_pim_static_rp.py)430
-rw-r--r--tests/topotests/nhrp_topo/r1/nhrp4_cache.json (renamed from tests/topotests/nhrp-topo/r1/nhrp4_cache.json)0
-rw-r--r--tests/topotests/nhrp_topo/r1/nhrp_route4.json (renamed from tests/topotests/nhrp-topo/r1/nhrp_route4.json)0
-rw-r--r--tests/topotests/nhrp_topo/r1/nhrpd.conf (renamed from tests/topotests/nhrp-topo/r1/nhrpd.conf)0
-rw-r--r--tests/topotests/nhrp_topo/r1/zebra.conf (renamed from tests/topotests/nhrp-topo/r1/zebra.conf)0
-rw-r--r--tests/topotests/nhrp_topo/r2/nhrp4_cache.json (renamed from tests/topotests/nhrp-topo/r2/nhrp4_cache.json)0
-rw-r--r--tests/topotests/nhrp_topo/r2/nhrp_route4.json (renamed from tests/topotests/nhrp-topo/r2/nhrp_route4.json)0
-rw-r--r--tests/topotests/nhrp_topo/r2/nhrpd.conf (renamed from tests/topotests/nhrp-topo/r2/nhrpd.conf)0
-rw-r--r--tests/topotests/nhrp_topo/r2/zebra.conf (renamed from tests/topotests/nhrp-topo/r2/zebra.conf)0
-rw-r--r--tests/topotests/nhrp_topo/r3/zebra.conf (renamed from tests/topotests/nhrp-topo/r3/zebra.conf)0
-rw-r--r--tests/topotests/nhrp_topo/test_nhrp_topo.dot (renamed from tests/topotests/nhrp-topo/test_nhrp_topo.dot)0
-rw-r--r--tests/topotests/nhrp_topo/test_nhrp_topo.py (renamed from tests/topotests/nhrp-topo/test_nhrp_topo.py)0
-rw-r--r--tests/topotests/ospf-sr-te-topo1/dst/zebra.conf23
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/bgpd.conf16
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/ospfd.conf36
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/pathd.conf27
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data.ref13
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data_with_candidate.ref20
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_single_candidate.ref20
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_two_candidates.ref25
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt1/zebra.conf21
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt2/ospfd.conf47
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt2/zebra.conf35
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt3/ospfd.conf46
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt3/zebra.conf33
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt4/ospfd.conf53
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt4/zebra.conf43
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt5/ospfd.conf53
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt5/zebra.conf43
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/bgpd.conf12
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/ospfd.conf41
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/pathd.conf25
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data.ref13
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data_with_candidate.ref19
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_single_candidate.ref19
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_two_candidates.ref23
-rw-r--r--tests/topotests/ospf-sr-te-topo1/rt6/zebra.conf38
-rwxr-xr-xtests/topotests/ospf-sr-te-topo1/test_ospf_sr_te_topo1.py640
-rw-r--r--tests/topotests/ospf6_topo1/README.md (renamed from tests/topotests/ospf6-topo1/README.md)0
-rw-r--r--tests/topotests/ospf6_topo1/r1/ip_6_address.nhg.ref (renamed from tests/topotests/ospf6-topo1/r1/ip_6_address.nhg.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r1/ip_6_address.ref (renamed from tests/topotests/ospf6-topo1/r1/ip_6_address.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r1/ospf6d.conf (renamed from tests/topotests/ospf6-topo1/r1/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/r1/show_ipv6_route.ref (renamed from tests/topotests/ospf6-topo1/r1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r1/zebra.conf (renamed from tests/topotests/ospf6-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/r2/ip_6_address.nhg.ref (renamed from tests/topotests/ospf6-topo1/r2/ip_6_address.nhg.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r2/ip_6_address.ref (renamed from tests/topotests/ospf6-topo1/r2/ip_6_address.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r2/ospf6d.conf (renamed from tests/topotests/ospf6-topo1/r2/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/r2/show_ipv6_route.ref (renamed from tests/topotests/ospf6-topo1/r2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r2/zebra.conf (renamed from tests/topotests/ospf6-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/r3/ip_6_address.nhg.ref (renamed from tests/topotests/ospf6-topo1/r3/ip_6_address.nhg.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r3/ip_6_address.ref (renamed from tests/topotests/ospf6-topo1/r3/ip_6_address.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r3/ospf6d.conf (renamed from tests/topotests/ospf6-topo1/r3/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/r3/show_ipv6_route.ref (renamed from tests/topotests/ospf6-topo1/r3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r3/zebra.conf (renamed from tests/topotests/ospf6-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/r4/ip_6_address.nhg.ref (renamed from tests/topotests/ospf6-topo1/r4/ip_6_address.nhg.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r4/ip_6_address.ref (renamed from tests/topotests/ospf6-topo1/r4/ip_6_address.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r4/ospf6d.conf (renamed from tests/topotests/ospf6-topo1/r4/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/r4/show_ipv6_route.ref (renamed from tests/topotests/ospf6-topo1/r4/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/ospf6_topo1/r4/zebra.conf (renamed from tests/topotests/ospf6-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/ospf6_topo1/test_ospf6_topo1.py (renamed from tests/topotests/ospf6-topo1/test_ospf6_topo1.py)0
-rw-r--r--tests/topotests/ospf6_topo1_vrf/README.md132
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.nhg.ref10
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.ref10
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r1/ospf6d.conf31
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r1/show_ipv6_vrf_route.ref9
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r1/zebra.conf20
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r2/ip_6_address.ref10
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r2/ospf6d.conf31
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r2/show_ipv6_vrf_route.ref9
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r2/zebra.conf20
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r3/ip_6_address.ref10
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r3/ospf6d.conf37
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r3/show_ipv6_vrf_route.ref9
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r3/zebra.conf23
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r4/ip_6_address.ref10
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r4/ospf6d.conf31
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r4/show_ipv6_vrf_route.ref9
-rw-r--r--tests/topotests/ospf6_topo1_vrf/r4/zebra.conf20
-rwxr-xr-xtests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py457
-rw-r--r--tests/topotests/ospf6_topo2/r1/ospf6d.conf (renamed from tests/topotests/ospf6-topo2/r1/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf6_topo2/r1/zebra.conf (renamed from tests/topotests/ospf6-topo2/r1/zebra.conf)0
-rw-r--r--tests/topotests/ospf6_topo2/r2/ospf6d.conf (renamed from tests/topotests/ospf6-topo2/r2/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf6_topo2/r2/zebra.conf (renamed from tests/topotests/ospf6-topo2/r2/zebra.conf)0
-rw-r--r--tests/topotests/ospf6_topo2/r3/ospf6d.conf (renamed from tests/topotests/ospf6-topo2/r3/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf6_topo2/r3/zebra.conf (renamed from tests/topotests/ospf6-topo2/r3/zebra.conf)0
-rw-r--r--tests/topotests/ospf6_topo2/test_ospf6_topo2.dot (renamed from tests/topotests/ospf6-topo2/test_ospf6_topo2.dot)0
-rw-r--r--tests/topotests/ospf6_topo2/test_ospf6_topo2.png (renamed from tests/topotests/ospf6-topo2/test_ospf6_topo2.png)bin31523 -> 31523 bytes
-rw-r--r--tests/topotests/ospf6_topo2/test_ospf6_topo2.py (renamed from tests/topotests/ospf6-topo2/test_ospf6_topo2.py)0
-rw-r--r--tests/topotests/ospf_dual_stack/test_ospf_dual_stack.dot (renamed from tests/topotests/ospf-dual-stack/test_ospf_dual_stack.dot)0
-rw-r--r--tests/topotests/ospf_dual_stack/test_ospf_dual_stack.jpg (renamed from tests/topotests/ospf-dual-stack/test_ospf_dual_stack.jpg)bin98314 -> 98314 bytes
-rw-r--r--tests/topotests/ospf_dual_stack/test_ospf_dual_stack.json (renamed from tests/topotests/ospf-dual-stack/test_ospf_dual_stack.json)0
-rw-r--r--tests/topotests/ospf_dual_stack/test_ospf_dual_stack.py (renamed from tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py)0
-rw-r--r--tests/topotests/ospf_sr_topo1/__init__.py (renamed from tests/topotests/ospf-tilfa-topo1/__init__.py)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/ospfd.conf (renamed from tests/topotests/ospf-sr-topo1/rt1/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step1/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step1/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step10/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step10/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step10/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step2/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step2/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step3/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step3/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step4/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step4/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step5/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step5/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step5/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step6/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step6/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step6/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step7/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step7/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step7/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step8/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step8/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step8/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step9/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/step9/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt1/step9/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt1/zebra.conf (renamed from tests/topotests/ospf-sr-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/ospfd.conf (renamed from tests/topotests/ospf-sr-topo1/rt2/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step1/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step1/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step10/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step10/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step10/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step2/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step2/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step3/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step3/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step4/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step4/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step5/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step5/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step5/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step6/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step6/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step6/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step7/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step7/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step7/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step8/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step8/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step8/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step9/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/step9/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt2/step9/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt2/zebra.conf (renamed from tests/topotests/ospf-sr-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/ospfd.conf (renamed from tests/topotests/ospf-sr-topo1/rt3/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step1/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step1/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step10/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step10/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step10/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step2/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step2/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step3/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step3/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step4/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step4/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step5/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step5/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step5/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step6/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step6/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step6/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step7/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step7/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step7/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step8/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step8/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step8/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step9/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/step9/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt3/step9/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt3/zebra.conf (renamed from tests/topotests/ospf-sr-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/ospfd.conf (renamed from tests/topotests/ospf-sr-topo1/rt4/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step1/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step1/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step10/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step10/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step10/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step2/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step2/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step3/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step3/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step4/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step4/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step5/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step5/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step5/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step6/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step6/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step6/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step7/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step7/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step7/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step8/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step8/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step8/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step9/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/step9/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt4/step9/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt4/zebra.conf (renamed from tests/topotests/ospf-sr-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/ospfd.conf (renamed from tests/topotests/ospf-sr-topo1/rt5/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step1/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step1/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step10/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step10/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step10/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step2/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step2/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step3/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step3/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step4/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step4/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step5/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step5/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step5/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step6/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step6/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step6/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step7/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step7/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step7/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step8/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step8/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step8/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step9/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/step9/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt5/step9/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt5/zebra.conf (renamed from tests/topotests/ospf-sr-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/ospfd.conf (renamed from tests/topotests/ospf-sr-topo1/rt6/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step1/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step1/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step1/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step1/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step10/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step10/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step10/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step10/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step2/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step2/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step2/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step2/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step3/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step3/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step3/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step3/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step4/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step4/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step4/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step4/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step5/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step5/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step5/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step5/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step6/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step6/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step6/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step6/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step7/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step7/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step7/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step7/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step8/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step8/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step8/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step8/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step9/show_ip_route.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step9/show_ip_route.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/step9/show_mpls_table.ref (renamed from tests/topotests/ospf-sr-topo1/rt6/step9/show_mpls_table.ref)0
-rw-r--r--tests/topotests/ospf_sr_topo1/rt6/zebra.conf (renamed from tests/topotests/ospf-sr-topo1/rt6/zebra.conf)0
-rw-r--r--tests/topotests/ospf_sr_topo1/test_ospf_sr_topo1.py (renamed from tests/topotests/ospf-sr-topo1/test_ospf_sr_topo1.py)0
-rwxr-xr-xtests/topotests/ospf_te_topo1/__init__.py (renamed from tests/topotests/ospf-topo1-vrf/__init__.py)0
-rw-r--r--tests/topotests/ospf_te_topo1/r1/ospfd.conf (renamed from tests/topotests/ospf-te-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/r1/zebra.conf (renamed from tests/topotests/ospf-te-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/r2/ospfd.conf (renamed from tests/topotests/ospf-te-topo1/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/r2/zebra.conf (renamed from tests/topotests/ospf-te-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/r3/ospfd.conf (renamed from tests/topotests/ospf-te-topo1/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/r3/zebra.conf (renamed from tests/topotests/ospf-te-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/r4/ospfd.conf (renamed from tests/topotests/ospf-te-topo1/r4/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/r4/zebra.conf (renamed from tests/topotests/ospf-te-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/ospf_te_topo1/reference/ted_step1.json (renamed from tests/topotests/ospf-te-topo1/reference/ted_step1.json)0
-rw-r--r--tests/topotests/ospf_te_topo1/reference/ted_step2.json (renamed from tests/topotests/ospf-te-topo1/reference/ted_step2.json)0
-rw-r--r--tests/topotests/ospf_te_topo1/reference/ted_step3.json (renamed from tests/topotests/ospf-te-topo1/reference/ted_step3.json)0
-rw-r--r--tests/topotests/ospf_te_topo1/reference/ted_step4.json (renamed from tests/topotests/ospf-te-topo1/reference/ted_step4.json)0
-rw-r--r--tests/topotests/ospf_te_topo1/reference/ted_step5.json (renamed from tests/topotests/ospf-te-topo1/reference/ted_step5.json)0
-rw-r--r--tests/topotests/ospf_te_topo1/reference/ted_step6.json (renamed from tests/topotests/ospf-te-topo1/reference/ted_step6.json)0
-rw-r--r--tests/topotests/ospf_te_topo1/reference/ted_step7.json (renamed from tests/topotests/ospf-te-topo1/reference/ted_step7.json)0
-rw-r--r--tests/topotests/ospf_te_topo1/test_ospf_te_topo1.py (renamed from tests/topotests/ospf-te-topo1/test_ospf_te_topo1.py)0
-rw-r--r--[-rwxr-xr-x]tests/topotests/ospf_tilfa_topo1/__init__.py (renamed from tests/topotests/ospf-topo1/__init__.py)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt1/ospfd.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt1/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt1/step1/show_ip_route_initial.ref (renamed from tests/topotests/ospf-tilfa-topo1/rt1/step1/show_ip_route_initial.ref)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_initial.ref (renamed from tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_initial.ref)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_link_protection.ref (renamed from tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_link_protection.ref)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_initial.ref (renamed from tests/topotests/ospf-tilfa-topo1/rt1/step3/show_ip_route_initial.ref)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_node_protection.ref (renamed from tests/topotests/ospf-tilfa-topo1/rt1/step3/show_ip_route_node_protection.ref)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt1/zebra.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt1/zebra.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt2/ospfd.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt2/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt2/zebra.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt2/zebra.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt3/ospfd.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt3/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt3/zebra.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt3/zebra.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt4/ospfd.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt4/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt4/zebra.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt4/zebra.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt5/ospfd.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt5/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/rt5/zebra.conf (renamed from tests/topotests/ospf-tilfa-topo1/rt5/zebra.conf)0
-rw-r--r--tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py (renamed from tests/topotests/ospf-tilfa-topo1/test_ospf_tilfa_topo1.py)0
-rwxr-xr-x[-rw-r--r--]tests/topotests/ospf_topo1/__init__.py (renamed from tests/topotests/pbr-topo1/__init__.py)0
-rw-r--r--tests/topotests/ospf_topo1/r1/ospf6d.conf (renamed from tests/topotests/ospf-topo1/r1/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r1/ospf6route.txt (renamed from tests/topotests/ospf-topo1/r1/ospf6route.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r1/ospf6route_down.txt (renamed from tests/topotests/ospf-topo1/r1/ospf6route_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r1/ospf6route_ecmp.txt (renamed from tests/topotests/ospf-topo1/r1/ospf6route_ecmp.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r1/ospfd.conf (renamed from tests/topotests/ospf-topo1/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r1/ospfroute.txt (renamed from tests/topotests/ospf-topo1/r1/ospfroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r1/ospfroute_down.txt (renamed from tests/topotests/ospf-topo1/r1/ospfroute_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r1/zebra.conf (renamed from tests/topotests/ospf-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r2/ospf6d.conf (renamed from tests/topotests/ospf-topo1/r2/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r2/ospf6route.txt (renamed from tests/topotests/ospf-topo1/r2/ospf6route.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r2/ospf6route_down.txt (renamed from tests/topotests/ospf-topo1/r2/ospf6route_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r2/ospf6route_ecmp.txt (renamed from tests/topotests/ospf-topo1/r2/ospf6route_ecmp.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r2/ospfd.conf (renamed from tests/topotests/ospf-topo1/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r2/ospfroute.txt (renamed from tests/topotests/ospf-topo1/r2/ospfroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r2/ospfroute_down.txt (renamed from tests/topotests/ospf-topo1/r2/ospfroute_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r2/zebra.conf (renamed from tests/topotests/ospf-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r3/ospf6d.conf (renamed from tests/topotests/ospf-topo1/r3/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r3/ospf6route.txt (renamed from tests/topotests/ospf-topo1/r3/ospf6route.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r3/ospf6route_down.txt (renamed from tests/topotests/ospf-topo1/r3/ospf6route_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r3/ospf6route_ecmp.txt (renamed from tests/topotests/ospf-topo1/r3/ospf6route_ecmp.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r3/ospfd.conf (renamed from tests/topotests/ospf-topo1/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r3/ospfroute.txt (renamed from tests/topotests/ospf-topo1/r3/ospfroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r3/ospfroute_down.txt (renamed from tests/topotests/ospf-topo1/r3/ospfroute_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r3/zebra.conf (renamed from tests/topotests/ospf-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r4/ospf6d.conf (renamed from tests/topotests/ospf-topo1/r4/ospf6d.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r4/ospf6route.txt (renamed from tests/topotests/ospf-topo1/r4/ospf6route.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r4/ospf6route_down.txt (renamed from tests/topotests/ospf-topo1/r4/ospf6route_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r4/ospf6route_ecmp.txt (renamed from tests/topotests/ospf-topo1/r4/ospf6route_ecmp.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r4/ospfd.conf (renamed from tests/topotests/ospf-topo1/r4/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo1/r4/ospfroute.txt (renamed from tests/topotests/ospf-topo1/r4/ospfroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r4/ospfroute_down.txt (renamed from tests/topotests/ospf-topo1/r4/ospfroute_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1/r4/zebra.conf (renamed from tests/topotests/ospf-topo1/r4/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo1/test_ospf_topo1.dot (renamed from tests/topotests/ospf-topo1/test_ospf_topo1.dot)0
-rw-r--r--tests/topotests/ospf_topo1/test_ospf_topo1.jpg (renamed from tests/topotests/ospf-topo1/test_ospf_topo1.jpg)bin123663 -> 123663 bytes
-rw-r--r--tests/topotests/ospf_topo1/test_ospf_topo1.py (renamed from tests/topotests/ospf-topo1/test_ospf_topo1.py)0
-rwxr-xr-x[-rw-r--r--]tests/topotests/ospf_topo1_vrf/__init__.py (renamed from tests/topotests/pim-basic-topo2/__init__.py)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r1/ospfd.conf (renamed from tests/topotests/ospf-topo1-vrf/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r1/ospfroute.txt (renamed from tests/topotests/ospf-topo1-vrf/r1/ospfroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r1/ospfroute_down.txt (renamed from tests/topotests/ospf-topo1-vrf/r1/ospfroute_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r1/zebra.conf (renamed from tests/topotests/ospf-topo1-vrf/r1/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r1/zebraroute.txt (renamed from tests/topotests/ospf-topo1-vrf/r1/zebraroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r1/zebraroutedown.txt (renamed from tests/topotests/ospf-topo1-vrf/r1/zebraroutedown.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r2/ospfd.conf (renamed from tests/topotests/ospf-topo1-vrf/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r2/ospfroute.txt (renamed from tests/topotests/ospf-topo1-vrf/r2/ospfroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r2/ospfroute_down.txt (renamed from tests/topotests/ospf-topo1-vrf/r2/ospfroute_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r2/zebra.conf (renamed from tests/topotests/ospf-topo1-vrf/r2/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r2/zebraroute.txt (renamed from tests/topotests/ospf-topo1-vrf/r2/zebraroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r2/zebraroutedown.txt (renamed from tests/topotests/ospf-topo1-vrf/r2/zebraroutedown.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r3/ospfd.conf (renamed from tests/topotests/ospf-topo1-vrf/r3/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r3/ospfroute.txt (renamed from tests/topotests/ospf-topo1-vrf/r3/ospfroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r3/ospfroute_down.txt (renamed from tests/topotests/ospf-topo1-vrf/r3/ospfroute_down.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r3/zebra.conf (renamed from tests/topotests/ospf-topo1-vrf/r3/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r3/zebraroute.txt (renamed from tests/topotests/ospf-topo1-vrf/r3/zebraroute.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/r3/zebraroutedown.txt (renamed from tests/topotests/ospf-topo1-vrf/r3/zebraroutedown.txt)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/test_ospf_topo1-vrf.dot (renamed from tests/topotests/ospf-topo1-vrf/test_ospf_topo1-vrf.dot)0
-rw-r--r--tests/topotests/ospf_topo1_vrf/test_ospf_topo1_vrf.jpg (renamed from tests/topotests/ospf-topo1-vrf/test_ospf_topo1_vrf.jpg)bin65859 -> 65859 bytes
-rw-r--r--tests/topotests/ospf_topo1_vrf/test_ospf_topo1_vrf.py (renamed from tests/topotests/ospf-topo1-vrf/test_ospf_topo1_vrf.py)0
-rw-r--r--tests/topotests/ospf_topo2/r1/ospf-route.json (renamed from tests/topotests/ospf-topo2/r1/ospf-route.json)0
-rw-r--r--tests/topotests/ospf_topo2/r1/ospfd.conf (renamed from tests/topotests/ospf-topo2/r1/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo2/r1/v4_route.json (renamed from tests/topotests/ospf-topo2/r1/v4_route.json)0
-rw-r--r--tests/topotests/ospf_topo2/r1/zebra.conf (renamed from tests/topotests/ospf-topo2/r1/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo2/r2/ospf-route.json (renamed from tests/topotests/ospf-topo2/r2/ospf-route.json)0
-rw-r--r--tests/topotests/ospf_topo2/r2/ospfd.conf (renamed from tests/topotests/ospf-topo2/r2/ospfd.conf)0
-rw-r--r--tests/topotests/ospf_topo2/r2/v4_route.json (renamed from tests/topotests/ospf-topo2/r2/v4_route.json)0
-rw-r--r--tests/topotests/ospf_topo2/r2/zebra.conf (renamed from tests/topotests/ospf-topo2/r2/zebra.conf)0
-rw-r--r--tests/topotests/ospf_topo2/test_ospf_topo2.py (renamed from tests/topotests/ospf-topo2/test_ospf_topo2.py)0
-rw-r--r--tests/topotests/pbr_topo1/__init__.py0
-rw-r--r--tests/topotests/pbr_topo1/r1/linux-rules.json (renamed from tests/topotests/pbr-topo1/r1/linux-rules.json)0
-rw-r--r--tests/topotests/pbr_topo1/r1/pbr-interface.json (renamed from tests/topotests/pbr-topo1/r1/pbr-interface.json)0
-rw-r--r--tests/topotests/pbr_topo1/r1/pbr-map.json (renamed from tests/topotests/pbr-topo1/r1/pbr-map.json)0
-rw-r--r--tests/topotests/pbr_topo1/r1/pbr-nexthop-groups.json (renamed from tests/topotests/pbr-topo1/r1/pbr-nexthop-groups.json)0
-rw-r--r--tests/topotests/pbr_topo1/r1/pbrd.conf (renamed from tests/topotests/pbr-topo1/r1/pbrd.conf)0
-rw-r--r--tests/topotests/pbr_topo1/r1/zebra.conf (renamed from tests/topotests/pbr-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/pbr_topo1/test_pbr_topo1.py (renamed from tests/topotests/pbr-topo1/test_pbr_topo1.py)0
-rwxr-xr-xtests/topotests/pim_basic/mcast-rx.py (renamed from tests/topotests/pim-basic/mcast-rx.py)0
-rwxr-xr-xtests/topotests/pim_basic/mcast-tx.py (renamed from tests/topotests/pim-basic/mcast-tx.py)0
-rw-r--r--tests/topotests/pim_basic/r1/bgpd.conf (renamed from tests/topotests/pim-basic/r1/bgpd.conf)0
-rw-r--r--tests/topotests/pim_basic/r1/pimd.conf (renamed from tests/topotests/pim-basic/r1/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic/r1/rp-info.json (renamed from tests/topotests/pim-basic/r1/rp-info.json)0
-rw-r--r--tests/topotests/pim_basic/r1/zebra.conf (renamed from tests/topotests/pim-basic/r1/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic/r2/pimd.conf (renamed from tests/topotests/pim-basic/r2/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic/r2/zebra.conf (renamed from tests/topotests/pim-basic/r2/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic/r3/pimd.conf (renamed from tests/topotests/pim-basic/r3/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic/r3/zebra.conf (renamed from tests/topotests/pim-basic/r3/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic/rp/bgpd.conf (renamed from tests/topotests/pim-basic/rp/bgpd.conf)0
-rw-r--r--tests/topotests/pim_basic/rp/pimd.conf (renamed from tests/topotests/pim-basic/rp/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic/rp/upstream.json (renamed from tests/topotests/pim-basic/rp/upstream.json)0
-rw-r--r--tests/topotests/pim_basic/rp/zebra.conf (renamed from tests/topotests/pim-basic/rp/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic/test_pim.py (renamed from tests/topotests/pim-basic/test_pim.py)0
-rw-r--r--tests/topotests/pim_basic_topo2/__init__.py0
-rw-r--r--tests/topotests/pim_basic_topo2/r1/bfdd.conf (renamed from tests/topotests/pim-basic-topo2/r1/bfdd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r1/pimd.conf (renamed from tests/topotests/pim-basic-topo2/r1/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r1/zebra.conf (renamed from tests/topotests/pim-basic-topo2/r1/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r2/bfdd.conf (renamed from tests/topotests/pim-basic-topo2/r2/bfdd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r2/pimd.conf (renamed from tests/topotests/pim-basic-topo2/r2/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r2/zebra.conf (renamed from tests/topotests/pim-basic-topo2/r2/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r3/bfdd.conf (renamed from tests/topotests/pim-basic-topo2/r3/bfdd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r3/pimd.conf (renamed from tests/topotests/pim-basic-topo2/r3/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r3/zebra.conf (renamed from tests/topotests/pim-basic-topo2/r3/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r4/bfdd.conf (renamed from tests/topotests/pim-basic-topo2/r4/bfdd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r4/pimd.conf (renamed from tests/topotests/pim-basic-topo2/r4/pimd.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/r4/zebra.conf (renamed from tests/topotests/pim-basic-topo2/r4/zebra.conf)0
-rw-r--r--tests/topotests/pim_basic_topo2/test_pim_basic_topo2.dot (renamed from tests/topotests/pim-basic-topo2/test_pim_basic_topo2.dot)0
-rw-r--r--tests/topotests/pim_basic_topo2/test_pim_basic_topo2.png (renamed from tests/topotests/pim-basic-topo2/test_pim_basic_topo2.png)bin33496 -> 33496 bytes
-rw-r--r--tests/topotests/pim_basic_topo2/test_pim_basic_topo2.py (renamed from tests/topotests/pim-basic-topo2/test_pim_basic_topo2.py)0
-rw-r--r--tests/topotests/pytest.ini2
-rw-r--r--tests/topotests/rip_topo1/r1/rip_status.ref (renamed from tests/topotests/rip-topo1/r1/rip_status.ref)0
-rw-r--r--tests/topotests/rip_topo1/r1/ripd.conf (renamed from tests/topotests/rip-topo1/r1/ripd.conf)0
-rw-r--r--tests/topotests/rip_topo1/r1/show_ip_rip.ref (renamed from tests/topotests/rip-topo1/r1/show_ip_rip.ref)0
-rw-r--r--tests/topotests/rip_topo1/r1/show_ip_route.ref (renamed from tests/topotests/rip-topo1/r1/show_ip_route.ref)0
-rw-r--r--tests/topotests/rip_topo1/r1/zebra.conf (renamed from tests/topotests/rip-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/rip_topo1/r2/rip_status.ref (renamed from tests/topotests/rip-topo1/r2/rip_status.ref)0
-rw-r--r--tests/topotests/rip_topo1/r2/ripd.conf (renamed from tests/topotests/rip-topo1/r2/ripd.conf)0
-rw-r--r--tests/topotests/rip_topo1/r2/show_ip_rip.ref (renamed from tests/topotests/rip-topo1/r2/show_ip_rip.ref)0
-rw-r--r--tests/topotests/rip_topo1/r2/show_ip_route.ref (renamed from tests/topotests/rip-topo1/r2/show_ip_route.ref)0
-rw-r--r--tests/topotests/rip_topo1/r2/zebra.conf (renamed from tests/topotests/rip-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/rip_topo1/r3/rip_status.ref (renamed from tests/topotests/rip-topo1/r3/rip_status.ref)0
-rw-r--r--tests/topotests/rip_topo1/r3/ripd.conf (renamed from tests/topotests/rip-topo1/r3/ripd.conf)0
-rw-r--r--tests/topotests/rip_topo1/r3/show_ip_rip.ref (renamed from tests/topotests/rip-topo1/r3/show_ip_rip.ref)0
-rw-r--r--tests/topotests/rip_topo1/r3/show_ip_route.ref (renamed from tests/topotests/rip-topo1/r3/show_ip_route.ref)0
-rw-r--r--tests/topotests/rip_topo1/r3/zebra.conf (renamed from tests/topotests/rip-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/rip_topo1/test_rip_topo1.dot (renamed from tests/topotests/rip-topo1/test_rip_topo1.dot)0
-rw-r--r--tests/topotests/rip_topo1/test_rip_topo1.pdf (renamed from tests/topotests/rip-topo1/test_rip_topo1.pdf)bin18433 -> 18433 bytes
-rw-r--r--tests/topotests/rip_topo1/test_rip_topo1.py (renamed from tests/topotests/rip-topo1/test_rip_topo1.py)0
-rw-r--r--tests/topotests/ripng_topo1/r1/ripng_status.ref (renamed from tests/topotests/ripng-topo1/r1/ripng_status.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r1/ripngd.conf (renamed from tests/topotests/ripng-topo1/r1/ripngd.conf)0
-rw-r--r--tests/topotests/ripng_topo1/r1/show_ipv6_ripng.ref (renamed from tests/topotests/ripng-topo1/r1/show_ipv6_ripng.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r1/show_ipv6_route.ref (renamed from tests/topotests/ripng-topo1/r1/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r1/zebra.conf (renamed from tests/topotests/ripng-topo1/r1/zebra.conf)0
-rw-r--r--tests/topotests/ripng_topo1/r2/ripng_status.ref (renamed from tests/topotests/ripng-topo1/r2/ripng_status.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r2/ripngd.conf (renamed from tests/topotests/ripng-topo1/r2/ripngd.conf)0
-rw-r--r--tests/topotests/ripng_topo1/r2/show_ipv6_ripng.ref (renamed from tests/topotests/ripng-topo1/r2/show_ipv6_ripng.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r2/show_ipv6_route.ref (renamed from tests/topotests/ripng-topo1/r2/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r2/zebra.conf (renamed from tests/topotests/ripng-topo1/r2/zebra.conf)0
-rw-r--r--tests/topotests/ripng_topo1/r3/ripng_status.ref (renamed from tests/topotests/ripng-topo1/r3/ripng_status.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r3/ripngd.conf (renamed from tests/topotests/ripng-topo1/r3/ripngd.conf)0
-rw-r--r--tests/topotests/ripng_topo1/r3/show_ipv6_ripng.ref (renamed from tests/topotests/ripng-topo1/r3/show_ipv6_ripng.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r3/show_ipv6_route.ref (renamed from tests/topotests/ripng-topo1/r3/show_ipv6_route.ref)0
-rw-r--r--tests/topotests/ripng_topo1/r3/zebra.conf (renamed from tests/topotests/ripng-topo1/r3/zebra.conf)0
-rw-r--r--tests/topotests/ripng_topo1/test_ripng_topo1.dot (renamed from tests/topotests/ripng-topo1/test_ripng_topo1.dot)0
-rw-r--r--tests/topotests/ripng_topo1/test_ripng_topo1.pdf (renamed from tests/topotests/ripng-topo1/test_ripng_topo1.pdf)bin18609 -> 18609 bytes
-rw-r--r--tests/topotests/ripng_topo1/test_ripng_topo1.py (renamed from tests/topotests/ripng-topo1/test_ripng_topo1.py)0
-rw-r--r--tests/topotests/route_scale/r1/installed.routes.json (renamed from tests/topotests/route-scale/r1/installed.routes.json)0
-rw-r--r--tests/topotests/route_scale/r1/no.routes.json (renamed from tests/topotests/route-scale/r1/no.routes.json)0
-rw-r--r--tests/topotests/route_scale/r1/sharpd.conf (renamed from tests/topotests/route-scale/r1/sharpd.conf)0
-rw-r--r--tests/topotests/route_scale/r1/zebra.conf (renamed from tests/topotests/route-scale/r1/zebra.conf)0
-rw-r--r--tests/topotests/route_scale/test_route_scale.py (renamed from tests/topotests/route-scale/test_route_scale.py)0
-rw-r--r--tests/topotests/simple_snmp_test/r1/bgpd.conf (renamed from tests/topotests/simple-snmp-test/r1/bgpd.conf)0
-rw-r--r--tests/topotests/simple_snmp_test/r1/isisd.conf (renamed from tests/topotests/simple-snmp-test/r1/isisd.conf)0
-rw-r--r--tests/topotests/simple_snmp_test/r1/snmpd.conf (renamed from tests/topotests/simple-snmp-test/r1/snmpd.conf)0
-rw-r--r--tests/topotests/simple_snmp_test/r1/zebra.conf (renamed from tests/topotests/simple-snmp-test/r1/zebra.conf)0
-rwxr-xr-xtests/topotests/simple_snmp_test/test_simple_snmp.py (renamed from tests/topotests/simple-snmp-test/test_simple_snmp.py)0
-rw-r--r--tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py404
-rw-r--r--tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py196
-rw-r--r--tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py170
-rw-r--r--tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py39
-rw-r--r--tests/topotests/static_routing_with_ibgp/test_static_routes_topo1_ibgp.py238
-rw-r--r--tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py251
-rw-r--r--tests/topotests/static_routing_with_ibgp/test_static_routes_topo3_ibgp.py120
-rw-r--r--tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py30
-rwxr-xr-xtools/frr-reload.py11
-rw-r--r--tools/subdir.am2
-rw-r--r--tools/valgrind.supp (renamed from bgpd/valgrind.supp)14
-rwxr-xr-xvtysh/extract.pl.in7
-rw-r--r--vtysh/vtysh.c4
-rw-r--r--vtysh/vtysh_config.c14
-rw-r--r--yang/frr-isisd.yang7
-rw-r--r--yang/frr-pathd.yang109
-rw-r--r--zebra/connected.c69
-rw-r--r--zebra/debug.c2
-rw-r--r--zebra/if_netlink.c182
-rw-r--r--zebra/if_netlink.h3
-rw-r--r--zebra/interface.c34
-rw-r--r--zebra/interface.h4
-rw-r--r--zebra/kernel_netlink.c5
-rw-r--r--zebra/redistribute.c29
-rw-r--r--zebra/rt.h3
-rw-r--r--zebra/rt_netlink.c7
-rw-r--r--zebra/rt_socket.c6
-rw-r--r--zebra/zapi_msg.c120
-rw-r--r--zebra/zebra_dplane.c125
-rw-r--r--zebra/zebra_dplane.h16
-rw-r--r--zebra/zebra_errors.h1
-rw-r--r--zebra/zebra_evpn.c8
-rw-r--r--zebra/zebra_evpn_mac.c2
-rw-r--r--zebra/zebra_evpn_mh.c4
-rw-r--r--zebra/zebra_evpn_neigh.c2
-rw-r--r--zebra/zebra_l2.c26
-rw-r--r--zebra/zebra_l2.h17
-rw-r--r--zebra/zebra_mpls.c13
-rw-r--r--zebra/zebra_nhg.c1
-rw-r--r--zebra/zebra_pbr.c2
-rw-r--r--zebra/zebra_rib.c1
-rw-r--r--zebra/zebra_routemap_nb.c2
-rw-r--r--zebra/zebra_vrf.c9
-rw-r--r--zebra/zebra_vrf.h2
-rw-r--r--zebra/zebra_vxlan.c17
-rw-r--r--zebra/zserv.c1
2432 files changed, 12766 insertions, 5264 deletions
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index 837ec75b8d..1ecdfd2fb3 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -19,3 +19,4 @@ c14777c6bfd0a446c85243d3a9835054a259c276
96244aca23adec551c29b78f26605f8af8eea53e
8451921b70044a2c1075e7ba391f095fabee2550
bf8d3d6aca3f20255a621ed1c148fd05b3a8ae5c
+96941f80927ce31a41f7d1905717f099187be723
diff --git a/.travis.yml b/.travis.yml
index d8e450a646..32b686c00e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -22,7 +22,7 @@ jobs:
- docker ps
- docker exec frr-ubuntu18 bash -c 'cd ~/frr ; make check'
- docker exec frr-ubuntu18 bash -c 'ps agxu ; lsmod | grep mpls || true'
- - docker exec frr-ubuntu18 bash -c 'cd ~/frr/tests/topotests/ospf-topo1 ; sudo pytest test_ospf_topo1.py'
+ - docker exec frr-ubuntu18 bash -c 'cd ~/frr/tests/topotests/ospf_topo1 ; sudo pytest test_ospf_topo1.py'
- docker exec frr-ubuntu18 bash -c 'cd ~/frr/tests/topotests/bgp_l3vpn_to_bgp_vrf ; sudo pytest test_bgp_l3vpn_to_bgp_vrf.py'
name: ubuntu18+minimalCI
- script:
@@ -34,7 +34,7 @@ jobs:
- docker ps
- docker exec frr-ubuntu20 bash -c 'cd ~/frr ; make check'
- docker exec frr-ubuntu20 bash -c 'ps agxu ; lsmod | grep mpls || true'
- - docker exec frr-ubuntu20 bash -c 'cd ~/frr/tests/topotests/ospf-topo1 ; sudo pytest test_ospf_topo1.py'
+ - docker exec frr-ubuntu20 bash -c 'cd ~/frr/tests/topotests/ospf_topo1 ; sudo pytest test_ospf_topo1.py'
- docker exec frr-ubuntu20 bash -c 'cd ~/frr/tests/topotests/bgp_l3vpn_to_bgp_vrf ; sudo pytest test_bgp_l3vpn_to_bgp_vrf.py'
name: ubuntu20+minimalCI
diff --git a/Makefile.am b/Makefile.am
index e4149b62ed..a5101df2f0 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -11,11 +11,19 @@ AM_CFLAGS = \
$(SAN_FLAGS) \
$(WERROR) \
# end
-AM_CPPFLAGS = \
+
+# CPPFLAGS_BASE does not contain the include path for overriding assert.h,
+# therefore should be used in tools that do *not* link libfrr or do not want
+# assert() overridden
+CPPFLAGS_BASE = \
-I$(top_srcdir) -I$(top_srcdir)/include -I$(top_srcdir)/lib \
-I$(top_builddir) \
$(LUA_INCLUDE) \
# end
+AM_CPPFLAGS = \
+ -I$(top_srcdir)/lib/assert \
+ $(CPPFLAGS_BASE) \
+ # end
AM_LDFLAGS = \
-export-dynamic \
$(AC_LDFLAGS) \
diff --git a/babeld/babeld.c b/babeld/babeld.c
index 72080bd7eb..4d4dd2e194 100644
--- a/babeld/babeld.c
+++ b/babeld/babeld.c
@@ -712,6 +712,92 @@ DEFUN (babel_set_smoothing_half_life,
return CMD_SUCCESS;
}
+DEFUN (babel_distribute_list,
+ babel_distribute_list_cmd,
+ "distribute-list [prefix] WORD <in|out> [WORD]",
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[1]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_parser(prefix, true, argv[2 + prefix]->text,
+ argv[1 + prefix]->arg, ifname);
+}
+
+DEFUN (babel_no_distribute_list,
+ babel_no_distribute_list_cmd,
+ "no distribute-list [prefix] WORD <in|out> [WORD]",
+ NO_STR
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[2]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_no_parser(vty, prefix, true,
+ argv[3 + prefix]->text,
+ argv[2 + prefix]->arg, ifname);
+}
+
+DEFUN (babel_ipv6_distribute_list,
+ babel_ipv6_distribute_list_cmd,
+ "ipv6 distribute-list [prefix] WORD <in|out> [WORD]",
+ "IPv6\n"
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[2]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_parser(prefix, false, argv[3 + prefix]->text,
+ argv[2 + prefix]->arg, ifname);
+}
+
+DEFUN (babel_no_ipv6_distribute_list,
+ babel_no_ipv6_distribute_list_cmd,
+ "no ipv6 distribute-list [prefix] WORD <in|out> [WORD]",
+ NO_STR
+ "IPv6\n"
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[3]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_no_parser(vty, prefix, false,
+ argv[4 + prefix]->text,
+ argv[3 + prefix]->arg, ifname);
+}
+
void
babeld_quagga_init(void)
{
@@ -728,6 +814,11 @@ babeld_quagga_init(void)
install_element(BABEL_NODE, &babel_set_resend_delay_cmd);
install_element(BABEL_NODE, &babel_set_smoothing_half_life_cmd);
+ install_element(BABEL_NODE, &babel_distribute_list_cmd);
+ install_element(BABEL_NODE, &babel_no_distribute_list_cmd);
+ install_element(BABEL_NODE, &babel_ipv6_distribute_list_cmd);
+ install_element(BABEL_NODE, &babel_no_ipv6_distribute_list_cmd);
+
babel_if_init();
/* Access list install. */
@@ -739,9 +830,6 @@ babeld_quagga_init(void)
prefix_list_init ();
prefix_list_add_hook (babel_distribute_update_all);
prefix_list_delete_hook (babel_distribute_update_all);
-
- /* Distribute list install. */
- distribute_list_init(BABEL_NODE);
}
/* Stubs to adapt Babel's filtering calls to Quagga's infrastructure. */
diff --git a/bgpd/bgp_clist.c b/bgpd/bgp_clist.c
index e17cce3ff6..50122ad7da 100644
--- a/bgpd/bgp_clist.c
+++ b/bgpd/bgp_clist.c
@@ -1117,9 +1117,6 @@ int lcommunity_list_set(struct community_list_handler *ch, const char *name,
}
if (str) {
- if (!lcommunity_list_valid(str, style))
- return COMMUNITY_LIST_ERR_MALFORMED_VAL;
-
if (style == LARGE_COMMUNITY_LIST_STANDARD)
lcom = lcommunity_str2com(str);
else
diff --git a/bgpd/bgp_community.c b/bgpd/bgp_community.c
index 43138b82f6..b034ec9f7b 100644
--- a/bgpd/bgp_community.c
+++ b/bgpd/bgp_community.c
@@ -28,6 +28,7 @@
#include "bgpd/bgp_memory.h"
#include "bgpd/bgp_community.h"
+#include "bgpd/bgp_community_alias.h"
/* Hash of community attribute. */
static struct hash *comhash;
@@ -292,7 +293,7 @@ static void set_community_string(struct community *com, bool make_json)
len += strlen(" no-peer");
break;
default:
- len += strlen(" 65536:65535");
+ len = BUFSIZ;
break;
}
}
@@ -450,7 +451,7 @@ static void set_community_string(struct community *com, bool make_json)
val = comval & 0xFFFF;
char buf[32];
snprintf(buf, sizeof(buf), "%u:%d", as, val);
- strlcat(str, buf, len);
+ strlcat(str, bgp_community2alias(buf), len);
if (make_json) {
json_string = json_object_new_string(buf);
json_object_array_add(json_community_list,
diff --git a/bgpd/bgp_community_alias.c b/bgpd/bgp_community_alias.c
new file mode 100644
index 0000000000..6e510a0a04
--- /dev/null
+++ b/bgpd/bgp_community_alias.c
@@ -0,0 +1,154 @@
+/* BGP community, large-community aliasing.
+ *
+ * Copyright (C) 2021 Donatas Abraitis <donatas.abraitis@gmail.com>
+ *
+ * This file is part of FRRouting (FRR).
+ *
+ * FRR is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2, or (at your option) any later version.
+ *
+ * FRR is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "memory.h"
+#include "lib/jhash.h"
+
+#include "bgpd/bgpd.h"
+#include "bgpd/bgp_community_alias.h"
+
+static struct hash *bgp_ca_alias_hash;
+static struct hash *bgp_ca_community_hash;
+
+static unsigned int bgp_ca_community_hash_key(const void *p)
+{
+ const struct community_alias *ca = p;
+
+ return jhash(ca->community, sizeof(ca->community), 0);
+}
+
+static bool bgp_ca_community_hash_cmp(const void *p1, const void *p2)
+{
+ const struct community_alias *ca1 = p1;
+ const struct community_alias *ca2 = p2;
+
+ return (strncmp(ca1->community, ca2->community,
+ sizeof(struct community_alias))
+ == 0);
+}
+
+static unsigned int bgp_ca_alias_hash_key(const void *p)
+{
+ const struct community_alias *ca = p;
+
+ return jhash(ca->alias, sizeof(ca->alias), 0);
+}
+
+static bool bgp_ca_alias_hash_cmp(const void *p1, const void *p2)
+{
+ const struct community_alias *ca1 = p1;
+ const struct community_alias *ca2 = p2;
+
+ return (strncmp(ca1->alias, ca2->alias, sizeof(struct community_alias))
+ == 0);
+}
+
+static void *bgp_community_alias_alloc(void *p)
+{
+ const struct community_alias *ca = p;
+ struct communtiy_alias *new;
+
+ new = XCALLOC(MTYPE_COMMUNITY_ALIAS, sizeof(struct community_alias));
+ memcpy(new, ca, sizeof(struct community_alias));
+
+ return new;
+}
+
+void bgp_community_alias_init(void)
+{
+ bgp_ca_community_hash = hash_create(bgp_ca_community_hash_key,
+ bgp_ca_community_hash_cmp,
+ "BGP community alias (community)");
+ bgp_ca_alias_hash =
+ hash_create(bgp_ca_alias_hash_key, bgp_ca_alias_hash_cmp,
+ "BGP community alias (alias)");
+}
+
+void bgp_community_alias_finish(void)
+{
+ hash_free(bgp_ca_community_hash);
+ hash_free(bgp_ca_alias_hash);
+}
+
+static void bgp_community_alias_show_iterator(struct hash_bucket *hb,
+ struct vty *vty)
+{
+ struct community_alias *ca = hb->data;
+
+ vty_out(vty, "bgp community alias %s %s\n", ca->community, ca->alias);
+}
+
+int bgp_community_alias_write(struct vty *vty)
+{
+ hash_iterate(bgp_ca_community_hash,
+ (void (*)(struct hash_bucket *,
+ void *))bgp_community_alias_show_iterator,
+ vty);
+ return 1;
+}
+
+void bgp_ca_community_insert(struct community_alias *ca)
+{
+ hash_get(bgp_ca_community_hash, ca, bgp_community_alias_alloc);
+}
+
+void bgp_ca_alias_insert(struct community_alias *ca)
+{
+ hash_get(bgp_ca_alias_hash, ca, bgp_community_alias_alloc);
+}
+
+void bgp_ca_community_delete(struct community_alias *ca)
+{
+ struct community_alias *data = hash_release(bgp_ca_community_hash, ca);
+
+ XFREE(MTYPE_COMMUNITY_ALIAS, data);
+}
+
+void bgp_ca_alias_delete(struct community_alias *ca)
+{
+ struct community_alias *data = hash_release(bgp_ca_alias_hash, ca);
+
+ XFREE(MTYPE_COMMUNITY_ALIAS, data);
+}
+
+struct community_alias *bgp_ca_community_lookup(struct community_alias *ca)
+{
+ return hash_lookup(bgp_ca_community_hash, ca);
+}
+
+struct community_alias *bgp_ca_alias_lookup(struct community_alias *ca)
+{
+ return hash_lookup(bgp_ca_alias_hash, ca);
+}
+
+const char *bgp_community2alias(char *community)
+{
+ struct community_alias ca;
+ struct community_alias *find;
+
+ memset(&ca, 0, sizeof(ca));
+ strlcpy(ca.community, community, sizeof(ca.community));
+
+ find = bgp_ca_community_lookup(&ca);
+ if (find)
+ return find->alias;
+
+ return community;
+}
diff --git a/bgpd/bgp_community_alias.h b/bgpd/bgp_community_alias.h
new file mode 100644
index 0000000000..c84119a0d6
--- /dev/null
+++ b/bgpd/bgp_community_alias.h
@@ -0,0 +1,46 @@
+/* BGP community, large-community aliasing.
+ *
+ * Copyright (C) 2021 Donatas Abraitis <donatas.abraitis@gmail.com>
+ *
+ * This file is part of FRRouting (FRR).
+ *
+ * FRR is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU General Public License as published by the Free Software
+ * Foundation; either version 2, or (at your option) any later version.
+ *
+ * FRR is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "bgpd/bgp_lcommunity.h"
+
+#ifndef FRR_BGP_COMMUNITY_ALIAS_H
+#define FRR_BGP_COMMUNITY_ALIAS_H
+
+struct community_alias {
+ /* Human readable community string */
+ char community[LCOMMUNITY_SIZE * 3];
+
+ /* Human readable community alias */
+ char alias[BUFSIZ];
+};
+
+extern void bgp_community_alias_init(void);
+extern void bgp_community_alias_finish(void);
+extern struct community_alias *bgp_ca_alias_lookup(struct community_alias *ca);
+extern struct community_alias *
+bgp_ca_community_lookup(struct community_alias *ca);
+extern void bgp_ca_community_insert(struct community_alias *ca);
+extern void bgp_ca_alias_insert(struct community_alias *ca);
+extern void bgp_ca_community_delete(struct community_alias *ca);
+extern void bgp_ca_alias_delete(struct community_alias *ca);
+extern int bgp_community_alias_write(struct vty *vty);
+extern const char *bgp_community2alias(char *community);
+
+#endif /* FRR_BGP_COMMUNITY_ALIAS_H */
diff --git a/bgpd/bgp_conditional_adv.c b/bgpd/bgp_conditional_adv.c
index b9ea26e862..6e80765f86 100644
--- a/bgpd/bgp_conditional_adv.c
+++ b/bgpd/bgp_conditional_adv.c
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "bgpd/bgp_conditional_adv.h"
#include "bgpd/bgp_vty.h"
diff --git a/bgpd/bgp_dump.c b/bgpd/bgp_dump.c
index 944a5848ec..299ee305be 100644
--- a/bgpd/bgp_dump.c
+++ b/bgpd/bgp_dump.c
@@ -389,7 +389,8 @@ bgp_dump_route_node_record(int afi, struct bgp_dest *dest,
bgp_dump_routes_attr(obuf, path->attr, p);
cur_endp = stream_get_endp(obuf);
- if (cur_endp > BGP_MAX_PACKET_SIZE + BGP_DUMP_MSG_HEADER
+ if (cur_endp > BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE
+ + BGP_DUMP_MSG_HEADER
+ BGP_DUMP_HEADER_SIZE) {
stream_set_endp(obuf, endp);
break;
@@ -868,8 +869,8 @@ void bgp_dump_init(void)
memset(&bgp_dump_routes, 0, sizeof(struct bgp_dump));
bgp_dump_obuf =
- stream_new((BGP_MAX_PACKET_SIZE << 1) + BGP_DUMP_MSG_HEADER
- + BGP_DUMP_HEADER_SIZE);
+ stream_new((BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE * 2)
+ + BGP_DUMP_MSG_HEADER + BGP_DUMP_HEADER_SIZE);
install_node(&bgp_dump_node);
diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c
index 047b9742ee..d8e57419ee 100644
--- a/bgpd/bgp_evpn.c
+++ b/bgpd/bgp_evpn.c
@@ -1670,8 +1670,9 @@ static inline bool bgp_evpn_route_add_l3_ecomm_ok(struct bgpevpn *vpn,
{
return p->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE
&& (is_evpn_prefix_ipaddr_v4(p)
- || !IN6_IS_ADDR_LINKLOCAL(
- &p->prefix.macip_addr.ip.ipaddr_v6))
+ || (is_evpn_prefix_ipaddr_v6(p)
+ && !IN6_IS_ADDR_LINKLOCAL(
+ &p->prefix.macip_addr.ip.ipaddr_v6)))
&& CHECK_FLAG(vpn->flags, VNI_FLAG_USE_TWO_LABELS)
&& bgpevpn_get_l3vni(vpn) && bgp_evpn_es_add_l3_ecomm_ok(esi);
}
@@ -3561,8 +3562,12 @@ static int update_advertise_vni_routes(struct bgp *bgp, struct bgpevpn *vpn)
const struct prefix_evpn *evp =
(const struct prefix_evpn *)bgp_dest_get_prefix(dest);
- /* Identify MAC-IP local routes. */
- if (evp->prefix.route_type != BGP_EVPN_MAC_IP_ROUTE)
+ /*
+ * We have already processed type-3 routes.
+ * Process only type-1 and type-2 routes here.
+ */
+ if (evp->prefix.route_type != BGP_EVPN_MAC_IP_ROUTE
+ && evp->prefix.route_type != BGP_EVPN_AD_ROUTE)
continue;
for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next)
@@ -3580,10 +3585,23 @@ static int update_advertise_vni_routes(struct bgp *bgp, struct bgpevpn *vpn)
global_dest = bgp_global_evpn_node_get(bgp->rib[afi][safi], afi, safi,
evp, &vpn->prd);
assert(global_dest);
- update_evpn_route_entry(bgp, vpn, afi, safi, global_dest, attr, 1,
- &global_pi, 0,
- mac_mobility_seqnum(attr),
+
+ if (evp->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE) {
+ /* Type-2 route */
+ update_evpn_route_entry(
+ bgp, vpn, afi, safi, global_dest, attr, 1,
+ &global_pi, 0, mac_mobility_seqnum(attr),
false /* setup_sync */, NULL /* old_is_sync */);
+ } else {
+ /* Type-1 route */
+ struct bgp_evpn_es *es;
+ int route_changed = 0;
+
+ es = bgp_evpn_es_find(&evp->prefix.ead_addr.esi);
+ bgp_evpn_mh_route_update(bgp, es, vpn, afi, safi,
+ global_dest, attr, 1,
+ &global_pi, &route_changed);
+ }
/* Schedule for processing and unlock node. */
bgp_process(bgp, global_dest, afi, safi);
@@ -3629,6 +3647,8 @@ static int delete_withdraw_vni_routes(struct bgp *bgp, struct bgpevpn *vpn)
bgp_dest_unlock_node(global_dest);
}
+
+ delete_global_ead_evi_routes(bgp, vpn);
return 0;
}
diff --git a/bgpd/bgp_evpn_mh.c b/bgpd/bgp_evpn_mh.c
index 6467ff8a28..59bced6f93 100644
--- a/bgpd/bgp_evpn_mh.c
+++ b/bgpd/bgp_evpn_mh.c
@@ -347,11 +347,10 @@ static void bgp_evpn_es_route_del_all(struct bgp *bgp, struct bgp_evpn_es *es)
* Note: vpn is applicable only to EAD-EVI routes (NULL for EAD-ES and
* ESR).
*/
-static int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es,
- struct bgpevpn *vpn, afi_t afi, safi_t safi,
- struct bgp_dest *dest, struct attr *attr,
- int add, struct bgp_path_info **ri,
- int *route_changed)
+int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es,
+ struct bgpevpn *vpn, afi_t afi, safi_t safi,
+ struct bgp_dest *dest, struct attr *attr, int add,
+ struct bgp_path_info **ri, int *route_changed)
{
struct bgp_path_info *tmp_pi = NULL;
struct bgp_path_info *local_pi = NULL; /* local route entry if any */
@@ -384,7 +383,8 @@ static int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es,
flog_err(
EC_BGP_ES_INVALID,
"%u ERROR: local es route for ESI: %s Vtep %pI4 also learnt from remote",
- bgp->vrf_id, es->esi_str, &es->originator_ip);
+ bgp->vrf_id, es ? es->esi_str : "Null",
+ &es->originator_ip);
return -1;
}
@@ -441,7 +441,7 @@ static int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es,
if (BGP_DEBUG(evpn_mh, EVPN_MH_RT))
zlog_debug(
"local ES %s vni %u route-type %s nexthop %pI4 updated",
- es->esi_str, vpn ? vpn->vni : 0,
+ es ? es->esi_str : "Null", vpn ? vpn->vni : 0,
evp->prefix.route_type == BGP_EVPN_ES_ROUTE
? "esr"
: (vpn ? "ead-evi" : "ead-es"),
@@ -524,6 +524,50 @@ static int bgp_evpn_mh_route_delete(struct bgp *bgp, struct bgp_evpn_es *es,
return 0;
}
+/*
+ * This function is called when the VNI RD changes.
+ * Delete all EAD/EVI local routes for this VNI from the global routing table.
+ * These routes are scheduled for withdraw from peers.
+ */
+int delete_global_ead_evi_routes(struct bgp *bgp, struct bgpevpn *vpn)
+{
+ afi_t afi;
+ safi_t safi;
+ struct bgp_dest *rdrn, *rn;
+ struct bgp_table *table;
+ struct bgp_path_info *pi;
+
+ afi = AFI_L2VPN;
+ safi = SAFI_EVPN;
+
+ /* Find the RD node for the VNI in the global table */
+ rdrn = bgp_node_lookup(bgp->rib[afi][safi], (struct prefix *)&vpn->prd);
+ if (rdrn && bgp_dest_has_bgp_path_info_data(rdrn)) {
+ table = bgp_dest_get_bgp_table_info(rdrn);
+
+ /*
+ * Iterate over all the routes in this table and delete EAD/EVI
+ * routes
+ */
+ for (rn = bgp_table_top(table); rn; rn = bgp_route_next(rn)) {
+ struct prefix_evpn *evp = (struct prefix_evpn *)&rn->p;
+
+ if (evp->prefix.route_type != BGP_EVPN_AD_ROUTE)
+ continue;
+
+ delete_evpn_route_entry(bgp, afi, safi, rn, &pi);
+ if (pi)
+ bgp_process(bgp, rn, afi, safi);
+ }
+ }
+
+ /* Unlock RD node. */
+ if (rdrn)
+ bgp_dest_unlock_node(rdrn);
+
+ return 0;
+}
+
/*****************************************************************************
* Ethernet Segment (Type-4) Routes
* ESRs are used for DF election. Currently service-carving described in
diff --git a/bgpd/bgp_evpn_mh.h b/bgpd/bgp_evpn_mh.h
index c96de86871..22a4215664 100644
--- a/bgpd/bgp_evpn_mh.h
+++ b/bgpd/bgp_evpn_mh.h
@@ -377,6 +377,12 @@ extern int bgp_evpn_es_route_install_uninstall(struct bgp *bgp,
struct prefix_evpn *evp, struct bgp_path_info *pi,
int install);
extern void update_type1_routes_for_evi(struct bgp *bgp, struct bgpevpn *vpn);
+extern int delete_global_ead_evi_routes(struct bgp *bgp, struct bgpevpn *vpn);
+extern int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es,
+ struct bgpevpn *vpn, afi_t afi, safi_t safi,
+ struct bgp_dest *dest, struct attr *attr,
+ int add, struct bgp_path_info **ri,
+ int *route_changed);
int bgp_evpn_type1_route_process(struct peer *peer, afi_t afi, safi_t safi,
struct attr *attr, uint8_t *pfx, int psize,
uint32_t addpath_id);
diff --git a/bgpd/bgp_io.c b/bgpd/bgp_io.c
index 99d0344c9f..e9b0f9e46a 100644
--- a/bgpd/bgp_io.c
+++ b/bgpd/bgp_io.c
@@ -32,7 +32,6 @@
#include "stream.h" // for stream_get_endp, stream_getw_from, str...
#include "ringbuf.h" // for ringbuf_remain, ringbuf_peek, ringbuf_...
#include "thread.h" // for THREAD_OFF, THREAD_ARG, thread...
-#include "zassert.h" // for assert
#include "bgpd/bgp_io.h"
#include "bgpd/bgp_debug.h" // for bgp_debug_neighbor_events, bgp_type_str
diff --git a/bgpd/bgp_lcommunity.c b/bgpd/bgp_lcommunity.c
index 88a85c979e..ff34937efc 100644
--- a/bgpd/bgp_lcommunity.c
+++ b/bgpd/bgp_lcommunity.c
@@ -30,6 +30,7 @@
#include "bgpd/bgpd.h"
#include "bgpd/bgp_lcommunity.h"
+#include "bgpd/bgp_community_alias.h"
#include "bgpd/bgp_aspath.h"
/* Hash of community attribute. */
@@ -213,7 +214,7 @@ static void set_lcommunity_string(struct lcommunity *lcom, bool make_json)
}
/* 1 space + lcom->size lcom strings + null terminator */
- size_t str_buf_sz = (LCOMMUNITY_STRLEN * lcom->size) + 2;
+ size_t str_buf_sz = BUFSIZ;
str_buf = XCALLOC(MTYPE_LCOMMUNITY_STR, str_buf_sz);
for (i = 0; i < lcom->size; i++) {
@@ -231,7 +232,7 @@ static void set_lcommunity_string(struct lcommunity *lcom, bool make_json)
snprintf(lcsb, sizeof(lcsb), "%u:%u:%u", global, local1,
local2);
- len = strlcat(str_buf, lcsb, str_buf_sz);
+ len = strlcat(str_buf, bgp_community2alias(lcsb), str_buf_sz);
assert((unsigned int)len < str_buf_sz);
if (make_json) {
diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c
index ea74a82cec..d545becded 100644
--- a/bgpd/bgp_main.c
+++ b/bgpd/bgp_main.c
@@ -66,6 +66,7 @@
#include "bgpd/bgp_evpn_mh.h"
#include "bgpd/bgp_nht.h"
#include "bgpd/bgp_routemap_nb.h"
+#include "bgpd/bgp_community_alias.h"
#ifdef ENABLE_BGP_VNC
#include "bgpd/rfapi/rfapi_backend.h"
@@ -196,8 +197,6 @@ static __attribute__((__noreturn__)) void bgp_exit(int status)
frr_early_fini();
- bfd_gbl_exit();
-
bgp_close();
bgp_default = bgp_get_default();
@@ -220,6 +219,9 @@ static __attribute__((__noreturn__)) void bgp_exit(int status)
/* reverse bgp_dump_init */
bgp_dump_finish();
+ /* BGP community aliases */
+ bgp_community_alias_finish();
+
/* reverse bgp_route_init */
bgp_route_finish();
@@ -312,9 +314,6 @@ static int bgp_vrf_enable(struct vrf *vrf)
bgp_vrf_link(bgp, vrf);
bgp_handle_socket(bgp, vrf, old_vrf_id, true);
- /* Update any redistribution if vrf_id changed */
- if (old_vrf_id != bgp->vrf_id)
- bgp_redistribute_redo(bgp);
bgp_instance_up(bgp);
vpn_leak_zebra_vrf_label_update(bgp, AFI_IP);
vpn_leak_zebra_vrf_label_update(bgp, AFI_IP6);
@@ -334,7 +333,6 @@ static int bgp_vrf_enable(struct vrf *vrf)
static int bgp_vrf_disable(struct vrf *vrf)
{
struct bgp *bgp;
- vrf_id_t old_vrf_id;
if (vrf->vrf_id == VRF_DEFAULT)
return 0;
@@ -356,15 +354,11 @@ static int bgp_vrf_disable(struct vrf *vrf)
vpn_leak_prechange(BGP_VPN_POLICY_DIR_FROMVPN, AFI_IP6,
bgp_get_default(), bgp);
- old_vrf_id = bgp->vrf_id;
bgp_handle_socket(bgp, vrf, VRF_UNKNOWN, false);
/* We have instance configured, unlink from VRF and make it
* "down". */
- bgp_vrf_unlink(bgp, vrf);
- /* Delete any redistribute vrf bitmaps if the vrf_id changed */
- if (old_vrf_id != bgp->vrf_id)
- bgp_unset_redist_vrf_bitmaps(bgp, old_vrf_id);
bgp_instance_down(bgp);
+ bgp_vrf_unlink(bgp, vrf);
}
/* Note: This is a callback, the VRF will be deleted by the caller. */
diff --git a/bgpd/bgp_memory.c b/bgpd/bgp_memory.c
index 36bdc05eb7..fc508496cc 100644
--- a/bgpd/bgp_memory.c
+++ b/bgpd/bgp_memory.c
@@ -65,6 +65,8 @@ DEFINE_MTYPE(BGPD, AS_LIST, "BGP AS list");
DEFINE_MTYPE(BGPD, AS_FILTER, "BGP AS filter");
DEFINE_MTYPE(BGPD, AS_FILTER_STR, "BGP AS filter str");
+DEFINE_MTYPE(BGPD, COMMUNITY_ALIAS, "community");
+
DEFINE_MTYPE(BGPD, COMMUNITY, "community");
DEFINE_MTYPE(BGPD, COMMUNITY_VAL, "community val");
DEFINE_MTYPE(BGPD, COMMUNITY_STR, "community str");
diff --git a/bgpd/bgp_memory.h b/bgpd/bgp_memory.h
index 29923424e3..4080248038 100644
--- a/bgpd/bgp_memory.h
+++ b/bgpd/bgp_memory.h
@@ -61,6 +61,8 @@ DECLARE_MTYPE(AS_LIST);
DECLARE_MTYPE(AS_FILTER);
DECLARE_MTYPE(AS_FILTER_STR);
+DECLARE_MTYPE(COMMUNITY_ALIAS);
+
DECLARE_MTYPE(COMMUNITY);
DECLARE_MTYPE(COMMUNITY_VAL);
DECLARE_MTYPE(COMMUNITY_STR);
diff --git a/bgpd/bgp_nb.c b/bgpd/bgp_nb.c
index 2547439499..21810b634d 100644
--- a/bgpd/bgp_nb.c
+++ b/bgpd/bgp_nb.c
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "northbound.h"
#include "libfrr.h"
#include "bgpd/bgp_nb.h"
diff --git a/bgpd/bgp_nb_config.c b/bgpd/bgp_nb_config.c
index 307fa4e9bc..8ca7836a99 100644
--- a/bgpd/bgp_nb_config.c
+++ b/bgpd/bgp_nb_config.c
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "northbound.h"
#include "libfrr.h"
#include "log.h"
@@ -109,15 +111,24 @@ int bgp_router_create(struct nb_cb_create_args *args)
is_new_bgp = (bgp_lookup_by_name(name) == NULL);
ret = bgp_get_vty(&bgp, &as, name, inst_type);
- switch (ret) {
- case BGP_ERR_AS_MISMATCH:
- snprintf(args->errmsg, args->errmsg_len,
- "BGP instance is already running; AS is %u",
- as);
- return NB_ERR_INCONSISTENCY;
- case BGP_ERR_INSTANCE_MISMATCH:
- snprintf(args->errmsg, args->errmsg_len,
- "BGP instance type mismatch");
+ if (ret) {
+ switch (ret) {
+ case BGP_ERR_AS_MISMATCH:
+ snprintf(
+ args->errmsg, args->errmsg_len,
+ "BGP instance is already running; AS is %u",
+ as);
+ break;
+ case BGP_ERR_INSTANCE_MISMATCH:
+ snprintf(args->errmsg, args->errmsg_len,
+ "BGP instance type mismatch");
+ break;
+ }
+
+ UNSET_FLAG(bgp->vrf_flags, BGP_VRF_AUTO);
+
+ nb_running_set_entry(args->dnode, bgp);
+
return NB_ERR_INCONSISTENCY;
}
@@ -219,64 +230,26 @@ int bgp_router_destroy(struct nb_cb_destroy_args *args)
int bgp_global_local_as_modify(struct nb_cb_modify_args *args)
{
struct bgp *bgp;
- as_t as;
- const struct lyd_node *vrf_dnode;
- const char *vrf_name;
- const char *name = NULL;
- enum bgp_instance_type inst_type;
- int ret;
- bool is_view_inst = false;
switch (args->event) {
case NB_EV_VALIDATE:
- as = yang_dnode_get_uint32(args->dnode, NULL);
-
- inst_type = BGP_INSTANCE_TYPE_DEFAULT;
-
- vrf_dnode = yang_dnode_get_parent(args->dnode,
- "control-plane-protocol");
- vrf_name = yang_dnode_get_string(vrf_dnode, "./vrf");
-
- if (strmatch(vrf_name, VRF_DEFAULT_NAME)) {
- name = NULL;
- } else {
- name = vrf_name;
- inst_type = BGP_INSTANCE_TYPE_VRF;
- }
-
- is_view_inst = yang_dnode_get_bool(args->dnode,
- "../instance-type-view");
- if (is_view_inst)
- inst_type = BGP_INSTANCE_TYPE_VIEW;
-
- ret = bgp_lookup_by_as_name_type(&bgp, &as, name, inst_type);
- switch (ret) {
- case BGP_ERR_AS_MISMATCH:
- snprintf(args->errmsg, args->errmsg_len,
- "BGP instance is already running; AS is %u",
- as);
- return NB_ERR_VALIDATION;
- case BGP_ERR_INSTANCE_MISMATCH:
+ /*
+ * Changing AS number is not allowed, but we must allow it
+ * once, when the BGP instance is created the first time.
+ * If the instance already exists - return the validation
+ * error.
+ */
+ bgp = nb_running_get_entry_non_rec(args->dnode->parent->parent,
+ NULL, false);
+ if (bgp) {
snprintf(args->errmsg, args->errmsg_len,
- "BGP instance type mismatch");
+ "Changing AS number is not allowed");
return NB_ERR_VALIDATION;
}
break;
case NB_EV_PREPARE:
case NB_EV_ABORT:
- return NB_OK;
case NB_EV_APPLY:
- /* NOTE: handled in bgp_global_create callback, the as change
- * will be rejected in validate phase.
- */
- as = yang_dnode_get_uint32(args->dnode, NULL);
- bgp = nb_running_get_entry(args->dnode, NULL, true);
- if (bgp->as != as) {
- snprintf(args->errmsg, args->errmsg_len,
- "BGP instance is already running; AS is %u",
- bgp->as);
- return NB_ERR_INCONSISTENCY;
- }
break;
}
@@ -1512,12 +1485,27 @@ int bgp_global_global_config_timers_keepalive_modify(
*/
int bgp_global_instance_type_view_modify(struct nb_cb_modify_args *args)
{
+ struct bgp *bgp;
+
switch (args->event) {
case NB_EV_VALIDATE:
+ /*
+ * Changing instance type is not allowed, but we must allow it
+ * once, when the BGP instance is created the first time.
+ * If the instance already exists - return the validation
+ * error.
+ */
+ bgp = nb_running_get_entry_non_rec(args->dnode->parent->parent,
+ NULL, false);
+ if (bgp) {
+ snprintf(args->errmsg, args->errmsg_len,
+ "Changing instance type is not allowed");
+ return NB_ERR_VALIDATION;
+ }
+ break;
case NB_EV_PREPARE:
case NB_EV_ABORT:
case NB_EV_APPLY:
- /* TODO: implement me. */
break;
}
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index 8d9024e07c..f3857162c3 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -376,7 +376,6 @@ static int bgp_accept(struct thread *thread)
accept_sock);
return -1;
}
- listener->thread = NULL;
thread_add_read(bm->master, bgp_accept, listener, accept_sock,
&listener->thread);
@@ -443,6 +442,11 @@ static int bgp_accept(struct thread *thread)
if (peer1) {
/* Dynamic neighbor has been created, let it proceed */
peer1->fd = bgp_sock;
+
+ /* Set the user configured MSS to TCP socket */
+ if (CHECK_FLAG(peer1->flags, PEER_FLAG_TCP_MSS))
+ sockopt_tcp_mss_set(bgp_sock, peer1->tcp_mss);
+
bgp_fsm_change_status(peer1, Active);
BGP_TIMER_OFF(
peer1->t_start); /* created in peer_create() */
@@ -714,6 +718,10 @@ int bgp_connect(struct peer *peer)
set_nonblocking(peer->fd);
+ /* Set the user configured MSS to TCP socket */
+ if (CHECK_FLAG(peer->flags, PEER_FLAG_TCP_MSS))
+ sockopt_tcp_mss_set(peer->fd, peer->tcp_mss);
+
bgp_socket_set_buffer_size(peer->fd);
if (bgp_set_socket_ttl(peer, peer->fd) < 0)
@@ -838,7 +846,6 @@ static int bgp_listener(int sock, struct sockaddr *sa, socklen_t salen,
listener->bgp = bgp;
memcpy(&listener->su, sa, salen);
- listener->thread = NULL;
thread_add_read(bm->master, bgp_accept, listener, sock,
&listener->thread);
listnode_add(bm->listen_sockets, listener);
diff --git a/bgpd/bgp_nht.c b/bgpd/bgp_nht.c
index dc2b0b679b..e94f63541d 100644
--- a/bgpd/bgp_nht.c
+++ b/bgpd/bgp_nht.c
@@ -620,8 +620,8 @@ void bgp_parse_nexthop_update(int command, vrf_id_t vrf_id)
}
if (!zapi_nexthop_update_decode(zclient->ibuf, &nhr)) {
- zlog_err("%s[%s]: Failure to decode nexthop update",
- __PRETTY_FUNCTION__, bgp->name_pretty);
+ zlog_err("%s[%s]: Failure to decode nexthop update", __func__,
+ bgp->name_pretty);
return;
}
diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c
index 7642640218..94d905127d 100644
--- a/bgpd/bgp_open.c
+++ b/bgpd/bgp_open.c
@@ -1122,7 +1122,7 @@ int bgp_open_option_parse(struct peer *peer, uint8_t length, int *mp_capability)
{
int ret = 0;
uint8_t *error;
- uint8_t error_data[BGP_MAX_PACKET_SIZE];
+ uint8_t error_data[BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE];
struct stream *s = BGP_INPUT(peer);
size_t end = stream_get_getp(s) + length;
@@ -1217,8 +1217,8 @@ int bgp_open_option_parse(struct peer *peer, uint8_t length, int *mp_capability)
/* Extended Message Support */
peer->max_packet_size =
CHECK_FLAG(peer->cap, PEER_CAP_EXTENDED_MESSAGE_RCV)
- ? BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE
- : BGP_MAX_PACKET_SIZE;
+ ? BGP_EXTENDED_MESSAGE_MAX_PACKET_SIZE
+ : BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE;
/* Check there are no common AFI/SAFIs and send Unsupported Capability
error. */
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index 24df324633..62982881d8 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -545,7 +545,7 @@ void bgp_keepalive_send(struct peer *peer)
{
struct stream *s;
- s = stream_new(BGP_MAX_PACKET_SIZE);
+ s = stream_new(BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE);
/* Make keepalive packet. */
bgp_packet_set_marker(s, BGP_MSG_KEEPALIVE);
@@ -586,7 +586,7 @@ void bgp_open_send(struct peer *peer)
else
local_as = peer->local_as;
- s = stream_new(BGP_MAX_PACKET_SIZE);
+ s = stream_new(BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE);
/* Make open packet. */
bgp_packet_set_marker(s, BGP_MSG_OPEN);
@@ -752,7 +752,7 @@ void bgp_notify_send_with_data(struct peer *peer, uint8_t code,
*/
if (peer->curr) {
size_t packetsize = stream_get_endp(peer->curr);
- assert(packetsize <= sizeof(peer->last_reset_cause));
+ assert(packetsize <= peer->max_packet_size);
memcpy(peer->last_reset_cause, peer->curr->data, packetsize);
peer->last_reset_cause_size = packetsize;
}
@@ -1000,98 +1000,90 @@ static int bgp_collision_detect(struct peer *new, struct in_addr remote_id)
{
struct peer *peer;
- /* Upon receipt of an OPEN message, the local system must examine
- all of its connections that are in the OpenConfirm state. A BGP
- speaker may also examine connections in an OpenSent state if it
- knows the BGP Identifier of the peer by means outside of the
- protocol. If among these connections there is a connection to a
- remote BGP speaker whose BGP Identifier equals the one in the
- OPEN message, then the local system performs the following
- collision resolution procedure: */
-
- if ((peer = new->doppelganger) != NULL) {
- /* Do not accept the new connection in Established or Clearing
- * states.
- * Note that a peer GR is handled by closing the existing
- * connection
- * upon receipt of new one.
+ /*
+ * Upon receipt of an OPEN message, the local system must examine
+ * all of its connections that are in the OpenConfirm state. A BGP
+ * speaker may also examine connections in an OpenSent state if it
+ * knows the BGP Identifier of the peer by means outside of the
+ * protocol. If among these connections there is a connection to a
+ * remote BGP speaker whose BGP Identifier equals the one in the
+ * OPEN message, then the local system performs the following
+ * collision resolution procedure:
+ */
+ peer = new->doppelganger;
+ if (peer == NULL)
+ return 0;
+
+ /*
+ * Do not accept the new connection in Established or Clearing
+ * states. Note that a peer GR is handled by closing the existing
+ * connection upon receipt of new one.
+ */
+ if (peer->status == Established || peer->status == Clearing) {
+ bgp_notify_send(new, BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
+ return -1;
+ }
+
+ if ((peer->status != OpenConfirm) && (peer->status != OpenSent))
+ return 0;
+
+ /*
+ * 1. The BGP Identifier of the local system is
+ * compared to the BGP Identifier of the remote
+ * system (as specified in the OPEN message).
+ *
+ * If the BGP Identifiers of the peers
+ * involved in the connection collision
+ * are identical, then the connection
+ * initiated by the BGP speaker with the
+ * larger AS number is preserved.
+ */
+ if (ntohl(peer->local_id.s_addr) < ntohl(remote_id.s_addr)
+ || (ntohl(peer->local_id.s_addr) == ntohl(remote_id.s_addr)
+ && peer->local_as < peer->as))
+ if (!CHECK_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER)) {
+ /*
+ * 2. If the value of the local BGP
+ * Identifier is less than the remote one,
+ * the local system closes BGP connection
+ * that already exists (the one that is
+ * already in the OpenConfirm state),
+ * and accepts BGP connection initiated by
+ * the remote system.
+ */
+ bgp_notify_send(peer, BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
+ return 1;
+ } else {
+ bgp_notify_send(new, BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
+ return -1;
+ }
+ else {
+ if (ntohl(peer->local_id.s_addr) == ntohl(remote_id.s_addr)
+ && peer->local_as == peer->as)
+ flog_err(EC_BGP_ROUTER_ID_SAME,
+ "Peer's router-id %pI4 is the same as ours",
+ &remote_id);
+
+ /*
+ * 3. Otherwise, the local system closes newly
+ * created BGP connection (the one associated with the
+ * newly received OPEN message), and continues to use
+ * the existing one (the one that is already in the
+ * OpenConfirm state).
*/
- if (peer->status == Established || peer->status == Clearing) {
+ if (CHECK_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER)) {
+ bgp_notify_send(peer, BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
+ return 1;
+ } else {
bgp_notify_send(new, BGP_NOTIFY_CEASE,
BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
return -1;
- } else if ((peer->status == OpenConfirm)
- || (peer->status == OpenSent)) {
- /* 1. The BGP Identifier of the local system is
- * compared to the BGP Identifier of the remote
- * system (as specified in the OPEN message).
- *
- * If the BGP Identifiers of the peers
- * involved in the connection collision
- * are identical, then the connection
- * initiated by the BGP speaker with the
- * larger AS number is preserved.
- */
- if (ntohl(peer->local_id.s_addr)
- < ntohl(remote_id.s_addr)
- || (ntohl(peer->local_id.s_addr)
- == ntohl(remote_id.s_addr)
- && peer->local_as < peer->as))
- if (!CHECK_FLAG(peer->sflags,
- PEER_STATUS_ACCEPT_PEER)) {
- /* 2. If the value of the local BGP
- Identifier is less
- than the remote one, the local system
- closes BGP
- connection that already exists (the
- one that is
- already in the OpenConfirm state),
- and accepts BGP
- connection initiated by the remote
- system. */
- bgp_notify_send(
- peer, BGP_NOTIFY_CEASE,
- BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
- return 1;
- } else {
- bgp_notify_send(
- new, BGP_NOTIFY_CEASE,
- BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
- return -1;
- }
- else {
- if (ntohl(peer->local_id.s_addr)
- == ntohl(remote_id.s_addr)
- && peer->local_as == peer->as)
- flog_err(
- EC_BGP_ROUTER_ID_SAME,
- "Peer's router-id %pI4 is the same as ours",
- &remote_id);
-
- /* 3. Otherwise, the local system closes newly
- created
- BGP connection (the one associated with the
- newly
- received OPEN message), and continues to use
- the
- existing one (the one that is already in the
- OpenConfirm state). */
- if (CHECK_FLAG(peer->sflags,
- PEER_STATUS_ACCEPT_PEER)) {
- bgp_notify_send(
- peer, BGP_NOTIFY_CEASE,
- BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
- return 1;
- } else {
- bgp_notify_send(
- new, BGP_NOTIFY_CEASE,
- BGP_NOTIFY_CEASE_COLLISION_RESOLUTION);
- return -1;
- }
- }
}
}
- return 0;
}
/* Packet processing routines ---------------------------------------------- */
@@ -1269,9 +1261,6 @@ static int bgp_open_receive(struct peer *peer, bgp_size_t size)
return BGP_Stop;
}
- /* Set remote router-id */
- peer->remote_id = remote_id;
-
/* Peer BGP version check. */
if (version != BGP_VERSION_4) {
uint16_t maxver = htons(BGP_VERSION_4);
@@ -1331,6 +1320,25 @@ static int bgp_open_receive(struct peer *peer, bgp_size_t size)
return BGP_Stop;
}
+ /*
+ * When collision is detected and this peer is closed.
+ * Return immediately.
+ */
+ ret = bgp_collision_detect(peer, remote_id);
+ if (ret < 0)
+ return BGP_Stop;
+
+ /* Get sockname. */
+ if (bgp_getsockname(peer) < 0) {
+ flog_err_sys(EC_LIB_SOCKET,
+ "%s: bgp_getsockname() failed for peer: %s",
+ __func__, peer->host);
+ return BGP_Stop;
+ }
+
+ /* Set remote router-id */
+ peer->remote_id = remote_id;
+
/* From the rfc: Upon receipt of an OPEN message, a BGP speaker MUST
calculate the value of the Hold Timer by using the smaller of its
configured Hold Time and the Hold Time received in the OPEN message.
@@ -1411,21 +1419,6 @@ static int bgp_open_receive(struct peer *peer, bgp_size_t size)
peer->afc[AFI_IP6][SAFI_FLOWSPEC];
}
- /* When collision is detected and this peer is closed.
- * Return immediately.
- */
- ret = bgp_collision_detect(peer, remote_id);
- if (ret < 0)
- return BGP_Stop;
-
- /* Get sockname. */
- if (bgp_getsockname(peer) < 0) {
- flog_err_sys(EC_LIB_SOCKET,
- "%s: bgp_getsockname() failed for peer: %s",
- __func__, peer->host);
- return BGP_Stop;
- }
-
/* Verify valid local address present based on negotiated
* address-families. */
if (peer->afc_nego[AFI_IP][SAFI_UNICAST]
diff --git a/bgpd/bgp_pbr.c b/bgpd/bgp_pbr.c
index 2c6c2c3861..01443c778f 100644
--- a/bgpd/bgp_pbr.c
+++ b/bgpd/bgp_pbr.c
@@ -2034,6 +2034,9 @@ static void bgp_pbr_icmp_action(struct bgp *bgp, struct bgp_path_info *path,
return;
if (bpf->protocol != IPPROTO_ICMP)
return;
+
+ memset(&srcp, 0, sizeof(srcp));
+ memset(&dstp, 0, sizeof(dstp));
bpf->src_port = &srcp;
bpf->dst_port = &dstp;
/* parse icmp type and lookup appropriate icmp code
@@ -2684,6 +2687,7 @@ static void bgp_pbr_handle_entry(struct bgp *bgp, struct bgp_path_info *path,
struct bgp_pbr_or_filter bpof;
struct bgp_pbr_val_mask bpvm;
+ memset(&range, 0, sizeof(range));
memset(&nh, 0, sizeof(struct nexthop));
memset(&bpf, 0, sizeof(struct bgp_pbr_filter));
memset(&bpof, 0, sizeof(struct bgp_pbr_or_filter));
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 49b94e6d7c..77a0b5fea7 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -51,6 +51,7 @@
#include "bgpd/bgp_aspath.h"
#include "bgpd/bgp_regex.h"
#include "bgpd/bgp_community.h"
+#include "bgpd/bgp_community_alias.h"
#include "bgpd/bgp_ecommunity.h"
#include "bgpd/bgp_lcommunity.h"
#include "bgpd/bgp_clist.h"
diff --git a/bgpd/bgp_routemap_nb.c b/bgpd/bgp_routemap_nb.c
index fc59122184..b165c5d0ee 100644
--- a/bgpd/bgp_routemap_nb.c
+++ b/bgpd/bgp_routemap_nb.c
@@ -18,6 +18,8 @@
*/
+#include <zebra.h>
+
#include "lib/command.h"
#include "lib/log.h"
#include "lib/northbound.h"
diff --git a/bgpd/bgp_routemap_nb_config.c b/bgpd/bgp_routemap_nb_config.c
index ec6284273e..ff08c16a82 100644
--- a/bgpd/bgp_routemap_nb_config.c
+++ b/bgpd/bgp_routemap_nb_config.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "lib/command.h"
#include "lib/log.h"
#include "lib/northbound.h"
diff --git a/bgpd/bgp_trace.c b/bgpd/bgp_trace.c
index 2ebc63b6b5..02afbeb46f 100644
--- a/bgpd/bgp_trace.c
+++ b/bgpd/bgp_trace.c
@@ -1,4 +1,6 @@
#define TRACEPOINT_CREATE_PROBES
#define TRACEPOINT_DEFINE
+#include <zebra.h>
+
#include "bgp_trace.h"
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 1e465d2620..5b5f166e4b 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -22,6 +22,7 @@
#include "command.h"
#include "lib/json.h"
+#include "lib/sockopt.h"
#include "lib_errors.h"
#include "lib/zclient.h"
#include "lib/printfrr.h"
@@ -45,6 +46,7 @@
#include "bgpd/bgp_attr.h"
#include "bgpd/bgp_aspath.h"
#include "bgpd/bgp_community.h"
+#include "bgpd/bgp_community_alias.h"
#include "bgpd/bgp_ecommunity.h"
#include "bgpd/bgp_lcommunity.h"
#include "bgpd/bgp_damp.h"
@@ -130,10 +132,6 @@ DEFINE_HOOK(bgp_inst_config_write,
(bgp, vty));
DEFINE_HOOK(bgp_snmp_update_last_changed, (struct bgp *bgp), (bgp));
-#define GR_NO_OPER \
- "The Graceful Restart No Operation was executed as cmd same as previous one."
-#define GR_INVALID \
- "The Graceful Restart command used is not valid at this moment."
static struct peer_group *listen_range_exists(struct bgp *bgp,
struct prefix *range, int exact);
@@ -748,9 +746,6 @@ int bgp_nb_errmsg_return(char *errmsg, size_t errmsg_len, int ret)
case BGP_ERR_GR_OPERATION_FAILED:
str = "The Graceful Restart Operation failed due to an err.";
break;
- case BGP_GR_NO_OPERATION:
- str = GR_NO_OPER;
- break;
case BGP_ERR_PEER_GROUP_MEMBER:
str = "Peer-group member cannot override remote-as of peer-group";
break;
@@ -840,9 +835,6 @@ int bgp_vty_return(struct vty *vty, int ret)
case BGP_ERR_GR_OPERATION_FAILED:
str = "The Graceful Restart Operation failed due to an err.";
break;
- case BGP_GR_NO_OPERATION:
- str = GR_NO_OPER;
- break;
}
if (str) {
vty_out(vty, "%% %s\n", str);
@@ -1388,6 +1380,10 @@ DEFUN_YANG_NOSH(router_bgp,
nb_cli_enqueue_change(vty,
"./global/instance-type-view",
NB_OP_MODIFY, "true");
+ } else {
+ nb_cli_enqueue_change(vty,
+ "./global/instance-type-view",
+ NB_OP_MODIFY, "false");
}
ret = nb_cli_apply_changes(vty, base_xpath);
@@ -1499,6 +1495,62 @@ void cli_show_router_bgp_router_id(struct vty *vty, struct lyd_node *dnode,
vty_out(vty, " bgp router-id %s\n", yang_dnode_get_string(dnode, NULL));
}
+DEFPY(bgp_community_alias, bgp_community_alias_cmd,
+ "[no$no] bgp community alias WORD$community WORD$alias",
+ NO_STR BGP_STR
+ "Add community specific parameters\n"
+ "Create an alias for a community\n"
+ "Community (AA:BB or AA:BB:CC)\n"
+ "Alias name\n")
+{
+ struct community_alias ca1;
+ struct community_alias ca2;
+ struct community_alias *lookup_community;
+ struct community_alias *lookup_alias;
+
+ if (!community_str2com(community) && !lcommunity_str2com(community)) {
+ vty_out(vty, "Invalid community format\n");
+ return CMD_WARNING;
+ }
+
+ memset(&ca1, 0, sizeof(ca1));
+ memset(&ca2, 0, sizeof(ca2));
+ strlcpy(ca1.community, community, sizeof(ca1.community));
+ strlcpy(ca1.alias, alias, sizeof(ca1.alias));
+
+ lookup_community = bgp_ca_community_lookup(&ca1);
+ lookup_alias = bgp_ca_alias_lookup(&ca1);
+
+ if (no) {
+ bgp_ca_alias_delete(&ca1);
+ bgp_ca_community_delete(&ca1);
+ } else {
+ if (lookup_alias) {
+ /* Lookup if community hash table has an item
+ * with the same alias name.
+ */
+ strlcpy(ca2.community, lookup_alias->community,
+ sizeof(ca2.community));
+ if (bgp_ca_community_lookup(&ca2)) {
+ vty_out(vty,
+ "community (%s) already has this alias (%s)\n",
+ lookup_alias->community,
+ lookup_alias->alias);
+ return CMD_WARNING;
+ }
+ bgp_ca_alias_delete(&ca1);
+ }
+
+ if (lookup_community)
+ bgp_ca_community_delete(&ca1);
+
+ bgp_ca_alias_insert(&ca1);
+ bgp_ca_community_insert(&ca1);
+ }
+
+ return CMD_SUCCESS;
+}
+
DEFPY (bgp_global_suppress_fib_pending,
bgp_global_suppress_fib_pending_cmd,
"[no] bgp suppress-fib-pending",
@@ -12597,6 +12649,7 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
uint8_t *msg;
json_object *json_neigh = NULL;
time_t epoch_tbuf;
+ uint32_t sync_tcp_mss;
bgp = p->bgp;
@@ -12858,6 +12911,15 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
p->v_delayopen * 1000);
}
+ /* Configured and Synced tcp-mss value for peer */
+ if (CHECK_FLAG(p->flags, PEER_FLAG_TCP_MSS)) {
+ sync_tcp_mss = sockopt_tcp_mss_get(p->fd);
+ json_object_int_add(json_neigh, "bgpTcpMssConfigured",
+ p->tcp_mss);
+ json_object_int_add(json_neigh, "bgpTcpMssSynced",
+ sync_tcp_mss);
+ }
+
if (CHECK_FLAG(p->flags, PEER_FLAG_TIMER)) {
json_object_int_add(json_neigh,
"bgpTimerConfiguredHoldTimeMsecs",
@@ -12941,6 +13003,13 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
vty_out(vty,
" Configured DelayOpenTime is %d seconds\n",
p->delayopen);
+
+ /* Configured and synced tcp-mss value for peer */
+ if (CHECK_FLAG(p->flags, PEER_FLAG_TCP_MSS)) {
+ sync_tcp_mss = sockopt_tcp_mss_get(p->fd);
+ vty_out(vty, " Configured tcp-mss is %d", p->tcp_mss);
+ vty_out(vty, ", synced tcp-mss is %d\n", sync_tcp_mss);
+ }
}
/* Capability. */
if (p->status == Established) {
@@ -16360,6 +16429,55 @@ void cli_show_bgp_global_afi_safi_ip_unicast_redistribution_list(
vty_out(vty, "\n");
}
+/* Neighbor update tcp-mss. */
+static int peer_tcp_mss_vty(struct vty *vty, const char *peer_str,
+ const char *tcp_mss_str)
+{
+ struct peer *peer;
+ uint32_t tcp_mss_val = 0;
+
+ peer = peer_and_group_lookup_vty(vty, peer_str);
+ if (!peer)
+ return CMD_WARNING_CONFIG_FAILED;
+
+ if (tcp_mss_str) {
+ tcp_mss_val = strtoul(tcp_mss_str, NULL, 10);
+ peer_tcp_mss_set(peer, tcp_mss_val);
+ } else {
+ peer_tcp_mss_unset(peer);
+ }
+
+ return CMD_SUCCESS;
+}
+
+DEFUN(neighbor_tcp_mss, neighbor_tcp_mss_cmd,
+ "neighbor <A.B.C.D|X:X::X:X|WORD> tcp-mss (1-65535)",
+ NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+ "TCP max segment size\n"
+ "TCP MSS value\n")
+{
+ int peer_index = 1;
+ int mss_index = 3;
+
+ vty_out(vty,
+ " Warning: Reset BGP session for tcp-mss value to take effect\n");
+ return peer_tcp_mss_vty(vty, argv[peer_index]->arg,
+ argv[mss_index]->arg);
+}
+
+DEFUN(no_neighbor_tcp_mss, no_neighbor_tcp_mss_cmd,
+ "no neighbor <A.B.C.D|X:X::X:X|WORD> tcp-mss [(1-65535)]",
+ NO_STR NEIGHBOR_STR NEIGHBOR_ADDR_STR2
+ "TCP max segment size\n"
+ "TCP MSS value\n")
+{
+ int peer_index = 2;
+
+ vty_out(vty,
+ " Warning: Reset BGP session for tcp-mss value to take effect\n");
+ return peer_tcp_mss_vty(vty, argv[peer_index]->arg, NULL);
+}
+
static void bgp_config_write_redistribute(struct vty *vty, struct bgp *bgp,
afi_t afi, safi_t safi)
{
@@ -16809,6 +16927,10 @@ static void bgp_config_write_peer_global(struct vty *vty, struct bgp *bgp,
vty_out(vty, " neighbor %s interface %s\n", addr, peer->ifname);
}
+ /* TCP max segment size */
+ if (CHECK_FLAG(peer->flags, PEER_FLAG_TCP_MSS))
+ vty_out(vty, " neighbor %s tcp-mss %d\n", addr, peer->tcp_mss);
+
/* passive */
if (peergroup_flag_check(peer, PEER_FLAG_PASSIVE))
vty_out(vty, " neighbor %s passive\n", addr);
@@ -17234,6 +17356,9 @@ static void bgp_config_write_peer_af(struct vty *vty, struct bgp *bgp,
: "");
}
}
+
+ if (peer_af_flag_check(peer, afi, safi, PEER_FLAG_CONFIG_DAMPENING))
+ bgp_config_write_peer_damp(vty, peer, afi, safi);
}
/* Address family based peer configuration display. */
@@ -17287,23 +17412,11 @@ static void bgp_config_write_family(struct vty *vty, struct bgp *bgp, afi_t afi,
/* BGP flag dampening. */
if (CHECK_FLAG(bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING))
bgp_config_write_damp(vty, bgp, afi, safi);
- for (ALL_LIST_ELEMENTS_RO(bgp->group, node, group))
- if (peer_af_flag_check(group->conf, afi, safi,
- PEER_FLAG_CONFIG_DAMPENING))
- bgp_config_write_peer_damp(vty, group->conf, afi, safi);
- for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer))
- if (peer_af_flag_check(peer, afi, safi,
- PEER_FLAG_CONFIG_DAMPENING))
- bgp_config_write_peer_damp(vty, peer, afi, safi);
for (ALL_LIST_ELEMENTS(bgp->group, node, nnode, group))
bgp_config_write_peer_af(vty, bgp, group->conf, afi, safi);
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
- /* Skip dynamic neighbors. */
- if (peer_dynamic_neighbor(peer))
- continue;
-
/* Do not display doppelganger peers */
if (CHECK_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE))
bgp_config_write_peer_af(vty, bgp, peer, afi, safi);
@@ -19202,6 +19315,8 @@ void bgp_vty_init(void)
/* Community-list. */
community_list_vty();
+ community_alias_vty();
+
/* vpn-policy commands */
install_element(BGP_IPV4_NODE, &af_rd_vpn_export_cmd);
install_element(BGP_IPV6_NODE, &af_rd_vpn_export_cmd);
@@ -19229,6 +19344,10 @@ void bgp_vty_init(void)
install_element(BGP_IPV6_NODE, &af_no_route_map_vpn_imexport_cmd);
install_element(BGP_IPV4_NODE, &af_no_import_vrf_route_map_cmd);
install_element(BGP_IPV6_NODE, &af_no_import_vrf_route_map_cmd);
+
+ /* tcp-mss command */
+ install_element(BGP_NODE, &neighbor_tcp_mss_cmd);
+ install_element(BGP_NODE, &no_neighbor_tcp_mss_cmd);
}
#include "memory.h"
@@ -20404,3 +20523,18 @@ static void community_list_vty(void)
install_element(VIEW_NODE, &show_bgp_lcommunity_list_cmd);
install_element(VIEW_NODE, &show_bgp_lcommunity_list_arg_cmd);
}
+
+static struct cmd_node community_alias_node = {
+ .name = "community alias",
+ .node = COMMUNITY_ALIAS_NODE,
+ .prompt = "",
+ .config_write = bgp_community_alias_write,
+};
+
+void community_alias_vty(void)
+{
+ install_node(&community_alias_node);
+
+ /* Community-list. */
+ install_element(CONFIG_NODE, &bgp_community_alias_cmd);
+}
diff --git a/bgpd/bgp_vty.h b/bgpd/bgp_vty.h
index 251bdc3fe3..051b2e9580 100644
--- a/bgpd/bgp_vty.h
+++ b/bgpd/bgp_vty.h
@@ -154,6 +154,7 @@ struct bgp;
} while (0)
extern void bgp_vty_init(void);
+extern void community_alias_vty(void);
extern const char *get_afi_safi_str(afi_t afi, safi_t safi, bool for_json);
extern int bgp_get_vty(struct bgp **bgp, as_t *as, const char *name,
enum bgp_instance_type inst_type);
diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c
index 288c2851b3..05d00a4851 100644
--- a/bgpd/bgp_zebra.c
+++ b/bgpd/bgp_zebra.c
@@ -1700,6 +1700,9 @@ int bgp_redistribute_set(struct bgp *bgp, afi_t afi, int type,
redist_add_instance(&zclient->mi_redist[afi][type], instance);
} else {
+ if (vrf_bitmap_check(zclient->redist[afi][type], bgp->vrf_id))
+ return CMD_WARNING;
+
#ifdef ENABLE_BGP_VNC
if (EVPN_ENABLED(bgp) && type == ZEBRA_ROUTE_VNC_DIRECT) {
vnc_export_bgp_enable(
@@ -1909,22 +1912,6 @@ void bgp_redistribute_redo(struct bgp *bgp)
}
}
-/* Unset redistribute vrf bitmap during triggers like
- restart networking or delete VRFs */
-void bgp_unset_redist_vrf_bitmaps(struct bgp *bgp, vrf_id_t old_vrf_id)
-{
- int i;
- afi_t afi;
-
- for (afi = AFI_IP; afi < AFI_MAX; afi++)
- for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
- if (vrf_bitmap_check(zclient->redist[afi][i],
- old_vrf_id))
- vrf_bitmap_unset(zclient->redist[afi][i],
- old_vrf_id);
- return;
-}
-
void bgp_zclient_reset(void)
{
zclient_reset(zclient);
@@ -2407,7 +2394,7 @@ static int bgp_zebra_route_notify_owner(int command, struct zclient *zclient,
if (!zapi_route_notify_decode(zclient->ibuf, &p, &table_id, &note,
&afi, &safi)) {
- zlog_err("%s : error in msg decode", __PRETTY_FUNCTION__);
+ zlog_err("%s : error in msg decode", __func__);
return -1;
}
@@ -2415,8 +2402,8 @@ static int bgp_zebra_route_notify_owner(int command, struct zclient *zclient,
bgp = bgp_lookup_by_vrf_id(vrf_id);
if (!bgp) {
flog_err(EC_BGP_INVALID_BGP_INSTANCE,
- "%s : bgp instance not found vrf %d",
- __PRETTY_FUNCTION__, vrf_id);
+ "%s : bgp instance not found vrf %d", __func__,
+ vrf_id);
return -1;
}
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index 20bb5e5320..5991bff752 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -43,6 +43,7 @@
#include "jhash.h"
#include "table.h"
#include "lib/json.h"
+#include "lib/sockopt.h"
#include "frr_pthread.h"
#include "bitfield.h"
@@ -54,6 +55,7 @@
#include "bgpd/bgp_debug.h"
#include "bgpd/bgp_errors.h"
#include "bgpd/bgp_community.h"
+#include "bgpd/bgp_community_alias.h"
#include "bgpd/bgp_conditional_adv.h"
#include "bgpd/bgp_attr.h"
#include "bgpd/bgp_regex.h"
@@ -1347,7 +1349,7 @@ struct peer *peer_new(struct bgp *bgp)
peer->bgp = bgp_lock(bgp);
peer = peer_lock(peer); /* initial reference */
peer->password = NULL;
- peer->max_packet_size = BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE;
+ peer->max_packet_size = BGP_MAX_PACKET_SIZE;
/* Set default flags. */
FOREACH_AFI_SAFI (afi, safi) {
@@ -1382,7 +1384,7 @@ struct peer *peer_new(struct bgp *bgp)
/* We use a larger buffer for peer->obuf_work in the event that:
* - We RX a BGP_UPDATE where the attributes alone are just
- * under BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE.
+ * under BGP_EXTENDED_MESSAGE_MAX_PACKET_SIZE.
* - The user configures an outbound route-map that does many as-path
* prepends or adds many communities. At most they can have
* CMD_ARGC_MAX args in a route-map so there is a finite limit on how
@@ -1392,12 +1394,12 @@ struct peer *peer_new(struct bgp *bgp)
* bounds checking for every single attribute as we construct an
* UPDATE.
*/
- peer->obuf_work = stream_new(BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE
- + BGP_MAX_PACKET_SIZE_OVERFLOW);
- peer->ibuf_work = ringbuf_new(BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE
- * BGP_READ_PACKET_MAX);
+ peer->obuf_work =
+ stream_new(BGP_MAX_PACKET_SIZE + BGP_MAX_PACKET_SIZE_OVERFLOW);
+ peer->ibuf_work =
+ ringbuf_new(BGP_MAX_PACKET_SIZE * BGP_READ_PACKET_MAX);
- peer->scratch = stream_new(BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE);
+ peer->scratch = stream_new(BGP_MAX_PACKET_SIZE);
bgp_sync_init(peer);
@@ -1439,6 +1441,8 @@ void peer_xfer_config(struct peer *peer_dst, struct peer *peer_src)
peer_dst->local_as = peer_src->local_as;
peer_dst->port = peer_src->port;
+ /* copy tcp_mss value */
+ peer_dst->tcp_mss = peer_src->tcp_mss;
(void)peer_sort(peer_dst);
peer_dst->rmap_type = peer_src->rmap_type;
@@ -3374,13 +3378,13 @@ int bgp_lookup_by_as_name_type(struct bgp **bgp_val, as_t *as, const char *name,
bgp = bgp_get_default();
if (bgp) {
+ *bgp_val = bgp;
if (bgp->as != *as) {
*as = bgp->as;
return BGP_ERR_AS_MISMATCH;
}
if (bgp->inst_type != inst_type)
return BGP_ERR_INSTANCE_MISMATCH;
- *bgp_val = bgp;
return BGP_SUCCESS;
}
*bgp_val = NULL;
@@ -3434,6 +3438,46 @@ int bgp_get(struct bgp **bgp_val, as_t *as, const char *name,
return BGP_CREATED;
}
+static void bgp_zclient_set_redist(afi_t afi, int type, unsigned short instance,
+ vrf_id_t vrf_id, bool set)
+{
+ if (instance) {
+ if (set)
+ redist_add_instance(&zclient->mi_redist[afi][type],
+ instance);
+ else
+ redist_del_instance(&zclient->mi_redist[afi][type],
+ instance);
+ } else {
+ if (set)
+ vrf_bitmap_set(zclient->redist[afi][type], vrf_id);
+ else
+ vrf_bitmap_unset(zclient->redist[afi][type], vrf_id);
+ }
+}
+
+static void bgp_set_redist_vrf_bitmaps(struct bgp *bgp, bool set)
+{
+ afi_t afi;
+ int i;
+ struct list *red_list;
+ struct listnode *node;
+ struct bgp_redist *red;
+
+ for (afi = AFI_IP; afi < AFI_MAX; afi++) {
+ for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
+
+ red_list = bgp->redist[afi][i];
+ if (!red_list)
+ continue;
+
+ for (ALL_LIST_ELEMENTS_RO(red_list, node, red))
+ bgp_zclient_set_redist(afi, i, red->instance,
+ bgp->vrf_id, set);
+ }
+ }
+}
+
/*
* Make BGP instance "up". Applies only to VRFs (non-default) and
* implies the VRF has been learnt from Zebra.
@@ -3443,6 +3487,8 @@ void bgp_instance_up(struct bgp *bgp)
struct peer *peer;
struct listnode *node, *next;
+ bgp_set_redist_vrf_bitmaps(bgp, true);
+
/* Register with zebra. */
bgp_zebra_instance_register(bgp);
@@ -3487,6 +3533,10 @@ void bgp_instance_down(struct bgp *bgp)
/* Cleanup registered nexthops (flags) */
bgp_cleanup_nexthops(bgp);
+
+ bgp_zebra_instance_deregister(bgp);
+
+ bgp_set_redist_vrf_bitmaps(bgp, false);
}
/* Delete BGP instance. */
@@ -5116,6 +5166,26 @@ void peer_port_unset(struct peer *peer)
peer->port = BGP_PORT_DEFAULT;
}
+/* Set the TCP-MSS value in the peer structure,
+ * This gets applied only after connection reset
+ * So this value will be used in bgp_connect.
+ */
+void peer_tcp_mss_set(struct peer *peer, uint32_t tcp_mss)
+{
+ peer->tcp_mss = tcp_mss;
+ SET_FLAG(peer->flags, PEER_FLAG_TCP_MSS);
+}
+
+/* Reset the TCP-MSS value in the peer structure,
+ * This gets applied only after connection reset
+ * So this value will be used in bgp_connect.
+ */
+void peer_tcp_mss_unset(struct peer *peer)
+{
+ UNSET_FLAG(peer->flags, PEER_FLAG_TCP_MSS);
+ peer->tcp_mss = 0;
+}
+
/*
* Helper function that is called after the name of the policy
* being used by a peer has changed (AF specific). Automatically
@@ -6867,7 +6937,7 @@ static void peer_advertise_map_filter_update(struct peer *peer, afi_t afi,
/* Removed advertise-map configuration */
if (!set) {
- memset(filter, 0, sizeof(struct bgp_filter));
+ memset(&filter->advmap, 0, sizeof(filter->advmap));
/* decrement condition_filter_count delete timer if
* this is the last advertise-map to be removed.
@@ -7674,6 +7744,7 @@ void bgp_init(unsigned short instance)
/* BGP inits. */
bgp_attr_init();
bgp_debug_init();
+ bgp_community_alias_init();
bgp_dump_init();
bgp_route_init();
bgp_route_map_init();
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index 88588952ba..4a17b72b7f 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -866,8 +866,9 @@ typedef enum {
/* BGP message header and packet size. */
#define BGP_MARKER_SIZE 16
#define BGP_HEADER_SIZE 19
-#define BGP_MAX_PACKET_SIZE 4096
-#define BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE 65535
+#define BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE 4096
+#define BGP_EXTENDED_MESSAGE_MAX_PACKET_SIZE 65535
+#define BGP_MAX_PACKET_SIZE BGP_EXTENDED_MESSAGE_MAX_PACKET_SIZE
#define BGP_MAX_PACKET_SIZE_OVERFLOW 1024
/*
@@ -1049,7 +1050,7 @@ struct peer {
struct stream_fifo *obuf; // packets waiting to be written
/* used as a block to deposit raw wire data to */
- uint8_t ibuf_scratch[BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE
+ uint8_t ibuf_scratch[BGP_EXTENDED_MESSAGE_MAX_PACKET_SIZE
* BGP_READ_PACKET_MAX];
struct ringbuf *ibuf_work; // WiP buffer used by bgp_read() only
struct stream *obuf_work; // WiP buffer used to construct packets
@@ -1241,6 +1242,8 @@ struct peer {
#define PEER_FLAG_GRACEFUL_RESTART (1U << 24) /* Graceful Restart */
#define PEER_FLAG_GRACEFUL_RESTART_GLOBAL_INHERIT (1U << 25) /* Global-Inherit */
#define PEER_FLAG_RTT_SHUTDOWN (1U << 26) /* shutdown rtt */
+#define PEER_FLAG_TIMER_DELAYOPEN (1U << 27) /* delayopen timer */
+#define PEER_FLAG_TCP_MSS (1U << 28) /* tcp-mss */
/*
*GR-Disabled mode means unset PEER_FLAG_GRACEFUL_RESTART
@@ -1248,8 +1251,6 @@ struct peer {
*and PEER_FLAG_GRACEFUL_RESTART_GLOBAL_INHERIT
*/
-#define PEER_FLAG_TIMER_DELAYOPEN (1 << 27) /* delayopen timer */
-
struct bgp_peer_gr PEER_GR_FSM[BGP_PEER_GR_MODE][BGP_PEER_GR_EVENT_CMD];
enum peer_mode peer_gr_present_state;
/* Non stop forwarding afi-safi count for BGP gr feature*/
@@ -1606,6 +1607,9 @@ struct peer {
bool advmap_config_change[AFI_MAX][SAFI_MAX];
bool advmap_table_change;
+ /* set TCP max segment size */
+ uint32_t tcp_mss;
+
QOBJ_FIELDS;
};
DECLARE_QOBJ_TYPE(peer);
@@ -2382,8 +2386,6 @@ static inline bool bgp_in_graceful_shutdown(struct bgp *bgp)
!!CHECK_FLAG(bm->flags, BM_FLAG_GRACEFUL_SHUTDOWN));
}
-extern void bgp_unset_redist_vrf_bitmaps(struct bgp *, vrf_id_t);
-
/* For benefit of rfapi */
extern struct peer *peer_new(struct bgp *bgp);
@@ -2409,4 +2411,6 @@ DECLARE_HOOK(bgp_rpki_prefix_status,
void peer_nsf_stop(struct peer *peer);
+void peer_tcp_mss_set(struct peer *peer, uint32_t tcp_mss);
+void peer_tcp_mss_unset(struct peer *peer);
#endif /* _QUAGGA_BGPD_H */
diff --git a/bgpd/subdir.am b/bgpd/subdir.am
index 2c73f14594..b54c41cabe 100644
--- a/bgpd/subdir.am
+++ b/bgpd/subdir.am
@@ -57,6 +57,7 @@ bgpd_libbgp_a_SOURCES = \
bgpd/bgp_bfd.c \
bgpd/bgp_clist.c \
bgpd/bgp_community.c \
+ bgpd/bgp_community_alias.c \
bgpd/bgp_conditional_adv.c \
bgpd/bgp_damp.c \
bgpd/bgp_debug.c \
@@ -137,6 +138,7 @@ noinst_HEADERS += \
bgpd/bgp_bfd.h \
bgpd/bgp_clist.h \
bgpd/bgp_community.h \
+ bgpd/bgp_community_alias.h \
bgpd/bgp_conditional_adv.h \
bgpd/bgp_damp.h \
bgpd/bgp_debug.h \
diff --git a/configure.ac b/configure.ac
index f9fa8e0713..c082a9e527 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1866,7 +1866,7 @@ AC_SUBST([SNMP_CFLAGS])
dnl ---------------
dnl libyang
dnl ---------------
-PKG_CHECK_MODULES([LIBYANG], [libyang >= 1.0.184], , [
+PKG_CHECK_MODULES([LIBYANG], [libyang >= 1.0.184 libyang < 2.0], , [
AC_MSG_ERROR([libyang (>= 1.0.184) was not found on your system.])
])
ac_cflags_save="$CFLAGS"
diff --git a/doc/developer/lists.rst b/doc/developer/lists.rst
index 86db788c0e..553bd1f596 100644
--- a/doc/developer/lists.rst
+++ b/doc/developer/lists.rst
@@ -108,6 +108,8 @@ Functions provided:
| _first, _next, _next_safe, | yes | yes | yes | yes | yes |
| _const_first, _const_next | | | | | |
+------------------------------------+------+------+------+---------+------------+
+| _swap_all | yes | yes | yes | yes | yes |
++------------------------------------+------+------+------+---------+------------+
| _add_head, _add_tail, _add_after | yes | -- | -- | -- | -- |
+------------------------------------+------+------+------+---------+------------+
| _add | -- | yes | yes | yes | yes |
@@ -322,6 +324,14 @@ The following documentation assumes that a list has been defined using
return ``item``. The function may also call ``assert()`` (but most
don't.)
+.. c:function:: itemtype *Z_swap_all(struct Z_head *, struct Z_head *)
+
+ Swap the contents of 2 containers (of identical type). This exchanges the
+ contents of the two head structures and updates pointers if necessary for
+ the particular data structure. Fast for all structures.
+
+ (Not currently available on atomic containers.)
+
.. todo::
``Z_del_after()`` / ``Z_del_hint()``?
diff --git a/doc/developer/topotests.rst b/doc/developer/topotests.rst
index a86566dbb0..dd797a6949 100644
--- a/doc/developer/topotests.rst
+++ b/doc/developer/topotests.rst
@@ -59,7 +59,7 @@ there are some errors in the upstream MIBS which need to be patched up. The
following steps will get you there on Ubuntu 20.04.
.. code:: shell
-
+
apt install libsnmp-dev
apt install snmpd snmp
apt install snmp-mibs-downloader
@@ -68,9 +68,9 @@ following steps will get you there on Ubuntu 20.04.
wget http://pastebin.com/raw.php?i=p3QyuXzZ -O /usr/share/snmp/mibs/ietf/SNMPv2-PDU
wget http://pastebin.com/raw.php?i=gG7j8nyk -O /usr/share/snmp/mibs/ietf/IPATM-IPMC-MIB
edit /etc/snmp/snmp.conf to look like this
- # As the snmp packages come without MIB files due to license reasons, loading
- # of MIBs is disabled by default. If you added the MIBs you can reenable
- # loading them by commenting out the following line.
+ # As the snmp packages come without MIB files due to license reasons, loading
+ # of MIBs is disabled by default. If you added the MIBs you can reenable
+ # loading them by commenting out the following line.
mibs +ALL
@@ -485,7 +485,7 @@ Some things to keep in mind:
in BGP, the test should look for the peers reconverging instead of just
sleeping an arbitrary amount of time and continuing on. It is ok to
use sleep in a tight loop with appropriate show commands to ensure that
- the protocol reaches the desired state. This should be bounded by
+ the protocol reaches the desired state. This should be bounded by
appropriate timeouts for the protocol in question though. See
verify_bgp_convergence as a good example of this. If you are having
troubles figuring out what to look for, please do not be afraid to ask.
@@ -882,6 +882,8 @@ Example:
Requirements:
+- Directory name for a new topotest must not contain hyphen (``-``) characters.
+ To separate words, use underscores (``_``). For example, `tests/topotests/bgp_new_example`.
- Test code should always be declared inside functions that begin with the
``test_`` prefix. Functions beginning with different prefixes will not be run
by pytest.
diff --git a/doc/user/basic.rst b/doc/user/basic.rst
index 519f30d5e6..2def835f0b 100644
--- a/doc/user/basic.rst
+++ b/doc/user/basic.rst
@@ -188,6 +188,12 @@ Basic Config Commands
This command clears all current filters in the log-filter table. Can be
daemon independent.
+
+.. clicmd:: log immediate-mode
+
+ Use unbuffered output for log and debug messages; normally there is
+ some internal buffering.
+
.. clicmd:: service password-encryption
Encrypt password.
diff --git a/doc/user/bgp.rst b/doc/user/bgp.rst
index fbcf2fb48e..f6aa5d1ca0 100644
--- a/doc/user/bgp.rst
+++ b/doc/user/bgp.rst
@@ -2079,6 +2079,38 @@ is called as named community lists.
This command defines a new expanded community list. The argument to
(100-199) defines the list identifier.
+.. _bgp-community-alias:
+
+Community alias
+^^^^^^^^^^^^^^^
+
+BGP community aliases are useful to quickly identify what communities are set
+for a specific prefix in a human-readable format. Especially handy for a huge
+amount of communities. Accurately defined aliases can help you faster spot
+things on the wire.
+
+.. clicmd:: bgp community alias NAME ALIAS
+
+ This command creates an alias name for a community that will be used
+ later in various CLI outputs in a human-readable format.
+
+ .. code-block:: frr
+
+ ~# vtysh -c 'show run' | grep 'bgp community alias'
+ bgp community alias 65001:14 community-1
+ bgp community alias 65001:123:1 lcommunity-1
+
+ ~# vtysh -c 'show ip bgp 172.16.16.1/32'
+ BGP routing table entry for 172.16.16.1/32, version 21
+ Paths: (2 available, best #2, table default)
+ Advertised to non peer-group peers:
+ 65030
+ 192.168.0.2 from 192.168.0.2 (172.16.16.1)
+ Origin incomplete, metric 0, valid, external, best (Neighbor IP)
+ Community: 65001:12 65001:13 community-1 65001:65534
+ Large Community: lcommunity-1 65001:123:2
+ Last update: Fri Apr 16 12:51:27 2021
+
.. _bgp-using-communities-in-route-map:
Using Communities in Route Maps
@@ -2634,15 +2666,15 @@ the same behavior of using same next-hop and RMAC values.
Enables or disables advertise-pip feature, specifiy system-IP and/or system-MAC
parameters.
-EVPN advertise-svi
-^^^^^^^^^^^^^^^^^^
+EVPN advertise-svi-ip
+^^^^^^^^^^^^^^^^^^^^^
Typically, the SVI IP address is reused on VTEPs across multiple racks. However,
-if you have unique SVI IP addresses want those to be reachable you can enable the
+if you have unique SVI IP addresses that you want to be reachable you can use the
advertise-svi-ip option. This option advertises the SVI IP/MAC address as a type-2
route and eliminates the need for any flooding over VXLAN to reach the IP from a
remote VTEP.
-.. clicmd:: advertise-svi
+.. clicmd:: advertise-svi-ip
Note that you should not enable both the advertise-svi-ip and the advertise-default-gw
at the same time.
@@ -3908,6 +3940,147 @@ Example of how to set up a 6-Bone connection.
log file bgpd.log
!
+.. _bgp-tcp-mss:
+
+BGP tcp-mss support
+===================
+TCP provides a mechanism for the user to specify the max segment size.
+setsockopt API is used to set the max segment size for TCP session. We
+can configure this as part of BGP neighbor configuration.
+
+This document explains how to avoid ICMP vulnerability issues by limiting
+TCP max segment size when you are using MTU discovery. Using MTU discovery
+on TCP paths is one method of avoiding BGP packet fragmentation.
+
+TCP negotiates a maximum segment size (MSS) value during session connection
+establishment between two peers. The MSS value negotiated is primarily based
+on the maximum transmission unit (MTU) of the interfaces to which the
+communicating peers are directly connected. However, due to variations in
+link MTU on the path taken by the TCP packets, some packets in the network
+that are well within the MSS value might be fragmented when the packet size
+exceeds the link's MTU.
+
+This feature is supported with TCP over IPv4 and TCP over IPv6.
+
+CLI Configuration:
+------------------
+Below configuration can be done in router bgp mode and allows the user to
+configure the tcp-mss value per neighbor. The configuration gets applied
+only after hard reset is performed on that neighbor. If we configure tcp-mss
+on both the neighbors then both neighbors need to be reset.
+
+The configuration takes effect based on below rules, so there is a configured
+tcp-mss and a synced tcp-mss value per TCP session.
+
+By default if the configuration is not done then the TCP max segment size is
+set to the Maximum Transmission unit (MTU) – (IP/IP6 header size + TCP header
+size + ethernet header). For IPv4 its MTU – (20 bytes IP header + 20 bytes TCP
+header + 12 bytes ethernet header) and for IPv6 its MTU – (40 bytes IPv6 header
++ 20 bytes TCP header + 12 bytes ethernet header).
+
+If the config is done then it reduces 12-14 bytes for the ether header and
+uses it after synchronizing in TCP handshake.
+
+.. clicmd:: neighbor <A.B.C.D|X:X::X:X|WORD> tcp-mss (1-65535)
+
+When tcp-mss is configured kernel reduces 12-14 bytes for ethernet header.
+E.g. if tcp-mss is configured as 150 the synced value will be 138.
+
+Note: configured and synced value is different since TCP module will reduce
+12 bytes for ethernet header.
+
+Running config:
+---------------
+
+.. code-block:: frr
+
+ frr# show running-config
+ Building configuration...
+
+ Current configuration:
+ !
+ router bgp 100
+ bgp router-id 192.0.2.1
+ neighbor 198.51.100.2 remote-as 100
+ neighbor 198.51.100.2 tcp-mss 150 => new entry
+ neighbor 2001:DB8::2 remote-as 100
+ neighbor 2001:DB8::2 tcp-mss 400 => new entry
+
+Show command:
+-------------
+
+.. code-block:: frr
+
+ frr# show bgp neighbors 198.51.100.2
+ BGP neighbor is 198.51.100.2, remote AS 100, local AS 100, internal link
+ Hostname: frr
+ BGP version 4, remote router ID 192.0.2.2, local router ID 192.0.2.1
+ BGP state = Established, up for 02:15:28
+ Last read 00:00:28, Last write 00:00:28
+ Hold time is 180, keepalive interval is 60 seconds
+ Configured tcp-mss is 150, synced tcp-mss is 138 => new display
+
+.. code-block:: frr
+
+ frr# show bgp neighbors 2001:DB8::2
+ BGP neighbor is 2001:DB8::2, remote AS 100, local AS 100, internal link
+ Hostname: frr
+ BGP version 4, remote router ID 192.0.2.2, local router ID 192.0.2.1
+ BGP state = Established, up for 02:16:34
+ Last read 00:00:34, Last write 00:00:34
+ Hold time is 180, keepalive interval is 60 seconds
+ Configured tcp-mss is 400, synced tcp-mss is 388 => new display
+
+Show command json output:
+-------------------------
+
+.. code-block:: frr
+
+ frr# show bgp neighbors 2001:DB8::2 json
+ {
+ "2001:DB8::2":{
+ "remoteAs":100,
+ "localAs":100,
+ "nbrInternalLink":true,
+ "hostname":"frr",
+ "bgpVersion":4,
+ "remoteRouterId":"192.0.2.2",
+ "localRouterId":"192.0.2.1",
+ "bgpState":"Established",
+ "bgpTimerUpMsec":8349000,
+ "bgpTimerUpString":"02:19:09",
+ "bgpTimerUpEstablishedEpoch":1613054251,
+ "bgpTimerLastRead":9000,
+ "bgpTimerLastWrite":9000,
+ "bgpInUpdateElapsedTimeMsecs":8347000,
+ "bgpTimerHoldTimeMsecs":180000,
+ "bgpTimerKeepAliveIntervalMsecs":60000,
+ "bgpTcpMssConfigured":400, => new entry
+ "bgpTcpMssSynced":388, => new entry
+
+.. code-block:: frr
+
+ frr# show bgp neighbors 198.51.100.2 json
+ {
+ "198.51.100.2":{
+ "remoteAs":100,
+ "localAs":100,
+ "nbrInternalLink":true,
+ "hostname":"frr",
+ "bgpVersion":4,
+ "remoteRouterId":"192.0.2.2",
+ "localRouterId":"192.0.2.1",
+ "bgpState":"Established",
+ "bgpTimerUpMsec":8370000,
+ "bgpTimerUpString":"02:19:30",
+ "bgpTimerUpEstablishedEpoch":1613054251,
+ "bgpTimerLastRead":30000,
+ "bgpTimerLastWrite":30000,
+ "bgpInUpdateElapsedTimeMsecs":8368000,
+ "bgpTimerHoldTimeMsecs":180000,
+ "bgpTimerKeepAliveIntervalMsecs":60000,
+ "bgpTcpMssConfigured":150, => new entry
+ "bgpTcpMssSynced":138, => new entry
.. include:: routeserver.rst
diff --git a/doc/user/isisd.rst b/doc/user/isisd.rst
index c1bdd9a694..66f8fd5678 100644
--- a/doc/user/isisd.rst
+++ b/doc/user/isisd.rst
@@ -77,7 +77,7 @@ writing, *isisd* does not support multiple ISIS processes.
- transition
Send and accept both styles of TLVs during transition
- wide
- Use new style of TLVs to carry wider metric
+ Use new style of TLVs to carry wider metric. FRR uses this as a default value
.. clicmd:: set-overload-bit
@@ -261,10 +261,11 @@ ISIS interface
Limit Remote LFA PQ node selection within the specified metric.
-.. clicmd:: isis fast-reroute ti-lfa [level-1|level-2] [node-protection]
+.. clicmd:: isis fast-reroute ti-lfa [level-1|level-2] [node-protection [link-fallback]]
Enable per-prefix TI-LFA fast reroute link or node protection.
-
+ When node protection is used, option link-fallback enables the computation and use of
+ link-protecting LFAs for destinations unprotected by node protection.
.. _showing-isis-information:
diff --git a/doc/user/kernel.rst b/doc/user/kernel.rst
index 4c2c7a5008..210ede7e91 100644
--- a/doc/user/kernel.rst
+++ b/doc/user/kernel.rst
@@ -6,6 +6,9 @@ Kernel Interface
There are several different methods for reading kernel routing table
information, updating kernel routing tables, and for looking up interfaces.
+FRR relies heavily on the Netlink (``man 7 netlink``) interface to
+communicate with the Kernel. However, other interfaces are still used
+in some parts of the code.
- ioctl
This method is a very traditional way for reading or writing kernel
@@ -27,16 +30,7 @@ information, updating kernel routing tables, and for looking up interfaces.
kernel information.
- routing socket / Netlink
- On recent Linux kernels (2.0.x and 2.2.x), there is a kernel/user
- communication support called `Netlink`. It makes asynchronous communication
- between kernel and FRR possible, similar to a routing socket on BSD systems.
-
- Before you use this feature, be sure to select (in kernel configuration) the
- kernel/Netlink support option 'Kernel/User network link driver' and 'Routing
- messages'.
-
- Today, the :file:`/dev/route` special device file is obsolete. Netlink
- communication is done by reading/writing over Netlink socket.
-
- After the kernel configuration, please reconfigure and rebuild FRR. You can
- use Netlink as a dynamic routing update channel between FRR and the kernel.
+ Netlink first appeard in Linux kernel 2.0. It makes asynchronous
+ communication between the kernel and FRR possible, similar to a routing
+ socket on BSD systems. Netlink communication is done by reading/writing
+ over Netlink socket.
diff --git a/doc/user/ospf6d.rst b/doc/user/ospf6d.rst
index 43c0f62ea3..d7f4a3303e 100644
--- a/doc/user/ospf6d.rst
+++ b/doc/user/ospf6d.rst
@@ -12,7 +12,7 @@ described in :rfc:`2740`.
OSPF6 router
============
-.. clicmd:: router ospf6
+.. clicmd:: router ospf6 [vrf NAME]
.. clicmd:: ospf6 router-id A.B.C.D
@@ -151,57 +151,53 @@ Redistribute routes to OSPF6
Showing OSPF6 information
=========================
-.. clicmd:: show ipv6 ospf6 [INSTANCE_ID] [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] [json]
- INSTANCE_ID is an optional OSPF instance ID. To see router ID and OSPF
- instance ID, simply type "show ipv6 ospf6 <cr>". JSON output can be
- obtained by appending 'json' to the end of command.
+ Show information on a variety of general OSPFv3 and area state and
+ configuration information. JSON output can be obtained by appending 'json'
+ to the end of command.
-.. clicmd:: show ipv6 ospf6 database [<detail|dump|internal>] [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] database [<detail|dump|internal>] [json]
This command shows LSAs present in the LSDB. There are three view options.
These options helps in viewing all the parameters of the LSAs. JSON output
can be obtained by appending 'json' to the end of command. JSON option is
not applicable with 'dump' option.
-.. clicmd:: show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> [json]
These options filters out the LSA based on its type. The three views options
works here as well. JSON output can be obtained by appending 'json' to the
end of command.
-.. clicmd:: show ipv6 ospf6 database adv-router A.B.C.D linkstate-id A.B.C.D [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] database adv-router A.B.C.D linkstate-id A.B.C.D [json]
The LSAs additinally can also be filtered with the linkstate-id and
advertising-router fields. We can use the LSA type filter and views with
this command as well and visa-versa. JSON output can be obtained by
appending 'json' to the end of command.
-.. clicmd:: show ipv6 ospf6 database self-originated [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] database self-originated [json]
This command is used to filter the LSAs which are originated by the present
router. All the other filters are applicable here as well.
-.. clicmd:: show ipv6 ospf6 interface [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] interface [json]
To see OSPF interface configuration like costs. JSON output can be
obtained by appending "json" in the end.
-.. clicmd:: show ipv6 ospf6 neighbor [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] neighbor [json]
Shows state and chosen (Backup) DR of neighbor. JSON output can be
obtained by appending 'json' at the end.
-.. clicmd:: show ipv6 ospf6 interface traffic [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] interface traffic [json]
Shows counts of different packets that have been recieved and transmitted
by the interfaces. JSON output can be obtained by appending "json" at the
end.
-.. clicmd:: show ipv6 ospf6 request-list A.B.C.D
-
- Shows requestlist of neighbor.
-
.. clicmd:: show ipv6 route ospf6
This command shows internal routing table.
@@ -211,12 +207,12 @@ Showing OSPF6 information
Shows state about what is being redistributed between zebra and OSPF6.
JSON output can be obtained by appending "json" at the end.
-.. clicmd:: show ipv6 ospf6 redistribute [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] redistribute [json]
Shows the routes which are redistributed by the router. JSON output can
be obtained by appending 'json' at the end.
-.. clicmd:: show ipv6 ospf6 route [<intra-area|inter-area|external-1|external-2|X:X::X:X|X:X::X:X/M|detail|summary>] [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] route [<intra-area|inter-area|external-1|external-2|X:X::X:X|X:X::X:X/M|detail|summary>] [json]
This command displays the ospfv3 routing table as determined by the most
recent SPF calculations. Options are provided to view the different types
@@ -224,18 +220,18 @@ Showing OSPF6 information
and summary. JSON output can be obtained by appending 'json' to the end of
command.
-.. clicmd:: show ipv6 ospf6 route X:X::X:X/M match [detail] [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] route X:X::X:X/M match [detail] [json]
The additional match option will match the given address to the destination
of the routes, and return the result accordingly.
-.. clicmd:: show ipv6 ospf6 interface [IFNAME] prefix [detail|<X:X::X:X|X:X::X:X/M> [<match|detail>]] [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] interface [IFNAME] prefix [detail|<X:X::X:X|X:X::X:X/M> [<match|detail>]] [json]
This command shows the prefixes present in the interface routing table.
Interface name can also be given. JSON output can be obtained by appending
'json' to the end of command.
-.. clicmd:: show ipv6 ospf6 spf tree [json]
+.. clicmd:: show ipv6 ospf6 [vrf <NAME|all>] spf tree [json]
This commands shows the spf tree from the recent spf calculation with the
calling router as the root. If json is appended in the end, we can get the
@@ -309,3 +305,13 @@ Larger example with policy and various options set:
ipv6 access-class access6
exec-timeout 0 0
!
+
+
+Configuration Limits
+====================
+
+Ospf6d currently supports 100 interfaces addresses if MTU is set to
+default value, and 200 interface addresses if MTU is set to jumbo
+packet size or larger.
+
+
diff --git a/doc/user/pathd.rst b/doc/user/pathd.rst
index 5fc3837839..c40efffc88 100644
--- a/doc/user/pathd.rst
+++ b/doc/user/pathd.rst
@@ -28,25 +28,8 @@ documented elsewhere.
PCEP Support
============
-To build the PCC for pathd, the externall library `pceplib 1.2 <https://github.com/volta-networks/pceplib/tree/devel-1.2>`_ is required.
+A pceplib is included in the frr source tree and build by default.
-To build FRR with support for PCEP the following steps must be followed:
-
- - Checkout and build pceplib:
-
-```
-$ git clone https://github.com/volta-networks/pceplib
-$ cd pceplib
-$ make
-$ make install
-$ export PCEPLIB_ROOT=$PWD
-```
-
- - Configure FRR with the extra parameters:
-
-```
---enable-pcep LDFLAGS="-L${PCEPLIB_ROOT}/install/lib" CPPFLAGS="-I${PCEPLIB_ROOT}/install/include"
-```
To start pathd with pcep support the extra parameter `-M pathd_pcep` should be
passed to the pathd daemon.
@@ -62,10 +45,18 @@ Example:
debug pathd pcep basic
segment-routing
traffic-eng
+ mpls-te on
+ mpls-te import ospfv2
segment-list SL1
index 10 mpls label 16010
index 20 mpls label 16030
!
+ segment-list SL2
+ index 10 nai prefix 10.1.2.1/32 iface 1
+ index 20 nai adjacency 10.1.20.1 10.1.20.2
+ index 30 nai prefix 10.10.10.5/32 algorithm 0
+ index 40 mpls label 18001
+ !
policy color 1 endpoint 1.1.1.1
name default
binding-sid 4000
@@ -113,11 +104,22 @@ Configuration Commands
Configure segment routing traffic engineering.
+.. clicmd:: [no] mpls-te <on|off>
+
+ Activate/Deactivate use of internal Traffic Engineering Database
+
+.. clicmd:: [no] mpls-te import <ospfv2|ospfv3|isis>
+
+ Load data from the selected igp
+
.. clicmd:: segment-list NAME
Delete or start a segment list definition.
-.. clicmd:: index INDEX mpls label LABEL [nai node ADDRESS]
+.. clicmd:: index INDEX mpls label LABEL
+.. clicmd:: index INDEX nai adjacency A.B.C.D A.B.C.D
+.. clicmd:: index INDEX nai prefix A.B.C.D/M algorithm <0|1>
+.. clicmd:: index INDEX nai prefix A.B.C.D/M iface (0-65535)
Delete or specify a segment in a segment list definition.
diff --git a/doc/user/pim.rst b/doc/user/pim.rst
index 6b7cae2c5d..103760933c 100644
--- a/doc/user/pim.rst
+++ b/doc/user/pim.rst
@@ -154,20 +154,6 @@ Certain signals have special meanings to *pimd*.
urib-only
Lookup in the Unicast Rib only.
-.. clicmd:: ip msdp mesh-group [WORD]
-
- Create or Delete a multicast source discovery protocol mesh-group using
- [WORD] as the group name.
-
-.. clicmd:: ip msdp mesh-group WORD member A.B.C.D
-
- Attach or Delete A.B.C.D to the MSDP mesh group WORD specified.
-
-.. clicmd:: ip msdp mesh-group WORD source A.B.C.D
-
- For the address specified A.B.C.D use that as the source address for
- mesh group packets being sent.
-
.. clicmd:: ip igmp generate-query-once [version (2-3)]
Generate IGMP query (v2/v3) on user requirement. This will not depend on
@@ -308,27 +294,43 @@ caution. Most of the time this will not be necessary.
Multicast Source Discovery Protocol (MSDP) Configuration
========================================================
-.. clicmd:: ip msdp mesh-group [WORD] member A.B.C.D
+MSDP can be setup in different ways:
- Include a MSDP peer as a member of a MSDP mesh-group.
+* MSDP meshed-group: where all peers are connected with each other creating
+ a fully meshed network. SAs (source active) messages are not forwarded in
+ this mode because the origin is able to send SAs to all members.
-.. clicmd:: ip msdp mesh-group [WORD] source A.B.C.D
+ This setup is commonly used with anycast.
- Create a MSDP mesh-group, defining a name for it and an associated local source
- address.
+* MSDP peering: when there is one or more peers that are not fully meshed. SAs
+ may be forwarded depending on the result of filtering and RPF checks.
-.. clicmd:: ip msdp peer A.B.C.D source A.B.C.D
+ This setup is commonly consistent with BGP peerings (for RPF checks).
- Establish a MSDP connection with a peer.
+* MSDP default peer: there is only one peer and all SAs will be forwarded
+ there.
+.. note::
- Remove a MSDP peer member from a MSDP mesh-group.
+ MSDP default peer and SA filtering is not implemented.
- Delete a MSDP mesh-group.
+Commands available for MSDP:
+
+
+.. clicmd:: ip msdp mesh-group WORD member A.B.C.D
+
+ Create or update a mesh group to include the specified MSDP peer.
+
+.. clicmd:: ip msdp mesh-group WORD source A.B.C.D
+
+ Create or update a mesh group to set the source address used to connect to
+ peers.
+
+.. clicmd:: ip msdp peer A.B.C.D source A.B.C.D
+ Create a regular MSDP session with peer using the specified source address.
- Delete a MSDP peer connection.
.. _show-pim-information:
diff --git a/doc/user/ripd.rst b/doc/user/ripd.rst
index 83c8c93b1c..0a155bf489 100644
--- a/doc/user/ripd.rst
+++ b/doc/user/ripd.rst
@@ -236,11 +236,13 @@ Filtering RIP Routes
RIP routes can be filtered by a distribute-list.
-.. clicmd:: distribute-list ACCESS_LIST DIRECT IFNAME
+.. clicmd:: distribute-list [prefix] LIST <in|out> IFNAME
You can apply access lists to the interface with a `distribute-list` command.
- ACCESS_LIST is the access list name. DIRECT is ``in`` or ``out``. If DIRECT
- is ``in`` the access list is applied to input packets.
+ If prefix is specified LIST is a prefix-list. If prefix is not specified
+ then LIST is the access list name. `in` specifies packets being received,
+ and `out` specifies outgoing packets. Finally if an interface is specified
+ it will be applied against a specific interface.
The `distribute-list` command can be used to filter the RIP path.
`distribute-list` can apply access-lists to a chosen interface. First, one
@@ -261,13 +263,6 @@ RIP routes can be filtered by a distribute-list.
`distribute-list` can be applied to both incoming and outgoing data.
-.. clicmd:: distribute-list prefix PREFIX_LIST (in|out) IFNAME
-
- You can apply prefix lists to the interface with a `distribute-list`
- command. PREFIX_LIST is the prefix list name. Next is the direction of
- ``in`` or ``out``. If DIRECT is ``in`` the access list is applied to input
- packets.
-
.. _rip-metric-manipulation:
RIP Metric Manipulation
diff --git a/doc/user/ripngd.rst b/doc/user/ripngd.rst
index b273eb3bfa..c7ca22bf95 100644
--- a/doc/user/ripngd.rst
+++ b/doc/user/ripngd.rst
@@ -62,14 +62,34 @@ ripngd Terminal Mode Commands
ripngd Filtering Commands
=========================
-.. clicmd:: distribute-list ACCESS_LIST (in|out) IFNAME
+RIPng routes can be filtered by a distribute-list.
- You can apply an access-list to the interface using the `distribute-list`
- command. ACCESS_LIST is an access-list name. `direct` is ``in`` or
- ``out``. If `direct` is ``in``, the access-list is applied only to incoming
- packets.::
+.. clicmd:: distribute-list [prefix] LIST <in|out> IFNAME
- distribute-list local-only out sit1
+ You can apply access lists to the interface with a `distribute-list` command.
+ If prefix is specified LIST is a prefix-list. If prefix is not specified
+ then LIST is the access list name. `in` specifies packets being received,
+ and `out` specifies outgoing packets. Finally if an interface is specified
+ it will be applied against a specific interface.
+
+ The ``distribute-list`` command can be used to filter the RIPNG path.
+ ``distribute-list`` can apply access-lists to a chosen interface. First, one
+ should specify the access-list. Next, the name of the access-list is used in
+ the distribute-list command. For example, in the following configuration
+ ``eth0`` will permit only the paths that match the route 10.0.0.0/8
+
+ .. code-block:: frr
+
+ !
+ router ripng
+ distribute-list private in eth0
+ !
+ access-list private permit 10 10.0.0.0/8
+ access-list private deny any
+ !
+
+
+ `distribute-list` can be applied to both incoming and outgoing data.
Sample configuration
diff --git a/doc/user/sharp.rst b/doc/user/sharp.rst
index bef2748afa..0542a593ae 100644
--- a/doc/user/sharp.rst
+++ b/doc/user/sharp.rst
@@ -83,6 +83,11 @@ keyword. At present, no sharp commands will be preserved in the config.
Allow end user to dump associated data with the nexthop tracking that
may have been turned on.
+.. clicmd:: sharp watch [vrf NAME] redistribute ROUTETYPE
+
+ Allow end user to monitor redistributed routes of ROUTETYPE
+ origin.
+
.. clicmd:: sharp lsp [update] (0-100000) nexthop-group NAME [prefix A.B.C.D/M TYPE [instance (0-255)]]
Install an LSP using the specified in-label, with nexthops as
diff --git a/eigrpd/eigrp_main.c b/eigrpd/eigrp_main.c
index 0ed7e94968..b775c841f0 100644
--- a/eigrpd/eigrp_main.c
+++ b/eigrpd/eigrp_main.c
@@ -227,8 +227,6 @@ int main(int argc, char **argv, char **envp)
route_map_add_hook (eigrp_rmap_update);
route_map_delete_hook (eigrp_rmap_update);*/
/*if_rmap_init (EIGRP_NODE); */
- /* Distribute list install. */
- distribute_list_init(EIGRP_NODE);
frr_config_fork();
frr_run(master);
diff --git a/eigrpd/eigrp_metric.c b/eigrpd/eigrp_metric.c
index 2b05db71d5..ea62f9d1be 100644
--- a/eigrpd/eigrp_metric.c
+++ b/eigrpd/eigrp_metric.c
@@ -21,6 +21,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "eigrpd/eigrp_structs.h"
#include "eigrpd/eigrpd.h"
#include "eigrpd/eigrp_types.h"
diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c
index 0b37733990..39e384c121 100644
--- a/eigrpd/eigrp_packet.c
+++ b/eigrpd/eigrp_packet.c
@@ -572,9 +572,14 @@ int eigrp_read(struct thread *thread)
&& IS_DEBUG_EIGRP_TRANSMIT(0, PACKET_DETAIL))
eigrp_header_dump(eigrph);
- // if (MSG_OK != eigrp_packet_examin(eigrph, stream_get_endp(ibuf) -
- // stream_get_getp(ibuf)))
- // return -1;
+ if (ntohs(eigrph->ASNumber) != eigrp->AS) {
+ if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV))
+ zlog_debug(
+ "ignoring packet from router %u sent to %pI4, wrong AS Number received: %u",
+ ntohs(eigrph->vrid), &iph->ip_dst,
+ ntohs(eigrph->ASNumber));
+ return 0;
+ }
/* If incoming interface is passive one, ignore it. */
if (eigrp_if_is_passive(ei)) {
diff --git a/eigrpd/eigrp_routemap.c b/eigrpd/eigrp_routemap.c
index 5183e645e5..90913a5b28 100644
--- a/eigrpd/eigrp_routemap.c
+++ b/eigrpd/eigrp_routemap.c
@@ -1130,6 +1130,48 @@ ALIAS(no_set_tag, no_set_tag_val_cmd, "no set tag (0-65535)", NO_STR SET_STR
"Tag value for routing protocol\n"
"Tag value\n")
+DEFUN (eigrp_distribute_list,
+ eigrp_distribute_list_cmd,
+ "distribute-list [prefix] WORD <in|out> [WORD]",
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[1]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_parser(prefix, true, argv[2 + prefix]->text,
+ argv[1 + prefix]->arg, ifname);
+}
+
+DEFUN (eigrp_no_distribute_list,
+ eigrp_no_distribute_list_cmd,
+ "no distribute-list [prefix] WORD <in|out> [WORD]",
+ NO_STR
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[2]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_no_parser(vty, prefix, true,
+ argv[3 + prefix]->text,
+ argv[2 + prefix]->arg, ifname);
+}
+
/* Route-map init */
void eigrp_route_map_init()
@@ -1139,6 +1181,9 @@ void eigrp_route_map_init()
route_map_add_hook(eigrp_route_map_update);
route_map_delete_hook(eigrp_route_map_update);
+ install_element(EIGRP_NODE, &eigrp_distribute_list_cmd);
+ install_element(EIGRP_NODE, &eigrp_no_distribute_list_cmd);
+
/*route_map_install_match (&route_match_metric_cmd);
route_map_install_match (&route_match_interface_cmd);*/
/*route_map_install_match (&route_match_ip_next_hop_cmd);
diff --git a/include/linux/if_packet.h b/include/linux/if_packet.h
new file mode 100644
index 0000000000..057edb33dc
--- /dev/null
+++ b/include/linux/if_packet.h
@@ -0,0 +1,16 @@
+#ifndef __LINUX_IF_PACKET_H
+#define __LINUX_IF_PACKET_H
+
+#include <linux/types.h>
+
+struct sockaddr_ll {
+ unsigned short sll_family;
+ __be16 sll_protocol;
+ int sll_ifindex;
+ unsigned short sll_hatype;
+ unsigned char sll_pkttype;
+ unsigned char sll_halen;
+ unsigned char sll_addr[8];
+};
+
+#endif
diff --git a/include/linux/if_tunnel.h b/include/linux/if_tunnel.h
new file mode 100644
index 0000000000..982a1b60d0
--- /dev/null
+++ b/include/linux/if_tunnel.h
@@ -0,0 +1,71 @@
+#ifndef _IF_TUNNEL_H_
+#define _IF_TUNNEL_H_
+
+#include <linux/types.h>
+#include <linux/if.h>
+#include <linux/ip.h>
+#include <linux/in6.h>
+#include <asm/byteorder.h>
+
+
+#define SIOCGETTUNNEL (SIOCDEVPRIVATE + 0)
+#define SIOCADDTUNNEL (SIOCDEVPRIVATE + 1)
+#define SIOCDELTUNNEL (SIOCDEVPRIVATE + 2)
+#define SIOCCHGTUNNEL (SIOCDEVPRIVATE + 3)
+#define SIOCGETPRL (SIOCDEVPRIVATE + 4)
+#define SIOCADDPRL (SIOCDEVPRIVATE + 5)
+#define SIOCDELPRL (SIOCDEVPRIVATE + 6)
+#define SIOCCHGPRL (SIOCDEVPRIVATE + 7)
+
+#define GRE_CSUM __cpu_to_be16(0x8000)
+#define GRE_ROUTING __cpu_to_be16(0x4000)
+#define GRE_KEY __cpu_to_be16(0x2000)
+#define GRE_SEQ __cpu_to_be16(0x1000)
+#define GRE_STRICT __cpu_to_be16(0x0800)
+#define GRE_REC __cpu_to_be16(0x0700)
+#define GRE_FLAGS __cpu_to_be16(0x00F8)
+#define GRE_VERSION __cpu_to_be16(0x0007)
+
+struct ip_tunnel_parm {
+ char name[IFNAMSIZ];
+ int link;
+ __be16 i_flags;
+ __be16 o_flags;
+ __be32 i_key;
+ __be32 o_key;
+ struct iphdr iph;
+};
+
+/* SIT-mode i_flags */
+#define SIT_ISATAP 0x0001
+
+struct ip_tunnel_prl {
+ __be32 addr;
+ __u16 flags;
+ __u16 __reserved;
+ __u32 datalen;
+ __u32 __reserved2;
+ /* data follows */
+};
+
+/* PRL flags */
+#define PRL_DEFAULT 0x0001
+
+enum {
+ IFLA_GRE_UNSPEC,
+ IFLA_GRE_LINK,
+ IFLA_GRE_IFLAGS,
+ IFLA_GRE_OFLAGS,
+ IFLA_GRE_IKEY,
+ IFLA_GRE_OKEY,
+ IFLA_GRE_LOCAL,
+ IFLA_GRE_REMOTE,
+ IFLA_GRE_TTL,
+ IFLA_GRE_TOS,
+ IFLA_GRE_PMTUDISC,
+ __IFLA_GRE_MAX,
+};
+
+#define IFLA_GRE_MAX (__IFLA_GRE_MAX - 1)
+
+#endif /* _IF_TUNNEL_H_ */
diff --git a/isisd/isis_adjacency.h b/isisd/isis_adjacency.h
index 754345c008..b7fab7ae1e 100644
--- a/isisd/isis_adjacency.h
+++ b/isisd/isis_adjacency.h
@@ -105,7 +105,7 @@ struct isis_adjacency {
struct isis_circuit *circuit; /* back pointer */
uint16_t *mt_set; /* Topologies this adjacency is valid for */
unsigned int mt_count; /* Number of entries in mt_set */
- struct bfd_session *bfd_session;
+ struct bfd_session_params *bfd_session;
struct list *adj_sids; /* Segment Routing Adj-SIDs. */
uint32_t snmp_idx;
struct listnode *snmp_list_node;
diff --git a/isisd/isis_bfd.c b/isisd/isis_bfd.c
index 89f1ed0ba3..ed4d2c6539 100644
--- a/isisd/isis_bfd.c
+++ b/isisd/isis_bfd.c
@@ -34,319 +34,32 @@
DEFINE_MTYPE_STATIC(ISISD, BFD_SESSION, "ISIS BFD Session");
-struct bfd_session {
- int family;
- union g_addr dst_ip;
- union g_addr src_ip;
- int status;
-};
-
-static struct bfd_session *bfd_session_new(int family, union g_addr *dst_ip,
- union g_addr *src_ip)
-{
- struct bfd_session *rv;
-
- rv = XCALLOC(MTYPE_BFD_SESSION, sizeof(*rv));
- rv->family = family;
- rv->dst_ip = *dst_ip;
- rv->src_ip = *src_ip;
- return rv;
-}
-
-static void bfd_session_free(struct bfd_session **session)
-{
- if (!*session)
- return;
-
- XFREE(MTYPE_BFD_SESSION, *session);
-}
-
-static bool bfd_session_same(const struct bfd_session *session, int family,
- const union g_addr *src, const union g_addr *dst)
-{
- if (session->family != family)
- return false;
-
- switch (session->family) {
- case AF_INET:
- if (!IPV4_ADDR_SAME(&session->dst_ip.ipv4, &dst->ipv4))
- return false;
- if (!IPV4_ADDR_SAME(&session->src_ip.ipv4, &src->ipv4))
- return false;
- break;
- case AF_INET6:
- if (!IPV6_ADDR_SAME(&session->dst_ip.ipv6, &dst->ipv6))
- return false;
- if (!IPV6_ADDR_SAME(&session->src_ip.ipv6, &src->ipv6))
- return false;
- break;
- default:
- flog_err(EC_LIB_DEVELOPMENT, "%s: unknown address-family: %u",
- __func__, session->family);
- exit(1);
- }
-
- return true;
-}
-
-static void bfd_adj_event(struct isis_adjacency *adj, struct prefix *dst,
- int new_status)
-{
- if (!adj->bfd_session) {
- if (IS_DEBUG_BFD)
- zlog_debug(
- "ISIS-BFD: Ignoring update for adjacency with %s, could not find bfd session on the adjacency",
- isis_adj_name(adj));
- return;
- }
-
- if (adj->bfd_session->family != dst->family) {
- if (IS_DEBUG_BFD)
- zlog_debug(
- "ISIS-BFD: Ignoring update for adjacency with %s, address family does not match the family on the adjacency",
- isis_adj_name(adj));
- return;
- }
-
- switch (adj->bfd_session->family) {
- case AF_INET:
- if (!IPV4_ADDR_SAME(&adj->bfd_session->dst_ip.ipv4,
- &dst->u.prefix4)) {
- if (IS_DEBUG_BFD)
- zlog_debug(
- "ISIS-BFD: Ignoring update for adjacency with %s, IPv4 address does not match",
- isis_adj_name(adj));
- return;
- }
- break;
- case AF_INET6:
- if (!IPV6_ADDR_SAME(&adj->bfd_session->dst_ip.ipv6,
- &dst->u.prefix6)) {
- if (IS_DEBUG_BFD)
- zlog_debug(
- "ISIS-BFD: Ignoring update for adjacency with %s, IPv6 address does not match",
- isis_adj_name(adj));
- return;
- }
- break;
- default:
- flog_err(EC_LIB_DEVELOPMENT, "%s: unknown address-family: %u",
- __func__, adj->bfd_session->family);
- exit(1);
- }
-
- int old_status = adj->bfd_session->status;
-
- BFD_SET_CLIENT_STATUS(adj->bfd_session->status, new_status);
-
- if (old_status == new_status) {
- if (IS_DEBUG_BFD)
- zlog_debug(
- "ISIS-BFD: Ignoring update for adjacency with %s, new status matches current known status",
- isis_adj_name(adj));
- return;
- }
-
- if (IS_DEBUG_BFD) {
- char dst_str[INET6_ADDRSTRLEN];
-
- inet_ntop(adj->bfd_session->family, &adj->bfd_session->dst_ip,
- dst_str, sizeof(dst_str));
- zlog_debug("ISIS-BFD: Peer %s on %s changed from %s to %s",
- dst_str, adj->circuit->interface->name,
- bfd_get_status_str(old_status),
- bfd_get_status_str(new_status));
- }
-
- if (old_status != BFD_STATUS_UP
- || new_status != BFD_STATUS_DOWN) {
- return;
- }
-
- adj->circuit->area->bfd_signalled_down = true;
-
- isis_adj_state_change(&adj, ISIS_ADJ_DOWN, "bfd session went down");
-}
-
-static int isis_bfd_interface_dest_update(ZAPI_CALLBACK_ARGS)
-{
- struct interface *ifp;
- struct prefix dst_ip, src_ip;
- int status;
-
- ifp = bfd_get_peer_info(zclient->ibuf, &dst_ip, &src_ip, &status, NULL,
- vrf_id);
- if (!ifp || (dst_ip.family != AF_INET && dst_ip.family != AF_INET6))
- return 0;
-
- if (IS_DEBUG_BFD) {
- char dst_buf[INET6_ADDRSTRLEN];
-
- inet_ntop(dst_ip.family, &dst_ip.u.prefix, dst_buf,
- sizeof(dst_buf));
-
- zlog_debug("ISIS-BFD: Received update for %s on %s: Changed state to %s",
- dst_buf, ifp->name, bfd_get_status_str(status));
- }
-
- struct isis_circuit *circuit = circuit_scan_by_ifp(ifp);
-
- if (!circuit) {
- if (IS_DEBUG_BFD)
- zlog_debug(
- "ISIS-BFD: Ignoring update, could not find circuit");
- return 0;
- }
-
- if (circuit->circ_type == CIRCUIT_T_BROADCAST) {
- for (int level = ISIS_LEVEL1; level <= ISIS_LEVEL2; level++) {
- struct list *adjdb = circuit->u.bc.adjdb[level - 1];
-
- struct listnode *node, *nnode;
- struct isis_adjacency *adj;
-
- for (ALL_LIST_ELEMENTS(adjdb, node, nnode, adj))
- bfd_adj_event(adj, &dst_ip, status);
- }
- } else if (circuit->circ_type == CIRCUIT_T_P2P) {
- if (circuit->u.p2p.neighbor) {
- bfd_adj_event(circuit->u.p2p.neighbor,
- &dst_ip, status);
- }
- }
-
- return 0;
-}
-
-static int isis_bfd_nbr_replay(ZAPI_CALLBACK_ARGS)
+static void adj_bfd_cb(struct bfd_session_params *bsp,
+ const struct bfd_session_status *bss, void *arg)
{
- bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER, vrf_id);
-
- struct listnode *anode;
- struct isis_area *area;
- struct isis *isis = NULL;
-
- isis = isis_lookup_by_vrfid(vrf_id);
-
- if (isis == NULL) {
- zlog_warn(" %s : ISIS routing instance not found", __func__);
- return -1;
- }
-
- if (IS_DEBUG_BFD)
- zlog_debug("ISIS-BFD: Got neighbor replay request, resending neighbors.");
-
- for (ALL_LIST_ELEMENTS_RO(isis->area_list, anode, area)) {
- struct listnode *cnode;
- struct isis_circuit *circuit;
-
- for (ALL_LIST_ELEMENTS_RO(area->circuit_list, cnode, circuit))
- isis_bfd_circuit_cmd(circuit, ZEBRA_BFD_DEST_UPDATE);
- }
+ struct isis_adjacency *adj = arg;
if (IS_DEBUG_BFD)
- zlog_debug("ISIS-BFD: Done with replay.");
-
- return 0;
-}
-
-static void (*orig_zebra_connected)(struct zclient *);
-static void isis_bfd_zebra_connected(struct zclient *zclient)
-{
- if (orig_zebra_connected)
- orig_zebra_connected(zclient);
-
- bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER, VRF_DEFAULT);
-}
-
-static void bfd_debug(int family, union g_addr *dst, union g_addr *src,
- const char *interface, int command)
-{
- if (!(IS_DEBUG_BFD))
- return;
-
- char dst_str[INET6_ADDRSTRLEN];
- char src_str[INET6_ADDRSTRLEN];
-
- inet_ntop(family, dst, dst_str, sizeof(dst_str));
- inet_ntop(family, src, src_str, sizeof(src_str));
-
- const char *command_str;
-
- switch (command) {
- case ZEBRA_BFD_DEST_REGISTER:
- command_str = "Register";
- break;
- case ZEBRA_BFD_DEST_DEREGISTER:
- command_str = "Deregister";
- break;
- case ZEBRA_BFD_DEST_UPDATE:
- command_str = "Update";
- break;
- default:
- command_str = "Unknown-Cmd";
- break;
- }
-
- zlog_debug("ISIS-BFD: %s peer %s on %s (src %s)",
- command_str, dst_str, interface, src_str);
-}
-
-static void bfd_command(int command, struct bfd_info *bfd_info, int family,
- const void *dst_ip, const void *src_ip,
- const char *if_name)
-{
- struct bfd_session_arg args = {};
- size_t addrlen;
-
- args.cbit = 1;
- args.family = family;
- args.vrf_id = VRF_DEFAULT;
- args.command = command;
- args.bfd_info = bfd_info;
- if (args.bfd_info) {
- args.min_rx = bfd_info->required_min_rx;
- args.min_tx = bfd_info->desired_min_tx;
- args.detection_multiplier = bfd_info->detect_mult;
- if (bfd_info->profile[0]) {
- args.profilelen = strlen(bfd_info->profile);
- strlcpy(args.profile, bfd_info->profile,
- sizeof(args.profile));
- }
- }
-
- addrlen = family == AF_INET ? sizeof(struct in_addr)
- : sizeof(struct in6_addr);
- memcpy(&args.dst, dst_ip, addrlen);
- if (src_ip)
- memcpy(&args.src, src_ip, addrlen);
+ zlog_debug(
+ "ISIS-BFD: BFD changed status for adjacency %s old %s new %s",
+ isis_adj_name(adj),
+ bfd_get_status_str(bss->previous_state),
+ bfd_get_status_str(bss->state));
- if (if_name) {
- strlcpy(args.ifname, if_name, sizeof(args.ifname));
- args.ifnamelen = strlen(args.ifname);
+ if (bss->state == BFD_STATUS_DOWN
+ && bss->previous_state == BFD_STATUS_UP) {
+ adj->circuit->area->bfd_signalled_down = true;
+ isis_adj_state_change(&adj, ISIS_ADJ_DOWN,
+ "bfd session went down");
}
-
- zclient_bfd_command(zclient, &args);
}
static void bfd_handle_adj_down(struct isis_adjacency *adj)
{
- if (!adj->bfd_session)
- return;
-
- bfd_debug(adj->bfd_session->family, &adj->bfd_session->dst_ip,
- &adj->bfd_session->src_ip, adj->circuit->interface->name,
- ZEBRA_BFD_DEST_DEREGISTER);
-
- bfd_command(ZEBRA_BFD_DEST_DEREGISTER, NULL, adj->bfd_session->family,
- &adj->bfd_session->dst_ip, &adj->bfd_session->src_ip,
- (adj->circuit->interface) ? adj->circuit->interface->name
- : NULL);
-
- bfd_session_free(&adj->bfd_session);
+ bfd_sess_free(&adj->bfd_session);
}
-static void bfd_handle_adj_up(struct isis_adjacency *adj, int command)
+static void bfd_handle_adj_up(struct isis_adjacency *adj)
{
struct isis_circuit *circuit = adj->circuit;
int family;
@@ -355,10 +68,10 @@ static void bfd_handle_adj_up(struct isis_adjacency *adj, int command)
struct list *local_ips;
struct prefix *local_ip;
- if (!circuit->bfd_info) {
+ if (!circuit->bfd_config.enabled) {
if (IS_DEBUG_BFD)
zlog_debug(
- "ISIS-BFD: skipping BFD initialization on adjacency with %s because there is no bfd_info in the circuit",
+ "ISIS-BFD: skipping BFD initialization on adjacency with %s because BFD is not enabled for the circuit",
isis_adj_name(adj));
goto out;
}
@@ -407,28 +120,20 @@ static void bfd_handle_adj_up(struct isis_adjacency *adj, int command)
} else
goto out;
- if (adj->bfd_session) {
- if (bfd_session_same(adj->bfd_session, family, &src_ip,
- &dst_ip))
- bfd_handle_adj_down(adj);
- }
-
- if (!adj->bfd_session) {
- if (IS_DEBUG_BFD)
- zlog_debug(
- "ISIS-BFD: creating BFD session for adjacency with %s",
- isis_adj_name(adj));
- adj->bfd_session = bfd_session_new(family, &dst_ip, &src_ip);
- }
-
- bfd_debug(adj->bfd_session->family, &adj->bfd_session->dst_ip,
- &adj->bfd_session->src_ip, circuit->interface->name, command);
-
- bfd_command(command, circuit->bfd_info, family,
- &adj->bfd_session->dst_ip, &adj->bfd_session->src_ip,
- (adj->circuit->interface) ? adj->circuit->interface->name
- : NULL);
+ if (adj->bfd_session == NULL)
+ adj->bfd_session = bfd_sess_new(adj_bfd_cb, adj);
+ bfd_sess_set_timers(adj->bfd_session, BFD_DEF_DETECT_MULT,
+ BFD_DEF_MIN_RX, BFD_DEF_MIN_TX);
+ if (family == AF_INET)
+ bfd_sess_set_ipv4_addrs(adj->bfd_session, &src_ip.ipv4,
+ &dst_ip.ipv4);
+ else
+ bfd_sess_set_ipv6_addrs(adj->bfd_session, &src_ip.ipv6,
+ &dst_ip.ipv6);
+ bfd_sess_set_interface(adj->bfd_session, adj->circuit->interface->name);
+ bfd_sess_set_profile(adj->bfd_session, circuit->bfd_config.profile);
+ bfd_sess_install(adj->bfd_session);
return;
out:
bfd_handle_adj_down(adj);
@@ -437,23 +142,21 @@ out:
static int bfd_handle_adj_state_change(struct isis_adjacency *adj)
{
if (adj->adj_state == ISIS_ADJ_UP)
- bfd_handle_adj_up(adj, ZEBRA_BFD_DEST_REGISTER);
+ bfd_handle_adj_up(adj);
else
bfd_handle_adj_down(adj);
return 0;
}
-static void bfd_adj_cmd(struct isis_adjacency *adj, int command)
+static void bfd_adj_cmd(struct isis_adjacency *adj)
{
- if (adj->adj_state == ISIS_ADJ_UP
- && command != ZEBRA_BFD_DEST_DEREGISTER) {
- bfd_handle_adj_up(adj, command);
- } else {
+ if (adj->adj_state == ISIS_ADJ_UP && adj->circuit->bfd_config.enabled)
+ bfd_handle_adj_up(adj);
+ else
bfd_handle_adj_down(adj);
- }
}
-void isis_bfd_circuit_cmd(struct isis_circuit *circuit, int command)
+void isis_bfd_circuit_cmd(struct isis_circuit *circuit)
{
switch (circuit->circ_type) {
case CIRCUIT_T_BROADCAST:
@@ -464,45 +167,18 @@ void isis_bfd_circuit_cmd(struct isis_circuit *circuit, int command)
struct isis_adjacency *adj;
for (ALL_LIST_ELEMENTS_RO(adjdb, node, adj))
- bfd_adj_cmd(adj, command);
+ bfd_adj_cmd(adj);
}
break;
case CIRCUIT_T_P2P:
if (circuit->u.p2p.neighbor)
- bfd_adj_cmd(circuit->u.p2p.neighbor, command);
+ bfd_adj_cmd(circuit->u.p2p.neighbor);
break;
default:
break;
}
}
-void isis_bfd_circuit_param_set(struct isis_circuit *circuit, uint32_t min_rx,
- uint32_t min_tx, uint32_t detect_mult,
- const char *profile, int defaults)
-{
- int command = 0;
-
- bfd_set_param(&circuit->bfd_info, min_rx, min_tx, detect_mult, profile,
- defaults, &command);
-
- if (command)
- isis_bfd_circuit_cmd(circuit, command);
-}
-
-#ifdef FABRICD
-static int bfd_circuit_write_settings(struct isis_circuit *circuit,
- struct vty *vty)
-{
- struct bfd_info *bfd_info = circuit->bfd_info;
-
- if (!bfd_info)
- return 0;
-
- vty_out(vty, " %s bfd\n", PROTO_NAME);
- return 1;
-}
-#endif
-
static int bfd_handle_adj_ip_enabled(struct isis_adjacency *adj, int family)
{
@@ -515,7 +191,7 @@ static int bfd_handle_adj_ip_enabled(struct isis_adjacency *adj, int family)
if (adj->adj_state != ISIS_ADJ_UP)
return 0;
- bfd_handle_adj_up(adj, ZEBRA_BFD_DEST_REGISTER);
+ bfd_handle_adj_up(adj);
return 0;
}
@@ -535,26 +211,17 @@ static int bfd_handle_circuit_add_addr(struct isis_circuit *circuit)
if (adj->adj_state != ISIS_ADJ_UP)
continue;
- bfd_handle_adj_up(adj, ZEBRA_BFD_DEST_REGISTER);
+ bfd_handle_adj_up(adj);
}
return 0;
}
-void isis_bfd_init(void)
+void isis_bfd_init(struct thread_master *tm)
{
- bfd_gbl_init();
-
- orig_zebra_connected = zclient->zebra_connected;
- zclient->zebra_connected = isis_bfd_zebra_connected;
- zclient->interface_bfd_dest_update = isis_bfd_interface_dest_update;
- zclient->bfd_dest_replay = isis_bfd_nbr_replay;
- hook_register(isis_adj_state_change_hook,
- bfd_handle_adj_state_change);
-#ifdef FABRICD
- hook_register(isis_circuit_config_write,
- bfd_circuit_write_settings);
-#endif
+ bfd_protocol_integration_init(zclient, tm);
+
+ hook_register(isis_adj_state_change_hook, bfd_handle_adj_state_change);
hook_register(isis_adj_ip_enabled_hook, bfd_handle_adj_ip_enabled);
hook_register(isis_circuit_add_addr_hook, bfd_handle_circuit_add_addr);
}
diff --git a/isisd/isis_bfd.h b/isisd/isis_bfd.h
index 6ce630688c..1dec7ae20f 100644
--- a/isisd/isis_bfd.h
+++ b/isisd/isis_bfd.h
@@ -20,12 +20,10 @@
#define ISIS_BFD_H
struct isis_circuit;
+struct thread_master;
-void isis_bfd_circuit_cmd(struct isis_circuit *circuit, int command);
-void isis_bfd_circuit_param_set(struct isis_circuit *circuit, uint32_t min_rx,
- uint32_t min_tx, uint32_t detect_mult,
- const char *profile, int defaults);
-void isis_bfd_init(void);
+void isis_bfd_circuit_cmd(struct isis_circuit *circuit);
+void isis_bfd_init(struct thread_master *tm);
#endif
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index 7fd9c07ed2..2c51f21d77 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -205,6 +205,7 @@ void isis_circuit_del(struct isis_circuit *circuit)
isis_lfa_excluded_ifaces_clear(circuit, ISIS_LEVEL1);
isis_lfa_excluded_ifaces_clear(circuit, ISIS_LEVEL2);
+ XFREE(MTYPE_TMP, circuit->bfd_config.profile);
XFREE(MTYPE_ISIS_CIRCUIT, circuit->tag);
/* and lastly the circuit itself */
@@ -1282,6 +1283,10 @@ static int isis_interface_config_write(struct vty *vty)
circuit->passwd.passwd);
write++;
}
+ if (circuit->bfd_config.enabled) {
+ vty_out(vty, " " PROTO_NAME " bfd\n");
+ write++;
+ }
write += hook_call(isis_circuit_config_write,
circuit, vty);
}
diff --git a/isisd/isis_circuit.h b/isisd/isis_circuit.h
index 45c0a7e0ed..e7b7a2434d 100644
--- a/isisd/isis_circuit.h
+++ b/isisd/isis_circuit.h
@@ -70,8 +70,6 @@ struct isis_p2p_info {
struct thread *t_send_p2p_hello; /* send P2P IIHs in this thread */
};
-struct bfd_info;
-
struct isis_circuit_arg {
int level;
struct isis_circuit *circuit;
@@ -144,7 +142,10 @@ struct isis_circuit {
#define ISIS_CIRCUIT_FLAPPED_AFTER_SPF 0x01
uint8_t flags;
bool disable_threeway_adj;
- struct bfd_info *bfd_info;
+ struct {
+ bool enabled;
+ char *profile;
+ } bfd_config;
struct ldp_sync_info *ldp_sync_info;
bool lfa_protection[ISIS_LEVELS];
bool rlfa_protection[ISIS_LEVELS];
@@ -152,6 +153,7 @@ struct isis_circuit {
struct hash *lfa_excluded_ifaces[ISIS_LEVELS];
bool tilfa_protection[ISIS_LEVELS];
bool tilfa_node_protection[ISIS_LEVELS];
+ bool tilfa_link_fallback[ISIS_LEVELS];
/*
* Counters as in 10589--11.2.5.9
*/
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
index 3e719df4bb..14fa414c52 100644
--- a/isisd/isis_cli.c
+++ b/isisd/isis_cli.c
@@ -363,7 +363,7 @@ DEFPY_YANG(isis_bfd,
*/
DEFPY_YANG(isis_bfd_profile,
isis_bfd_profile_cmd,
- "[no] isis bfd profile WORD",
+ "[no] isis bfd profile BFDPROF$profile",
NO_STR PROTO_HELP
"Enable BFD support\n"
"Use a pre-configured profile\n"
@@ -378,8 +378,14 @@ DEFPY_YANG(isis_bfd_profile,
return CMD_SUCCESS;
}
- nb_cli_enqueue_change(vty, "./frr-isisd:isis/bfd-monitoring/profile",
- NB_OP_MODIFY, no ? NULL : profile);
+ if (no)
+ nb_cli_enqueue_change(vty,
+ "./frr-isisd:isis/bfd-monitoring/profile",
+ NB_OP_DESTROY, NULL);
+ else
+ nb_cli_enqueue_change(vty,
+ "./frr-isisd:isis/bfd-monitoring/profile",
+ NB_OP_MODIFY, profile);
return nb_cli_apply_changes(vty, NULL);
}
@@ -387,18 +393,16 @@ DEFPY_YANG(isis_bfd_profile,
void cli_show_ip_isis_bfd_monitoring(struct vty *vty, struct lyd_node *dnode,
bool show_defaults)
{
- const char *profile;
-
- if (!yang_dnode_get_bool(dnode, "./enabled"))
- vty_out(vty, " no");
-
- vty_out(vty, " isis bfd\n");
-
- if (yang_dnode_exists(dnode, "./profile")) {
- profile = yang_dnode_get_string(dnode, "./profile");
- if (profile[0] != '\0')
- vty_out(vty, " isis bfd profile %s\n", profile);
+ if (!yang_dnode_get_bool(dnode, "./enabled")) {
+ if (show_defaults)
+ vty_out(vty, " no isis bfd\n");
+ } else {
+ vty_out(vty, " isis bfd\n");
}
+
+ if (yang_dnode_exists(dnode, "./profile"))
+ vty_out(vty, " isis bfd profile %s\n",
+ yang_dnode_get_string(dnode, "./profile"));
}
/*
@@ -2647,6 +2651,7 @@ void cli_show_ip_isis_frr(struct vty *vty, struct lyd_node *dnode,
{
bool l1_enabled, l2_enabled;
bool l1_node_protection, l2_node_protection;
+ bool l1_link_fallback, l2_link_fallback;
/* Classic LFA */
l1_enabled = yang_dnode_get_bool(dnode, "./level-1/lfa/enable");
@@ -2692,13 +2697,21 @@ void cli_show_ip_isis_frr(struct vty *vty, struct lyd_node *dnode,
yang_dnode_get_bool(dnode, "./level-1/ti-lfa/node-protection");
l2_node_protection =
yang_dnode_get_bool(dnode, "./level-2/ti-lfa/node-protection");
+ l1_link_fallback =
+ yang_dnode_get_bool(dnode, "./level-1/ti-lfa/link-fallback");
+ l2_link_fallback =
+ yang_dnode_get_bool(dnode, "./level-2/ti-lfa/link-fallback");
+
if (l1_enabled || l2_enabled) {
if (l1_enabled == l2_enabled
- && l1_node_protection == l2_node_protection) {
+ && l1_node_protection == l2_node_protection
+ && l1_link_fallback == l2_link_fallback) {
vty_out(vty, " isis fast-reroute ti-lfa");
if (l1_node_protection)
vty_out(vty, " node-protection");
+ if (l1_link_fallback)
+ vty_out(vty, " link-fallback");
vty_out(vty, "\n");
} else {
if (l1_enabled) {
@@ -2706,6 +2719,8 @@ void cli_show_ip_isis_frr(struct vty *vty, struct lyd_node *dnode,
" isis fast-reroute ti-lfa level-1");
if (l1_node_protection)
vty_out(vty, " node-protection");
+ if (l1_link_fallback)
+ vty_out(vty, " link-fallback");
vty_out(vty, "\n");
}
if (l2_enabled) {
@@ -2713,6 +2728,8 @@ void cli_show_ip_isis_frr(struct vty *vty, struct lyd_node *dnode,
" isis fast-reroute ti-lfa level-2");
if (l2_node_protection)
vty_out(vty, " node-protection");
+ if (l2_link_fallback)
+ vty_out(vty, " link-fallback");
vty_out(vty, "\n");
}
}
@@ -2917,14 +2934,15 @@ void cli_show_frr_remote_lfa_max_metric(struct vty *vty, struct lyd_node *dnode,
* XPath: /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-{1,2}/ti-lfa/enable
*/
DEFPY(isis_ti_lfa, isis_ti_lfa_cmd,
- "[no] isis fast-reroute ti-lfa [level-1|level-2]$level [node-protection$node_protection]",
+ "[no] isis fast-reroute ti-lfa [level-1|level-2]$level [node-protection$node_protection [link-fallback$link_fallback]]",
NO_STR
"IS-IS routing protocol\n"
"Interface IP Fast-reroute configuration\n"
"Enable TI-LFA computation\n"
"Enable TI-LFA computation for Level 1 only\n"
"Enable TI-LFA computation for Level 2 only\n"
- "Protect against node failures\n")
+ "Protect against node failures\n"
+ "Enable link-protection fallback\n")
{
if (!level || strmatch(level, "level-1")) {
if (no) {
@@ -2936,6 +2954,10 @@ DEFPY(isis_ti_lfa, isis_ti_lfa_cmd,
vty,
"./frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection",
NB_OP_MODIFY, "false");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-1/ti-lfa/link-fallback",
+ NB_OP_MODIFY, "false");
} else {
nb_cli_enqueue_change(
vty,
@@ -2946,6 +2968,10 @@ DEFPY(isis_ti_lfa, isis_ti_lfa_cmd,
"./frr-isisd:isis/fast-reroute/level-1/ti-lfa/node-protection",
NB_OP_MODIFY,
node_protection ? "true" : "false");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-1/ti-lfa/link-fallback",
+ NB_OP_MODIFY, link_fallback ? "true" : "false");
}
}
if (!level || strmatch(level, "level-2")) {
@@ -2958,6 +2984,10 @@ DEFPY(isis_ti_lfa, isis_ti_lfa_cmd,
vty,
"./frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection",
NB_OP_MODIFY, "false");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-2/ti-lfa/link-fallback",
+ NB_OP_MODIFY, "false");
} else {
nb_cli_enqueue_change(
vty,
@@ -2968,6 +2998,10 @@ DEFPY(isis_ti_lfa, isis_ti_lfa_cmd,
"./frr-isisd:isis/fast-reroute/level-2/ti-lfa/node-protection",
NB_OP_MODIFY,
node_protection ? "true" : "false");
+ nb_cli_enqueue_change(
+ vty,
+ "./frr-isisd:isis/fast-reroute/level-2/ti-lfa/link-fallback",
+ NB_OP_MODIFY, link_fallback ? "true" : "false");
}
}
diff --git a/isisd/isis_lfa.c b/isisd/isis_lfa.c
index b535924e93..e033c28fef 100644
--- a/isisd/isis_lfa.c
+++ b/isisd/isis_lfa.c
@@ -2258,6 +2258,11 @@ static void isis_spf_run_tilfa(struct isis_area *area,
spftree_pc_node = isis_tilfa_compute(area, spftree,
spftree_reverse, resource);
isis_spftree_del(spftree_pc_node);
+
+ /* don't do link protection unless link-fallback is configured
+ */
+ if (!circuit->tilfa_link_fallback[spftree->level - 1])
+ return;
}
/* Compute link protecting repair paths. */
diff --git a/isisd/isis_main.c b/isisd/isis_main.c
index c03cedb187..c93bbb83af 100644
--- a/isisd/isis_main.c
+++ b/isisd/isis_main.c
@@ -269,7 +269,7 @@ int main(int argc, char **argv, char **envp)
isis_global_instance_create(VRF_DEFAULT_NAME);
isis_zebra_init(master, instance);
- isis_bfd_init();
+ isis_bfd_init(master);
isis_ldp_sync_init();
fabricd_init();
diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c
index 4eac8de2cb..ecad16229c 100644
--- a/isisd/isis_nb.c
+++ b/isisd/isis_nb.c
@@ -978,6 +978,12 @@ const struct frr_yang_module_info frr_isisd_info = {
}
},
{
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/link-fallback",
+ .cbs = {
+ .modify = lib_interface_isis_fast_reroute_level_1_ti_lfa_link_fallback_modify,
+ }
+ },
+ {
.xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/lfa/enable",
.cbs = {
.modify = lib_interface_isis_fast_reroute_level_2_lfa_enable_modify,
@@ -1018,6 +1024,12 @@ const struct frr_yang_module_info frr_isisd_info = {
}
},
{
+ .xpath = "/frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/link-fallback",
+ .cbs = {
+ .modify = lib_interface_isis_fast_reroute_level_2_ti_lfa_link_fallback_modify,
+ }
+ },
+ {
.xpath = "/frr-interface:lib/interface/state/frr-isisd:isis",
.cbs = {
.get_elem = lib_interface_state_isis_get_elem,
diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h
index 94aa00c975..0c2f7b6b7e 100644
--- a/isisd/isis_nb.h
+++ b/isisd/isis_nb.h
@@ -319,6 +319,8 @@ int lib_interface_isis_fast_reroute_level_1_ti_lfa_enable_modify(
struct nb_cb_modify_args *args);
int lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify(
struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_1_ti_lfa_link_fallback_modify(
+ struct nb_cb_modify_args *args);
int lib_interface_isis_fast_reroute_level_2_lfa_enable_modify(
struct nb_cb_modify_args *args);
int lib_interface_isis_fast_reroute_level_2_lfa_exclude_interface_create(
@@ -335,6 +337,8 @@ int lib_interface_isis_fast_reroute_level_2_ti_lfa_enable_modify(
struct nb_cb_modify_args *args);
int lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify(
struct nb_cb_modify_args *args);
+int lib_interface_isis_fast_reroute_level_2_ti_lfa_link_fallback_modify(
+ struct nb_cb_modify_args *args);
struct yang_data *
lib_interface_state_isis_get_elem(struct nb_cb_get_elem_args *args);
const void *lib_interface_state_isis_adjacencies_adjacency_get_next(
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c
index f9028bdd9f..87cd732e0b 100644
--- a/isisd/isis_nb_config.c
+++ b/isisd/isis_nb_config.c
@@ -2626,23 +2626,9 @@ void lib_interface_isis_bfd_monitoring_apply_finish(
struct nb_cb_apply_finish_args *args)
{
struct isis_circuit *circuit;
- bool enabled;
- const char *profile = NULL;
circuit = nb_running_get_entry(args->dnode, NULL, true);
- enabled = yang_dnode_get_bool(args->dnode, "./enabled");
-
- if (yang_dnode_exists(args->dnode, "./profile"))
- profile = yang_dnode_get_string(args->dnode, "./profile");
-
- if (enabled) {
- isis_bfd_circuit_param_set(circuit, BFD_DEF_MIN_RX,
- BFD_DEF_MIN_TX, BFD_DEF_DETECT_MULT,
- profile, true);
- } else {
- isis_bfd_circuit_cmd(circuit, ZEBRA_BFD_DEST_DEREGISTER);
- bfd_info_free(&circuit->bfd_info);
- }
+ isis_bfd_circuit_cmd(circuit);
}
/*
@@ -2651,7 +2637,14 @@ void lib_interface_isis_bfd_monitoring_apply_finish(
int lib_interface_isis_bfd_monitoring_enabled_modify(
struct nb_cb_modify_args *args)
{
- /* Everything done in apply_finish */
+ struct isis_circuit *circuit;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = nb_running_get_entry(args->dnode, NULL, true);
+ circuit->bfd_config.enabled = yang_dnode_get_bool(args->dnode, NULL);
+
return NB_OK;
}
@@ -2661,14 +2654,30 @@ int lib_interface_isis_bfd_monitoring_enabled_modify(
int lib_interface_isis_bfd_monitoring_profile_modify(
struct nb_cb_modify_args *args)
{
- /* Everything done in apply_finish */
+ struct isis_circuit *circuit;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = nb_running_get_entry(args->dnode, NULL, true);
+ XFREE(MTYPE_TMP, circuit->bfd_config.profile);
+ circuit->bfd_config.profile =
+ XSTRDUP(MTYPE_TMP, yang_dnode_get_string(args->dnode, NULL));
+
return NB_OK;
}
int lib_interface_isis_bfd_monitoring_profile_destroy(
struct nb_cb_destroy_args *args)
{
- /* Everything done in apply_finish */
+ struct isis_circuit *circuit;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = nb_running_get_entry(args->dnode, NULL, true);
+ XFREE(MTYPE_TMP, circuit->bfd_config.profile);
+
return NB_OK;
}
@@ -3518,6 +3527,30 @@ int lib_interface_isis_fast_reroute_level_1_ti_lfa_node_protection_modify(
/*
* XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-1/ti-lfa/link-fallback
+ */
+int lib_interface_isis_fast_reroute_level_1_ti_lfa_link_fallback_modify(
+ struct nb_cb_modify_args *args)
+{
+ struct isis_area *area;
+ struct isis_circuit *circuit;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = nb_running_get_entry(args->dnode, NULL, true);
+ circuit->tilfa_link_fallback[0] =
+ yang_dnode_get_bool(args->dnode, NULL);
+
+ area = circuit->area;
+ if (area)
+ lsp_regenerate_schedule(area, area->is_type, 0);
+
+ return NB_OK;
+}
+
+/*
+ * XPath:
* /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/lfa/enable
*/
int lib_interface_isis_fast_reroute_level_2_lfa_enable_modify(
@@ -3720,3 +3753,27 @@ int lib_interface_isis_fast_reroute_level_2_ti_lfa_node_protection_modify(
return NB_OK;
}
+
+/*
+ * XPath:
+ * /frr-interface:lib/interface/frr-isisd:isis/fast-reroute/level-2/ti-lfa/link-fallback
+ */
+int lib_interface_isis_fast_reroute_level_2_ti_lfa_link_fallback_modify(
+ struct nb_cb_modify_args *args)
+{
+ struct isis_area *area;
+ struct isis_circuit *circuit;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ circuit = nb_running_get_entry(args->dnode, NULL, true);
+ circuit->tilfa_link_fallback[1] =
+ yang_dnode_get_bool(args->dnode, NULL);
+
+ area = circuit->area;
+ if (area)
+ lsp_regenerate_schedule(area, area->is_type, 0);
+
+ return NB_OK;
+}
diff --git a/isisd/isis_snmp.c b/isisd/isis_snmp.c
index 6337faab1c..dfc865162f 100644
--- a/isisd/isis_snmp.c
+++ b/isisd/isis_snmp.c
@@ -1045,7 +1045,7 @@ static int isis_snmp_circuit_level_lookup_next(
{
oid off;
oid start;
- struct isis_circuit *circuit;
+ struct isis_circuit *circuit = NULL;
int level;
start = 0;
@@ -1951,8 +1951,6 @@ static uint8_t *isis_snmp_find_system_counter(struct variable *v, oid *name,
/* If level does not match all counters are zeros */
return SNMP_INTEGER(0);
- val = 0;
-
switch (v->magic) {
case ISIS_SYSSTAT_CORRLSPS:
val = 0;
@@ -2512,7 +2510,6 @@ static uint8_t *isis_snmp_find_isadj(struct variable *v, oid *name,
switch (v->magic) {
case ISIS_ISADJ_STATE:
- val = ISIS_SNMP_ADJ_STATE_DOWN;
switch (adj->adj_state) {
case ISIS_ADJ_UNKNOWN:
@@ -2541,7 +2538,6 @@ static uint8_t *isis_snmp_find_isadj(struct variable *v, oid *name,
}
case ISIS_ISADJ_NEIGHSYSTYPE:
- val = ISIS_SNMP_ADJ_NEIGHTYPE_UNKNOWN;
switch (adj->sys_type) {
case ISIS_SYSTYPE_UNKNOWN:
diff --git a/isisd/isis_vty_fabricd.c b/isisd/isis_vty_fabricd.c
index 7020b6efeb..a19fcc240f 100644
--- a/isisd/isis_vty_fabricd.c
+++ b/isisd/isis_vty_fabricd.c
@@ -319,13 +319,11 @@ DEFUN (isis_bfd,
if (!circuit)
return CMD_ERR_NO_MATCH;
- if (circuit->bfd_info
- && CHECK_FLAG(circuit->bfd_info->flags, BFD_FLAG_PARAM_CFG)) {
+ if (circuit->bfd_config.enabled)
return CMD_SUCCESS;
- }
- isis_bfd_circuit_param_set(circuit, BFD_DEF_MIN_RX, BFD_DEF_MIN_TX,
- BFD_DEF_DETECT_MULT, NULL, true);
+ circuit->bfd_config.enabled = true;
+ isis_bfd_circuit_cmd(circuit);
return CMD_SUCCESS;
}
@@ -343,11 +341,12 @@ DEFUN (no_isis_bfd,
if (!circuit)
return CMD_ERR_NO_MATCH;
- if (!circuit->bfd_info)
+ if (!circuit->bfd_config.enabled)
return CMD_SUCCESS;
- isis_bfd_circuit_cmd(circuit, ZEBRA_BFD_DEST_DEREGISTER);
- bfd_info_free(&circuit->bfd_info);
+ circuit->bfd_config.enabled = false;
+ isis_bfd_circuit_cmd(circuit);
+
return CMD_SUCCESS;
}
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index 90959eb98c..4bd42ead86 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -37,6 +37,7 @@
#include "nexthop.h"
#include "vrf.h"
#include "libfrr.h"
+#include "bfd.h"
#include "isisd/isis_constants.h"
#include "isisd/isis_common.h"
@@ -730,6 +731,7 @@ static void isis_zebra_connected(struct zclient *zclient)
zclient_register_opaque(zclient, LDP_RLFA_LABELS);
zclient_register_opaque(zclient, LDP_IGP_SYNC_IF_STATE_UPDATE);
zclient_register_opaque(zclient, LDP_IGP_SYNC_ANNOUNCE_UPDATE);
+ bfd_client_sendmsg(zclient, ZEBRA_BFD_CLIENT_REGISTER, VRF_DEFAULT);
}
/*
diff --git a/isisd/isisd.c b/isisd/isisd.c
index 37416fc1a4..cb3734bd41 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -41,6 +41,7 @@
#include "vrf.h"
#include "spf_backoff.h"
#include "lib/northbound_cli.h"
+#include "bfd.h"
#include "isisd/isis_constants.h"
#include "isisd/isis_common.h"
@@ -664,6 +665,8 @@ void isis_terminate()
struct isis *isis;
struct listnode *node, *nnode;
+ bfd_protocol_integration_set_shutdown(true);
+
if (listcount(im->isis) == 0)
return;
diff --git a/ldpd/lde.c b/ldpd/lde.c
index 02dcec750b..724e83adb2 100644
--- a/ldpd/lde.c
+++ b/ldpd/lde.c
@@ -1630,6 +1630,30 @@ lde_nbr_addr_update(struct lde_nbr *ln, struct lde_addr *lde_addr, int removed)
}
}
+void
+lde_allow_broken_lsp_update(int new_config)
+{
+ struct fec_node *fn;
+ struct fec_nh *fnh;
+ struct fec *f;
+
+ RB_FOREACH(f, fec_tree, &ft) {
+ fn = (struct fec_node *)f;
+
+ LIST_FOREACH(fnh, &fn->nexthops, entry) {
+ /* allow-broken-lsp config is changing so
+ * we need to reprogram labeled routes to
+ * have proper top-level label
+ */
+ if (!(new_config & F_LDPD_ALLOW_BROKEN_LSP))
+ lde_send_delete_klabel(fn, fnh);
+
+ if (fn->local_label != NO_LABEL)
+ lde_send_change_klabel(fn, fnh);
+ }
+ }
+}
+
static __inline int
lde_map_compare(const struct lde_map *a, const struct lde_map *b)
{
diff --git a/ldpd/lde.h b/ldpd/lde.h
index e09be01ece..dee6f3fcb9 100644
--- a/ldpd/lde.h
+++ b/ldpd/lde.h
@@ -200,6 +200,7 @@ void lde_route_update_release(struct iface *, int);
void lde_route_update_release_all(int);
struct lde_addr *lde_address_find(struct lde_nbr *, int,
union ldpd_addr *);
+void lde_allow_broken_lsp_update(int new_config);
/* lde_lib.c */
void fec_init(struct fec_tree *);
diff --git a/ldpd/ldp_vty.h b/ldpd/ldp_vty.h
index 882874f1be..d788fa0687 100644
--- a/ldpd/ldp_vty.h
+++ b/ldpd/ldp_vty.h
@@ -34,6 +34,7 @@ extern struct cmd_node ldp_debug_node;
union ldpd_addr;
int ldp_get_address(const char *, int *, union ldpd_addr *);
int ldp_vty_mpls_ldp (struct vty *, const char *);
+int ldp_vty_allow_broken_lsp(struct vty *, const char *);
int ldp_vty_address_family (struct vty *, const char *, const char *);
int ldp_vty_disc_holdtime(struct vty *, const char *, enum hello_type, long);
int ldp_vty_disc_interval(struct vty *, const char *, enum hello_type, long);
diff --git a/ldpd/ldp_vty_cmds.c b/ldpd/ldp_vty_cmds.c
index 1f102f86fa..b65ebf6f55 100644
--- a/ldpd/ldp_vty_cmds.c
+++ b/ldpd/ldp_vty_cmds.c
@@ -241,6 +241,16 @@ DEFPY (ldp_wait_for_sync,
}
+DEFPY (ldp_allow_broken_lsps,
+ ldp_allow_broken_lsps_cmd,
+ "[no] install allow-broken-lsps",
+ NO_STR
+ "install lsps\n"
+ "if no remote-label install with imp-null")
+{
+ return (ldp_vty_allow_broken_lsp(vty, no));
+}
+
DEFPY (ldp_discovery_targeted_hello_accept,
ldp_discovery_targeted_hello_accept_cmd,
"[no] discovery targeted-hello accept [from <(1-199)|(1300-2699)|WORD>$from_acl]",
@@ -844,6 +854,7 @@ ldp_vty_init (void)
install_element(LDP_NODE, &ldp_router_id_cmd);
install_element(LDP_NODE, &ldp_ordered_control_cmd);
install_element(LDP_NODE, &ldp_wait_for_sync_cmd);
+ install_element(LDP_NODE, &ldp_allow_broken_lsps_cmd);
install_element(LDP_IPV4_NODE, &ldp_discovery_link_holdtime_cmd);
install_element(LDP_IPV4_NODE, &ldp_discovery_targeted_holdtime_cmd);
diff --git a/ldpd/ldp_vty_conf.c b/ldpd/ldp_vty_conf.c
index 6e925d1410..b35d3dfa00 100644
--- a/ldpd/ldp_vty_conf.c
+++ b/ldpd/ldp_vty_conf.c
@@ -290,6 +290,9 @@ ldp_config_write(struct vty *vty)
vty_out (vty, " wait-for-sync %u\n",
ldpd_conf->wait_for_sync_interval);
+ if (ldpd_conf->flags & F_LDPD_ALLOW_BROKEN_LSP)
+ vty_out(vty, " install allow-broken-lsp\n");
+
RB_FOREACH(nbrp, nbrp_head, &ldpd_conf->nbrp_tree) {
if (nbrp->flags & F_NBRP_KEEPALIVE)
vty_out (vty, " neighbor %pI4 session holdtime %u\n",
@@ -1040,6 +1043,19 @@ int ldp_vty_wait_for_sync_interval(struct vty *vty, const char *negate,
}
int
+ldp_vty_allow_broken_lsp(struct vty *vty, const char *negate)
+{
+ if (negate)
+ vty_conf->flags &= ~F_LDPD_ALLOW_BROKEN_LSP;
+ else
+ vty_conf->flags |= F_LDPD_ALLOW_BROKEN_LSP;
+
+ ldp_config_apply(vty, vty_conf);
+
+ return (CMD_SUCCESS);
+}
+
+int
ldp_vty_ds_cisco_interop(struct vty *vty, const char * negate)
{
if (negate)
diff --git a/ldpd/ldp_zebra.c b/ldpd/ldp_zebra.c
index fd51625bbd..2d90412d17 100644
--- a/ldpd/ldp_zebra.c
+++ b/ldpd/ldp_zebra.c
@@ -246,12 +246,17 @@ ldp_zebra_send_mpls_labels(int cmd, struct kroute *kr)
zl.route.instance = kr->route_instance;
}
- /*
- * For broken LSPs, instruct the forwarding plane to pop the top-level
+ /* If allow-broken-lsps is enabled then if an lsp is received with
+ * no remote label, instruct the forwarding plane to pop the top-level
* label and forward packets normally. This is a best-effort attempt
* to deliver labeled IP packets to their final destination (instead of
* dropping them).
*/
+ if (kr->remote_label == NO_LABEL
+ && !(ldpd_conf->flags & F_LDPD_ALLOW_BROKEN_LSP)
+ && cmd == ZEBRA_MPLS_LABELS_ADD)
+ return 0;
+
if (kr->remote_label == NO_LABEL)
kr->remote_label = MPLS_LABEL_IMPLICIT_NULL;
diff --git a/ldpd/ldpd.c b/ldpd/ldpd.c
index d69a4dcd3c..800b954d65 100644
--- a/ldpd/ldpd.c
+++ b/ldpd/ldpd.c
@@ -1365,6 +1365,16 @@ merge_global(struct ldpd_conf *conf, struct ldpd_conf *xconf)
ldpe_reset_ds_nbrs();
}
+ /*
+ * Configuration of allow-broken-lsp requires reprograming all
+ * labeled routes
+ */
+ if ((conf->flags & F_LDPD_ALLOW_BROKEN_LSP) !=
+ (xconf->flags & F_LDPD_ALLOW_BROKEN_LSP)) {
+ if (ldpd_process == PROC_LDE_ENGINE)
+ lde_allow_broken_lsp_update(xconf->flags);
+ }
+
if (ldpd_process == PROC_LDP_ENGINE)
ldpe_set_config_change_time();
diff --git a/ldpd/ldpd.h b/ldpd/ldpd.h
index cb7ac85d96..616c390e50 100644
--- a/ldpd/ldpd.h
+++ b/ldpd/ldpd.h
@@ -590,7 +590,7 @@ DECLARE_QOBJ_TYPE(ldpd_conf);
#define F_LDPD_DS_CISCO_INTEROP 0x0002
#define F_LDPD_ENABLED 0x0004
#define F_LDPD_ORDERED_CONTROL 0x0008
-
+#define F_LDPD_ALLOW_BROKEN_LSP 0x0010
struct ldpd_af_global {
struct thread *disc_ev;
diff --git a/lib/assert/assert.h b/lib/assert/assert.h
new file mode 100644
index 0000000000..fbdbd52ce8
--- /dev/null
+++ b/lib/assert/assert.h
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2021 David Lamparter, for NetDEF, Inc.
+ *
+ * Permission to use, copy, modify, and 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 THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR 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.
+ */
+
+/* WARNING: this file is "special" in that it overrides the system-provided
+ * assert.h by being on the include path before it. That means it should
+ * provide the functional equivalent.
+ *
+ * This is intentional because FRR extends assert() to write to the log and
+ * add backtraces. Overriding the entire file is the simplest and most
+ * reliable way to get this to work; there were problems previously with the
+ * system assert.h getting included afterwards and redefining assert() back to
+ * the system variant.
+ */
+
+#ifndef _FRR_ASSERT_H
+#define _FRR_ASSERT_H
+
+#include "xref.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef __cplusplus
+/* C++ has this built-in, but C provides it in assert.h for >=C11. Since we
+ * replace assert.h entirely, we need to provide it here too.
+ */
+#define static_assert _Static_assert
+#endif
+
+struct xref_assert {
+ struct xref xref;
+
+ const char *expr;
+ const char *extra, *args;
+};
+
+extern void _zlog_assert_failed(const struct xref_assert *xref,
+ const char *extra, ...) PRINTFRR(2, 3)
+ __attribute__((noreturn));
+
+/* the "do { } while (expr_)" is there to get a warning for assignments inside
+ * the assert expression aka "assert(x = 1)". The (necessary) braces around
+ * expr_ in the if () statement would suppress these warnings. Since
+ * _zlog_assert_failed() is noreturn, the while condition will never be
+ * checked.
+ */
+#define assert(expr_) \
+ ({ \
+ static const struct xref_assert _xref __attribute__( \
+ (used)) = { \
+ .xref = XREF_INIT(XREFT_ASSERT, NULL, __func__), \
+ .expr = #expr_, \
+ }; \
+ XREF_LINK(_xref.xref); \
+ if (__builtin_expect((expr_) ? 0 : 1, 0)) \
+ do { \
+ _zlog_assert_failed(&_xref, NULL); \
+ } while (expr_); \
+ })
+
+#define assertf(expr_, extra_, ...) \
+ ({ \
+ static const struct xref_assert _xref __attribute__( \
+ (used)) = { \
+ .xref = XREF_INIT(XREFT_ASSERT, NULL, __func__), \
+ .expr = #expr_, \
+ .extra = extra_, \
+ .args = #__VA_ARGS__, \
+ }; \
+ XREF_LINK(_xref.xref); \
+ if (__builtin_expect((expr_) ? 0 : 1, 0)) \
+ do { \
+ _zlog_assert_failed(&_xref, extra_, \
+ ##__VA_ARGS__); \
+ } while (expr_); \
+ })
+
+#define zassert assert
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FRR_ASSERT_H */
diff --git a/lib/bfd.c b/lib/bfd.c
index 0974c26809..4989188e4e 100644
--- a/lib/bfd.c
+++ b/lib/bfd.c
@@ -35,190 +35,88 @@
DEFINE_MTYPE_STATIC(LIB, BFD_INFO, "BFD info");
-static int bfd_debug = 0;
-static struct bfd_gbl bfd_gbl;
-
-/*
- * bfd_gbl_init - Initialize the BFD global structure
- */
-void bfd_gbl_init(void)
-{
- memset(&bfd_gbl, 0, sizeof(struct bfd_gbl));
-}
-
-/*
- * bfd_gbl_exit - Called when daemon exits
- */
-void bfd_gbl_exit(void)
-{
- SET_FLAG(bfd_gbl.flags, BFD_GBL_FLAG_IN_SHUTDOWN);
-}
-
-/*
- * bfd_info_create - Allocate the BFD information
- */
-struct bfd_info *bfd_info_create(void)
-{
- struct bfd_info *bfd_info;
-
- bfd_info = XCALLOC(MTYPE_BFD_INFO, sizeof(struct bfd_info));
- assert(bfd_info);
-
- bfd_info->status = BFD_STATUS_UNKNOWN;
- bfd_info->type = BFD_TYPE_NOT_CONFIGURED;
- bfd_info->last_update = 0;
- return bfd_info;
-}
-
-/*
- * bfd_info_free - Free the BFD information.
+/**
+ * BFD protocol integration configuration.
*/
-void bfd_info_free(struct bfd_info **bfd_info)
-{
- XFREE(MTYPE_BFD_INFO, *bfd_info);
-}
-/*
- * bfd_validate_param - Validate the BFD paramter information.
- */
-int bfd_validate_param(struct vty *vty, const char *dm_str, const char *rx_str,
- const char *tx_str, uint8_t *dm_val, uint32_t *rx_val,
- uint32_t *tx_val)
-{
- *dm_val = strtoul(dm_str, NULL, 10);
- *rx_val = strtoul(rx_str, NULL, 10);
- *tx_val = strtoul(tx_str, NULL, 10);
- return CMD_SUCCESS;
-}
+/** Events definitions. */
+enum bfd_session_event {
+ /** Remove the BFD session configuration. */
+ BSE_UNINSTALL,
+ /** Install the BFD session configuration. */
+ BSE_INSTALL,
+};
-/*
- * bfd_set_param - Set the configured BFD paramter values
+/**
+ * Data structure to do the necessary tricks to hide the BFD protocol
+ * integration internals.
*/
-void bfd_set_param(struct bfd_info **bfd_info, uint32_t min_rx, uint32_t min_tx,
- uint8_t detect_mult, const char *profile, int defaults,
- int *command)
-{
- if (!*bfd_info) {
- *bfd_info = bfd_info_create();
- *command = ZEBRA_BFD_DEST_REGISTER;
- } else {
- if (((*bfd_info)->required_min_rx != min_rx)
- || ((*bfd_info)->desired_min_tx != min_tx)
- || ((*bfd_info)->detect_mult != detect_mult)
- || ((*bfd_info)->profile[0] == 0 && profile)
- || ((*bfd_info)->profile[0] && profile == NULL)
- || (profile && (*bfd_info)->profile[0]
- && strcmp((*bfd_info)->profile, profile)))
- *command = ZEBRA_BFD_DEST_UPDATE;
- }
-
- if (*command) {
- (*bfd_info)->required_min_rx = min_rx;
- (*bfd_info)->desired_min_tx = min_tx;
- (*bfd_info)->detect_mult = detect_mult;
- if (profile)
- strlcpy((*bfd_info)->profile, profile,
- BFD_PROFILE_NAME_LEN);
- else
- (*bfd_info)->profile[0] = '\0';
- }
-
- if (!defaults)
- SET_FLAG((*bfd_info)->flags, BFD_FLAG_PARAM_CFG);
- else
- UNSET_FLAG((*bfd_info)->flags, BFD_FLAG_PARAM_CFG);
-}
+struct bfd_session_params {
+ /** Contains the session parameters and more. */
+ struct bfd_session_arg args;
+ /** Contains the session state. */
+ struct bfd_session_status bss;
+ /** Protocol implementation status update callback. */
+ bsp_status_update updatecb;
+ /** Protocol implementation custom data pointer. */
+ void *arg;
-/*
- * bfd_peer_sendmsg - Format and send a peer register/Unregister
- * command to Zebra to be forwarded to BFD
- *
- * DEPRECATED: use zclient_bfd_command instead
- */
-void bfd_peer_sendmsg(struct zclient *zclient, struct bfd_info *bfd_info,
- int family, void *dst_ip, void *src_ip, char *if_name,
- int ttl, int multihop, int cbit, int command,
- int set_flag, vrf_id_t vrf_id)
-{
- struct bfd_session_arg args = {};
- size_t addrlen;
+ /**
+ * Next event.
+ *
+ * This variable controls what action to execute when the command batch
+ * finishes. Normally we'd use `thread_add_event` value, however since
+ * that function is going to be called multiple times and the value
+ * might be different we'll use this variable to keep track of it.
+ */
+ enum bfd_session_event lastev;
+ /**
+ * BFD session configuration event.
+ *
+ * Multiple actions might be asked during a command batch (either via
+ * configuration load or northbound batch), so we'll use this to
+ * install/uninstall the BFD session parameters only once.
+ */
+ struct thread *installev;
- /* Individual reg/dereg messages are suppressed during shutdown. */
- if (CHECK_FLAG(bfd_gbl.flags, BFD_GBL_FLAG_IN_SHUTDOWN)) {
- if (bfd_debug)
- zlog_debug(
- "%s: Suppressing BFD peer reg/dereg messages",
- __func__);
- return;
- }
+ /** BFD session installation state. */
+ bool installed;
- /* Check socket. */
- if (!zclient || zclient->sock < 0) {
- if (bfd_debug)
- zlog_debug(
- "%s: Can't send BFD peer register, Zebra client not established",
- __func__);
- return;
- }
+ /** Global BFD paramaters list. */
+ TAILQ_ENTRY(bfd_session_params) entry;
+};
- /* Fill in all arguments. */
- args.ttl = ttl;
- args.cbit = cbit;
- args.family = family;
- args.mhop = multihop;
- args.vrf_id = vrf_id;
- args.command = command;
- args.set_flag = set_flag;
- args.bfd_info = bfd_info;
- if (args.bfd_info) {
- args.min_rx = bfd_info->required_min_rx;
- args.min_tx = bfd_info->desired_min_tx;
- args.detection_multiplier = bfd_info->detect_mult;
- if (bfd_info->profile[0]) {
- args.profilelen = strlen(bfd_info->profile);
- strlcpy(args.profile, bfd_info->profile,
- sizeof(args.profile));
- }
- }
+struct bfd_sessions_global {
+ /**
+ * Global BFD session parameters list for (re)installation and update
+ * without code duplication among daemons.
+ */
+ TAILQ_HEAD(bsplist, bfd_session_params) bsplist;
- addrlen = family == AF_INET ? sizeof(struct in_addr)
- : sizeof(struct in6_addr);
- memcpy(&args.dst, dst_ip, addrlen);
- if (src_ip)
- memcpy(&args.src, src_ip, addrlen);
+ /** Pointer to FRR's event manager. */
+ struct thread_master *tm;
+ /** Pointer to zebra client data structure. */
+ struct zclient *zc;
- if (if_name)
- args.ifnamelen =
- strlcpy(args.ifname, if_name, sizeof(args.ifname));
+ /** Debugging state. */
+ bool debugging;
+ /** Is shutting down? */
+ bool shutting_down;
+};
- zclient_bfd_command(zclient, &args);
-}
+/** Global configuration variable. */
+static struct bfd_sessions_global bsglobal;
-/*
- * bfd_get_command_dbg_str - Convert command to a debug string.
- */
-const char *bfd_get_command_dbg_str(int command)
-{
- switch (command) {
- case ZEBRA_BFD_DEST_REGISTER:
- return "Register";
- case ZEBRA_BFD_DEST_DEREGISTER:
- return "Deregister";
- case ZEBRA_BFD_DEST_UPDATE:
- return "Update";
- default:
- return "Unknown";
- }
-}
+/** Global empty address for IPv4/IPv6. */
+static const struct in6_addr i6a_zero;
/*
* bfd_get_peer_info - Extract the Peer information for which the BFD session
* went down from the message sent from Zebra to clients.
*/
-struct interface *bfd_get_peer_info(struct stream *s, struct prefix *dp,
- struct prefix *sp, int *status,
- int *remote_cbit,
- vrf_id_t vrf_id)
+static struct interface *bfd_get_peer_info(struct stream *s, struct prefix *dp,
+ struct prefix *sp, int *status,
+ int *remote_cbit, vrf_id_t vrf_id)
{
unsigned int ifindex;
struct interface *ifp = NULL;
@@ -243,7 +141,7 @@ struct interface *bfd_get_peer_info(struct stream *s, struct prefix *dp,
if (ifindex != 0) {
ifp = if_lookup_by_index(ifindex, vrf_id);
if (ifp == NULL) {
- if (bfd_debug)
+ if (bsglobal.debugging)
zlog_debug(
"zebra_interface_bfd_read: Can't find interface by ifindex: %d ",
ifindex);
@@ -322,96 +220,6 @@ static void bfd_last_update(time_t last_update, char *buf, size_t len)
}
/*
- * bfd_show_param - Show the BFD parameter information.
- */
-void bfd_show_param(struct vty *vty, struct bfd_info *bfd_info, int bfd_tag,
- int extra_space, bool use_json, json_object *json_obj)
-{
- json_object *json_bfd = NULL;
-
- if (!bfd_info)
- return;
-
- if (use_json) {
- if (bfd_tag)
- json_bfd = json_object_new_object();
- else
- json_bfd = json_obj;
-
- json_object_int_add(json_bfd, "detectMultiplier",
- bfd_info->detect_mult);
- json_object_int_add(json_bfd, "rxMinInterval",
- bfd_info->required_min_rx);
- json_object_int_add(json_bfd, "txMinInterval",
- bfd_info->desired_min_tx);
- if (bfd_tag)
- json_object_object_add(json_obj, "peerBfdInfo",
- json_bfd);
- } else {
- vty_out(vty,
- " %s%sDetect Multiplier: %d, Min Rx interval: %d, Min Tx interval: %d\n",
- (extra_space) ? " " : "", (bfd_tag) ? "BFD: " : " ",
- bfd_info->detect_mult, bfd_info->required_min_rx,
- bfd_info->desired_min_tx);
- }
-}
-
-/*
- * bfd_show_status - Show the BFD status information.
- */
-static void bfd_show_status(struct vty *vty, struct bfd_info *bfd_info,
- int bfd_tag, int extra_space, bool use_json,
- json_object *json_bfd)
-{
- char time_buf[32];
-
- if (!bfd_info)
- return;
-
- bfd_last_update(bfd_info->last_update, time_buf, 32);
- if (use_json) {
- json_object_string_add(json_bfd, "status",
- bfd_get_status_str(bfd_info->status));
- json_object_string_add(json_bfd, "lastUpdate", time_buf);
- } else {
- vty_out(vty, " %s%sStatus: %s, Last update: %s\n",
- (extra_space) ? " " : "", (bfd_tag) ? "BFD: " : " ",
- bfd_get_status_str(bfd_info->status), time_buf);
- }
-}
-
-/*
- * bfd_show_info - Show the BFD information.
- */
-void bfd_show_info(struct vty *vty, struct bfd_info *bfd_info, int multihop,
- int extra_space, bool use_json, json_object *json_obj)
-{
- json_object *json_bfd = NULL;
-
- if (!bfd_info)
- return;
-
- if (use_json) {
- json_bfd = json_object_new_object();
- if (multihop)
- json_object_string_add(json_bfd, "type", "multi hop");
- else
- json_object_string_add(json_bfd, "type", "single hop");
- } else {
- vty_out(vty, " %sBFD: Type: %s\n", (extra_space) ? " " : "",
- (multihop) ? "multi hop" : "single hop");
- }
-
- bfd_show_param(vty, bfd_info, 0, extra_space, use_json, json_bfd);
- bfd_show_status(vty, bfd_info, 0, extra_space, use_json, json_bfd);
-
- if (use_json)
- json_object_object_add(json_obj, "peerBfdInfo", json_bfd);
- else
- vty_out(vty, "\n");
-}
-
-/*
* bfd_client_sendmsg - Format and send a client register
* command to Zebra to be forwarded to BFD
*/
@@ -423,7 +231,7 @@ void bfd_client_sendmsg(struct zclient *zclient, int command,
/* Check socket. */
if (!zclient || zclient->sock < 0) {
- if (bfd_debug)
+ if (bsglobal.debugging)
zlog_debug(
"%s: Can't send BFD client register, Zebra client not established",
__func__);
@@ -441,7 +249,7 @@ void bfd_client_sendmsg(struct zclient *zclient, int command,
ret = zclient_send_message(zclient);
if (ret == ZCLIENT_SEND_FAILURE) {
- if (bfd_debug)
+ if (bsglobal.debugging)
zlog_debug(
"bfd_client_sendmsg %ld: zclient_send_message() failed",
(long)getpid());
@@ -457,8 +265,8 @@ int zclient_bfd_command(struct zclient *zc, struct bfd_session_arg *args)
size_t addrlen;
/* Individual reg/dereg messages are suppressed during shutdown. */
- if (CHECK_FLAG(bfd_gbl.flags, BFD_GBL_FLAG_IN_SHUTDOWN)) {
- if (bfd_debug)
+ if (bsglobal.shutting_down) {
+ if (bsglobal.debugging)
zlog_debug(
"%s: Suppressing BFD peer reg/dereg messages",
__func__);
@@ -467,7 +275,7 @@ int zclient_bfd_command(struct zclient *zc, struct bfd_session_arg *args)
/* Check socket. */
if (!zc || zc->sock < 0) {
- if (bfd_debug)
+ if (bsglobal.debugging)
zlog_debug("%s: zclient unavailable", __func__);
return -1;
}
@@ -557,97 +365,14 @@ int zclient_bfd_command(struct zclient *zc, struct bfd_session_arg *args)
/* Send message to zebra. */
if (zclient_send_message(zc) == ZCLIENT_SEND_FAILURE) {
- if (bfd_debug)
+ if (bsglobal.debugging)
zlog_debug("%s: zclient_send_message failed", __func__);
return -1;
}
- /* Write registration indicator into data structure. */
- if (args->bfd_info && args->set_flag) {
- if (args->command == ZEBRA_BFD_DEST_REGISTER)
- SET_FLAG(args->bfd_info->flags, BFD_FLAG_BFD_REG);
- else if (args->command == ZEBRA_BFD_DEST_DEREGISTER)
- UNSET_FLAG(args->bfd_info->flags, BFD_FLAG_BFD_REG);
- }
-
return 0;
}
-/**
- * BFD protocol integration configuration.
- */
-
-/** Events definitions. */
-enum bfd_session_event {
- /** Remove the BFD session configuration. */
- BSE_UNINSTALL,
- /** Install the BFD session configuration. */
- BSE_INSTALL,
-};
-
-/**
- * Data structure to do the necessary tricks to hide the BFD protocol
- * integration internals.
- */
-struct bfd_session_params {
- /** Contains the session parameters and more. */
- struct bfd_session_arg args;
- /** Contains the session state. */
- struct bfd_session_status bss;
- /** Protocol implementation status update callback. */
- bsp_status_update updatecb;
- /** Protocol implementation custom data pointer. */
- void *arg;
-
- /**
- * Next event.
- *
- * This variable controls what action to execute when the command batch
- * finishes. Normally we'd use `thread_add_event` value, however since
- * that function is going to be called multiple times and the value
- * might be different we'll use this variable to keep track of it.
- */
- enum bfd_session_event lastev;
- /**
- * BFD session configuration event.
- *
- * Multiple actions might be asked during a command batch (either via
- * configuration load or northbound batch), so we'll use this to
- * install/uninstall the BFD session parameters only once.
- */
- struct thread *installev;
-
- /** BFD session installation state. */
- bool installed;
-
- /** Global BFD paramaters list. */
- TAILQ_ENTRY(bfd_session_params) entry;
-};
-
-struct bfd_sessions_global {
- /**
- * Global BFD session parameters list for (re)installation and update
- * without code duplication among daemons.
- */
- TAILQ_HEAD(bsplist, bfd_session_params) bsplist;
-
- /** Pointer to FRR's event manager. */
- struct thread_master *tm;
- /** Pointer to zebra client data structure. */
- struct zclient *zc;
-
- /** Debugging state. */
- bool debugging;
- /** Is shutting down? */
- bool shutting_down;
-};
-
-/** Global configuration variable. */
-static struct bfd_sessions_global bsglobal;
-
-/** Global empty address for IPv4/IPv6. */
-static const struct in6_addr i6a_zero;
-
struct bfd_session_params *bfd_sess_new(bsp_status_update updatecb, void *arg)
{
struct bfd_session_params *bsp;
diff --git a/lib/bfd.h b/lib/bfd.h
index 113f167d3b..6c0d1c177e 100644
--- a/lib/bfd.h
+++ b/lib/bfd.h
@@ -40,17 +40,6 @@ extern "C" {
#define BFD_MIN_DETECT_MULT 2
#define BFD_MAX_DETECT_MULT 255
-#define BFD_GBL_FLAG_IN_SHUTDOWN (1 << 0) /* The daemon in shutdown */
-struct bfd_gbl {
- uint16_t flags;
-};
-
-#define BFD_FLAG_PARAM_CFG (1 << 0) /* parameters have been configured */
-#define BFD_FLAG_BFD_REG (1 << 1) /* Peer registered with BFD */
-#define BFD_FLAG_BFD_TYPE_MULTIHOP (1 << 2) /* Peer registered with BFD as multihop */
-#define BFD_FLAG_BFD_CBIT_ON (1 << 3) /* Peer registered with CBIT set to on */
-#define BFD_FLAG_BFD_CHECK_CONTROLPLANE (1 << 4) /* BFD and controlplane daemon are linked */
-
#define BFD_STATUS_UNKNOWN (1 << 0) /* BFD session status never received */
#define BFD_STATUS_DOWN (1 << 1) /* BFD session status is down */
#define BFD_STATUS_UP (1 << 2) /* BFD session status is up */
@@ -58,72 +47,11 @@ struct bfd_gbl {
#define BFD_PROFILE_NAME_LEN 64
-#define BFD_SET_CLIENT_STATUS(current_status, new_status) \
- do { \
- (current_status) = \
- (((new_status) == BFD_STATUS_ADMIN_DOWN) ? \
- BFD_STATUS_DOWN : (new_status));\
- } while (0)
-
-enum bfd_sess_type {
- BFD_TYPE_NOT_CONFIGURED,
- BFD_TYPE_SINGLEHOP,
- BFD_TYPE_MULTIHOP
-};
-
-struct bfd_info {
- uint16_t flags;
- uint8_t detect_mult;
- uint32_t desired_min_tx;
- uint32_t required_min_rx;
- time_t last_update;
- uint8_t status;
- enum bfd_sess_type type;
- char profile[BFD_PROFILE_NAME_LEN];
-};
-
-extern struct bfd_info *bfd_info_create(void);
-
-extern void bfd_info_free(struct bfd_info **bfd_info);
-
-extern int bfd_validate_param(struct vty *vty, const char *dm_str,
- const char *rx_str, const char *tx_str,
- uint8_t *dm_val, uint32_t *rx_val,
- uint32_t *tx_val);
-
-extern void bfd_set_param(struct bfd_info **bfd_info, uint32_t min_rx,
- uint32_t min_tx, uint8_t detect_mult,
- const char *profile, int defaults, int *command);
-extern void bfd_peer_sendmsg(struct zclient *zclient, struct bfd_info *bfd_info,
- int family, void *dst_ip, void *src_ip,
- char *if_name, int ttl, int multihop, int cbit,
- int command, int set_flag, vrf_id_t vrf_id);
-
-extern const char *bfd_get_command_dbg_str(int command);
-
-extern struct interface *bfd_get_peer_info(struct stream *s, struct prefix *dp,
- struct prefix *sp, int *status,
- int *remote_cbit,
- vrf_id_t vrf_id);
-
const char *bfd_get_status_str(int status);
-extern void bfd_show_param(struct vty *vty, struct bfd_info *bfd_info,
- int bfd_tag, int extra_space, bool use_json,
- json_object *json_obj);
-
-extern void bfd_show_info(struct vty *vty, struct bfd_info *bfd_info,
- int multihop, int extra_space, bool use_json,
- json_object *json_obj);
-
extern void bfd_client_sendmsg(struct zclient *zclient, int command,
vrf_id_t vrf_id);
-extern void bfd_gbl_init(void);
-
-extern void bfd_gbl_exit(void);
-
-
/*
* BFD new API.
*/
@@ -519,12 +447,6 @@ struct bfd_session_arg {
uint32_t min_tx;
/** Detection multiplier. */
uint32_t detection_multiplier;
-
- /** BFD client information output. */
- struct bfd_info *bfd_info;
-
- /** Write registration indicator. */
- uint8_t set_flag;
};
/**
diff --git a/lib/clippy.c b/lib/clippy.c
index 6223697ae9..7ca99c9a94 100644
--- a/lib/clippy.c
+++ b/lib/clippy.c
@@ -106,12 +106,7 @@ int main(int argc, char **argv)
/* and now for the ugly part... provide simplified logging functions so we
* don't need to link libzebra (which would be a circular build dep) */
-#ifdef __ASSERT_FUNCTION
-#undef __ASSERT_FUNCTION
-#endif
-
#include "log.h"
-#include "zassert.h"
void vzlogx(const struct xref_logmsg *xref, int prio,
const char *format, va_list args)
@@ -120,15 +115,6 @@ void vzlogx(const struct xref_logmsg *xref, int prio,
fputs("\n", stderr);
}
-void _zlog_assert_failed(const char *assertion, const char *file,
- unsigned int line, const char *function)
-{
- fprintf(stderr,
- "Assertion `%s' failed in file %s, line %u, function %s",
- assertion, file, line, (function ? function : "?"));
- abort();
-}
-
void memory_oom(size_t size, const char *name)
{
abort();
diff --git a/lib/command.h b/lib/command.h
index 7e135dbcf6..51da4c52e6 100644
--- a/lib/command.h
+++ b/lib/command.h
@@ -137,6 +137,7 @@ enum node_type {
PREFIX_IPV6_NODE, /* Prefix list node. */
AS_LIST_NODE, /* AS list node. */
COMMUNITY_LIST_NODE, /* Community list node. */
+ COMMUNITY_ALIAS_NODE, /* Community alias node. */
RMAP_NODE, /* Route map node. */
PBRMAP_NODE, /* PBR map node. */
SMUX_NODE, /* SNMP configuration node. */
diff --git a/lib/compiler.h b/lib/compiler.h
index b7a142bdee..86cf347e01 100644
--- a/lib/compiler.h
+++ b/lib/compiler.h
@@ -373,6 +373,10 @@ CPP_NOTICE("time to remove this CONFDATE block")
#else /* !_FRR_ATTRIBUTE_PRINTFRR */
#define PRINTFRR(a, b) __attribute__((format(printf, a, b)))
+/* frr-format plugin is C-only for now, so no point in doing these shenanigans
+ * for C++... (also they can break some C++ stuff...)
+ */
+#ifndef __cplusplus
/* these should be typedefs, but might also be #define */
#ifdef uint64_t
#undef uint64_t
@@ -400,6 +404,8 @@ _Static_assert(sizeof(_uint64_t) == 8 && sizeof(_int64_t) == 8,
#define PRIu64 "llu"
#define PRId64 "lld"
#define PRIx64 "llx"
+
+#endif /* !__cplusplus */
#endif /* !_FRR_ATTRIBUTE_PRINTFRR */
#ifdef __cplusplus
diff --git a/lib/distribute.c b/lib/distribute.c
index 60bd0a47bb..0f503d2ab9 100644
--- a/lib/distribute.c
+++ b/lib/distribute.c
@@ -240,150 +240,59 @@ static int distribute_list_prefix_unset(struct distribute_ctx *ctx,
return 1;
}
-DEFUN (distribute_list,
- distribute_list_cmd,
- "distribute-list [prefix] WORD <in|out> [WORD]",
- "Filter networks in routing updates\n"
- "Specify a prefix\n"
- "Access-list name\n"
- "Filter incoming routing updates\n"
- "Filter outgoing routing updates\n"
- "Interface name\n")
+static enum distribute_type distribute_direction(const char *dir, bool v4)
{
- int prefix = (argv[1]->type == WORD_TKN) ? 1 : 0;
- /* Check of distribute list type. */
- enum distribute_type type = argv[2 + prefix]->arg[0] == 'i'
- ? DISTRIBUTE_V4_IN
- : DISTRIBUTE_V4_OUT;
-
- /* Set appropriate function call */
- void (*distfn)(struct distribute_ctx *, const char *,
- enum distribute_type, const char *) =
- prefix ? &distribute_list_prefix_set : &distribute_list_set;
- struct distribute_ctx *ctx =
- (struct distribute_ctx *)listnode_head(dist_ctx_list);
-
- /* if interface is present, get name */
- const char *ifname = NULL;
- if (argv[argc - 1]->type == VARIABLE_TKN)
- ifname = argv[argc - 1]->arg;
+ if (dir[0] == 'i') {
+ if (v4)
+ return DISTRIBUTE_V4_IN;
+ else
+ return DISTRIBUTE_V6_IN;
+ } else if (dir[0] == 'o') {
+ if (v4)
+ return DISTRIBUTE_V4_OUT;
+ else
+ return DISTRIBUTE_V6_OUT;
+ }
- /* Get interface name corresponding distribute list. */
- distfn(ctx, ifname, type, argv[1 + prefix]->arg);
+ assert(!"Expecting in or out only, fix your code");
- return CMD_SUCCESS;
+ __builtin_unreachable();
}
-DEFUN (ipv6_distribute_list,
- ipv6_distribute_list_cmd,
- "ipv6 distribute-list [prefix] WORD <in|out> [WORD]",
- "IPv6\n"
- "Filter networks in routing updates\n"
- "Specify a prefix\n"
- "Access-list name\n"
- "Filter incoming routing updates\n"
- "Filter outgoing routing updates\n"
- "Interface name\n")
+int distribute_list_parser(bool prefix, bool v4, const char *dir,
+ const char *list, const char *ifname)
{
- int prefix = (argv[2]->type == WORD_TKN) ? 1 : 0;
- /* Check of distribute list type. */
- enum distribute_type type = argv[3 + prefix]->arg[0] == 'i'
- ? DISTRIBUTE_V6_IN
- : DISTRIBUTE_V6_OUT;
+ enum distribute_type type = distribute_direction(dir, v4);
+ struct distribute_ctx *ctx = listnode_head(dist_ctx_list);
- /* Set appropriate function call */
void (*distfn)(struct distribute_ctx *, const char *,
enum distribute_type, const char *) =
prefix ? &distribute_list_prefix_set : &distribute_list_set;
- struct distribute_ctx *ctx = listnode_head(dist_ctx_list);
- /* if interface is present, get name */
- const char *ifname = NULL;
- if (argv[argc - 1]->type == VARIABLE_TKN)
- ifname = argv[argc - 1]->arg;
-
- /* Get interface name corresponding distribute list. */
- distfn(ctx, ifname, type, argv[2 + prefix]->arg);
+ distfn(ctx, ifname, type, list);
return CMD_SUCCESS;
}
-DEFUN (no_distribute_list,
- no_distribute_list_cmd,
- "no distribute-list [prefix] WORD <in|out> [WORD]",
- NO_STR
- "Filter networks in routing updates\n"
- "Specify a prefix\n"
- "Access-list name\n"
- "Filter incoming routing updates\n"
- "Filter outgoing routing updates\n"
- "Interface name\n")
+int distribute_list_no_parser(struct vty *vty, bool prefix, bool v4,
+ const char *dir, const char *list,
+ const char *ifname)
{
- int prefix = (argv[2]->type == WORD_TKN) ? 1 : 0;
- int idx_alname = 2 + prefix;
- int idx_disttype = idx_alname + 1;
- enum distribute_type type =
- argv[idx_disttype]->arg[0] == 'i' ?
- DISTRIBUTE_V4_IN : DISTRIBUTE_V4_OUT;
-
- /* Set appropriate function call */
- int (*distfn)(struct distribute_ctx *, const char *,
- enum distribute_type, const char *) =
- prefix ? &distribute_list_prefix_unset : &distribute_list_unset;
+ enum distribute_type type = distribute_direction(dir, v4);
struct distribute_ctx *ctx = listnode_head(dist_ctx_list);
+ int ret;
- /* if interface is present, get name */
- const char *ifname = NULL;
- if (argv[argc - 1]->type == VARIABLE_TKN)
- ifname = argv[argc - 1]->arg;
- /* Get interface name corresponding distribute list. */
- int ret = distfn(ctx, ifname, type, argv[2 + prefix]->arg);
-
- if (!ret) {
- vty_out(vty, "distribute list doesn't exist\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- return CMD_SUCCESS;
-}
-
-DEFUN (no_ipv6_distribute_list,
- no_ipv6_distribute_list_cmd,
- "no ipv6 distribute-list [prefix] WORD <in|out> [WORD]",
- NO_STR
- "IPv6\n"
- "Filter networks in routing updates\n"
- "Specify a prefix\n"
- "Access-list name\n"
- "Filter incoming routing updates\n"
- "Filter outgoing routing updates\n"
- "Interface name\n")
-{
- int prefix = (argv[3]->type == WORD_TKN) ? 1 : 0;
- int idx_alname = 3 + prefix;
- int idx_disttype = idx_alname + 1;
-
- enum distribute_type type =
- argv[idx_disttype]->arg[0] == 'i' ?
- DISTRIBUTE_V6_IN : DISTRIBUTE_V6_OUT;
- struct distribute_ctx *ctx = listnode_head(dist_ctx_list);
-
- /* Set appropriate function call */
int (*distfn)(struct distribute_ctx *, const char *,
- enum distribute_type, const char *) =
+ enum distribute_type, const char *) =
prefix ? &distribute_list_prefix_unset : &distribute_list_unset;
- /* if interface is present, get name */
- const char *ifname = NULL;
-
- if (argv[argc - 1]->type == VARIABLE_TKN)
- ifname = argv[argc - 1]->arg;
- /* Get interface name corresponding distribute list. */
- int ret = distfn(ctx, ifname, type, argv[3 + prefix]->arg);
+ ret = distfn(ctx, ifname, type, list);
if (!ret) {
vty_out(vty, "distribute list doesn't exist\n");
return CMD_WARNING_CONFIG_FAILED;
}
+
return CMD_SUCCESS;
}
@@ -577,32 +486,3 @@ struct distribute_ctx *distribute_list_ctx_create(struct vrf *vrf)
listnode_add(dist_ctx_list, ctx);
return ctx;
}
-
-/* Initialize distribute list vty commands */
-void distribute_list_init(int node)
-{
- /* vtysh command-extraction doesn't grok install_element(node, ) */
- if (node == RIP_NODE) {
- install_element(RIP_NODE, &distribute_list_cmd);
- install_element(RIP_NODE, &no_distribute_list_cmd);
- } else if (node == RIPNG_NODE) {
- install_element(RIPNG_NODE, &distribute_list_cmd);
- install_element(RIPNG_NODE, &no_distribute_list_cmd);
- /* install v6 */
- install_element(RIPNG_NODE, &ipv6_distribute_list_cmd);
- install_element(RIPNG_NODE, &no_ipv6_distribute_list_cmd);
- }
-
- /* TODO: install v4 syntax command for v6 only protocols. */
- /* if (node == RIPNG_NODE) {
- * install_element (node, &ipv6_as_v4_distribute_list_all_cmd);
- * install_element (node, &no_ipv6_as_v4_distribute_list_all_cmd);
- * install_element (node, &ipv6_as_v4_distribute_list_cmd);
- * install_element (node, &no_ipv6_as_v4_distribute_list_cmd);
- * install_element (node, &ipv6_as_v4_distribute_list_prefix_all_cmd);
- * install_element (node,
- &no_ipv6_as_v4_distribute_list_prefix_all_cmd);
- * install_element (node, &ipv6_as_v4_distribute_list_prefix_cmd);
- * install_element (node, &no_ipv6_as_v4_distribute_list_prefix_cmd);
- }*/
-}
diff --git a/lib/distribute.h b/lib/distribute.h
index 4016d3b133..83682dea6a 100644
--- a/lib/distribute.h
+++ b/lib/distribute.h
@@ -64,7 +64,6 @@ struct distribute_ctx {
};
/* Prototypes for distribute-list. */
-extern void distribute_list_init(int node);
extern struct distribute_ctx *distribute_list_ctx_create(struct vrf *vrf);
extern void distribute_list_delete(struct distribute_ctx **ctx);
extern void distribute_list_add_hook(struct distribute_ctx *ctx,
@@ -85,6 +84,11 @@ extern enum filter_type distribute_apply_in(struct interface *,
extern enum filter_type distribute_apply_out(struct interface *,
struct prefix *);
+extern int distribute_list_parser(bool prefix, bool v4, const char *dir,
+ const char *list, const char *ifname);
+extern int distribute_list_no_parser(struct vty *vty, bool prefix, bool v4,
+ const char *dir, const char *list,
+ const char *ifname);
#ifdef __cplusplus
}
#endif
diff --git a/lib/filter_cli.c b/lib/filter_cli.c
index e147ed5639..f030ce1b33 100644
--- a/lib/filter_cli.c
+++ b/lib/filter_cli.c
@@ -1360,14 +1360,31 @@ DEFPY_YANG(
nb_cli_enqueue_change(vty, "./ipv4-prefix", NB_OP_MODIFY,
prefix_str);
- if (ge_str)
+ if (ge_str) {
nb_cli_enqueue_change(
vty, "./ipv4-prefix-length-greater-or-equal",
NB_OP_MODIFY, ge_str);
- if (le_str)
+ } else {
+ /*
+ * Remove old ge if not being modified
+ */
+ nb_cli_enqueue_change(
+ vty, "./ipv4-prefix-length-greater-or-equal",
+ NB_OP_DESTROY, NULL);
+ }
+
+ if (le_str) {
nb_cli_enqueue_change(
vty, "./ipv4-prefix-length-lesser-or-equal",
NB_OP_MODIFY, le_str);
+ } else {
+ /*
+ * Remove old le if not being modified
+ */
+ nb_cli_enqueue_change(
+ vty, "./ipv4-prefix-length-lesser-or-equal",
+ NB_OP_DESTROY, NULL);
+ }
} else {
nb_cli_enqueue_change(vty, "./any", NB_OP_CREATE, NULL);
}
@@ -1561,14 +1578,31 @@ DEFPY_YANG(
nb_cli_enqueue_change(vty, "./ipv6-prefix", NB_OP_MODIFY,
prefix_str);
- if (ge_str)
+ if (ge_str) {
nb_cli_enqueue_change(
vty, "./ipv6-prefix-length-greater-or-equal",
NB_OP_MODIFY, ge_str);
- if (le_str)
+ } else {
+ /*
+ * Remove old ge if not being modified
+ */
+ nb_cli_enqueue_change(
+ vty, "./ipv6-prefix-length-greater-or-equal",
+ NB_OP_DESTROY, NULL);
+ }
+
+ if (le_str) {
nb_cli_enqueue_change(
vty, "./ipv6-prefix-length-lesser-or-equal",
NB_OP_MODIFY, le_str);
+ } else {
+ /*
+ * Remove old le if not being modified
+ */
+ nb_cli_enqueue_change(
+ vty, "./ipv6-prefix-length-lesser-or-equal",
+ NB_OP_DESTROY, NULL);
+ }
} else {
nb_cli_enqueue_change(vty, "./any", NB_OP_CREATE, NULL);
}
diff --git a/lib/if.h b/lib/if.h
index f425ba8bce..0d689fe14b 100644
--- a/lib/if.h
+++ b/lib/if.h
@@ -393,6 +393,7 @@ struct connected {
#define ZEBRA_IFC_REAL (1 << 0)
#define ZEBRA_IFC_CONFIGURED (1 << 1)
#define ZEBRA_IFC_QUEUED (1 << 2)
+#define ZEBRA_IFC_DOWN (1 << 3)
/*
The ZEBRA_IFC_REAL flag should be set if and only if this address
exists in the kernel and is actually usable. (A case where it exists
@@ -406,6 +407,8 @@ struct connected {
in the kernel. It may and should be set although the address might
not be
usable yet. (compare with ZEBRA_IFC_REAL)
+ The ZEBRA_IFC_DOWN flag is used to record that an address is
+ present, but down/unavailable.
*/
/* Flags for connected address. */
diff --git a/lib/libfrr_trace.c b/lib/libfrr_trace.c
index 2f300e6ee1..59320322ca 100644
--- a/lib/libfrr_trace.c
+++ b/lib/libfrr_trace.c
@@ -1,4 +1,6 @@
#define TRACEPOINT_CREATE_PROBES
#define TRACEPOINT_DEFINE
+#include <zebra.h>
+
#include "libfrr_trace.h"
diff --git a/lib/link_state.c b/lib/link_state.c
index 8606f8eb09..afeb89c592 100644
--- a/lib/link_state.c
+++ b/lib/link_state.c
@@ -22,6 +22,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "if.h"
#include "linklist.h"
#include "log.h"
diff --git a/lib/linklist.c b/lib/linklist.c
index 5de6c8a817..8137b68d84 100644
--- a/lib/linklist.c
+++ b/lib/linklist.c
@@ -320,23 +320,6 @@ void list_delete_all_node(struct list *list)
list->count = 0;
}
-void list_filter_out_nodes(struct list *list, bool (*cond)(void *data))
-{
- struct listnode *node;
- struct listnode *next;
- void *data;
-
- assert(list);
-
- for (ALL_LIST_ELEMENTS(list, node, next, data)) {
- if ((cond && cond(data)) || (!cond)) {
- if (*list->del)
- (*list->del)(data);
- list_delete_node(list, node);
- }
- }
-}
-
void list_delete(struct list **list)
{
assert(*list);
diff --git a/lib/linklist.h b/lib/linklist.h
index d8820c924d..1452145218 100644
--- a/lib/linklist.h
+++ b/lib/linklist.h
@@ -295,19 +295,6 @@ extern void list_delete_all_node(struct list *list);
extern void list_delete_node(struct list *list, struct listnode *node);
/*
- * Delete all nodes which satisfy a condition from a list.
- * Deletes the node if cond function returns true for the node.
- * If function ptr passed is NULL, it deletes all nodes
- *
- * list
- * list to operate on
- * cond
- * function pointer which takes node data as input and return true or false
- */
-
-extern void list_filter_out_nodes(struct list *list, bool (*cond)(void *data));
-
-/*
* Insert a new element into a list with insertion sort if there is no
* duplicate element present in the list. This assumes the input list is
* sorted. If unsorted, it will check for duplicate until it finds out
diff --git a/lib/log.c b/lib/log.c
index ca2f501686..936422104f 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -311,17 +311,6 @@ void zlog_thread_info(int log_level)
zlog(log_level, "Current thread not known/applicable");
}
-void _zlog_assert_failed(const char *assertion, const char *file,
- unsigned int line, const char *function)
-{
- zlog(LOG_CRIT, "Assertion `%s' failed in file %s, line %u, function %s",
- assertion, file, line, (function ? function : "?"));
- zlog_backtrace(LOG_CRIT);
- zlog_thread_info(LOG_CRIT);
- log_memstats(stderr, "log");
- abort();
-}
-
void memory_oom(size_t size, const char *name)
{
zlog(LOG_CRIT,
@@ -472,7 +461,10 @@ static const struct zebra_desc_table command_types[] = {
DESC_ENTRY(ZEBRA_NHRP_NEIGH_UNREGISTER),
DESC_ENTRY(ZEBRA_NEIGH_IP_ADD),
DESC_ENTRY(ZEBRA_NEIGH_IP_DEL),
- DESC_ENTRY(ZEBRA_CONFIGURE_ARP)};
+ DESC_ENTRY(ZEBRA_CONFIGURE_ARP),
+ DESC_ENTRY(ZEBRA_GRE_GET),
+ DESC_ENTRY(ZEBRA_GRE_UPDATE),
+ DESC_ENTRY(ZEBRA_GRE_SOURCE_SET)};
#undef DESC_ENTRY
static const struct zebra_desc_table unknown = {0, "unknown", '?'};
diff --git a/lib/log.h b/lib/log.h
index 7147253644..59f1742d01 100644
--- a/lib/log.h
+++ b/lib/log.h
@@ -22,8 +22,6 @@
#ifndef _ZEBRA_LOG_H
#define _ZEBRA_LOG_H
-#include "zassert.h"
-
#include <syslog.h>
#include <stdint.h>
#include <stdbool.h>
diff --git a/lib/log_vty.c b/lib/log_vty.c
index c6788dd35a..9dbf216d31 100644
--- a/lib/log_vty.c
+++ b/lib/log_vty.c
@@ -647,6 +647,18 @@ DEFPY (show_log_filter,
return CMD_SUCCESS;
}
+/* Enable/disable 'immediate' mode, with no output buffering */
+DEFPY (log_immediate_mode,
+ log_immediate_mode_cmd,
+ "[no] log immediate-mode",
+ NO_STR
+ "Logging control"
+ "Output immediately, without buffering")
+{
+ zlog_set_immediate(!no);
+ return CMD_SUCCESS;
+}
+
void log_config_write(struct vty *vty)
{
bool show_cmdline_hint = false;
@@ -775,4 +787,5 @@ void log_cmd_init(void)
install_element(CONFIG_NODE, &log_filter_clear_cmd);
install_element(CONFIG_NODE, &config_log_filterfile_cmd);
install_element(CONFIG_NODE, &no_config_log_filterfile_cmd);
+ install_element(CONFIG_NODE, &log_immediate_mode_cmd);
}
diff --git a/lib/nexthop.c b/lib/nexthop.c
index 8439398149..0ac6c0ae1b 100644
--- a/lib/nexthop.c
+++ b/lib/nexthop.c
@@ -62,7 +62,8 @@ static int _nexthop_labels_cmp(const struct nexthop *nh1,
if (nhl1->num_labels < nhl2->num_labels)
return -1;
- return memcmp(nhl1->label, nhl2->label, nhl1->num_labels);
+ return memcmp(nhl1->label, nhl2->label,
+ (nhl1->num_labels * sizeof(mpls_label_t)));
}
int nexthop_g_addr_cmp(enum nexthop_types_t type, const union g_addr *addr1,
@@ -203,6 +204,105 @@ int nexthop_cmp(const struct nexthop *next1, const struct nexthop *next2)
}
/*
+ * More-limited comparison function used to detect duplicate
+ * nexthops. This is used in places where we don't need the full
+ * comparison of 'nexthop_cmp()'.
+ */
+int nexthop_cmp_basic(const struct nexthop *nh1,
+ const struct nexthop *nh2)
+{
+ int ret = 0;
+ const struct mpls_label_stack *nhl1 = NULL;
+ const struct mpls_label_stack *nhl2 = NULL;
+
+ if (nh1 == NULL && nh2 == NULL)
+ return 0;
+
+ if (nh1 && !nh2)
+ return 1;
+
+ if (!nh1 && nh2)
+ return -1;
+
+ if (nh1->vrf_id < nh2->vrf_id)
+ return -1;
+
+ if (nh1->vrf_id > nh2->vrf_id)
+ return 1;
+
+ if (nh1->type < nh2->type)
+ return -1;
+
+ if (nh1->type > nh2->type)
+ return 1;
+
+ if (nh1->weight < nh2->weight)
+ return -1;
+
+ if (nh1->weight > nh2->weight)
+ return 1;
+
+ switch (nh1->type) {
+ case NEXTHOP_TYPE_IPV4:
+ case NEXTHOP_TYPE_IPV6:
+ ret = nexthop_g_addr_cmp(nh1->type, &nh1->gate, &nh2->gate);
+ if (ret != 0)
+ return ret;
+ break;
+ case NEXTHOP_TYPE_IPV4_IFINDEX:
+ case NEXTHOP_TYPE_IPV6_IFINDEX:
+ ret = nexthop_g_addr_cmp(nh1->type, &nh1->gate, &nh2->gate);
+ if (ret != 0)
+ return ret;
+ /* Intentional Fall-Through */
+ case NEXTHOP_TYPE_IFINDEX:
+ if (nh1->ifindex < nh2->ifindex)
+ return -1;
+
+ if (nh1->ifindex > nh2->ifindex)
+ return 1;
+ break;
+ case NEXTHOP_TYPE_BLACKHOLE:
+ if (nh1->bh_type < nh2->bh_type)
+ return -1;
+
+ if (nh1->bh_type > nh2->bh_type)
+ return 1;
+ break;
+ }
+
+ /* Compare source addr */
+ ret = nexthop_g_addr_cmp(nh1->type, &nh1->src, &nh2->src);
+ if (ret != 0)
+ goto done;
+
+ nhl1 = nh1->nh_label;
+ nhl2 = nh2->nh_label;
+
+ /* No labels is a match */
+ if (!nhl1 && !nhl2)
+ return 0;
+
+ if (nhl1 && !nhl2)
+ return 1;
+
+ if (nhl2 && !nhl1)
+ return -1;
+
+ if (nhl1->num_labels > nhl2->num_labels)
+ return 1;
+
+ if (nhl1->num_labels < nhl2->num_labels)
+ return -1;
+
+ ret = memcmp(nhl1->label, nhl2->label,
+ (nhl1->num_labels * sizeof(mpls_label_t)));
+
+done:
+ return ret;
+}
+
+/*
* nexthop_type_to_str
*/
const char *nexthop_type_to_str(enum nexthop_types_t nh_type)
diff --git a/lib/nexthop.h b/lib/nexthop.h
index f1ad195cf4..d6ea83cf06 100644
--- a/lib/nexthop.h
+++ b/lib/nexthop.h
@@ -207,6 +207,11 @@ extern int nexthop_g_addr_cmp(enum nexthop_types_t type,
const union g_addr *addr1,
const union g_addr *addr2);
+/* More-limited comparison function used to detect duplicate nexthops.
+ * Returns -1, 0, 1
+ */
+int nexthop_cmp_basic(const struct nexthop *nh1, const struct nexthop *nh2);
+
extern const char *nexthop_type_to_str(enum nexthop_types_t nh_type);
extern bool nexthop_labels_match(const struct nexthop *nh1,
const struct nexthop *nh2);
diff --git a/lib/privs.c b/lib/privs.c
index 49761af871..b3f51267d1 100644
--- a/lib/privs.c
+++ b/lib/privs.c
@@ -159,6 +159,10 @@ static struct {
{
1, (pvalue_t[]){CAP_FOWNER},
},
+ [ZCAP_IPC_LOCK] =
+ {
+ 1, (pvalue_t[]){CAP_IPC_LOCK},
+ },
#endif /* HAVE_LCAPS */
};
diff --git a/lib/privs.h b/lib/privs.h
index 2dcdbe2e6c..9f22d28cf8 100644
--- a/lib/privs.h
+++ b/lib/privs.h
@@ -44,6 +44,7 @@ typedef enum {
ZCAP_DAC_OVERRIDE,
ZCAP_READ_SEARCH,
ZCAP_FOWNER,
+ ZCAP_IPC_LOCK,
ZCAP_MAX
} zebra_capabilities_t;
diff --git a/lib/routing_nb.c b/lib/routing_nb.c
index 0160354a7e..6238fb055d 100644
--- a/lib/routing_nb.c
+++ b/lib/routing_nb.c
@@ -16,6 +16,8 @@
* with this program; see the file COPYING; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "northbound.h"
#include "libfrr.h"
#include "routing_nb.h"
diff --git a/lib/routing_nb_config.c b/lib/routing_nb_config.c
index f66f32015d..594ad6c9e8 100644
--- a/lib/routing_nb_config.c
+++ b/lib/routing_nb_config.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "northbound.h"
#include "libfrr.h"
#include "vrf.h"
diff --git a/lib/sockopt.c b/lib/sockopt.c
index b624fe2230..98bfda5079 100644
--- a/lib/sockopt.c
+++ b/lib/sockopt.c
@@ -667,3 +667,39 @@ int sockopt_tcp_signature(int sock, union sockunion *su, const char *password)
{
return sockopt_tcp_signature_ext(sock, su, 0, password);
}
+
+/* set TCP mss value to socket */
+int sockopt_tcp_mss_set(int sock, int tcp_maxseg)
+{
+ int ret = 0;
+ socklen_t tcp_maxseg_len = sizeof(tcp_maxseg);
+
+ ret = setsockopt(sock, IPPROTO_TCP, TCP_MAXSEG, &tcp_maxseg,
+ tcp_maxseg_len);
+ if (ret != 0) {
+ flog_err_sys(EC_LIB_SYSTEM_CALL,
+ "%s failed: setsockopt(%d): %s", __func__, sock,
+ safe_strerror(errno));
+ }
+
+ return ret;
+}
+
+/* get TCP mss value synced by socket */
+int sockopt_tcp_mss_get(int sock)
+{
+ int ret = 0;
+ int tcp_maxseg = 0;
+ socklen_t tcp_maxseg_len = sizeof(tcp_maxseg);
+
+ ret = getsockopt(sock, IPPROTO_TCP, TCP_MAXSEG, &tcp_maxseg,
+ &tcp_maxseg_len);
+ if (ret != 0) {
+ flog_err_sys(EC_LIB_SYSTEM_CALL,
+ "%s failed: getsockopt(%d): %s", __func__, sock,
+ safe_strerror(errno));
+ return 0;
+ }
+
+ return tcp_maxseg;
+}
diff --git a/lib/sockopt.h b/lib/sockopt.h
index 545abe631f..6c80841e3c 100644
--- a/lib/sockopt.h
+++ b/lib/sockopt.h
@@ -133,6 +133,26 @@ extern int sockopt_tcp_signature(int sock, union sockunion *su,
extern int sockopt_tcp_signature_ext(int sock, union sockunion *su,
uint16_t prefixlen, const char *password);
+/*
+ * set TCP max segment size. This option allows user to configure
+ * max segment size for TCP session
+ *
+ * sock
+ * Socket to enable option on.
+ *
+ * tcp_maxseg
+ * value used for TCP segment size negotiation during SYN
+ */
+extern int sockopt_tcp_mss_set(int sock, int tcp_maxseg);
+
+/*
+ * get TCP max segment size. This option allows user to get
+ * the segment size for TCP session
+ *
+ * sock
+ * Socket to get max segement size.
+ */
+extern int sockopt_tcp_mss_get(int sock);
#ifdef __cplusplus
}
#endif
diff --git a/lib/subdir.am b/lib/subdir.am
index 98ba1cf24c..480c2938d0 100644
--- a/lib/subdir.am
+++ b/lib/subdir.am
@@ -278,13 +278,14 @@ pkginclude_HEADERS += \
lib/yang.h \
lib/yang_translator.h \
lib/yang_wrappers.h \
- lib/zassert.h \
lib/zclient.h \
lib/zebra.h \
lib/zlog.h \
lib/zlog_targets.h \
lib/pbr.h \
lib/routing_nb.h \
+ \
+ lib/assert/assert.h \
# end
@@ -413,7 +414,7 @@ lib_grammar_sandbox_SOURCES = \
lib_grammar_sandbox_LDADD = \
lib/libfrr.la
-lib_clippy_CPPFLAGS = $(AM_CPPFLAGS) -D_GNU_SOURCE -DBUILDING_CLIPPY
+lib_clippy_CPPFLAGS = $(CPPFLAGS_BASE) -D_GNU_SOURCE -DBUILDING_CLIPPY
lib_clippy_CFLAGS = $(AC_CFLAGS) $(PYTHON_CFLAGS)
lib_clippy_LDADD = $(PYTHON_LIBS) $(UST_LIBS) -lelf
lib_clippy_LDFLAGS = -export-dynamic
diff --git a/lib/thread.c b/lib/thread.c
index 3d8b544678..3af89fad5a 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -664,7 +664,7 @@ static int time_hhmmss(char *buf, int buf_size, long sec)
long mm;
int wr;
- zassert(buf_size >= 8);
+ assert(buf_size >= 8);
hh = sec / 3600;
sec %= 3600;
@@ -862,7 +862,10 @@ struct thread *_thread_add_read_write(const struct xref_threadsched *xref,
xref->funcname, xref->xref.file, xref->xref.line,
t_ptr, fd, 0, arg, 0);
- assert(fd >= 0 && fd < m->fd_limit);
+ assert(fd >= 0);
+ if (fd >= m->fd_limit)
+ assert(!"Number of FD's open is greater than FRR currently configured to handle, aborting");
+
frr_with_mutex(&m->mtx) {
if (t_ptr && *t_ptr)
// thread is already scheduled; don't reschedule
diff --git a/lib/typerb.h b/lib/typerb.h
index 60e6d09016..cbed8d4893 100644
--- a/lib/typerb.h
+++ b/lib/typerb.h
@@ -117,6 +117,7 @@ macro_inline type *prefix ## _pop(struct prefix##_head *h) \
typed_rb_remove(&h->rr, re); \
return container_of(re, type, field.re); \
} \
+TYPESAFE_SWAP_ALL_SIMPLE(prefix) \
macro_pure const type *prefix ## _const_first(const struct prefix##_head *h) \
{ \
const struct typed_rb_entry *re; \
diff --git a/lib/typesafe.h b/lib/typesafe.h
index 27e7be1286..ecac1a4381 100644
--- a/lib/typesafe.h
+++ b/lib/typesafe.h
@@ -78,6 +78,19 @@ macro_inline type *prefix ## _find_gteq(struct prefix##_head *h, \
} \
/* ... */
+/* SWAP_ALL_SIMPLE = for containers where the items don't point back to the
+ * head *AND* the head doesn'T points to itself (= everything except LIST,
+ * DLIST and SKIPLIST), just switch out the entire head
+ */
+#define TYPESAFE_SWAP_ALL_SIMPLE(prefix) \
+macro_inline void prefix ## _swap_all(struct prefix##_head *a, \
+ struct prefix##_head *b) \
+{ \
+ struct prefix##_head tmp = *a; \
+ *a = *b; \
+ *b = tmp; \
+} \
+/* ... */
/* single-linked list, unsorted/arbitrary.
* can be used as queue with add_tail / pop
@@ -169,6 +182,17 @@ macro_inline type *prefix ## _pop(struct prefix##_head *h) \
h->sh.last_next = &h->sh.first; \
return container_of(sitem, type, field.si); \
} \
+macro_inline void prefix ## _swap_all(struct prefix##_head *a, \
+ struct prefix##_head *b) \
+{ \
+ struct prefix##_head tmp = *a; \
+ *a = *b; \
+ *b = tmp; \
+ if (a->sh.last_next == &b->sh.first) \
+ a->sh.last_next = &a->sh.first; \
+ if (b->sh.last_next == &a->sh.first) \
+ b->sh.last_next = &b->sh.first; \
+} \
macro_pure const type *prefix ## _const_first(const struct prefix##_head *h) \
{ \
return container_of_null(h->sh.first, type, field.si); \
@@ -215,6 +239,34 @@ static inline void typesafe_dlist_add(struct dlist_head *head,
head->count++;
}
+static inline void typesafe_dlist_swap_all(struct dlist_head *a,
+ struct dlist_head *b)
+{
+ struct dlist_head tmp = *a;
+
+ a->count = b->count;
+ if (a->count) {
+ a->hitem.next = b->hitem.next;
+ a->hitem.prev = b->hitem.prev;
+ a->hitem.next->prev = &a->hitem;
+ a->hitem.prev->next = &a->hitem;
+ } else {
+ a->hitem.next = &a->hitem;
+ a->hitem.prev = &a->hitem;
+ }
+
+ b->count = tmp.count;
+ if (b->count) {
+ b->hitem.next = tmp.hitem.next;
+ b->hitem.prev = tmp.hitem.prev;
+ b->hitem.next->prev = &b->hitem;
+ b->hitem.prev->next = &b->hitem;
+ } else {
+ b->hitem.next = &b->hitem;
+ b->hitem.prev = &b->hitem;
+ }
+}
+
/* double-linked list, for fast item deletion
*/
#define PREDECL_DLIST(prefix) \
@@ -271,6 +323,11 @@ macro_inline type *prefix ## _pop(struct prefix##_head *h) \
h->dh.count--; \
return container_of(ditem, type, field.di); \
} \
+macro_inline void prefix ## _swap_all(struct prefix##_head *a, \
+ struct prefix##_head *b) \
+{ \
+ typesafe_dlist_swap_all(&a->dh, &b->dh); \
+} \
macro_pure const type *prefix ## _const_first(const struct prefix##_head *h) \
{ \
const struct dlist_item *ditem = h->dh.hitem.next; \
@@ -380,6 +437,7 @@ macro_inline type *prefix ## _pop(struct prefix##_head *h) \
typesafe_heap_resize(&h->hh, false); \
return container_of(hitem, type, field.hi); \
} \
+TYPESAFE_SWAP_ALL_SIMPLE(prefix) \
macro_pure const type *prefix ## _const_first(const struct prefix##_head *h) \
{ \
if (h->hh.count == 0) \
@@ -518,6 +576,7 @@ macro_inline type *prefix ## _pop(struct prefix##_head *h) \
h->sh.first = sitem->next; \
return container_of(sitem, type, field.si); \
} \
+TYPESAFE_SWAP_ALL_SIMPLE(prefix) \
macro_pure const type *prefix ## _const_first(const struct prefix##_head *h) \
{ \
return container_of_null(h->sh.first, type, field.si); \
@@ -708,6 +767,7 @@ macro_inline type *prefix ## _pop(struct prefix##_head *h) \
} \
return NULL; \
} \
+TYPESAFE_SWAP_ALL_SIMPLE(prefix) \
macro_pure const type *prefix ## _const_first(const struct prefix##_head *h) \
{ \
uint32_t i; \
@@ -824,6 +884,17 @@ macro_inline type *prefix ## _pop(struct prefix##_head *h) \
struct sskip_item *sitem = typesafe_skiplist_pop(&h->sh); \
return container_of_null(sitem, type, field.si); \
} \
+macro_inline void prefix ## _swap_all(struct prefix##_head *a, \
+ struct prefix##_head *b) \
+{ \
+ struct prefix##_head tmp = *a; \
+ *a = *b; \
+ *b = tmp; \
+ a->sh.hitem.next[SKIPLIST_OVERFLOW] = (struct sskip_item *) \
+ ((uintptr_t)a->sh.overflow | 1); \
+ b->sh.hitem.next[SKIPLIST_OVERFLOW] = (struct sskip_item *) \
+ ((uintptr_t)b->sh.overflow | 1); \
+} \
macro_pure const type *prefix ## _const_first(const struct prefix##_head *h) \
{ \
const struct sskip_item *first = h->sh.hitem.next[0]; \
diff --git a/lib/xref.h b/lib/xref.h
index 63166b069a..949458b313 100644
--- a/lib/xref.h
+++ b/lib/xref.h
@@ -33,6 +33,7 @@ enum xref_type {
XREFT_THREADSCHED = 0x100,
XREFT_LOGMSG = 0x200,
+ XREFT_ASSERT = 0x280,
XREFT_DEFUN = 0x300,
XREFT_INSTALL_ELEMENT = 0x301,
diff --git a/lib/zassert.h b/lib/zassert.h
deleted file mode 100644
index 527282c4f2..0000000000
--- a/lib/zassert.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * This file is part of Quagga.
- *
- * Quagga is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
- * later version.
- *
- * Quagga is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; see the file COPYING; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _QUAGGA_ASSERT_H
-#define _QUAGGA_ASSERT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void _zlog_assert_failed(const char *assertion, const char *file,
- unsigned int line, const char *function)
- __attribute__((noreturn));
-
-#undef __ASSERT_FUNCTION
-#define __ASSERT_FUNCTION __func__
-
-#define zassert(EX) \
- ((void)((EX) ? 0 : (_zlog_assert_failed(#EX, __FILE__, __LINE__, \
- __ASSERT_FUNCTION), \
- 0)))
-
-#undef assert
-#define assert(EX) zassert(EX)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _QUAGGA_ASSERT_H */
diff --git a/lib/zclient.c b/lib/zclient.c
index b1aea55afa..3ea1789441 100644
--- a/lib/zclient.c
+++ b/lib/zclient.c
@@ -3931,6 +3931,11 @@ static int zclient_read(struct thread *thread)
(*zclient->neighbor_get)(command, zclient, length,
vrf_id);
break;
+ case ZEBRA_GRE_UPDATE:
+ if (zclient->gre_update)
+ (*zclient->gre_update)(command, zclient,
+ length, vrf_id);
+ break;
default:
break;
}
@@ -4252,3 +4257,23 @@ int zclient_neigh_ip_decode(struct stream *s, struct zapi_neigh_ip *api)
stream_failure:
return -1;
}
+
+int zclient_send_zebra_gre_request(struct zclient *client,
+ struct interface *ifp)
+{
+ struct stream *s;
+
+ if (!client || client->sock < 0) {
+ zlog_err("%s : zclient not ready", __func__);
+ return -1;
+ }
+ s = client->obuf;
+ stream_reset(s);
+ zclient_create_header(s,
+ ZEBRA_GRE_GET,
+ ifp->vrf_id);
+ stream_putl(s, ifp->ifindex);
+ stream_putw_at(s, 0, stream_get_endp(s));
+ zclient_send_message(client);
+ return 0;
+}
diff --git a/lib/zclient.h b/lib/zclient.h
index e8fff4b881..8c27916542 100644
--- a/lib/zclient.h
+++ b/lib/zclient.h
@@ -232,6 +232,9 @@ typedef enum {
ZEBRA_NEIGH_IP_ADD,
ZEBRA_NEIGH_IP_DEL,
ZEBRA_CONFIGURE_ARP,
+ ZEBRA_GRE_GET,
+ ZEBRA_GRE_UPDATE,
+ ZEBRA_GRE_SOURCE_SET,
} zebra_message_types_t;
enum zebra_error_types {
@@ -393,6 +396,7 @@ struct zclient {
void (*neighbor_added)(ZAPI_CALLBACK_ARGS);
void (*neighbor_removed)(ZAPI_CALLBACK_ARGS);
void (*neighbor_get)(ZAPI_CALLBACK_ARGS);
+ void (*gre_update)(ZAPI_CALLBACK_ARGS);
};
/* Zebra API message flag. */
@@ -1228,6 +1232,8 @@ struct zapi_client_close_info {
extern int zapi_client_close_notify_decode(struct stream *s,
struct zapi_client_close_info *info);
+extern int zclient_send_zebra_gre_request(struct zclient *client,
+ struct interface *ifp);
#ifdef __cplusplus
}
#endif
diff --git a/lib/zebra.h b/lib/zebra.h
index 26c0fe05b5..3b624117de 100644
--- a/lib/zebra.h
+++ b/lib/zebra.h
@@ -206,7 +206,7 @@
#define __attribute__(x)
#endif /* !__GNUC__ || VTYSH_EXTRACT_PL */
-#include "zassert.h"
+#include <assert.h>
/*
* Add explicit static cast only when using a C++ compiler.
diff --git a/lib/zlog.c b/lib/zlog.c
index 24800c6e64..89ab9265d1 100644
--- a/lib/zlog.c
+++ b/lib/zlog.c
@@ -81,6 +81,11 @@ static gid_t zlog_gid = -1;
DECLARE_ATOMLIST(zlog_targets, struct zlog_target, head);
static struct zlog_targets_head zlog_targets;
+/* Global setting for buffered vs immediate output. The default is
+ * per-pthread buffering.
+ */
+static bool default_immediate;
+
/* cf. zlog.h for additional comments on this struct.
*
* Note: you MUST NOT pass the format string + va_list to non-FRR format
@@ -395,7 +400,7 @@ static void vzlog_tls(struct zlog_tls *zlog_tls, const struct xref_logmsg *xref,
struct zlog_msg *msg;
char *buf;
bool ignoremsg = true;
- bool immediate = false;
+ bool immediate = default_immediate;
/* avoid further processing cost if no target wants this message */
rcu_read_lock();
@@ -521,6 +526,36 @@ void zlog_sigsafe(const char *text, size_t len)
}
}
+void _zlog_assert_failed(const struct xref_assert *xref, const char *extra, ...)
+{
+ va_list ap;
+ static bool assert_in_assert; /* "global-ish" variable, init to 0 */
+
+ if (assert_in_assert)
+ abort();
+ assert_in_assert = true;
+
+ if (extra) {
+ struct va_format vaf;
+
+ va_start(ap, extra);
+ vaf.fmt = extra;
+ vaf.va = &ap;
+
+ zlog(LOG_CRIT,
+ "%s:%d: %s(): assertion (%s) failed, extra info: %pVA",
+ xref->xref.file, xref->xref.line, xref->xref.func,
+ xref->expr, &vaf);
+
+ va_end(ap);
+ } else
+ zlog(LOG_CRIT, "%s:%d: %s(): assertion (%s) failed",
+ xref->xref.file, xref->xref.line, xref->xref.func,
+ xref->expr);
+
+ /* abort() prints backtrace & memstats in SIGABRT handler */
+ abort();
+}
int zlog_msg_prio(struct zlog_msg *msg)
{
@@ -714,6 +749,14 @@ struct zlog_target *zlog_target_replace(struct zlog_target *oldzt,
return oldzt;
}
+/*
+ * Enable or disable 'immediate' output - default is to buffer
+ * each pthread's messages.
+ */
+void zlog_set_immediate(bool set_p)
+{
+ default_immediate = set_p;
+}
/* common init */
diff --git a/lib/zlog.h b/lib/zlog.h
index 66d8f1e5d7..c421c16f38 100644
--- a/lib/zlog.h
+++ b/lib/zlog.h
@@ -25,6 +25,8 @@
#include <unistd.h>
#include <sys/uio.h>
+#include <assert.h>
+
#include "atomlist.h"
#include "frrcu.h"
#include "memory.h"
@@ -249,6 +251,9 @@ extern void zlog_tls_buffer_init(void);
extern void zlog_tls_buffer_flush(void);
extern void zlog_tls_buffer_fini(void);
+/* Enable or disable 'immediate' output - default is to buffer messages. */
+extern void zlog_set_immediate(bool set_p);
+
#ifdef __cplusplus
}
#endif
diff --git a/nhrpd/linux.c b/nhrpd/linux.c
index f697311d49..4986bfb99c 100644
--- a/nhrpd/linux.c
+++ b/nhrpd/linux.c
@@ -7,30 +7,12 @@
* (at your option) any later version.
*/
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
#include <errno.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <asm/types.h>
-#include <arpa/inet.h>
-#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-#include <linux/ip.h>
-#include <linux/if_arp.h>
-#include <linux/if_tunnel.h>
-#include <linux/limits.h>
+#include "zebra.h"
+#include <linux/if_packet.h>
#include "nhrp_protocol.h"
#include "os.h"
-#include "netlink.h"
#ifndef HAVE_STRLCPY
size_t strlcpy(char *__restrict dest,
diff --git a/nhrpd/netlink.h b/nhrpd/netlink.h
index 5e971cabf1..f1143a2b5e 100644
--- a/nhrpd/netlink.h
+++ b/nhrpd/netlink.h
@@ -7,21 +7,16 @@
* (at your option) any later version.
*/
-#include <stdint.h>
+#include <zebra.h>
+#include <vrf.h>
+#include <if.h>
-union sockunion;
-struct interface;
extern int netlink_nflog_group;
extern int netlink_mcast_nflog_group;
-extern int netlink_req_fd;
-void netlink_init(void);
int netlink_configure_arp(unsigned int ifindex, int pf);
void netlink_update_binding(struct interface *ifp, union sockunion *proto,
union sockunion *nbma);
void netlink_set_nflog_group(int nlgroup);
-void netlink_gre_get_info(unsigned int ifindex, uint32_t *gre_key,
- unsigned int *link_index, struct in_addr *saddr);
-void netlink_gre_set_link(unsigned int ifindex, unsigned int link_index);
diff --git a/nhrpd/netlink_arp.c b/nhrpd/netlink_arp.c
index ecea0a9ec5..5fcb311888 100644
--- a/nhrpd/netlink_arp.c
+++ b/nhrpd/netlink_arp.c
@@ -25,7 +25,6 @@
#include "netlink.h"
#include "znl.h"
-int netlink_req_fd = -1;
int netlink_nflog_group;
static int netlink_log_fd = -1;
static struct thread *netlink_log_thread;
@@ -203,10 +202,3 @@ void nhrp_neighbor_operation(ZAPI_CALLBACK_ARGS)
nhrp_cache_set_used(c, state == ZEBRA_NEIGH_STATE_REACHABLE);
}
}
-
-void netlink_init(void)
-{
- netlink_req_fd = znl_open(NETLINK_ROUTE, 0);
- if (netlink_req_fd < 0)
- return;
-}
diff --git a/nhrpd/netlink_gre.c b/nhrpd/netlink_gre.c
deleted file mode 100644
index 3fdfa9c313..0000000000
--- a/nhrpd/netlink_gre.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* NHRP netlink/GRE tunnel configuration code
- * Copyright (c) 2014-2016 Timo Teräs
- *
- * This file is free software: you may copy, redistribute and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/socket.h>
-#include <linux/netlink.h>
-#include <linux/rtnetlink.h>
-#include <linux/in.h>
-#include <linux/if.h>
-#include <linux/ip.h>
-#include <linux/ipv6.h>
-#include <linux/if_tunnel.h>
-
-#include "debug.h"
-#include "netlink.h"
-#include "znl.h"
-
-static int __netlink_gre_get_data(struct zbuf *zb, struct zbuf *data,
- int ifindex)
-{
- struct nlmsghdr *n;
- struct ifinfomsg *ifi;
- struct zbuf payload, rtapayload;
- struct rtattr *rta;
-
- debugf(NHRP_DEBUG_KERNEL, "netlink-link-gre: get-info %u", ifindex);
-
- n = znl_nlmsg_push(zb, RTM_GETLINK, NLM_F_REQUEST);
- ifi = znl_push(zb, sizeof(*ifi));
- *ifi = (struct ifinfomsg){
- .ifi_index = ifindex,
- };
- znl_nlmsg_complete(zb, n);
-
- if (zbuf_send(zb, netlink_req_fd) < 0
- || zbuf_recv(zb, netlink_req_fd) < 0)
- return -1;
-
- n = znl_nlmsg_pull(zb, &payload);
- if (!n)
- return -1;
-
- if (n->nlmsg_type != RTM_NEWLINK)
- return -1;
-
- ifi = znl_pull(&payload, sizeof(struct ifinfomsg));
- if (!ifi)
- return -1;
-
- debugf(NHRP_DEBUG_KERNEL,
- "netlink-link-gre: ifindex %u, receive msg_type %u, msg_flags %u",
- ifi->ifi_index, n->nlmsg_type, n->nlmsg_flags);
-
- if (ifi->ifi_index != ifindex)
- return -1;
-
- while ((rta = znl_rta_pull(&payload, &rtapayload)) != NULL)
- if (rta->rta_type == IFLA_LINKINFO)
- break;
- if (!rta)
- return -1;
-
- payload = rtapayload;
- while ((rta = znl_rta_pull(&payload, &rtapayload)) != NULL)
- if (rta->rta_type == IFLA_INFO_DATA)
- break;
- if (!rta)
- return -1;
-
- *data = rtapayload;
- return 0;
-}
-
-void netlink_gre_get_info(unsigned int ifindex, uint32_t *gre_key,
- unsigned int *link_index, struct in_addr *saddr)
-{
- struct zbuf *zb = zbuf_alloc(8192), data, rtapl;
- struct rtattr *rta;
-
- *link_index = 0;
- *gre_key = 0;
- saddr->s_addr = 0;
-
- if (__netlink_gre_get_data(zb, &data, ifindex) < 0)
- goto err;
-
- while ((rta = znl_rta_pull(&data, &rtapl)) != NULL) {
- switch (rta->rta_type) {
- case IFLA_GRE_LINK:
- *link_index = zbuf_get32(&rtapl);
- break;
- case IFLA_GRE_IKEY:
- case IFLA_GRE_OKEY:
- *gre_key = zbuf_get32(&rtapl);
- break;
- case IFLA_GRE_LOCAL:
- saddr->s_addr = zbuf_get32(&rtapl);
- break;
- }
- }
-err:
- zbuf_free(zb);
-}
-
-void netlink_gre_set_link(unsigned int ifindex, unsigned int link_index)
-{
- struct nlmsghdr *n;
- struct ifinfomsg *ifi;
- struct rtattr *rta_info, *rta_data, *rta;
- struct zbuf *zr = zbuf_alloc(8192), data, rtapl;
- struct zbuf *zb = zbuf_alloc(8192);
- size_t len;
-
- if (__netlink_gre_get_data(zr, &data, ifindex) < 0)
- goto err;
-
- n = znl_nlmsg_push(zb, RTM_NEWLINK, NLM_F_REQUEST);
- ifi = znl_push(zb, sizeof(*ifi));
- *ifi = (struct ifinfomsg){
- .ifi_index = ifindex,
- };
- rta_info = znl_rta_nested_push(zb, IFLA_LINKINFO);
- znl_rta_push(zb, IFLA_INFO_KIND, "gre", 3);
- rta_data = znl_rta_nested_push(zb, IFLA_INFO_DATA);
-
- znl_rta_push_u32(zb, IFLA_GRE_LINK, link_index);
- while ((rta = znl_rta_pull(&data, &rtapl)) != NULL) {
- if (rta->rta_type == IFLA_GRE_LINK)
- continue;
- len = zbuf_used(&rtapl);
- znl_rta_push(zb, rta->rta_type, zbuf_pulln(&rtapl, len), len);
- }
-
- znl_rta_nested_complete(zb, rta_data);
- znl_rta_nested_complete(zb, rta_info);
-
- znl_nlmsg_complete(zb, n);
- zbuf_send(zb, netlink_req_fd);
- zbuf_recv(zb, netlink_req_fd);
-err:
- zbuf_free(zb);
- zbuf_free(zr);
-}
diff --git a/nhrpd/nhrp_cache.c b/nhrpd/nhrp_cache.c
index bcf0e2168c..c358baecb2 100644
--- a/nhrpd/nhrp_cache.c
+++ b/nhrpd/nhrp_cache.c
@@ -72,7 +72,7 @@ static void nhrp_cache_free(struct nhrp_cache *c)
debugf(NHRP_DEBUG_COMMON, "Deleting cache entry");
nhrp_cache_counts[c->cur.type]--;
notifier_call(&c->notifier_list, NOTIFY_CACHE_DELETE);
- zassert(!notifier_active(&c->notifier_list));
+ assert(!notifier_active(&c->notifier_list));
hash_release(nifp->cache_hash, c);
THREAD_OFF(c->t_timeout);
THREAD_OFF(c->t_auth);
diff --git a/nhrpd/nhrp_interface.c b/nhrpd/nhrp_interface.c
index 402ffe9a24..2db8997bad 100644
--- a/nhrpd/nhrp_interface.c
+++ b/nhrpd/nhrp_interface.c
@@ -19,14 +19,52 @@
#include "nhrpd.h"
#include "os.h"
-#include "netlink.h"
+#include "hash.h"
DEFINE_MTYPE_STATIC(NHRPD, NHRP_IF, "NHRP interface");
+DEFINE_MTYPE_STATIC(NHRPD, NHRP_IF_GRE, "NHRP GRE interface");
+
+struct hash *nhrp_gre_list;
static void nhrp_interface_update_cache_config(struct interface *ifp,
bool available,
uint8_t family);
+static unsigned int nhrp_gre_info_key(const void *data)
+{
+ const struct nhrp_gre_info *r = data;
+
+ return r->ifindex;
+}
+
+static bool nhrp_gre_info_cmp(const void *data, const void *key)
+{
+ const struct nhrp_gre_info *a = data, *b = key;
+
+ if (a->ifindex == b->ifindex)
+ return true;
+ return false;
+}
+
+static void *nhrp_interface_gre_alloc(void *data)
+{
+ struct nhrp_gre_info *a;
+ struct nhrp_gre_info *b = data;
+
+ a = XMALLOC(MTYPE_NHRP_IF_GRE, sizeof(struct nhrp_gre_info));
+ memcpy(a, b, sizeof(struct nhrp_gre_info));
+ return a;
+}
+
+struct nhrp_gre_info *nhrp_gre_info_alloc(struct nhrp_gre_info *p)
+{
+ struct nhrp_gre_info *a;
+
+ a = (struct nhrp_gre_info *)hash_get(nhrp_gre_list, p,
+ nhrp_interface_gre_alloc);
+ return a;
+}
+
static int nhrp_if_new_hook(struct interface *ifp)
{
struct nhrp_interface *nifp;
@@ -74,6 +112,9 @@ void nhrp_interface_init(void)
{
hook_register_prio(if_add, 0, nhrp_if_new_hook);
hook_register_prio(if_del, 0, nhrp_if_delete_hook);
+
+ nhrp_gre_list = hash_create(nhrp_gre_info_key, nhrp_gre_info_cmp,
+ "NHRP GRE list Hash");
}
void nhrp_interface_update_mtu(struct interface *ifp, afi_t afi)
@@ -102,14 +143,16 @@ static void nhrp_interface_update_source(struct interface *ifp)
{
struct nhrp_interface *nifp = ifp->info;
- if (!nifp->source || !nifp->nbmaifp
- || (ifindex_t)nifp->linkidx == nifp->nbmaifp->ifindex)
+ if (!nifp->source || !nifp->nbmaifp ||
+ ((ifindex_t)nifp->link_idx == nifp->nbmaifp->ifindex &&
+ (nifp->link_vrf_id == nifp->nbmaifp->vrf_id)))
return;
- nifp->linkidx = nifp->nbmaifp->ifindex;
- debugf(NHRP_DEBUG_IF, "%s: bound device index changed to %d", ifp->name,
- nifp->linkidx);
- netlink_gre_set_link(ifp->ifindex, nifp->linkidx);
+ nifp->link_idx = nifp->nbmaifp->ifindex;
+ nifp->link_vrf_id = nifp->nbmaifp->vrf_id;
+ debugf(NHRP_DEBUG_IF, "%s: bound device index changed to %d, vr %u",
+ ifp->name, nifp->link_idx, nifp->link_vrf_id);
+ nhrp_send_zebra_gre_source_set(ifp, nifp->link_idx, nifp->link_vrf_id);
}
static void nhrp_interface_interface_notifier(struct notifier_block *n,
@@ -136,7 +179,8 @@ static void nhrp_interface_interface_notifier(struct notifier_block *n,
}
}
-static void nhrp_interface_update_nbma(struct interface *ifp)
+void nhrp_interface_update_nbma(struct interface *ifp,
+ struct nhrp_gre_info *gre_info)
{
struct nhrp_interface *nifp = ifp->info, *nbmanifp = NULL;
struct interface *nbmaifp = NULL;
@@ -145,21 +189,32 @@ static void nhrp_interface_update_nbma(struct interface *ifp)
sockunion_family(&nbma) = AF_UNSPEC;
if (nifp->source)
- nbmaifp = if_lookup_by_name(nifp->source, VRF_DEFAULT);
+ nbmaifp = if_lookup_by_name(nifp->source, nifp->link_vrf_id);
switch (ifp->ll_type) {
case ZEBRA_LLT_IPGRE: {
struct in_addr saddr = {0};
- netlink_gre_get_info(ifp->ifindex, &nifp->grekey,
- &nifp->linkidx, &saddr);
+
+ if (!gre_info) {
+ nhrp_send_zebra_gre_request(ifp);
+ return;
+ }
+ nifp->i_grekey = gre_info->ikey;
+ nifp->o_grekey = gre_info->okey;
+ nifp->link_idx = gre_info->ifindex_link;
+ nifp->link_vrf_id = gre_info->vrfid_link;
+ saddr.s_addr = gre_info->vtep_ip.s_addr;
+
debugf(NHRP_DEBUG_IF, "%s: GRE: %x %x %x", ifp->name,
- nifp->grekey, nifp->linkidx, saddr.s_addr);
- if (saddr.s_addr != INADDR_ANY)
- sockunion_set(&nbma, AF_INET, (uint8_t *)&saddr.s_addr,
+ nifp->i_grekey, nifp->link_idx, saddr.s_addr);
+ if (saddr.s_addr)
+ sockunion_set(&nbma, AF_INET,
+ (uint8_t *)&saddr.s_addr,
sizeof(saddr.s_addr));
- else if (!nbmaifp && nifp->linkidx != IFINDEX_INTERNAL)
+ else if (!nbmaifp && nifp->link_idx != IFINDEX_INTERNAL)
nbmaifp =
- if_lookup_by_index(nifp->linkidx, VRF_DEFAULT);
+ if_lookup_by_index(nifp->link_idx,
+ nifp->link_vrf_id);
} break;
default:
break;
@@ -322,7 +377,7 @@ int nhrp_ifp_create(struct interface *ifp)
ifp->name, ifp->ifindex, ifp->ll_type,
if_link_type_str(ifp->ll_type));
- nhrp_interface_update_nbma(ifp);
+ nhrp_interface_update_nbma(ifp, NULL);
return 0;
}
@@ -402,7 +457,7 @@ static void nhrp_interface_update_cache_config(struct interface *ifp, bool avail
int nhrp_ifp_up(struct interface *ifp)
{
debugf(NHRP_DEBUG_IF, "if-up: %s", ifp->name);
- nhrp_interface_update_nbma(ifp);
+ nhrp_interface_update_nbma(ifp, NULL);
return 0;
}
@@ -493,5 +548,5 @@ void nhrp_interface_set_source(struct interface *ifp, const char *ifname)
free(nifp->source);
nifp->source = ifname ? strdup(ifname) : NULL;
- nhrp_interface_update_nbma(ifp);
+ nhrp_interface_update_nbma(ifp, NULL);
}
diff --git a/nhrpd/nhrp_main.c b/nhrpd/nhrp_main.c
index e9bce3e09a..c2111a7706 100644
--- a/nhrpd/nhrp_main.c
+++ b/nhrpd/nhrp_main.c
@@ -26,7 +26,6 @@
#include "filter.h"
#include "nhrpd.h"
-#include "netlink.h"
#include "nhrp_errors.h"
DEFINE_MGROUP(NHRPD, "NHRP");
@@ -154,7 +153,6 @@ int main(int argc, char **argv)
assert(nhrpd_privs.change);
nhrpd_privs.change(ZPRIVS_RAISE);
- netlink_init();
evmgr_init();
nhrp_vc_init();
nhrp_packet_init();
diff --git a/nhrpd/nhrp_route.c b/nhrpd/nhrp_route.c
index 23fa0771ef..ee8db277d9 100644
--- a/nhrpd/nhrp_route.c
+++ b/nhrpd/nhrp_route.c
@@ -380,6 +380,7 @@ void nhrp_zebra_init(void)
zclient->neighbor_added = nhrp_neighbor_operation;
zclient->neighbor_removed = nhrp_neighbor_operation;
zclient->neighbor_get = nhrp_neighbor_operation;
+ zclient->gre_update = nhrp_gre_update;
zclient_init(zclient, ZEBRA_ROUTE_NHRP, 0, &nhrpd_privs);
}
@@ -412,6 +413,33 @@ void nhrp_send_zebra_configure_arp(struct interface *ifp, int family)
zclient_send_message(zclient);
}
+void nhrp_send_zebra_gre_source_set(struct interface *ifp,
+ unsigned int link_idx,
+ vrf_id_t link_vrf_id)
+{
+ struct stream *s;
+
+ if (!zclient || zclient->sock < 0) {
+ zlog_err("%s : zclient not ready", __func__);
+ return;
+ }
+ if (link_idx == IFINDEX_INTERNAL || link_vrf_id == VRF_UNKNOWN) {
+ /* silently ignore */
+ return;
+ }
+ s = zclient->obuf;
+ stream_reset(s);
+ zclient_create_header(s,
+ ZEBRA_GRE_SOURCE_SET,
+ ifp->vrf_id);
+ stream_putl(s, ifp->ifindex);
+ stream_putl(s, link_idx);
+ stream_putl(s, link_vrf_id);
+ stream_putl(s, 0); /* mtu provisioning */
+ stream_putw_at(s, 0, stream_get_endp(s));
+ zclient_send_message(zclient);
+}
+
void nhrp_send_zebra_nbr(union sockunion *in,
union sockunion *out,
struct interface *ifp)
@@ -429,6 +457,11 @@ void nhrp_send_zebra_nbr(union sockunion *in,
zclient_send_message(zclient);
}
+int nhrp_send_zebra_gre_request(struct interface *ifp)
+{
+ return zclient_send_zebra_gre_request(zclient, ifp);
+}
+
void nhrp_zebra_terminate(void)
{
nhrp_zebra_register_neigh(VRF_DEFAULT, AFI_IP, false);
@@ -441,3 +474,48 @@ void nhrp_zebra_terminate(void)
route_table_finish(zebra_rib[AFI_IP]);
route_table_finish(zebra_rib[AFI_IP6]);
}
+
+void nhrp_gre_update(ZAPI_CALLBACK_ARGS)
+{
+ struct stream *s;
+ struct nhrp_gre_info gre_info, *val;
+ struct interface *ifp;
+
+ /* result */
+ s = zclient->ibuf;
+ if (vrf_id != VRF_DEFAULT)
+ return;
+
+ /* read GRE information */
+ STREAM_GETL(s, gre_info.ifindex);
+ STREAM_GETL(s, gre_info.ikey);
+ STREAM_GETL(s, gre_info.okey);
+ STREAM_GETL(s, gre_info.ifindex_link);
+ STREAM_GETL(s, gre_info.vrfid_link);
+ STREAM_GETL(s, gre_info.vtep_ip.s_addr);
+ STREAM_GETL(s, gre_info.vtep_ip_remote.s_addr);
+ if (gre_info.ifindex == IFINDEX_INTERNAL)
+ val = NULL;
+ else
+ val = hash_lookup(nhrp_gre_list, &gre_info);
+ if (val) {
+ if (gre_info.vtep_ip.s_addr != val->vtep_ip.s_addr ||
+ gre_info.vrfid_link != val->vrfid_link ||
+ gre_info.ifindex_link != val->ifindex_link ||
+ gre_info.ikey != val->ikey ||
+ gre_info.okey != val->okey) {
+ /* update */
+ memcpy(val, &gre_info, sizeof(struct nhrp_gre_info));
+ }
+ } else {
+ val = nhrp_gre_info_alloc(&gre_info);
+ }
+ ifp = if_lookup_by_index(gre_info.ifindex, vrf_id);
+ debugf(NHRP_DEBUG_EVENT, "%s: gre interface %d vr %d obtained from system",
+ ifp ? ifp->name : "<none>", gre_info.ifindex, vrf_id);
+ if (ifp)
+ nhrp_interface_update_nbma(ifp, val);
+ return;
+stream_failure:
+ zlog_err("%s(): error reading response ..", __func__);
+}
diff --git a/nhrpd/nhrpd.h b/nhrpd/nhrpd.h
index 730f9b7d13..17abb04762 100644
--- a/nhrpd/nhrpd.h
+++ b/nhrpd/nhrpd.h
@@ -86,14 +86,22 @@ static inline int notifier_active(struct notifier_list *l)
return !list_empty(&l->notifier_head);
}
+extern struct hash *nhrp_gre_list;
+
void nhrp_zebra_init(void);
void nhrp_zebra_terminate(void);
void nhrp_send_zebra_configure_arp(struct interface *ifp, int family);
void nhrp_send_zebra_nbr(union sockunion *in,
union sockunion *out,
struct interface *ifp);
-void nhrp_send_zebra_configure_arp(struct interface *ifp,
- int family);
+
+void nhrp_send_zebra_gre_source_set(struct interface *ifp,
+ unsigned int link_idx,
+ vrf_id_t link_vrf_id);
+
+extern int nhrp_send_zebra_gre_request(struct interface *ifp);
+extern struct nhrp_gre_info *nhrp_gre_info_alloc(struct nhrp_gre_info *p);
+
struct zbuf;
struct nhrp_vc;
struct nhrp_cache;
@@ -300,8 +308,10 @@ struct nhrp_interface {
char *ipsec_profile, *ipsec_fallback_profile, *source;
union sockunion nbma;
union sockunion nat_nbma;
- unsigned int linkidx;
- uint32_t grekey;
+ unsigned int link_idx;
+ unsigned int link_vrf_id;
+ uint32_t i_grekey;
+ uint32_t o_grekey;
struct hash *peer_hash;
struct hash *cache_config_hash;
@@ -325,6 +335,18 @@ struct nhrp_interface {
} afi[AFI_MAX];
};
+struct nhrp_gre_info {
+ ifindex_t ifindex;
+ struct in_addr vtep_ip; /* IFLA_GRE_LOCAL */
+ struct in_addr vtep_ip_remote; /* IFLA_GRE_REMOTE */
+ uint32_t ikey;
+ uint32_t okey;
+ ifindex_t ifindex_link; /* Interface index of interface
+ * linked with GRE
+ */
+ vrf_id_t vrfid_link;
+};
+
extern struct zebra_privs_t nhrpd_privs;
int sock_open_unix(const char *path);
@@ -332,6 +354,8 @@ int sock_open_unix(const char *path);
void nhrp_interface_init(void);
void nhrp_interface_update(struct interface *ifp);
void nhrp_interface_update_mtu(struct interface *ifp, afi_t afi);
+void nhrp_interface_update_nbma(struct interface *ifp,
+ struct nhrp_gre_info *gre_info);
int nhrp_interface_add(ZAPI_CALLBACK_ARGS);
int nhrp_interface_delete(ZAPI_CALLBACK_ARGS);
@@ -340,6 +364,7 @@ int nhrp_interface_down(ZAPI_CALLBACK_ARGS);
int nhrp_interface_address_add(ZAPI_CALLBACK_ARGS);
int nhrp_interface_address_delete(ZAPI_CALLBACK_ARGS);
void nhrp_neighbor_operation(ZAPI_CALLBACK_ARGS);
+void nhrp_gre_update(ZAPI_CALLBACK_ARGS);
void nhrp_interface_notify_add(struct interface *ifp, struct notifier_block *n,
notifier_fn_t fn);
diff --git a/nhrpd/subdir.am b/nhrpd/subdir.am
index d00aecc1ea..9a186d6ed8 100644
--- a/nhrpd/subdir.am
+++ b/nhrpd/subdir.am
@@ -13,7 +13,6 @@ nhrpd_nhrpd_LDADD = lib/libfrr.la lib/libfrrcares.la $(LIBCAP)
nhrpd_nhrpd_SOURCES = \
nhrpd/linux.c \
nhrpd/netlink_arp.c \
- nhrpd/netlink_gre.c \
nhrpd/nhrp_cache.c \
nhrpd/nhrp_errors.c \
nhrpd/nhrp_event.c \
diff --git a/nhrpd/zbuf.c b/nhrpd/zbuf.c
index 43ce974817..e191a90f2d 100644
--- a/nhrpd/zbuf.c
+++ b/nhrpd/zbuf.c
@@ -14,7 +14,7 @@
#include <string.h>
#include <unistd.h>
#include <errno.h>
-#include "zassert.h"
+#include <assert.h>
#include "zbuf.h"
#include "memory.h"
#include "nhrpd.h"
@@ -59,7 +59,7 @@ void zbuf_reset(struct zbuf *zb)
void zbuf_reset_head(struct zbuf *zb, void *ptr)
{
- zassert((void *)zb->buf <= ptr && ptr <= (void *)zb->tail);
+ assert((void *)zb->buf <= ptr && ptr <= (void *)zb->tail);
zb->head = ptr;
}
diff --git a/nhrpd/zbuf.h b/nhrpd/zbuf.h
index d4a7c15a95..2741860bfd 100644
--- a/nhrpd/zbuf.h
+++ b/nhrpd/zbuf.h
@@ -15,7 +15,6 @@
#include <endian.h>
#include <sys/types.h>
-#include "zassert.h"
#include "list.h"
struct zbuf {
diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index 27d4f0755e..286e642781 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -389,6 +389,8 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
zlog_debug(
"prefix %pFX was denied by export list",
&route->prefix);
+ ospf6_abr_delete_route(route, summary,
+ summary_table, old);
return 0;
}
}
@@ -401,6 +403,9 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
zlog_debug(
"prefix %pFX was denied by filter-list out",
&route->prefix);
+ ospf6_abr_delete_route(route, summary, summary_table,
+ old);
+
return 0;
}
@@ -1075,7 +1080,8 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
== FILTER_DENY) {
if (is_debug)
zlog_debug(
- "Prefix was denied by import-list");
+ "Prefix %pFX was denied by import-list",
+ &prefix);
if (old)
ospf6_route_remove(old, table);
return;
@@ -1087,7 +1093,9 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
if (prefix_list_apply(PREFIX_LIST_IN(oa), &prefix)
!= PREFIX_PERMIT) {
if (is_debug)
- zlog_debug("Prefix was denied by prefix-list");
+ zlog_debug(
+ "Prefix %pFX was denied by prefix-list in",
+ &prefix);
if (old)
ospf6_route_remove(old, table);
return;
@@ -1287,6 +1295,21 @@ void ospf6_abr_reimport(struct ospf6_area *oa)
ospf6_abr_examin_summary(lsa, oa);
}
+/* export filter removed so determine if we should reoriginate summary LSAs */
+void ospf6_abr_reexport(struct ospf6_area *oa)
+{
+ struct ospf6_route *route;
+
+ /* if not a ABR return success */
+ if (!ospf6_is_router_abr(oa->ospf6))
+ return;
+
+ /* Redo summaries if required */
+ for (route = ospf6_route_head(oa->ospf6->route_table); route;
+ route = ospf6_route_next(route))
+ ospf6_abr_originate_summary_to_area(route, oa);
+}
+
void ospf6_abr_prefix_resummarize(struct ospf6 *o)
{
struct ospf6_route *route;
diff --git a/ospf6d/ospf6_abr.h b/ospf6d/ospf6_abr.h
index 25a73f9203..6a912ac630 100644
--- a/ospf6d/ospf6_abr.h
+++ b/ospf6d/ospf6_abr.h
@@ -73,6 +73,7 @@ extern void ospf6_abr_examin_brouter(uint32_t router_id,
struct ospf6_route *route,
struct ospf6 *ospf6);
extern void ospf6_abr_reimport(struct ospf6_area *oa);
+extern void ospf6_abr_reexport(struct ospf6_area *oa);
extern void ospf6_abr_range_reset_cost(struct ospf6 *ospf6);
extern void ospf6_abr_prefix_resummarize(struct ospf6 *ospf6);
@@ -86,5 +87,6 @@ extern void ospf6_abr_old_path_update(struct ospf6_route *old_route,
struct ospf6_route *route,
struct ospf6_route_table *table);
extern void ospf6_abr_init(void);
+extern void ospf6_abr_reexport(struct ospf6_area *oa);
#endif /*OSPF6_ABR_H*/
diff --git a/ospf6d/ospf6_area.c b/ospf6d/ospf6_area.c
index 6bf61b4804..d65e40279d 100644
--- a/ospf6d/ospf6_area.c
+++ b/ospf6d/ospf6_area.c
@@ -661,7 +661,9 @@ DEFUN (area_filter_list,
XFREE(MTYPE_OSPF6_PLISTNAME, PREFIX_NAME_OUT(area));
PREFIX_NAME_OUT(area) =
XSTRDUP(MTYPE_OSPF6_PLISTNAME, plistname);
- ospf6_abr_enable_area(area);
+
+ /* Redo summaries if required */
+ ospf6_abr_reexport(area);
}
return CMD_SUCCESS;
@@ -703,12 +705,32 @@ DEFUN (no_area_filter_list,
return CMD_SUCCESS;
XFREE(MTYPE_OSPF6_PLISTNAME, PREFIX_NAME_OUT(area));
- ospf6_abr_enable_area(area);
+ PREFIX_LIST_OUT(area) = NULL;
+ ospf6_abr_reexport(area);
}
return CMD_SUCCESS;
}
+void ospf6_filter_update(struct access_list *access)
+{
+ struct ospf6_area *oa;
+ struct listnode *n, *node, *nnode;
+ struct ospf6 *ospf6;
+
+ for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6)) {
+ for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, n, oa)) {
+ if (IMPORT_NAME(oa)
+ && strcmp(IMPORT_NAME(oa), access->name) == 0)
+ ospf6_abr_reimport(oa);
+
+ if (EXPORT_NAME(oa)
+ && strcmp(EXPORT_NAME(oa), access->name) == 0)
+ ospf6_abr_reexport(oa);
+ }
+ }
+}
+
void ospf6_area_plist_update(struct prefix_list *plist, int add)
{
struct listnode *node, *nnode;
@@ -724,11 +746,15 @@ void ospf6_area_plist_update(struct prefix_list *plist, int add)
for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6)) {
for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, n, oa)) {
if (PREFIX_NAME_IN(oa)
- && !strcmp(PREFIX_NAME_IN(oa), name))
+ && !strcmp(PREFIX_NAME_IN(oa), name)) {
PREFIX_LIST_IN(oa) = add ? plist : NULL;
+ ospf6_abr_reexport(oa);
+ }
if (PREFIX_NAME_OUT(oa)
- && !strcmp(PREFIX_NAME_OUT(oa), name))
+ && !strcmp(PREFIX_NAME_OUT(oa), name)) {
PREFIX_LIST_OUT(oa) = add ? plist : NULL;
+ ospf6_abr_reexport(oa);
+ }
}
}
}
@@ -818,7 +844,9 @@ DEFUN (area_export_list,
free(EXPORT_NAME(area));
EXPORT_NAME(area) = strdup(argv[idx_name]->arg);
- ospf6_abr_enable_area(area);
+
+ /* Redo summaries if required */
+ ospf6_abr_reexport(area);
return CMD_SUCCESS;
}
@@ -846,39 +874,26 @@ DEFUN (no_area_export_list,
free(EXPORT_NAME(area));
EXPORT_NAME(area) = NULL;
- ospf6_abr_enable_area(area);
+ ospf6_abr_reexport(area);
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_spf_tree,
- show_ipv6_ospf6_spf_tree_cmd,
- "show ipv6 ospf6 spf tree [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "Shortest Path First calculation\n"
- "Show SPF tree\n"
- JSON_STR)
+static int ipv6_ospf6_spf_tree_common(struct vty *vty, struct ospf6 *ospf6,
+ bool uj)
{
struct listnode *node;
struct ospf6_area *oa;
+ struct prefix prefix;
struct ospf6_vertex *root;
struct ospf6_route *route;
- struct prefix prefix;
- struct ospf6 *ospf6;
json_object *json = NULL;
json_object *json_area = NULL;
json_object *json_head = NULL;
- bool uj = use_json(argc, argv);
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
if (uj)
json = json_object_new_object();
ospf6_linkstate_prefix(ospf6->router_id, htonl(0), &prefix);
-
for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) {
if (uj) {
json_area = json_object_new_object();
@@ -918,35 +933,47 @@ DEFUN (show_ipv6_ospf6_spf_tree,
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_area_spf_tree,
- show_ipv6_ospf6_area_spf_tree_cmd,
- "show ipv6 ospf6 area A.B.C.D spf tree",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- OSPF6_AREA_STR
- OSPF6_AREA_ID_STR
- "Shortest Path First calculation\n"
- "Show SPF tree\n")
+DEFUN(show_ipv6_ospf6_spf_tree, show_ipv6_ospf6_spf_tree_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] spf tree [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Shortest Path First calculation\n"
+ "Show SPF tree\n" JSON_STR)
{
- int idx_ipv4 = 4;
- uint32_t area_id;
- struct ospf6_area *oa;
- struct ospf6_vertex *root;
- struct ospf6_route *route;
- struct prefix prefix;
+ struct listnode *node;
struct ospf6 *ospf6;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+ bool uj = use_json(argc, argv);
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ipv6_ospf6_spf_tree_common(vty, ospf6, uj);
+ if (!all_vrf)
+ break;
+ }
+ }
+
+ return CMD_SUCCESS;
+}
+
+static int show_ospf6_area_spf_tree_common(struct vty *vty,
+ struct cmd_token **argv,
+ struct ospf6 *ospf6,
+ uint32_t area_id, int idx_ipv4)
+{
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ struct ospf6_area *oa;
+ struct prefix prefix;
+ struct ospf6_vertex *root;
+ struct ospf6_route *route;
ospf6_linkstate_prefix(ospf6->router_id, htonl(0), &prefix);
- if (inet_pton(AF_INET, argv[idx_ipv4]->arg, &area_id) != 1) {
- vty_out(vty, "Malformed Area-ID: %s\n", argv[idx_ipv4]->arg);
- return CMD_SUCCESS;
- }
oa = ospf6_area_lookup(area_id, ospf6);
if (oa == NULL) {
vty_out(vty, "No such Area: %s\n", argv[idx_ipv4]->arg);
@@ -965,41 +992,55 @@ DEFUN (show_ipv6_ospf6_area_spf_tree,
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_simulate_spf_tree_root,
- show_ipv6_ospf6_simulate_spf_tree_root_cmd,
- "show ipv6 ospf6 simulate spf-tree A.B.C.D area A.B.C.D",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "Shortest Path First calculation\n"
- "Show SPF tree\n"
- "Specify root's router-id to calculate another router's SPF tree\n"
- "OSPF6 area parameters\n"
- OSPF6_AREA_ID_STR)
+DEFUN(show_ipv6_ospf6_area_spf_tree, show_ipv6_ospf6_area_spf_tree_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] area A.B.C.D spf tree",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" OSPF6_AREA_STR OSPF6_AREA_ID_STR
+ "Shortest Path First calculation\n"
+ "Show SPF tree\n")
{
- int idx_ipv4 = 5;
- int idx_ipv4_2 = 7;
+ int idx_ipv4 = 4;
uint32_t area_id;
+ struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_ipv4 += 2;
+
+ if (inet_pton(AF_INET, argv[idx_ipv4]->arg, &area_id) != 1) {
+ vty_out(vty, "Malformed Area-ID: %s\n", argv[idx_ipv4]->arg);
+ return CMD_SUCCESS;
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ show_ospf6_area_spf_tree_common(vty, argv, ospf6,
+ area_id, idx_ipv4);
+ if (!all_vrf)
+ break;
+ }
+ }
+
+ return CMD_SUCCESS;
+}
+
+static int
+show_ospf6_simulate_spf_tree_commen(struct vty *vty, struct cmd_token **argv,
+ struct ospf6 *ospf6, uint32_t router_id,
+ uint32_t area_id, struct prefix prefix,
+ int idx_ipv4, int idx_ipv4_2)
+{
struct ospf6_area *oa;
struct ospf6_vertex *root;
struct ospf6_route *route;
- struct prefix prefix;
- uint32_t router_id;
struct ospf6_route_table *spf_table;
unsigned char tmp_debug_ospf6_spf = 0;
- struct ospf6 *ospf6;
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
-
- OSPF6_CMD_CHECK_RUNNING(ospf6);
- inet_pton(AF_INET, argv[idx_ipv4]->arg, &router_id);
- ospf6_linkstate_prefix(router_id, htonl(0), &prefix);
-
- if (inet_pton(AF_INET, argv[idx_ipv4_2]->arg, &area_id) != 1) {
- vty_out(vty, "Malformed Area-ID: %s\n", argv[idx_ipv4_2]->arg);
- return CMD_SUCCESS;
- }
oa = ospf6_area_lookup(area_id, ospf6);
if (oa == NULL) {
vty_out(vty, "No such Area: %s\n", argv[idx_ipv4_2]->arg);
@@ -1029,6 +1070,54 @@ DEFUN (show_ipv6_ospf6_simulate_spf_tree_root,
return CMD_SUCCESS;
}
+DEFUN(show_ipv6_ospf6_simulate_spf_tree_root,
+ show_ipv6_ospf6_simulate_spf_tree_root_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] simulate spf-tree A.B.C.D area A.B.C.D",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Shortest Path First calculation\n"
+ "Show SPF tree\n"
+ "Specify root's router-id to calculate another router's SPF tree\n"
+ "OSPF6 area parameters\n" OSPF6_AREA_ID_STR)
+{
+ int idx_ipv4 = 5;
+ int idx_ipv4_2 = 7;
+ uint32_t area_id;
+ struct prefix prefix;
+ uint32_t router_id;
+ struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_ipv4 += 2;
+ idx_ipv4_2 += 2;
+ }
+ inet_pton(AF_INET, argv[idx_ipv4]->arg, &router_id);
+ ospf6_linkstate_prefix(router_id, htonl(0), &prefix);
+
+ if (inet_pton(AF_INET, argv[idx_ipv4_2]->arg, &area_id) != 1) {
+ vty_out(vty, "Malformed Area-ID: %s\n", argv[idx_ipv4_2]->arg);
+ return CMD_SUCCESS;
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ show_ospf6_simulate_spf_tree_commen(
+ vty, argv, ospf6, router_id, area_id, prefix,
+ idx_ipv4, idx_ipv4_2);
+ if (!all_vrf)
+ break;
+ }
+ }
+
+ return CMD_SUCCESS;
+}
+
DEFUN (ospf6_area_stub,
ospf6_area_stub_cmd,
"area <A.B.C.D|(0-4294967295)> stub",
@@ -1158,8 +1247,9 @@ void ospf6_area_interface_delete(struct ospf6_interface *oi)
if (!om6->ospf6)
return;
- for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6))
+ for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6)) {
for (ALL_LIST_ELEMENTS(ospf6->area_list, node, nnode, oa))
if (listnode_lookup(oa->if_list, oi))
listnode_delete(oa->if_list, oi);
+ }
}
diff --git a/ospf6d/ospf6_area.h b/ospf6d/ospf6_area.h
index 8a58b2a50e..761fe75f73 100644
--- a/ospf6d/ospf6_area.h
+++ b/ospf6d/ospf6_area.h
@@ -148,6 +148,7 @@ extern void ospf6_area_show(struct vty *, struct ospf6_area *,
json_object *json_areas, bool use_json);
extern void ospf6_area_plist_update(struct prefix_list *plist, int add);
+extern void ospf6_filter_update(struct access_list *access);
extern void ospf6_area_config_write(struct vty *vty, struct ospf6 *ospf6);
extern void ospf6_area_init(void);
struct ospf6_interface;
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c
index ffd6dc22c3..c37d89bcb8 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -41,6 +41,7 @@
#include "ospf6_spf.h"
#include "ospf6_top.h"
+#include "ospf6d.h"
#include "ospf6_area.h"
#include "ospf6_interface.h"
#include "ospf6_neighbor.h"
@@ -1397,7 +1398,7 @@ DEFUN (ospf6_redistribute,
struct ospf6_redist *red;
VTY_DECLVAR_CONTEXT(ospf6, ospf6);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+
char *proto = argv[argc - 1]->text;
type = proto_redistnum(AFI_IP6, proto);
if (type < 0)
@@ -1427,7 +1428,6 @@ DEFUN (ospf6_redistribute_routemap,
struct ospf6_redist *red;
VTY_DECLVAR_CONTEXT(ospf6, ospf6);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
char *proto = argv[idx_protocol]->text;
type = proto_redistnum(AFI_IP6, proto);
@@ -1460,8 +1460,6 @@ DEFUN (no_ospf6_redistribute,
VTY_DECLVAR_CONTEXT(ospf6, ospf6);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
-
char *proto = argv[idx_protocol]->text;
type = proto_redistnum(AFI_IP6, proto);
if (type < 0)
@@ -1639,8 +1637,6 @@ DEFPY (ospf6_default_route_originate,
int cur_originate = ospf6->default_originate;
- OSPF6_CMD_CHECK_RUNNING(ospf6);
-
red = ospf6_redist_add(ospf6, DEFAULT_ROUTE, 0);
if (always != NULL)
@@ -1696,8 +1692,6 @@ DEFPY (no_ospf6_default_information_originate,
VTY_DECLVAR_CONTEXT(ospf6, ospf6);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
-
red = ospf6_redist_lookup(ospf6, DEFAULT_ROUTE, 0);
if (!red)
return CMD_SUCCESS;
@@ -2215,46 +2209,61 @@ static void ospf6_asbr_external_route_show(struct vty *vty,
forwarding);
}
-DEFUN (show_ipv6_ospf6_redistribute,
- show_ipv6_ospf6_redistribute_cmd,
- "show ipv6 ospf6 redistribute [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "redistributing External information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_redistribute, show_ipv6_ospf6_redistribute_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] redistribute [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "redistributing External information\n" JSON_STR)
{
struct ospf6_route *route;
struct ospf6 *ospf6 = NULL;
json_object *json = NULL;
bool uj = use_json(argc, argv);
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
json_object *json_array_routes = NULL;
json_object *json_array_redistribute = NULL;
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
if (uj) {
json = json_object_new_object();
json_array_routes = json_object_new_array();
json_array_redistribute = json_object_new_array();
}
- ospf6_redistribute_show_config(vty, ospf6, json_array_redistribute,
- json, uj);
- for (route = ospf6_route_head(ospf6->external_table); route;
- route = ospf6_route_next(route)) {
- ospf6_asbr_external_route_show(vty, route, json_array_routes,
- uj);
- }
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf
+ || ((ospf6->name == NULL && vrf_name == NULL)
+ || (ospf6->name && vrf_name
+ && strcmp(ospf6->name, vrf_name) == 0))) {
+ ospf6_redistribute_show_config(
+ vty, ospf6, json_array_redistribute, json, uj);
+
+ for (route = ospf6_route_head(ospf6->external_table);
+ route; route = ospf6_route_next(route)) {
+ ospf6_asbr_external_route_show(
+ vty, route, json_array_routes, uj);
+ }
- if (uj) {
- json_object_object_add(json, "routes", json_array_routes);
- vty_out(vty, "%s\n",
- json_object_to_json_string_ext(
- json, JSON_C_TO_STRING_PRETTY));
- json_object_free(json);
+ if (uj) {
+ json_object_object_add(json, "routes",
+ json_array_routes);
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ }
+
+ if (!all_vrf)
+ break;
+ }
}
+
return CMD_SUCCESS;
}
diff --git a/ospf6d/ospf6_flood.c b/ospf6d/ospf6_flood.c
index 3e86e9cc83..76e81aab7b 100644
--- a/ospf6d/ospf6_flood.c
+++ b/ospf6d/ospf6_flood.c
@@ -381,7 +381,8 @@ void ospf6_flood_interface(struct ospf6_neighbor *from, struct ospf6_lsa *lsa,
} else {
/* (d) add retrans-list, schedule retransmission */
if (is_debug)
- zlog_debug("Add retrans-list of this neighbor");
+ zlog_debug("Add retrans-list of neighbor %s ",
+ on->name);
ospf6_increment_retrans_count(lsa);
ospf6_lsdb_add(ospf6_lsa_copy(lsa), on->retrans_list);
thread_add_timer(master, ospf6_lsupdate_send_neighbor,
@@ -395,7 +396,8 @@ void ospf6_flood_interface(struct ospf6_neighbor *from, struct ospf6_lsa *lsa,
if (retrans_added == 0) {
if (is_debug)
zlog_debug(
- "No retransmission scheduled, next interface");
+ "No retransmission scheduled, next interface %s",
+ oi->interface->name);
return;
}
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
index f3af8b308f..c2f9c3362e 100644
--- a/ospf6d/ospf6_interface.c
+++ b/ospf6d/ospf6_interface.c
@@ -405,6 +405,7 @@ void ospf6_interface_connected_route_update(struct interface *ifp)
struct connected *c;
struct listnode *node, *nnode;
struct in6_addr nh_addr;
+ int count = 0, max_addr_count;
oi = (struct ospf6_interface *)ifp->info;
if (oi == NULL)
@@ -423,10 +424,22 @@ void ospf6_interface_connected_route_update(struct interface *ifp)
/* update "route to advertise" interface route table */
ospf6_route_remove_all(oi->route_connected);
+ if (oi->ifmtu >= OSPF6_JUMBO_MTU)
+ max_addr_count = OSPF6_MAX_IF_ADDRS_JUMBO;
+ else
+ max_addr_count = OSPF6_MAX_IF_ADDRS;
+
for (ALL_LIST_ELEMENTS(oi->interface->connected, node, nnode, c)) {
if (c->address->family != AF_INET6)
continue;
+ /* number of interface addresses supported is based on MTU
+ * size of OSPFv3 packet
+ */
+ count++;
+ if (count >= max_addr_count)
+ break;
+
CONTINUE_IF_ADDRESS_LINKLOCAL(IS_OSPF6_DEBUG_INTERFACE,
c->address);
CONTINUE_IF_ADDRESS_UNSPECIFIED(IS_OSPF6_DEBUG_INTERFACE,
@@ -474,8 +487,8 @@ void ospf6_interface_connected_route_update(struct interface *ifp)
OSPF6_INTRA_PREFIX_LSA_SCHEDULE_STUB(oi->area);
}
-static void ospf6_interface_state_change(uint8_t next_state,
- struct ospf6_interface *oi)
+static int ospf6_interface_state_change(uint8_t next_state,
+ struct ospf6_interface *oi)
{
uint8_t prev_state;
struct ospf6 *ospf6;
@@ -484,7 +497,7 @@ static void ospf6_interface_state_change(uint8_t next_state,
oi->state = next_state;
if (prev_state == next_state)
- return;
+ return -1;
/* log */
if (IS_OSPF6_DEBUG_INTERFACE) {
@@ -525,6 +538,8 @@ static void ospf6_interface_state_change(uint8_t next_state,
}
hook_call(ospf6_interface_change, oi, next_state, prev_state);
+
+ return 0;
}
@@ -1175,19 +1190,13 @@ static int ospf6_interface_show(struct vty *vty, struct interface *ifp,
return 0;
}
-/* show interface */
-DEFUN(show_ipv6_ospf6_interface,
- show_ipv6_ospf6_interface_ifname_cmd,
- "show ipv6 ospf6 interface [IFNAME] [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- INTERFACE_STR
- IFNAME_STR
- JSON_STR)
+static int show_ospf6_interface_common(struct vty *vty, vrf_id_t vrf_id,
+ int argc, struct cmd_token **argv,
+ int idx_ifname, int intf_idx,
+ int json_idx)
{
- struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
- int idx_ifname = 4;
+
+ struct vrf *vrf = vrf_lookup_by_id(vrf_id);
struct interface *ifp;
json_object *json;
json_object *json_int;
@@ -1195,9 +1204,8 @@ DEFUN(show_ipv6_ospf6_interface,
if (uj) {
json = json_object_new_object();
- if (argc == 6) {
- ifp = if_lookup_by_name(argv[idx_ifname]->arg,
- VRF_DEFAULT);
+ if (argc == json_idx) {
+ ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);
json_int = json_object_new_object();
if (ifp == NULL) {
json_object_string_add(json, "noSuchInterface",
@@ -1224,9 +1232,8 @@ DEFUN(show_ipv6_ospf6_interface,
json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
} else {
- if (argc == 5) {
- ifp = if_lookup_by_name(argv[idx_ifname]->arg,
- VRF_DEFAULT);
+ if (argc == intf_idx) {
+ ifp = if_lookup_by_name(argv[idx_ifname]->arg, vrf_id);
if (ifp == NULL) {
vty_out(vty, "No such Interface: %s\n",
argv[idx_ifname]->arg);
@@ -1238,6 +1245,42 @@ DEFUN(show_ipv6_ospf6_interface,
ospf6_interface_show(vty, ifp, NULL, uj);
}
}
+ return CMD_SUCCESS;
+}
+
+/* show interface */
+DEFUN(show_ipv6_ospf6_interface, show_ipv6_ospf6_interface_ifname_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] interface [IFNAME] [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" INTERFACE_STR IFNAME_STR JSON_STR)
+{
+ int idx_ifname = 4;
+ int intf_idx = 5;
+ int json_idx = 6;
+ struct listnode *node;
+ struct ospf6 *ospf6;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_ifname += 2;
+ intf_idx += 2;
+ json_idx += 2;
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ show_ospf6_interface_common(vty, ospf6->vrf_id, argc,
+ argv, idx_ifname, intf_idx,
+ json_idx);
+
+ if (!all_vrf)
+ break;
+ }
+ }
return CMD_SUCCESS;
}
@@ -1245,7 +1288,7 @@ DEFUN(show_ipv6_ospf6_interface,
static int ospf6_interface_show_traffic(struct vty *vty,
struct interface *intf_ifp,
int display_once, json_object *json,
- bool use_json)
+ bool use_json, vrf_id_t vrf_id)
{
struct interface *ifp;
struct vrf *vrf = NULL;
@@ -1255,7 +1298,7 @@ static int ospf6_interface_show_traffic(struct vty *vty,
if (intf_ifp)
vrf = vrf_lookup_by_id(intf_ifp->vrf_id);
else
- vrf = vrf_lookup_by_id(VRF_DEFAULT);
+ vrf = vrf_lookup_by_id(vrf_id);
if (!display_once && !use_json) {
vty_out(vty, "\n");
@@ -1356,17 +1399,9 @@ static int ospf6_interface_show_traffic(struct vty *vty,
return CMD_SUCCESS;
}
-/* show interface */
-DEFUN(show_ipv6_ospf6_interface_traffic,
- show_ipv6_ospf6_interface_traffic_cmd,
- "show ipv6 ospf6 interface traffic [IFNAME] [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- INTERFACE_STR
- "Protocol Packet counters\n"
- IFNAME_STR
- JSON_STR)
+static int ospf6_interface_show_traffic_common(struct vty *vty, int argc,
+ struct cmd_token **argv,
+ vrf_id_t vrf_id)
{
int idx_ifname = 0;
int display_once = 0;
@@ -1380,7 +1415,7 @@ DEFUN(show_ipv6_ospf6_interface_traffic,
if (argv_find(argv, argc, "IFNAME", &idx_ifname)) {
intf_name = argv[idx_ifname]->arg;
- ifp = if_lookup_by_name(intf_name, VRF_DEFAULT);
+ ifp = if_lookup_by_name(intf_name, vrf_id);
if (uj) {
if (ifp == NULL) {
json_object_string_add(json, "status",
@@ -1420,7 +1455,7 @@ DEFUN(show_ipv6_ospf6_interface_traffic,
}
}
- ospf6_interface_show_traffic(vty, ifp, display_once, json, uj);
+ ospf6_interface_show_traffic(vty, ifp, display_once, json, uj, vrf_id);
if (uj) {
vty_out(vty, "%s\n",
@@ -1429,94 +1464,148 @@ DEFUN(show_ipv6_ospf6_interface_traffic,
json_object_free(json);
}
+ return CMD_SUCCESS;
+}
+
+/* show interface */
+DEFUN(show_ipv6_ospf6_interface_traffic, show_ipv6_ospf6_interface_traffic_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] interface traffic [IFNAME] [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" INTERFACE_STR
+ "Protocol Packet counters\n" IFNAME_STR JSON_STR)
+{
+ struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_interface_show_traffic_common(vty, argc, argv,
+ ospf6->vrf_id);
+
+ if (!all_vrf)
+ break;
+ }
+ }
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_interface_ifname_prefix,
- show_ipv6_ospf6_interface_ifname_prefix_cmd,
- "show ipv6 ospf6 interface IFNAME prefix\
+DEFUN(show_ipv6_ospf6_interface_ifname_prefix,
+ show_ipv6_ospf6_interface_ifname_prefix_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] interface IFNAME prefix\
[<\
detail\
|<X:X::X:X|X:X::X:X/M> [<match|detail>]\
>] [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- INTERFACE_STR
- IFNAME_STR
- "Display connected prefixes to advertise\n"
- "Display details of the prefixes\n"
- OSPF6_ROUTE_ADDRESS_STR
- OSPF6_ROUTE_PREFIX_STR
- OSPF6_ROUTE_MATCH_STR
- "Display details of the prefixes\n"
- JSON_STR)
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" INTERFACE_STR IFNAME_STR
+ "Display connected prefixes to advertise\n"
+ "Display details of the prefixes\n" OSPF6_ROUTE_ADDRESS_STR
+ OSPF6_ROUTE_PREFIX_STR OSPF6_ROUTE_MATCH_STR
+ "Display details of the prefixes\n" JSON_STR)
{
int idx_ifname = 4;
int idx_prefix = 6;
- struct interface *ifp;
struct ospf6_interface *oi;
bool uj = use_json(argc, argv);
- ifp = if_lookup_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);
- if (ifp == NULL) {
- vty_out(vty, "No such Interface: %s\n", argv[idx_ifname]->arg);
- return CMD_WARNING;
+ struct ospf6 *ospf6;
+ struct listnode *node;
+ struct interface *ifp;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_ifname += 2;
+ idx_prefix += 2;
}
- oi = ifp->info;
- if (oi == NULL) {
- vty_out(vty, "OSPFv3 is not enabled on %s\n",
- argv[idx_ifname]->arg);
- return CMD_WARNING;
- }
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ifp = if_lookup_by_name(argv[idx_ifname]->arg,
+ ospf6->vrf_id);
+ if (ifp == NULL) {
+ vty_out(vty, "No such Interface: %s\n",
+ argv[idx_ifname]->arg);
+ return CMD_WARNING;
+ }
- if (CHECK_FLAG(oi->flag, OSPF6_INTERFACE_DISABLE)) {
- vty_out(vty, "Interface %s not attached to area\n",
- argv[idx_ifname]->arg);
- return CMD_WARNING;
- }
+ oi = ifp->info;
+ if (oi == NULL
+ || CHECK_FLAG(oi->flag, OSPF6_INTERFACE_DISABLE)) {
+ vty_out(vty,
+ "Interface %s not attached to area\n",
+ argv[idx_ifname]->arg);
+ return CMD_WARNING;
+ }
- ospf6_route_table_show(vty, idx_prefix, argc, argv, oi->route_connected,
- uj);
+ ospf6_route_table_show(vty, idx_prefix, argc, argv,
+ oi->route_connected, uj);
+
+ if (!all_vrf)
+ break;
+ }
+ }
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_interface_prefix,
- show_ipv6_ospf6_interface_prefix_cmd,
- "show ipv6 ospf6 interface prefix\
+DEFUN(show_ipv6_ospf6_interface_prefix, show_ipv6_ospf6_interface_prefix_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] interface prefix\
[<\
detail\
|<X:X::X:X|X:X::X:X/M> [<match|detail>]\
>] [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- INTERFACE_STR
- "Display connected prefixes to advertise\n"
- "Display details of the prefixes\n"
- OSPF6_ROUTE_ADDRESS_STR
- OSPF6_ROUTE_PREFIX_STR
- OSPF6_ROUTE_MATCH_STR
- "Display details of the prefixes\n"
- JSON_STR)
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" INTERFACE_STR
+ "Display connected prefixes to advertise\n"
+ "Display details of the prefixes\n" OSPF6_ROUTE_ADDRESS_STR
+ OSPF6_ROUTE_PREFIX_STR OSPF6_ROUTE_MATCH_STR
+ "Display details of the prefixes\n" JSON_STR)
{
- struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
+ struct vrf *vrf = NULL;
int idx_prefix = 5;
struct ospf6_interface *oi;
struct interface *ifp;
bool uj = use_json(argc, argv);
-
- FOR_ALL_INTERFACES (vrf, ifp) {
- oi = (struct ospf6_interface *)ifp->info;
- if (oi == NULL || CHECK_FLAG(oi->flag, OSPF6_INTERFACE_DISABLE))
- continue;
-
- ospf6_route_table_show(vty, idx_prefix, argc, argv,
- oi->route_connected, uj);
+ struct listnode *node;
+ struct ospf6 *ospf6;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_prefix += 2;
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ vrf = vrf_lookup_by_id(ospf6->vrf_id);
+ FOR_ALL_INTERFACES (vrf, ifp) {
+ oi = (struct ospf6_interface *)ifp->info;
+ if (oi == NULL
+ || CHECK_FLAG(oi->flag,
+ OSPF6_INTERFACE_DISABLE))
+ continue;
+
+ ospf6_route_table_show(vty, idx_prefix, argc,
+ argv,
+ oi->route_connected, uj);
+ }
+ if (!all_vrf)
+ break;
+ }
}
return CMD_SUCCESS;
@@ -1902,10 +1991,13 @@ DEFUN (ipv6_ospf6_priority,
? OSPF6_INTERFACE_PRIORITY
: strtoul(argv[idx_number]->arg, NULL, 10);
- if (oi->area && (oi->state == OSPF6_INTERFACE_DROTHER
- || oi->state == OSPF6_INTERFACE_BDR
- || oi->state == OSPF6_INTERFACE_DR))
- ospf6_interface_state_change(dr_election(oi), oi);
+ if (oi->area
+ && (oi->state == OSPF6_INTERFACE_DROTHER
+ || oi->state == OSPF6_INTERFACE_BDR
+ || oi->state == OSPF6_INTERFACE_DR)) {
+ if (ospf6_interface_state_change(dr_election(oi), oi) == -1)
+ OSPF6_LINK_LSA_SCHEDULE(oi);
+ }
return CMD_SUCCESS;
}
@@ -2211,9 +2303,8 @@ DEFUN (no_ipv6_ospf6_network,
return CMD_SUCCESS;
}
-static int config_write_ospf6_interface(struct vty *vty)
+static int config_write_ospf6_interface(struct vty *vty, struct vrf *vrf)
{
- struct vrf *vrf = vrf_lookup_by_id(VRF_DEFAULT);
struct ospf6_interface *oi;
struct interface *ifp;
@@ -2222,7 +2313,11 @@ static int config_write_ospf6_interface(struct vty *vty)
if (oi == NULL)
continue;
- vty_frame(vty, "interface %s\n", oi->interface->name);
+ if (vrf->vrf_id == VRF_DEFAULT)
+ vty_frame(vty, "interface %s\n", oi->interface->name);
+ else
+ vty_frame(vty, "interface %s vrf %s\n",
+ oi->interface->name, vrf->name);
if (ifp->desc)
vty_out(vty, " description %s\n", ifp->desc);
@@ -2277,13 +2372,27 @@ static int config_write_ospf6_interface(struct vty *vty)
return 0;
}
-static int config_write_ospf6_interface(struct vty *vty);
+/* Configuration write function for ospfd. */
+static int config_write_interface(struct vty *vty)
+{
+ int write = 0;
+ struct vrf *vrf = NULL;
+
+ /* Display all VRF aware OSPF interface configuration */
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
+ write += config_write_ospf6_interface(vty, vrf);
+ }
+
+ return write;
+}
+
+static int config_write_ospf6_interface(struct vty *vty, struct vrf *vrf);
static struct cmd_node interface_node = {
.name = "interface",
.node = INTERFACE_NODE,
.parent_node = CONFIG_NODE,
.prompt = "%s(config-if)# ",
- .config_write = config_write_ospf6_interface,
+ .config_write = config_write_interface,
};
static int ospf6_ifp_create(struct interface *ifp)
diff --git a/ospf6d/ospf6_interface.h b/ospf6d/ospf6_interface.h
index a45a841406..48b2cbff74 100644
--- a/ospf6d/ospf6_interface.h
+++ b/ospf6d/ospf6_interface.h
@@ -188,6 +188,7 @@ extern void ospf6_interface_disable(struct ospf6_interface *);
extern void ospf6_interface_if_add(struct interface *);
extern void ospf6_interface_state_update(struct interface *);
extern void ospf6_interface_connected_route_update(struct interface *);
+extern void ospf6_interface_connected_route_add(struct connected *);
/* interface event */
extern int interface_up(struct thread *);
diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c
index adff76ec41..12d11d45c1 100644
--- a/ospf6d/ospf6_intra.c
+++ b/ospf6d/ospf6_intra.c
@@ -757,6 +757,7 @@ int ospf6_link_lsa_originate(struct thread *thread)
struct ospf6_link_lsa *link_lsa;
struct ospf6_route *route;
struct ospf6_prefix *op;
+ int count, max_addr_count;
oi = (struct ospf6_interface *)THREAD_ARG(thread);
oi->thread_link_lsa = NULL;
@@ -800,14 +801,20 @@ int ospf6_link_lsa_originate(struct thread *thread)
memcpy(link_lsa->options, oi->area->options, 3);
memcpy(&link_lsa->linklocal_addr, oi->linklocal_addr,
sizeof(struct in6_addr));
- link_lsa->prefix_num = htonl(oi->route_connected->count);
op = (struct ospf6_prefix *)((caddr_t)link_lsa
+ sizeof(struct ospf6_link_lsa));
- /* connected prefix to advertise */
- for (route = ospf6_route_head(oi->route_connected); route;
- route = ospf6_route_next(route)) {
+ /* connected prefix to advertise, number of interface addresses
+ * supported is based on MTU size of OSPFv3 packets
+ */
+ if (oi->ifmtu >= OSPF6_JUMBO_MTU)
+ max_addr_count = OSPF6_MAX_IF_ADDRS_JUMBO;
+ else
+ max_addr_count = OSPF6_MAX_IF_ADDRS;
+ for (route = ospf6_route_head(oi->route_connected), count = 0;
+ route && count < max_addr_count;
+ route = ospf6_route_next(route), count++) {
op->prefix_length = route->prefix.prefixlen;
op->prefix_options = route->path.prefix_options;
op->prefix_metric = htons(0);
@@ -816,6 +823,8 @@ int ospf6_link_lsa_originate(struct thread *thread)
op = OSPF6_PREFIX_NEXT(op);
}
+ link_lsa->prefix_num = htonl(count);
+
/* Fill LSA Header */
lsa_header->age = 0;
lsa_header->type = htons(OSPF6_LSTYPE_LINK);
@@ -995,6 +1004,7 @@ int ospf6_intra_prefix_lsa_originate_stub(struct thread *thread)
unsigned short prefix_num = 0;
struct ospf6_route_table *route_advertise;
int ls_id = 0;
+ int count, max_addr_count;
oa = (struct ospf6_area *)THREAD_ARG(thread);
oa->thread_intra_prefix_lsa = NULL;
@@ -1040,6 +1050,8 @@ int ospf6_intra_prefix_lsa_originate_stub(struct thread *thread)
intra_prefix_lsa->ref_adv_router = oa->ospf6->router_id;
route_advertise = ospf6_route_table_create(0, 0);
+ route_advertise->hook_add = NULL;
+ route_advertise->hook_remove = NULL;
for (ALL_LIST_ELEMENTS_RO(oa->if_list, i, oi)) {
if (oi->state == OSPF6_INTERFACE_DOWN) {
@@ -1068,8 +1080,14 @@ int ospf6_intra_prefix_lsa_originate_stub(struct thread *thread)
zlog_debug(" Interface %s:", oi->interface->name);
/* connected prefix to advertise */
- for (route = ospf6_route_head(oi->route_connected); route;
- route = ospf6_route_best_next(route)) {
+ if (oi->ifmtu >= OSPF6_JUMBO_MTU)
+ max_addr_count = OSPF6_MAX_IF_ADDRS_JUMBO;
+ else
+ max_addr_count = OSPF6_MAX_IF_ADDRS;
+
+ for (route = ospf6_route_head(oi->route_connected), count = 0;
+ route && count < max_addr_count;
+ route = ospf6_route_best_next(route), count++) {
if (IS_OSPF6_DEBUG_ORIGINATE(INTRA_PREFIX))
zlog_debug(" include %pFX", &route->prefix);
ospf6_route_add(ospf6_route_copy(route),
@@ -1284,6 +1302,8 @@ int ospf6_intra_prefix_lsa_originate_transit(struct thread *thread)
/* connected prefix to advertise */
route_advertise = ospf6_route_table_create(0, 0);
+ route_advertise->hook_add = NULL;
+ route_advertise->hook_remove = NULL;
type = ntohs(OSPF6_LSTYPE_LINK);
for (ALL_LSDB_TYPED(oi->lsdb, type, lsa)) {
@@ -1672,7 +1692,7 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX))
zlog_debug(
- "%s: route %pFX %p with final effective paths %u nh%u",
+ "%s: route %pFX %p with final effective paths %u nh %u",
__func__, &route->prefix,
(void *)old_route,
old_route->paths
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index cf61ca7a62..e233611690 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -87,6 +87,8 @@ static void __attribute__((noreturn)) ospf6_exit(int status)
frr_early_fini();
+ bfd_protocol_integration_set_shutdown(true);
+
for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6)) {
vrf = vrf_lookup_by_id(ospf6->vrf_id);
ospf6_delete(ospf6);
@@ -96,9 +98,6 @@ static void __attribute__((noreturn)) ospf6_exit(int status)
ospf6_interface_delete(ifp->info);
}
- bfd_gbl_exit();
-
-
ospf6_message_terminate();
ospf6_asbr_terminate();
ospf6_lsa_terminate();
@@ -225,7 +224,7 @@ int main(int argc, char *argv[], char *envp[])
/* thread master */
master = om6->master;
- vrf_init(NULL, NULL, NULL, NULL, NULL);
+ ospf6_vrf_init();
access_list_init();
prefix_list_init();
diff --git a/ospf6d/ospf6_message.c b/ospf6d/ospf6_message.c
index 7aedd3df45..d2dcfd81d4 100644
--- a/ospf6d/ospf6_message.c
+++ b/ospf6d/ospf6_message.c
@@ -94,7 +94,7 @@ static void ospf6_header_print(struct ospf6_header *oh)
ntohs(oh->checksum), oh->instance_id);
}
-void ospf6_hello_print(struct ospf6_header *oh)
+void ospf6_hello_print(struct ospf6_header *oh, int action)
{
struct ospf6_hello *hello;
char options[16];
@@ -115,15 +115,21 @@ void ospf6_hello_print(struct ospf6_header *oh)
ntohs(hello->hello_interval), ntohs(hello->dead_interval));
zlog_debug(" DR:%pI4 BDR:%pI4", &hello->drouter, &hello->bdrouter);
- for (p = (char *)((caddr_t)hello + sizeof(struct ospf6_hello));
- p + sizeof(uint32_t) <= OSPF6_MESSAGE_END(oh);
- p += sizeof(uint32_t))
- zlog_debug(" Neighbor: %pI4", (in_addr_t *)p);
+ if ((IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV)
+ && action == OSPF6_ACTION_RECV)
+ || (IS_OSPF6_DEBUG_MESSAGE(oh->type, SEND)
+ && action == OSPF6_ACTION_SEND)) {
- assert(p == OSPF6_MESSAGE_END(oh));
+ for (p = (char *)((caddr_t)hello + sizeof(struct ospf6_hello));
+ p + sizeof(uint32_t) <= OSPF6_MESSAGE_END(oh);
+ p += sizeof(uint32_t))
+ zlog_debug(" Neighbor: %pI4", (in_addr_t *)p);
+
+ assert(p == OSPF6_MESSAGE_END(oh));
+ }
}
-void ospf6_dbdesc_print(struct ospf6_header *oh)
+void ospf6_dbdesc_print(struct ospf6_header *oh, int action)
{
struct ospf6_dbdesc *dbdesc;
char options[16];
@@ -145,34 +151,52 @@ void ospf6_dbdesc_print(struct ospf6_header *oh)
(CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_MSBIT) ? "m" : "s"),
(unsigned long)ntohl(dbdesc->seqnum));
- for (p = (char *)((caddr_t)dbdesc + sizeof(struct ospf6_dbdesc));
- p + sizeof(struct ospf6_lsa_header) <= OSPF6_MESSAGE_END(oh);
- p += sizeof(struct ospf6_lsa_header))
- ospf6_lsa_header_print_raw((struct ospf6_lsa_header *)p);
+ if ((IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV)
+ && action == OSPF6_ACTION_RECV)
+ || (IS_OSPF6_DEBUG_MESSAGE(oh->type, SEND)
+ && action == OSPF6_ACTION_SEND)) {
- assert(p == OSPF6_MESSAGE_END(oh));
+ for (p = (char *)((caddr_t)dbdesc
+ + sizeof(struct ospf6_dbdesc));
+ p + sizeof(struct ospf6_lsa_header)
+ <= OSPF6_MESSAGE_END(oh);
+ p += sizeof(struct ospf6_lsa_header))
+ ospf6_lsa_header_print_raw(
+ (struct ospf6_lsa_header *)p);
+
+ assert(p == OSPF6_MESSAGE_END(oh));
+ }
}
-void ospf6_lsreq_print(struct ospf6_header *oh)
+void ospf6_lsreq_print(struct ospf6_header *oh, int action)
{
char *p;
ospf6_header_print(oh);
assert(oh->type == OSPF6_MESSAGE_TYPE_LSREQ);
- for (p = (char *)((caddr_t)oh + sizeof(struct ospf6_header));
- p + sizeof(struct ospf6_lsreq_entry) <= OSPF6_MESSAGE_END(oh);
- p += sizeof(struct ospf6_lsreq_entry)) {
- struct ospf6_lsreq_entry *e = (struct ospf6_lsreq_entry *)p;
+ if ((IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV)
+ && action == OSPF6_ACTION_RECV)
+ || (IS_OSPF6_DEBUG_MESSAGE(oh->type, SEND)
+ && action == OSPF6_ACTION_SEND)) {
+
+ for (p = (char *)((caddr_t)oh + sizeof(struct ospf6_header));
+ p + sizeof(struct ospf6_lsreq_entry)
+ <= OSPF6_MESSAGE_END(oh);
+ p += sizeof(struct ospf6_lsreq_entry)) {
+ struct ospf6_lsreq_entry *e =
+ (struct ospf6_lsreq_entry *)p;
+
+ zlog_debug(" [%s Id:%pI4 Adv:%pI4]",
+ ospf6_lstype_name(e->type), &e->id,
+ &e->adv_router);
+ }
- zlog_debug(" [%s Id:%pI4 Adv:%pI4]",
- ospf6_lstype_name(e->type), &e->id, &e->adv_router);
+ assert(p == OSPF6_MESSAGE_END(oh));
}
-
- assert(p == OSPF6_MESSAGE_END(oh));
}
-void ospf6_lsupdate_print(struct ospf6_header *oh)
+void ospf6_lsupdate_print(struct ospf6_header *oh, int action)
{
struct ospf6_lsupdate *lsupdate;
unsigned long num;
@@ -187,29 +211,45 @@ void ospf6_lsupdate_print(struct ospf6_header *oh)
num = ntohl(lsupdate->lsa_number);
zlog_debug(" Number of LSA: %ld", num);
- for (p = (char *)((caddr_t)lsupdate + sizeof(struct ospf6_lsupdate));
- p < OSPF6_MESSAGE_END(oh)
- && p + OSPF6_LSA_SIZE(p) <= OSPF6_MESSAGE_END(oh);
- p += OSPF6_LSA_SIZE(p)) {
- ospf6_lsa_header_print_raw((struct ospf6_lsa_header *)p);
- }
+ if ((IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV)
+ && action == OSPF6_ACTION_RECV)
+ || (IS_OSPF6_DEBUG_MESSAGE(oh->type, SEND)
+ && action == OSPF6_ACTION_SEND)) {
+
+ for (p = (char *)((caddr_t)lsupdate
+ + sizeof(struct ospf6_lsupdate));
+ p < OSPF6_MESSAGE_END(oh)
+ && p + OSPF6_LSA_SIZE(p) <= OSPF6_MESSAGE_END(oh);
+ p += OSPF6_LSA_SIZE(p)) {
+ ospf6_lsa_header_print_raw(
+ (struct ospf6_lsa_header *)p);
+ }
- assert(p == OSPF6_MESSAGE_END(oh));
+ assert(p == OSPF6_MESSAGE_END(oh));
+ }
}
-void ospf6_lsack_print(struct ospf6_header *oh)
+void ospf6_lsack_print(struct ospf6_header *oh, int action)
{
char *p;
ospf6_header_print(oh);
assert(oh->type == OSPF6_MESSAGE_TYPE_LSACK);
- for (p = (char *)((caddr_t)oh + sizeof(struct ospf6_header));
- p + sizeof(struct ospf6_lsa_header) <= OSPF6_MESSAGE_END(oh);
- p += sizeof(struct ospf6_lsa_header))
- ospf6_lsa_header_print_raw((struct ospf6_lsa_header *)p);
+ if ((IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV)
+ && action == OSPF6_ACTION_RECV)
+ || (IS_OSPF6_DEBUG_MESSAGE(oh->type, SEND)
+ && action == OSPF6_ACTION_SEND)) {
- assert(p == OSPF6_MESSAGE_END(oh));
+ for (p = (char *)((caddr_t)oh + sizeof(struct ospf6_header));
+ p + sizeof(struct ospf6_lsa_header)
+ <= OSPF6_MESSAGE_END(oh);
+ p += sizeof(struct ospf6_lsa_header))
+ ospf6_lsa_header_print_raw(
+ (struct ospf6_lsa_header *)p);
+
+ assert(p == OSPF6_MESSAGE_END(oh));
+ }
}
static void ospf6_hello_recv(struct in6_addr *src, struct in6_addr *dst,
@@ -348,21 +388,21 @@ static void ospf6_dbdesc_recv_master(struct ospf6_header *oh,
+ sizeof(struct ospf6_header));
if (on->state < OSPF6_NEIGHBOR_INIT) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor state less than Init, ignore");
return;
}
switch (on->state) {
case OSPF6_NEIGHBOR_TWOWAY:
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor state is 2-Way, ignore");
return;
case OSPF6_NEIGHBOR_INIT:
thread_execute(master, twoway_received, on, 0);
if (on->state != OSPF6_NEIGHBOR_EXSTART) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Neighbor state is not ExStart, ignore");
return;
@@ -395,14 +435,14 @@ static void ospf6_dbdesc_recv_master(struct ospf6_header *oh,
sizeof(struct ospf6_dbdesc))) {
/* Duplicated DatabaseDescription is dropped by master
*/
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Duplicated dbdesc discarded by Master, ignore");
return;
}
if (CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_MSBIT)) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Master/Slave bit mismatch");
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
@@ -410,7 +450,7 @@ static void ospf6_dbdesc_recv_master(struct ospf6_header *oh,
}
if (CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_IBIT)) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Initialize bit mismatch");
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
@@ -418,7 +458,7 @@ static void ospf6_dbdesc_recv_master(struct ospf6_header *oh,
}
if (memcmp(on->options, dbdesc->options, sizeof(on->options))) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Option field mismatch");
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
@@ -426,7 +466,7 @@ static void ospf6_dbdesc_recv_master(struct ospf6_header *oh,
}
if (ntohl(dbdesc->seqnum) != on->dbdesc_seqnum) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Sequence number mismatch (%#lx expected)",
(unsigned long)on->dbdesc_seqnum);
@@ -442,13 +482,13 @@ static void ospf6_dbdesc_recv_master(struct ospf6_header *oh,
sizeof(struct ospf6_dbdesc))) {
/* Duplicated DatabaseDescription is dropped by master
*/
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Duplicated dbdesc discarded by Master, ignore");
return;
}
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Not duplicate dbdesc in state %s",
ospf6_neighbor_state_str[on->state]);
thread_add_event(master, seqnumber_mismatch, on, 0, NULL);
@@ -553,21 +593,21 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
+ sizeof(struct ospf6_header));
if (on->state < OSPF6_NEIGHBOR_INIT) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor state less than Init, ignore");
return;
}
switch (on->state) {
case OSPF6_NEIGHBOR_TWOWAY:
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor state is 2-Way, ignore");
return;
case OSPF6_NEIGHBOR_INIT:
thread_execute(master, twoway_received, on, 0);
if (on->state != OSPF6_NEIGHBOR_EXSTART) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Neighbor state is not ExStart, ignore");
return;
@@ -611,7 +651,7 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
sizeof(struct ospf6_dbdesc))) {
/* Duplicated DatabaseDescription causes slave to
* retransmit */
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Duplicated dbdesc causes retransmit");
THREAD_OFF(on->thread_send_dbdesc);
@@ -622,7 +662,7 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
}
if (!CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_MSBIT)) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Master/Slave bit mismatch");
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
@@ -630,7 +670,7 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
}
if (CHECK_FLAG(dbdesc->bits, OSPF6_DBDESC_IBIT)) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Initialize bit mismatch");
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
@@ -638,7 +678,7 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
}
if (memcmp(on->options, dbdesc->options, sizeof(on->options))) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Option field mismatch");
thread_add_event(master, seqnumber_mismatch, on, 0,
NULL);
@@ -646,7 +686,7 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
}
if (ntohl(dbdesc->seqnum) != on->dbdesc_seqnum + 1) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Sequence number mismatch (%#lx expected)",
(unsigned long)on->dbdesc_seqnum + 1);
@@ -662,7 +702,7 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
sizeof(struct ospf6_dbdesc))) {
/* Duplicated DatabaseDescription causes slave to
* retransmit */
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Duplicated dbdesc causes retransmit");
THREAD_OFF(on->thread_send_dbdesc);
@@ -671,7 +711,7 @@ static void ospf6_dbdesc_recv_slave(struct ospf6_header *oh,
return;
}
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Not duplicate dbdesc in state %s",
ospf6_neighbor_state_str[on->state]);
thread_add_event(master, seqnumber_mismatch, on, 0, NULL);
@@ -756,7 +796,7 @@ static void ospf6_dbdesc_recv(struct in6_addr *src, struct in6_addr *dst,
on = ospf6_neighbor_lookup(oh->router_id, oi);
if (on == NULL) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor not found, ignore");
return;
}
@@ -773,7 +813,7 @@ static void ospf6_dbdesc_recv(struct in6_addr *src, struct in6_addr *dst,
}
if (dbdesc->reserved1 || dbdesc->reserved2) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug(
"Non-0 reserved field in %s's DbDesc, correct",
on->name);
@@ -788,7 +828,7 @@ static void ospf6_dbdesc_recv(struct in6_addr *src, struct in6_addr *dst,
else if (ntohl(oi->area->ospf6->router_id) < ntohl(oh->router_id))
ospf6_dbdesc_recv_slave(oh, on);
else {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Can't decide which is master, ignore");
}
}
@@ -805,7 +845,7 @@ static void ospf6_lsreq_recv(struct in6_addr *src, struct in6_addr *dst,
on = ospf6_neighbor_lookup(oh->router_id, oi);
if (on == NULL) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor not found, ignore");
return;
}
@@ -813,7 +853,7 @@ static void ospf6_lsreq_recv(struct in6_addr *src, struct in6_addr *dst,
if (on->state != OSPF6_NEIGHBOR_EXCHANGE
&& on->state != OSPF6_NEIGHBOR_LOADING
&& on->state != OSPF6_NEIGHBOR_FULL) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor state less than Exchange, ignore");
return;
}
@@ -882,7 +922,7 @@ static unsigned ospf6_prefixes_examin(
while (length) {
if (length < OSPF6_PREFIX_MIN_SIZE) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug("%s: undersized IPv6 prefix header",
__func__);
return MSG_NG;
@@ -890,7 +930,7 @@ static unsigned ospf6_prefixes_examin(
/* safe to look deeper */
if (current->prefix_length > IPV6_MAX_BITLEN) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug("%s: invalid PrefixLength (%u bits)",
__func__, current->prefix_length);
return MSG_NG;
@@ -901,7 +941,7 @@ static unsigned ospf6_prefixes_examin(
+ OSPF6_PREFIX_SPACE(current->prefix_length);
if (requested_pfx_bytes > length) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug("%s: undersized IPv6 prefix",
__func__);
return MSG_NG;
@@ -913,7 +953,8 @@ static unsigned ospf6_prefixes_examin(
real_num_pfxs++;
}
if (real_num_pfxs != req_num_pfxs) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug(
"%s: IPv6 prefix number mismatch (%u required, %u real)",
__func__, req_num_pfxs, real_num_pfxs);
@@ -945,7 +986,8 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
ltindex = lsatype & OSPF6_LSTYPE_FCODE_MASK;
if (ltindex < OSPF6_LSTYPE_SIZE && ospf6_lsa_minlen[ltindex]
&& lsalen < ospf6_lsa_minlen[ltindex] + OSPF6_LSA_HEADER_SIZE) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: undersized (%u B) LSA", __func__,
lsalen);
return MSG_NG;
@@ -958,7 +1000,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
if ((lsalen - OSPF6_LSA_HEADER_SIZE - OSPF6_ROUTER_LSA_MIN_SIZE)
% OSPF6_ROUTER_LSDESC_FIX_SIZE) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug(
"%s: interface description alignment error",
__func__);
@@ -972,7 +1014,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
- OSPF6_NETWORK_LSA_MIN_SIZE)
% OSPF6_NETWORK_LSDESC_FIX_SIZE) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug(
"%s: router description alignment error",
__func__);
@@ -997,7 +1039,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
if (lsalen
> OSPF6_LSA_HEADER_SIZE + OSPF6_INTER_ROUTER_LSA_FIX_SIZE) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug("%s: oversized (%u B) LSA", __func__,
lsalen);
return MSG_NG;
@@ -1026,7 +1068,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
prefix before ospf6_prefix_examin() confirms its sizing. */
if (exp_length + OSPF6_PREFIX_MIN_SIZE > lsalen) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug("%s: undersized (%u B) LSA header",
__func__, lsalen);
return MSG_NG;
@@ -1045,7 +1087,7 @@ static unsigned ospf6_lsa_examin(struct ospf6_lsa_header *lsah,
this check does not include any IPv6 prefix fields. */
if (exp_length > lsalen) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug("%s: undersized (%u B) LSA header",
__func__, lsalen);
return MSG_NG;
@@ -1114,7 +1156,7 @@ ospf6_lsaseq_examin(struct ospf6_lsa_header *lsah, /* start of buffered data */
uint16_t lsalen;
if (length < OSPF6_LSA_HEADER_SIZE) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug(
"%s: undersized (%zu B) trailing (#%u) LSA header",
__func__, length, counted_lsas);
@@ -1124,7 +1166,7 @@ ospf6_lsaseq_examin(struct ospf6_lsa_header *lsah, /* start of buffered data */
lsalen = OSPF6_LSA_SIZE(lsah);
if (lsalen < OSPF6_LSA_HEADER_SIZE) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
- RECV))
+ RECV_HDR))
zlog_debug(
"%s: malformed LSA header #%u, declared length is %u B",
__func__, counted_lsas, lsalen);
@@ -1134,7 +1176,8 @@ ospf6_lsaseq_examin(struct ospf6_lsa_header *lsah, /* start of buffered data */
/* less checks here and in ospf6_lsa_examin() */
if (MSG_OK != ospf6_lsa_examin(lsah, lsalen, 1)) {
if (IS_OSPF6_DEBUG_MESSAGE(
- OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug(
"%s: anomaly in header-only %s LSA #%u",
__func__,
@@ -1151,7 +1194,8 @@ ospf6_lsaseq_examin(struct ospf6_lsa_header *lsah, /* start of buffered data */
* further checks */
if (lsalen > length) {
if (IS_OSPF6_DEBUG_MESSAGE(
- OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug(
"%s: anomaly in %s LSA #%u: declared length is %u B, buffered length is %zu B",
__func__,
@@ -1161,7 +1205,8 @@ ospf6_lsaseq_examin(struct ospf6_lsa_header *lsah, /* start of buffered data */
}
if (MSG_OK != ospf6_lsa_examin(lsah, lsalen, 0)) {
if (IS_OSPF6_DEBUG_MESSAGE(
- OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug(
"%s: anomaly in %s LSA #%u",
__func__,
@@ -1177,7 +1222,8 @@ ospf6_lsaseq_examin(struct ospf6_lsa_header *lsah, /* start of buffered data */
}
if (declared_num_lsas && counted_lsas != declared_num_lsas) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug(
"%s: #LSAs declared (%u) does not match actual (%u)",
__func__, declared_num_lsas, counted_lsas);
@@ -1195,14 +1241,16 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
/* length, 1st approximation */
if (bytesonwire < OSPF6_HEADER_SIZE) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: undersized (%u B) packet", __func__,
bytesonwire);
return MSG_NG;
}
/* Now it is safe to access header fields. */
if (bytesonwire != ntohs(oh->length)) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug(
"%s: %s packet length error (%u real, %u declared)",
__func__, lookup_msg(ospf6_message_type_str,
@@ -1212,7 +1260,8 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
}
/* version check */
if (oh->version != OSPFV3_VERSION) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: invalid (%u) protocol version",
__func__, oh->version);
return MSG_NG;
@@ -1221,7 +1270,8 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
if (oh->type < OSPF6_MESSAGE_TYPE_ALL && ospf6_packet_minlen[oh->type]
&& bytesonwire
< OSPF6_HEADER_SIZE + ospf6_packet_minlen[oh->type]) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: undersized (%u B) %s packet", __func__,
bytesonwire,
lookup_msg(ospf6_message_type_str, oh->type,
@@ -1238,7 +1288,8 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
== (bytesonwire - OSPF6_HEADER_SIZE - OSPF6_HELLO_MIN_SIZE)
% 4)
return MSG_OK;
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: alignment error in %s packet", __func__,
lookup_msg(ospf6_message_type_str, oh->type,
NULL));
@@ -1261,7 +1312,8 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
== (bytesonwire - OSPF6_HEADER_SIZE - OSPF6_LS_REQ_MIN_SIZE)
% OSPF6_LSREQ_LSDESC_FIX_SIZE)
return MSG_OK;
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: alignment error in %s packet", __func__,
lookup_msg(ospf6_message_type_str, oh->type,
NULL));
@@ -1289,13 +1341,14 @@ static unsigned ospf6_packet_examin(struct ospf6_header *oh,
1, 0);
break;
default:
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: invalid (%u) message type", __func__,
oh->type);
return MSG_NG;
}
if (test != MSG_OK
- && IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ && IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV_HDR))
zlog_debug("%s: anomaly in %s packet", __func__,
lookup_msg(ospf6_message_type_str, oh->type, NULL));
return test;
@@ -1356,7 +1409,7 @@ static void ospf6_lsupdate_recv(struct in6_addr *src, struct in6_addr *dst,
on = ospf6_neighbor_lookup(oh->router_id, oi);
if (on == NULL) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor not found, ignore");
return;
}
@@ -1364,7 +1417,7 @@ static void ospf6_lsupdate_recv(struct in6_addr *src, struct in6_addr *dst,
if (on->state != OSPF6_NEIGHBOR_EXCHANGE
&& on->state != OSPF6_NEIGHBOR_LOADING
&& on->state != OSPF6_NEIGHBOR_FULL) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor state less than Exchange, ignore");
return;
}
@@ -1398,7 +1451,7 @@ static void ospf6_lsack_recv(struct in6_addr *src, struct in6_addr *dst,
on = ospf6_neighbor_lookup(oh->router_id, oi);
if (on == NULL) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor not found, ignore");
return;
}
@@ -1406,7 +1459,7 @@ static void ospf6_lsack_recv(struct in6_addr *src, struct in6_addr *dst,
if (on->state != OSPF6_NEIGHBOR_EXCHANGE
&& on->state != OSPF6_NEIGHBOR_LOADING
&& on->state != OSPF6_NEIGHBOR_FULL) {
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR))
zlog_debug("Neighbor state less than Exchange, ignore");
return;
}
@@ -1555,12 +1608,14 @@ int ospf6_receive(struct thread *thread)
oi = ospf6_interface_lookup_by_ifindex(ifindex, ospf6->vrf_id);
if (oi == NULL || oi->area == NULL
|| CHECK_FLAG(oi->flag, OSPF6_INTERFACE_DISABLE)) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("Message received on disabled interface");
return 0;
}
if (CHECK_FLAG(oi->flag, OSPF6_INTERFACE_PASSIVE)) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN,
+ RECV_HDR))
zlog_debug("%s: Ignore message on passive interface %s",
__func__, oi->interface->name);
return 0;
@@ -1576,7 +1631,7 @@ int ospf6_receive(struct thread *thread)
which can be dismissed in a cleanup-focused review round later. */
/* Log */
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV)) {
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, RECV_HDR)) {
zlog_debug("%s received on %s",
lookup_msg(ospf6_message_type_str, oh->type, NULL),
oi->interface->name);
@@ -1585,19 +1640,19 @@ int ospf6_receive(struct thread *thread)
switch (oh->type) {
case OSPF6_MESSAGE_TYPE_HELLO:
- ospf6_hello_print(oh);
+ ospf6_hello_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_DBDESC:
- ospf6_dbdesc_print(oh);
+ ospf6_dbdesc_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_LSREQ:
- ospf6_lsreq_print(oh);
+ ospf6_lsreq_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_LSUPDATE:
- ospf6_lsupdate_print(oh);
+ ospf6_lsupdate_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_LSACK:
- ospf6_lsack_print(oh);
+ ospf6_lsack_print(oh, OSPF6_ACTION_RECV);
break;
default:
assert(0);
@@ -1656,7 +1711,7 @@ static void ospf6_send(struct in6_addr *src, struct in6_addr *dst,
oh->reserved = 0;
/* Log */
- if (IS_OSPF6_DEBUG_MESSAGE(oh->type, SEND)) {
+ if (IS_OSPF6_DEBUG_MESSAGE(oh->type, SEND_HDR)) {
if (src)
inet_ntop(AF_INET6, src, srcname, sizeof(srcname));
else
@@ -1669,19 +1724,19 @@ static void ospf6_send(struct in6_addr *src, struct in6_addr *dst,
switch (oh->type) {
case OSPF6_MESSAGE_TYPE_HELLO:
- ospf6_hello_print(oh);
+ ospf6_hello_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_DBDESC:
- ospf6_dbdesc_print(oh);
+ ospf6_dbdesc_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_LSREQ:
- ospf6_lsreq_print(oh);
+ ospf6_lsreq_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_LSUPDATE:
- ospf6_lsupdate_print(oh);
+ ospf6_lsupdate_print(oh, OSPF6_ACTION_RECV);
break;
case OSPF6_MESSAGE_TYPE_LSACK:
- ospf6_lsack_print(oh);
+ ospf6_lsack_print(oh, OSPF6_ACTION_RECV);
break;
default:
zlog_debug("Unknown message");
@@ -1719,7 +1774,7 @@ int ospf6_hello_send(struct thread *thread)
oi->thread_send_hello = (struct thread *)NULL;
if (oi->state <= OSPF6_INTERFACE_DOWN) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_HELLO, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_HELLO, SEND_HDR))
zlog_debug("Unable to send Hello on down interface %s",
oi->interface->name);
return 0;
@@ -1758,7 +1813,7 @@ int ospf6_hello_send(struct thread *thread)
if (p - sendbuf + sizeof(uint32_t) > ospf6_packet_max(oi)) {
if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_HELLO,
- SEND))
+ SEND_HDR))
zlog_debug(
"sending Hello message: exceeds I/F MTU");
break;
@@ -1790,7 +1845,7 @@ int ospf6_dbdesc_send(struct thread *thread)
on->thread_send_dbdesc = (struct thread *)NULL;
if (on->state < OSPF6_NEIGHBOR_EXSTART) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_DBDESC, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_DBDESC, SEND_HDR))
zlog_debug(
"Quit to send DbDesc to neighbor %s state %s",
on->name, ospf6_neighbor_state_str[on->state]);
@@ -1918,7 +1973,7 @@ int ospf6_lsreq_send(struct thread *thread)
/* LSReq will be sent only in ExStart or Loading */
if (on->state != OSPF6_NEIGHBOR_EXCHANGE
&& on->state != OSPF6_NEIGHBOR_LOADING) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSREQ, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSREQ, SEND_HDR))
zlog_debug("Quit to send LSReq to neighbor %s state %s",
on->name,
ospf6_neighbor_state_str[on->state]);
@@ -2029,11 +2084,12 @@ int ospf6_lsupdate_send_neighbor(struct thread *thread)
on = (struct ospf6_neighbor *)THREAD_ARG(thread);
on->thread_send_lsupdate = (struct thread *)NULL;
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND_HDR))
zlog_debug("LSUpdate to neighbor %s", on->name);
if (on->state < OSPF6_NEIGHBOR_EXCHANGE) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE,
+ SEND_HDR))
zlog_debug("Quit to send (neighbor state %s)",
ospf6_neighbor_state_str[on->state]);
return 0;
@@ -2190,7 +2246,7 @@ int ospf6_lsupdate_send_neighbor_now(struct ospf6_neighbor *on,
lsupdate->lsa_number = htonl(lsa_cnt);
if (IS_OSPF6_DEBUG_FLOODING
- || IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
+ || IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND_HDR))
zlog_debug("%s: Send lsupdate with lsa %s (age %u)", __func__,
lsa->name, ntohs(lsa->header->age));
@@ -2212,7 +2268,8 @@ int ospf6_lsupdate_send_interface(struct thread *thread)
oi->thread_send_lsupdate = (struct thread *)NULL;
if (oi->state <= OSPF6_INTERFACE_WAITING) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSUPDATE,
+ SEND_HDR))
zlog_debug(
"Quit to send LSUpdate to interface %s state %s",
oi->interface->name,
@@ -2299,7 +2356,7 @@ int ospf6_lsack_send_neighbor(struct thread *thread)
on->thread_send_lsack = (struct thread *)NULL;
if (on->state < OSPF6_NEIGHBOR_EXCHANGE) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSACK, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSACK, SEND_HDR))
zlog_debug("Quit to send LSAck to neighbor %s state %s",
on->name,
ospf6_neighbor_state_str[on->state]);
@@ -2377,7 +2434,7 @@ int ospf6_lsack_send_interface(struct thread *thread)
oi->thread_send_lsack = (struct thread *)NULL;
if (oi->state <= OSPF6_INTERFACE_WAITING) {
- if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSACK, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_LSACK, SEND_HDR))
zlog_debug(
"Quit to send LSAck to interface %s state %s",
oi->interface->name,
@@ -2440,21 +2497,21 @@ int ospf6_lsack_send_interface(struct thread *thread)
/* Commands */
-DEFUN (debug_ospf6_message,
- debug_ospf6_message_cmd,
- "debug ospf6 message <unknown|hello|dbdesc|lsreq|lsupdate|lsack|all> [<send|recv>]",
- DEBUG_STR
- OSPF6_STR
- "Debug OSPFv3 message\n"
- "Debug Unknown message\n"
- "Debug Hello message\n"
- "Debug Database Description message\n"
- "Debug Link State Request message\n"
- "Debug Link State Update message\n"
- "Debug Link State Acknowledgement message\n"
- "Debug All message\n"
- "Debug only sending message\n"
- "Debug only receiving message\n")
+DEFUN(debug_ospf6_message, debug_ospf6_message_cmd,
+ "debug ospf6 message <unknown|hello|dbdesc|lsreq|lsupdate|lsack|all> [<send|recv|send-hdr|recv-hdr>]",
+ DEBUG_STR OSPF6_STR
+ "Debug OSPFv3 message\n"
+ "Debug Unknown message\n"
+ "Debug Hello message\n"
+ "Debug Database Description message\n"
+ "Debug Link State Request message\n"
+ "Debug Link State Update message\n"
+ "Debug Link State Acknowledgement message\n"
+ "Debug All message\n"
+ "Debug only sending message, entire packet\n"
+ "Debug only receiving message, entire packet\n"
+ "Debug only sending message, header only\n"
+ "Debug only receiving message, header only\n")
{
int idx_packet = 3;
int idx_send_recv = 4;
@@ -2480,8 +2537,12 @@ DEFUN (debug_ospf6_message,
if (argc == 4)
level = OSPF6_DEBUG_MESSAGE_SEND | OSPF6_DEBUG_MESSAGE_RECV;
+ else if (!strncmp(argv[idx_send_recv]->arg, "send-h", 6))
+ level = OSPF6_DEBUG_MESSAGE_SEND_HDR;
else if (!strncmp(argv[idx_send_recv]->arg, "s", 1))
level = OSPF6_DEBUG_MESSAGE_SEND;
+ else if (!strncmp(argv[idx_send_recv]->arg, "recv-h", 6))
+ level = OSPF6_DEBUG_MESSAGE_RECV_HDR;
else if (!strncmp(argv[idx_send_recv]->arg, "r", 1))
level = OSPF6_DEBUG_MESSAGE_RECV;
@@ -2494,22 +2555,21 @@ DEFUN (debug_ospf6_message,
return CMD_SUCCESS;
}
-DEFUN (no_debug_ospf6_message,
- no_debug_ospf6_message_cmd,
- "no debug ospf6 message <unknown|hello|dbdesc|lsreq|lsupdate|lsack|all> [<send|recv>]",
- NO_STR
- DEBUG_STR
- OSPF6_STR
- "Debug OSPFv3 message\n"
- "Debug Unknown message\n"
- "Debug Hello message\n"
- "Debug Database Description message\n"
- "Debug Link State Request message\n"
- "Debug Link State Update message\n"
- "Debug Link State Acknowledgement message\n"
- "Debug All message\n"
- "Debug only sending message\n"
- "Debug only receiving message\n")
+DEFUN(no_debug_ospf6_message, no_debug_ospf6_message_cmd,
+ "no debug ospf6 message <unknown|hello|dbdesc|lsreq|lsupdate|lsack|all> [<send|recv|send-hdr|recv-hdr>]",
+ NO_STR DEBUG_STR OSPF6_STR
+ "Debug OSPFv3 message\n"
+ "Debug Unknown message\n"
+ "Debug Hello message\n"
+ "Debug Database Description message\n"
+ "Debug Link State Request message\n"
+ "Debug Link State Update message\n"
+ "Debug Link State Acknowledgement message\n"
+ "Debug All message\n"
+ "Debug only sending message, entire pkt\n"
+ "Debug only receiving message, entire pkt\n"
+ "Debug only sending message, header only\n"
+ "Debug only receiving message, header only\n")
{
int idx_packet = 4;
int idx_send_recv = 5;
@@ -2534,9 +2594,15 @@ DEFUN (no_debug_ospf6_message,
type = OSPF6_MESSAGE_TYPE_ALL;
if (argc == 5)
- level = OSPF6_DEBUG_MESSAGE_SEND | OSPF6_DEBUG_MESSAGE_RECV;
+ level = OSPF6_DEBUG_MESSAGE_SEND | OSPF6_DEBUG_MESSAGE_RECV
+ | OSPF6_DEBUG_MESSAGE_SEND_HDR
+ | OSPF6_DEBUG_MESSAGE_RECV_HDR;
+ else if (!strncmp(argv[idx_send_recv]->arg, "send-h", 6))
+ level = OSPF6_DEBUG_MESSAGE_SEND_HDR;
else if (!strncmp(argv[idx_send_recv]->arg, "s", 1))
level = OSPF6_DEBUG_MESSAGE_SEND;
+ else if (!strncmp(argv[idx_send_recv]->arg, "recv-h", 6))
+ level = OSPF6_DEBUG_MESSAGE_RECV_HDR;
else if (!strncmp(argv[idx_send_recv]->arg, "r", 1))
level = OSPF6_DEBUG_MESSAGE_RECV;
@@ -2554,16 +2620,23 @@ int config_write_ospf6_debug_message(struct vty *vty)
{
const char *type_str[] = {"unknown", "hello", "dbdesc",
"lsreq", "lsupdate", "lsack"};
- unsigned char s = 0, r = 0;
+ unsigned char s = 0, r = 0, sh = 0, rh = 0;
int i;
for (i = 0; i < 6; i++) {
- if (IS_OSPF6_DEBUG_MESSAGE(i, SEND))
+ if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, SEND))
s |= 1 << i;
- if (IS_OSPF6_DEBUG_MESSAGE(i, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, RECV))
r |= 1 << i;
}
+ for (i = 0; i < 6; i++) {
+ if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, SEND_HDR))
+ sh |= 1 << i;
+ if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, RECV_HDR))
+ rh |= 1 << i;
+ }
+
if (s == 0x3f && r == 0x3f) {
vty_out(vty, "debug ospf6 message all\n");
return 0;
@@ -2577,6 +2650,14 @@ int config_write_ospf6_debug_message(struct vty *vty)
return 0;
}
+ if (sh == 0x3f && rh == 0) {
+ vty_out(vty, "debug ospf6 message all send-hdr\n");
+ return 0;
+ } else if (sh == 0 && rh == 0x3f) {
+ vty_out(vty, "debug ospf6 message all recv-hdr\n");
+ return 0;
+ }
+
/* Unknown message is logged by default */
if (!IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, SEND)
&& !IS_OSPF6_DEBUG_MESSAGE(OSPF6_MESSAGE_TYPE_UNKNOWN, RECV))
@@ -2587,15 +2668,25 @@ int config_write_ospf6_debug_message(struct vty *vty)
vty_out(vty, "no debug ospf6 message unknown recv\n");
for (i = 1; i < 6; i++) {
- if (IS_OSPF6_DEBUG_MESSAGE(i, SEND)
- && IS_OSPF6_DEBUG_MESSAGE(i, RECV))
+ if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, SEND)
+ && IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, RECV))
vty_out(vty, "debug ospf6 message %s\n", type_str[i]);
- else if (IS_OSPF6_DEBUG_MESSAGE(i, SEND))
+ else if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, SEND))
vty_out(vty, "debug ospf6 message %s send\n",
type_str[i]);
- else if (IS_OSPF6_DEBUG_MESSAGE(i, RECV))
+ else if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, RECV))
vty_out(vty, "debug ospf6 message %s recv\n",
type_str[i]);
+ else if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, SEND_HDR)
+ && IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, RECV_HDR))
+ vty_out(vty, "debug ospf6 message %s; header only\n",
+ type_str[i]);
+ else if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, RECV_HDR))
+ vty_out(vty, "debug ospf6 message %s recv-hdr\n",
+ type_str[i]);
+ else if (IS_OSPF6_DEBUG_MESSAGE_ENABLED(i, SEND_HDR))
+ vty_out(vty, "debug ospf6 message %s send-hdr\n",
+ type_str[i]);
}
return 0;
diff --git a/ospf6d/ospf6_message.h b/ospf6d/ospf6_message.h
index 7ec8cb785f..c4cdbd52f4 100644
--- a/ospf6d/ospf6_message.h
+++ b/ospf6d/ospf6_message.h
@@ -25,14 +25,34 @@
/* Debug option */
extern unsigned char conf_debug_ospf6_message[];
+#define OSPF6_ACTION_SEND 0x01
+#define OSPF6_ACTION_RECV 0x02
#define OSPF6_DEBUG_MESSAGE_SEND 0x01
#define OSPF6_DEBUG_MESSAGE_RECV 0x02
+#define OSPF6_DEBUG_MESSAGE_SEND_HDR 0x04
+#define OSPF6_DEBUG_MESSAGE_RECV_HDR 0x08
+#define OSPF6_DEBUG_MESSAGE_SEND_BOTH \
+ OSPF6_DEBUG_MESSAGE_SEND | OSPF6_DEBUG_MESSAGE_SEND_HDR
+#define OSPF6_DEBUG_MESSAGE_RECV_BOTH \
+ OSPF6_DEBUG_MESSAGE_RECV | OSPF6_DEBUG_MESSAGE_RECV_HDR
+
#define OSPF6_DEBUG_MESSAGE_ON(type, level) \
(conf_debug_ospf6_message[type] |= (level))
#define OSPF6_DEBUG_MESSAGE_OFF(type, level) \
(conf_debug_ospf6_message[type] &= ~(level))
+
#define IS_OSPF6_DEBUG_MESSAGE(t, e) \
- (conf_debug_ospf6_message[t] & OSPF6_DEBUG_MESSAGE_##e)
+ ((OSPF6_DEBUG_MESSAGE_##e) == OSPF6_DEBUG_MESSAGE_RECV_HDR) \
+ ? (conf_debug_ospf6_message[t] \
+ & (OSPF6_DEBUG_MESSAGE_RECV_BOTH)) \
+ : (((OSPF6_DEBUG_MESSAGE_##e) == OSPF6_DEBUG_MESSAGE_SEND_HDR) \
+ ? (conf_debug_ospf6_message[t] \
+ & (OSPF6_DEBUG_MESSAGE_SEND_BOTH)) \
+ : (conf_debug_ospf6_message[t] \
+ & (OSPF6_DEBUG_MESSAGE_##e)))
+
+#define IS_OSPF6_DEBUG_MESSAGE_ENABLED(type, e) \
+ (conf_debug_ospf6_message[type] & (OSPF6_DEBUG_MESSAGE_##e))
/* Type */
#define OSPF6_MESSAGE_TYPE_UNKNOWN 0x0
@@ -110,11 +130,11 @@ struct ospf6_lsupdate {
/* It is just a sequence of LSA Headers */
/* Function definition */
-extern void ospf6_hello_print(struct ospf6_header *);
-extern void ospf6_dbdesc_print(struct ospf6_header *);
-extern void ospf6_lsreq_print(struct ospf6_header *);
-extern void ospf6_lsupdate_print(struct ospf6_header *);
-extern void ospf6_lsack_print(struct ospf6_header *);
+extern void ospf6_hello_print(struct ospf6_header *, int action);
+extern void ospf6_dbdesc_print(struct ospf6_header *, int action);
+extern void ospf6_lsreq_print(struct ospf6_header *, int action);
+extern void ospf6_lsupdate_print(struct ospf6_header *, int action);
+extern void ospf6_lsack_print(struct ospf6_header *, int action);
extern int ospf6_iobuf_size(unsigned int size);
extern void ospf6_message_terminate(void);
diff --git a/ospf6d/ospf6_neighbor.c b/ospf6d/ospf6_neighbor.c
index b35d8bf975..9323da8be3 100644
--- a/ospf6d/ospf6_neighbor.c
+++ b/ospf6d/ospf6_neighbor.c
@@ -969,35 +969,24 @@ static void ospf6_neighbor_show_detail(struct vty *vty,
}
}
-DEFUN (show_ipv6_ospf6_neighbor,
- show_ipv6_ospf6_neighbor_cmd,
- "show ipv6 ospf6 neighbor [<detail|drchoice>] [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "Neighbor list\n"
- "Display details\n"
- "Display DR choices\n"
- JSON_STR)
+static void ospf6_neighbor_show_detail_common(struct vty *vty, int argc,
+ struct cmd_token **argv,
+ struct ospf6 *ospf6, int idx_type,
+ int detail_idx, int json_idx)
{
- int idx_type = 4;
struct ospf6_neighbor *on;
struct ospf6_interface *oi;
struct ospf6_area *oa;
struct listnode *i, *j, *k;
- struct ospf6 *ospf6;
json_object *json = NULL;
json_object *json_array = NULL;
bool uj = use_json(argc, argv);
void (*showfunc)(struct vty *, struct ospf6_neighbor *,
json_object *json, bool use_json);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
-
- OSPF6_CMD_CHECK_RUNNING(ospf6);
showfunc = ospf6_neighbor_show;
- if ((uj && argc == 6) || (!uj && argc == 5)) {
+ if ((uj && argc == detail_idx) || (!uj && argc == json_idx)) {
if (!strncmp(argv[idx_type]->arg, "de", 2))
showfunc = ospf6_neighbor_show_detail;
else if (!strncmp(argv[idx_type]->arg, "dr", 2))
@@ -1037,21 +1026,50 @@ DEFUN (show_ipv6_ospf6_neighbor,
json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
}
- return CMD_SUCCESS;
}
+DEFUN(show_ipv6_ospf6_neighbor, show_ipv6_ospf6_neighbor_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] neighbor [<detail|drchoice>] [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Neighbor list\n"
+ "Display details\n"
+ "Display DR choices\n" JSON_STR)
+{
+ int idx_type = 4;
+ int detail_idx = 5;
+ int json_idx = 6;
+ struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_type += 2;
+ detail_idx += 2;
+ json_idx += 2;
+ }
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_neighbor_show_detail_common(vty, argc, argv,
+ ospf6, idx_type,
+ detail_idx, json_idx);
+ if (!all_vrf)
+ break;
+ }
+ }
-DEFUN (show_ipv6_ospf6_neighbor_one,
- show_ipv6_ospf6_neighbor_one_cmd,
- "show ipv6 ospf6 neighbor A.B.C.D [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "Neighbor list\n"
- "Specify Router-ID as IPv4 address notation\n"
- JSON_STR)
+ return CMD_SUCCESS;
+}
+
+static int ospf6_neighbor_show_common(struct vty *vty, int argc,
+ struct cmd_token **argv,
+ struct ospf6 *ospf6, int idx_ipv4)
{
- int idx_ipv4 = 4;
struct ospf6_neighbor *on;
struct ospf6_interface *oi;
struct ospf6_area *oa;
@@ -1059,12 +1077,9 @@ DEFUN (show_ipv6_ospf6_neighbor_one,
void (*showfunc)(struct vty *, struct ospf6_neighbor *,
json_object *json, bool use_json);
uint32_t router_id;
- struct ospf6 *ospf6;
json_object *json = NULL;
bool uj = use_json(argc, argv);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
showfunc = ospf6_neighbor_show_detail;
if (uj)
json = json_object_new_object();
@@ -1088,6 +1103,39 @@ DEFUN (show_ipv6_ospf6_neighbor_one,
json, JSON_C_TO_STRING_PRETTY));
json_object_free(json);
}
+
+ return CMD_SUCCESS;
+}
+
+DEFUN(show_ipv6_ospf6_neighbor_one, show_ipv6_ospf6_neighbor_one_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] neighbor A.B.C.D [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Neighbor list\n"
+ "Specify Router-ID as IPv4 address notation\n" JSON_STR)
+{
+ int idx_ipv4 = 4;
+ struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_ipv4 += 2;
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_neighbor_show_common(vty, argc, argv, ospf6,
+ idx_ipv4);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
diff --git a/ospf6d/ospf6_route.c b/ospf6d/ospf6_route.c
index 9770dd0444..2daf119c52 100644
--- a/ospf6d/ospf6_route.c
+++ b/ospf6d/ospf6_route.c
@@ -1039,7 +1039,7 @@ void ospf6_route_table_delete(struct ospf6_route_table *table)
/* VTY commands */
void ospf6_route_show(struct vty *vty, struct ospf6_route *route,
- json_object *json_array_routes, bool use_json)
+ json_object *json_routes, bool use_json)
{
int i;
char destination[PREFIX2STR_BUFFER], nexthop[64];
@@ -1072,7 +1072,6 @@ void ospf6_route_show(struct vty *vty, struct ospf6_route *route,
if (use_json) {
json_route = json_object_new_object();
- json_object_string_add(json_route, "destination", destination);
json_object_boolean_add(json_route, "isBestRoute",
ospf6_route_is_best(route));
json_object_string_add(json_route, "destinationType",
@@ -1121,12 +1120,12 @@ void ospf6_route_show(struct vty *vty, struct ospf6_route *route,
if (use_json) {
json_object_object_add(json_route, "nextHops",
json_array_next_hops);
- json_object_array_add(json_array_routes, json_route);
+ json_object_object_add(json_routes, destination, json_route);
}
}
void ospf6_route_show_detail(struct vty *vty, struct ospf6_route *route,
- json_object *json_array_routes, bool use_json)
+ json_object *json_routes, bool use_json)
{
char destination[PREFIX2STR_BUFFER], nexthop[64];
char area_id[16], id[16], adv_router[16], capa[16], options[16];
@@ -1158,7 +1157,6 @@ void ospf6_route_show_detail(struct vty *vty, struct ospf6_route *route,
if (use_json) {
json_route = json_object_new_object();
- json_object_string_add(json_route, "destination", destination);
json_object_string_add(json_route, "destinationType",
OSPF6_DEST_TYPE_NAME(route->type));
} else {
@@ -1311,7 +1309,7 @@ void ospf6_route_show_detail(struct vty *vty, struct ospf6_route *route,
if (use_json) {
json_object_object_add(json_route, "nextHops",
json_array_next_hops);
- json_object_array_add(json_array_routes, json_route);
+ json_object_object_add(json_routes, destination, json_route);
} else
vty_out(vty, "\n");
}
@@ -1377,24 +1375,23 @@ static void ospf6_route_show_table_prefix(struct vty *vty,
json_object *json, bool use_json)
{
struct ospf6_route *route;
- json_object *json_array_routes = NULL;
+ json_object *json_routes = NULL;
route = ospf6_route_lookup(prefix, table);
if (route == NULL)
return;
if (use_json)
- json_array_routes = json_object_new_array();
+ json_routes = json_object_new_object();
ospf6_route_lock(route);
while (route && ospf6_route_is_prefix(prefix, route)) {
/* Specifying a prefix will always display details */
- ospf6_route_show_detail(vty, route, json_array_routes,
- use_json);
+ ospf6_route_show_detail(vty, route, json_routes, use_json);
route = ospf6_route_next(route);
}
if (use_json)
- json_object_object_add(json, "routes", json_array_routes);
+ json_object_object_add(json, "routes", json_routes);
if (route)
ospf6_route_unlock(route);
}
@@ -1405,24 +1402,23 @@ static void ospf6_route_show_table_address(struct vty *vty,
json_object *json, bool use_json)
{
struct ospf6_route *route;
- json_object *json_array_routes = NULL;
+ json_object *json_routes = NULL;
route = ospf6_route_lookup_bestmatch(prefix, table);
if (route == NULL)
return;
if (use_json)
- json_array_routes = json_object_new_array();
+ json_routes = json_object_new_object();
prefix = &route->prefix;
ospf6_route_lock(route);
while (route && ospf6_route_is_prefix(prefix, route)) {
/* Specifying a prefix will always display details */
- ospf6_route_show_detail(vty, route, json_array_routes,
- use_json);
+ ospf6_route_show_detail(vty, route, json_routes, use_json);
route = ospf6_route_next(route);
}
if (use_json)
- json_object_object_add(json, "routes", json_array_routes);
+ json_object_object_add(json, "routes", json_routes);
if (route)
ospf6_route_unlock(route);
}
@@ -1433,24 +1429,23 @@ static void ospf6_route_show_table_match(struct vty *vty, int detail,
json_object *json, bool use_json)
{
struct ospf6_route *route;
- json_object *json_array_routes = NULL;
+ json_object *json_routes = NULL;
assert(prefix->family);
route = ospf6_route_match_head(prefix, table);
if (use_json)
- json_array_routes = json_object_new_array();
+ json_routes = json_object_new_object();
while (route) {
if (detail)
- ospf6_route_show_detail(vty, route, json_array_routes,
+ ospf6_route_show_detail(vty, route, json_routes,
use_json);
else
- ospf6_route_show(vty, route, json_array_routes,
- use_json);
+ ospf6_route_show(vty, route, json_routes, use_json);
route = ospf6_route_match_next(prefix, route);
}
if (use_json)
- json_object_object_add(json, "routes", json_array_routes);
+ json_object_object_add(json, "routes", json_routes);
}
static void ospf6_route_show_table_type(struct vty *vty, int detail,
@@ -1459,25 +1454,24 @@ static void ospf6_route_show_table_type(struct vty *vty, int detail,
json_object *json, bool use_json)
{
struct ospf6_route *route;
- json_object *json_array_routes = NULL;
+ json_object *json_routes = NULL;
route = ospf6_route_head(table);
if (use_json)
- json_array_routes = json_object_new_array();
+ json_routes = json_object_new_object();
while (route) {
if (route->path.type == type) {
if (detail)
- ospf6_route_show_detail(vty, route,
- json_array_routes,
+ ospf6_route_show_detail(vty, route, json_routes,
use_json);
else
- ospf6_route_show(vty, route, json_array_routes,
+ ospf6_route_show(vty, route, json_routes,
use_json);
}
route = ospf6_route_next(route);
}
if (use_json)
- json_object_object_add(json, "routes", json_array_routes);
+ json_object_object_add(json, "routes", json_routes);
}
static void ospf6_route_show_table(struct vty *vty, int detail,
@@ -1485,22 +1479,21 @@ static void ospf6_route_show_table(struct vty *vty, int detail,
json_object *json, bool use_json)
{
struct ospf6_route *route;
- json_object *json_array_routes = NULL;
+ json_object *json_routes = NULL;
route = ospf6_route_head(table);
if (use_json)
- json_array_routes = json_object_new_array();
+ json_routes = json_object_new_object();
while (route) {
if (detail)
- ospf6_route_show_detail(vty, route, json_array_routes,
+ ospf6_route_show_detail(vty, route, json_routes,
use_json);
else
- ospf6_route_show(vty, route, json_array_routes,
- use_json);
+ ospf6_route_show(vty, route, json_routes, use_json);
route = ospf6_route_next(route);
}
if (use_json)
- json_object_object_add(json, "routes", json_array_routes);
+ json_object_object_add(json, "routes", json_routes);
}
int ospf6_route_table_show(struct vty *vty, int argc_start, int argc,
diff --git a/ospf6d/ospf6_routemap_nb.c b/ospf6d/ospf6_routemap_nb.c
index b710fefbdf..faa992e026 100644
--- a/ospf6d/ospf6_routemap_nb.c
+++ b/ospf6d/ospf6_routemap_nb.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "lib/northbound.h"
#include "lib/routemap.h"
#include "ospf6_routemap_nb.h"
diff --git a/ospf6d/ospf6_routemap_nb_config.c b/ospf6d/ospf6_routemap_nb_config.c
index 3c7741e473..cd0a3260d5 100644
--- a/ospf6d/ospf6_routemap_nb_config.c
+++ b/ospf6d/ospf6_routemap_nb_config.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "lib/command.h"
#include "lib/log.h"
#include "lib/northbound.h"
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c
index 8c6d4b126d..a5c188c465 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -124,6 +124,104 @@ struct ospf6 *ospf6_lookup_by_vrf_name(const char *name)
return NULL;
}
+/* This is hook function for vrf create called as part of vrf_init */
+static int ospf6_vrf_new(struct vrf *vrf)
+{
+ return 0;
+}
+
+/* This is hook function for vrf delete call as part of vrf_init */
+static int ospf6_vrf_delete(struct vrf *vrf)
+{
+ return 0;
+}
+
+static void ospf6_set_redist_vrf_bitmaps(struct ospf6 *ospf6, bool set)
+{
+ int type;
+ struct list *red_list;
+
+ for (type = 0; type < ZEBRA_ROUTE_MAX; type++) {
+ red_list = ospf6->redist[type];
+ if (!red_list)
+ continue;
+ if (IS_OSPF6_DEBUG_ZEBRA(RECV))
+ zlog_debug(
+ "%s: setting redist vrf %d bitmap for type %d",
+ __func__, ospf6->vrf_id, type);
+ if (set)
+ vrf_bitmap_set(zclient->redist[AFI_IP6][type],
+ ospf6->vrf_id);
+ else
+ vrf_bitmap_unset(zclient->redist[AFI_IP6][type],
+ ospf6->vrf_id);
+ }
+}
+
+/* Disable OSPF6 VRF instance */
+static int ospf6_vrf_disable(struct vrf *vrf)
+{
+ struct ospf6 *ospf6 = NULL;
+
+ if (vrf->vrf_id == VRF_DEFAULT)
+ return 0;
+
+ ospf6 = ospf6_lookup_by_vrf_name(vrf->name);
+ if (ospf6) {
+ ospf6_zebra_vrf_deregister(ospf6);
+
+ ospf6_set_redist_vrf_bitmaps(ospf6, false);
+
+ /* We have instance configured, unlink
+ * from VRF and make it "down".
+ */
+ ospf6_vrf_unlink(ospf6, vrf);
+ thread_cancel(&ospf6->t_ospf6_receive);
+ close(ospf6->fd);
+ ospf6->fd = -1;
+ }
+
+ /* Note: This is a callback, the VRF will be deleted by the caller. */
+ return 0;
+}
+
+/* Enable OSPF6 VRF instance */
+static int ospf6_vrf_enable(struct vrf *vrf)
+{
+ struct ospf6 *ospf6 = NULL;
+ vrf_id_t old_vrf_id;
+ int ret = 0;
+
+ ospf6 = ospf6_lookup_by_vrf_name(vrf->name);
+ if (ospf6) {
+ old_vrf_id = ospf6->vrf_id;
+ /* We have instance configured, link to VRF and make it "up". */
+ ospf6_vrf_link(ospf6, vrf);
+
+ if (old_vrf_id != ospf6->vrf_id) {
+ ospf6_set_redist_vrf_bitmaps(ospf6, true);
+
+ /* start zebra redist to us for new vrf */
+ ospf6_zebra_vrf_register(ospf6);
+
+ ret = ospf6_serv_sock(ospf6);
+ if (ret < 0 || ospf6->fd <= 0)
+ return 0;
+ thread_add_read(master, ospf6_receive, ospf6, ospf6->fd,
+ &ospf6->t_ospf6_receive);
+
+ ospf6_router_id_update(ospf6);
+ }
+ }
+
+ return 0;
+}
+
+void ospf6_vrf_init(void)
+{
+ vrf_init(ospf6_vrf_new, ospf6_vrf_enable, ospf6_vrf_disable,
+ ospf6_vrf_delete, ospf6_vrf_enable);
+}
static void ospf6_top_lsdb_hook_add(struct ospf6_lsa *lsa)
{
@@ -292,6 +390,9 @@ struct ospf6 *ospf6_instance_create(const char *name)
if (ospf6->router_id == 0)
ospf6_router_id_update(ospf6);
ospf6_add(ospf6);
+ if (ospf6->fd < 0)
+ return ospf6;
+
thread_add_read(master, ospf6_receive, ospf6, ospf6->fd,
&ospf6->t_ospf6_receive);
@@ -309,6 +410,8 @@ void ospf6_delete(struct ospf6 *o)
ospf6_disable(o);
ospf6_del(o);
+ ospf6_zebra_vrf_deregister(o);
+
ospf6_serv_close(&o->fd);
for (ALL_LIST_ELEMENTS(o->area_list, node, nnode, oa))
@@ -436,17 +539,20 @@ void ospf6_router_id_update(struct ospf6 *ospf6)
}
/* start ospf6 */
-DEFUN_NOSH (router_ospf6,
- router_ospf6_cmd,
- "router ospf6",
- ROUTER_STR
- OSPF6_STR)
+DEFUN_NOSH(router_ospf6, router_ospf6_cmd, "router ospf6 [vrf NAME]",
+ ROUTER_STR OSPF6_STR VRF_CMD_HELP_STR)
{
struct ospf6 *ospf6;
+ const char *vrf_name = VRF_DEFAULT_NAME;
+ int idx_vrf = 0;
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
+ if (argv_find(argv, argc, "vrf", &idx_vrf)) {
+ vrf_name = argv[idx_vrf + 1]->arg;
+ }
+
+ ospf6 = ospf6_lookup_by_vrf_name(vrf_name);
if (ospf6 == NULL)
- ospf6 = ospf6_instance_create(VRF_DEFAULT_NAME);
+ ospf6 = ospf6_instance_create(vrf_name);
/* set current ospf point. */
VTY_PUSH_CONTEXT(OSPF6_NODE, ospf6);
@@ -455,16 +561,18 @@ DEFUN_NOSH (router_ospf6,
}
/* stop ospf6 */
-DEFUN (no_router_ospf6,
- no_router_ospf6_cmd,
- "no router ospf6",
- NO_STR
- ROUTER_STR
- OSPF6_STR)
+DEFUN(no_router_ospf6, no_router_ospf6_cmd, "no router ospf6 [vrf NAME]",
+ NO_STR ROUTER_STR OSPF6_STR VRF_CMD_HELP_STR)
{
struct ospf6 *ospf6;
+ const char *vrf_name = VRF_DEFAULT_NAME;
+ int idx_vrf = 0;
+
+ if (argv_find(argv, argc, "vrf", &idx_vrf)) {
+ vrf_name = argv[idx_vrf + 1]->arg;
+ }
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
+ ospf6 = ospf6_lookup_by_vrf_name(vrf_name);
if (ospf6 == NULL)
vty_out(vty, "OSPFv3 is not configured\n");
else {
@@ -735,16 +843,20 @@ DEFUN (ospf6_interface_area,
"OSPF6 area ID in decimal notation\n"
)
{
+ VTY_DECLVAR_CONTEXT(ospf6, ospf6);
int idx_ifname = 1;
int idx_ipv4 = 3;
struct ospf6_area *oa;
struct ospf6_interface *oi;
struct interface *ifp;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+ int ipv6_count = 0;
- VTY_DECLVAR_CONTEXT(ospf6, ospf6);
+ if (ospf6->vrf_id != VRF_UNKNOWN)
+ vrf_id = ospf6->vrf_id;
/* find/create ospf6 interface */
- ifp = if_get_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);
+ ifp = if_get_by_name(argv[idx_ifname]->arg, vrf_id);
oi = (struct ospf6_interface *)ifp->info;
if (oi == NULL)
oi = ospf6_interface_create(ifp);
@@ -754,6 +866,23 @@ DEFUN (ospf6_interface_area,
return CMD_SUCCESS;
}
+ /* if more than OSPF6_MAX_IF_ADDRS are configured on this interface
+ * then don't allow ospfv3 to be configured
+ */
+ ipv6_count = connected_count_by_family(ifp, AF_INET6);
+ if (oi->ifmtu == OSPF6_DEFAULT_MTU && ipv6_count > OSPF6_MAX_IF_ADDRS) {
+ vty_out(vty,
+ "can not configure OSPFv3 on if %s, must have less than %d interface addresses but has %d addresses\n",
+ ifp->name, OSPF6_MAX_IF_ADDRS, ipv6_count);
+ return CMD_WARNING_CONFIG_FAILED;
+ } else if (oi->ifmtu >= OSPF6_JUMBO_MTU
+ && ipv6_count > OSPF6_MAX_IF_ADDRS_JUMBO) {
+ vty_out(vty,
+ "can not configure OSPFv3 on if %s, must have less than %d interface addresses but has %d addresses\n",
+ ifp->name, OSPF6_MAX_IF_ADDRS_JUMBO, ipv6_count);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
/* parse Area-ID */
OSPF6_CMD_AREA_GET(argv[idx_ipv4]->arg, oa, ospf6);
@@ -788,14 +917,21 @@ DEFUN (no_ospf6_interface_area,
"OSPF6 area ID in decimal notation\n"
)
{
+ VTY_DECLVAR_CONTEXT(ospf6, ospf6);
int idx_ifname = 2;
int idx_ipv4 = 4;
struct ospf6_interface *oi;
struct ospf6_area *oa;
struct interface *ifp;
uint32_t area_id;
+ vrf_id_t vrf_id = VRF_DEFAULT;
+
+ if (ospf6->vrf_id != VRF_UNKNOWN)
+ vrf_id = ospf6->vrf_id;
+
+ /* find/create ospf6 interface */
+ ifp = if_get_by_name(argv[idx_ifname]->arg, vrf_id);
- ifp = if_lookup_by_name(argv[idx_ifname]->arg, VRF_DEFAULT);
if (ifp == NULL) {
vty_out(vty, "No such interface %s\n", argv[idx_ifname]->arg);
return CMD_SUCCESS;
@@ -1194,124 +1330,180 @@ DEFUN(show_ipv6_ospf6_vrfs, show_ipv6_ospf6_vrfs_cmd,
}
/* show top level structures */
-DEFUN(show_ipv6_ospf6,
- show_ipv6_ospf6_cmd,
- "show ipv6 ospf6 [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- JSON_STR)
+DEFUN(show_ipv6_ospf6, show_ipv6_ospf6_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR "All VRFs\n" JSON_STR)
{
struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
bool uj = use_json(argc, argv);
json_object *json = NULL;
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
- if (uj)
- json = json_object_new_object();
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ if (uj)
+ json = json_object_new_object();
+ ospf6_show(vty, ospf6, json, uj);
- ospf6_show(vty, ospf6, json, uj);
+ if (!all_vrf)
+ break;
+ }
+ }
if (uj)
json_object_free(json);
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_route,
- show_ipv6_ospf6_route_cmd,
- "show ipv6 ospf6 route [<intra-area|inter-area|external-1|external-2|X:X::X:X|X:X::X:X/M|detail|summary>] [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- ROUTE_STR
- "Display Intra-Area routes\n"
- "Display Inter-Area routes\n"
- "Display Type-1 External routes\n"
- "Display Type-2 External routes\n"
- "Specify IPv6 address\n"
- "Specify IPv6 prefix\n"
- "Detailed information\n"
- "Summary of route table\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_route, show_ipv6_ospf6_route_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] route [<intra-area|inter-area|external-1|external-2|X:X::X:X|X:X::X:X/M|detail|summary>] [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" ROUTE_STR
+ "Display Intra-Area routes\n"
+ "Display Inter-Area routes\n"
+ "Display Type-1 External routes\n"
+ "Display Type-2 External routes\n"
+ "Specify IPv6 address\n"
+ "Specify IPv6 prefix\n"
+ "Detailed information\n"
+ "Summary of route table\n" JSON_STR)
{
struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+ int idx_arg_start = 4;
bool uj = use_json(argc, argv);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_arg_start += 2;
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_route_table_show(vty, idx_arg_start, argc, argv,
+ ospf6->route_table, uj);
+
+ if (!all_vrf)
+ break;
+ }
+ }
- ospf6_route_table_show(vty, 4, argc, argv, ospf6->route_table, uj);
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_route_match,
- show_ipv6_ospf6_route_match_cmd,
- "show ipv6 ospf6 route X:X::X:X/M <match|longer> [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- ROUTE_STR
- "Specify IPv6 prefix\n"
- "Display routes which match the specified route\n"
- "Display routes longer than the specified route\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_route_match, show_ipv6_ospf6_route_match_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] route X:X::X:X/M <match|longer> [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" ROUTE_STR
+ "Specify IPv6 prefix\n"
+ "Display routes which match the specified route\n"
+ "Display routes longer than the specified route\n" JSON_STR)
{
struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+ int idx_start_arg = 4;
bool uj = use_json(argc, argv);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_start_arg += 2;
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_route_table_show(vty, idx_start_arg, argc, argv,
+ ospf6->route_table, uj);
+
+ if (!all_vrf)
+ break;
+ }
+ }
- ospf6_route_table_show(vty, 4, argc, argv, ospf6->route_table, uj);
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_route_match_detail,
- show_ipv6_ospf6_route_match_detail_cmd,
- "show ipv6 ospf6 route X:X::X:X/M match detail [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- ROUTE_STR
- "Specify IPv6 prefix\n"
- "Display routes which match the specified route\n"
- "Detailed information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_route_match_detail,
+ show_ipv6_ospf6_route_match_detail_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] route X:X::X:X/M match detail [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" ROUTE_STR
+ "Specify IPv6 prefix\n"
+ "Display routes which match the specified route\n"
+ "Detailed information\n" JSON_STR)
{
struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+ int idx_start_arg = 4;
bool uj = use_json(argc, argv);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_start_arg += 2;
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_route_table_show(vty, idx_start_arg, argc, argv,
+ ospf6->route_table, uj);
+
+ if (!all_vrf)
+ break;
+ }
+ }
- ospf6_route_table_show(vty, 4, argc, argv, ospf6->route_table, uj);
return CMD_SUCCESS;
}
-
-DEFUN (show_ipv6_ospf6_route_type_detail,
- show_ipv6_ospf6_route_type_detail_cmd,
- "show ipv6 ospf6 route <intra-area|inter-area|external-1|external-2> detail [json]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- ROUTE_STR
- "Display Intra-Area routes\n"
- "Display Inter-Area routes\n"
- "Display Type-1 External routes\n"
- "Display Type-2 External routes\n"
- "Detailed information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_route_type_detail, show_ipv6_ospf6_route_type_detail_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] route <intra-area|inter-area|external-1|external-2> detail [json]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n" ROUTE_STR
+ "Display Intra-Area routes\n"
+ "Display Inter-Area routes\n"
+ "Display Type-1 External routes\n"
+ "Display Type-2 External routes\n"
+ "Detailed information\n" JSON_STR)
{
struct ospf6 *ospf6;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+ int idx_start_arg = 4;
bool uj = use_json(argc, argv);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_start_arg += 2;
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_route_table_show(vty, idx_start_arg, argc, argv,
+ ospf6->route_table, uj);
+
+ if (!all_vrf)
+ break;
+ }
+ }
- ospf6_route_table_show(vty, 4, argc, argv, ospf6->route_table, uj);
return CMD_SUCCESS;
}
@@ -1368,7 +1560,11 @@ static int config_write_ospf6(struct vty *vty)
return CMD_SUCCESS;
for (ALL_LIST_ELEMENTS(om6->ospf6, node, nnode, ospf6)) {
- vty_out(vty, "router ospf6\n");
+ if (ospf6->name && strcmp(ospf6->name, VRF_DEFAULT_NAME))
+ vty_out(vty, "router ospf6 vrf %s\n", ospf6->name);
+ else
+ vty_out(vty, "router ospf6\n");
+
if (ospf6->router_id_static != 0)
vty_out(vty, " ospf6 router-id %pI4\n",
&ospf6->router_id_static);
diff --git a/ospf6d/ospf6_top.h b/ospf6d/ospf6_top.h
index 08b884f23a..238d6a40ce 100644
--- a/ospf6d/ospf6_top.h
+++ b/ospf6d/ospf6_top.h
@@ -153,6 +153,10 @@ DECLARE_QOBJ_TYPE(ospf6);
#define OSPF6_DISABLED 0x01
#define OSPF6_STUB_ROUTER 0x02
#define OSPF6_FLAG_ASBR 0x04
+#define OSPF6_MAX_IF_ADDRS 100
+#define OSPF6_MAX_IF_ADDRS_JUMBO 200
+#define OSPF6_DEFAULT_MTU 1500
+#define OSPF6_JUMBO_MTU 9000
/* global pointer for OSPF top data structure */
extern struct ospf6 *ospf6;
@@ -171,5 +175,5 @@ void ospf6_vrf_unlink(struct ospf6 *ospf6, struct vrf *vrf);
struct ospf6 *ospf6_lookup_by_vrf_id(vrf_id_t vrf_id);
struct ospf6 *ospf6_lookup_by_vrf_name(const char *name);
const char *ospf6_vrf_id_to_name(vrf_id_t vrf_id);
-
+void ospf6_vrf_init(void);
#endif /* OSPF6_TOP_H */
diff --git a/ospf6d/ospf6_zebra.c b/ospf6d/ospf6_zebra.c
index 76e7172870..170d545c49 100644
--- a/ospf6d/ospf6_zebra.c
+++ b/ospf6d/ospf6_zebra.c
@@ -130,17 +130,38 @@ void ospf6_zebra_no_redistribute(int type, vrf_id_t vrf_id)
static int ospf6_zebra_if_address_update_add(ZAPI_CALLBACK_ARGS)
{
struct connected *c;
+ struct ospf6_interface *oi;
+ int ipv6_count = 0;
c = zebra_interface_address_read(ZEBRA_INTERFACE_ADDRESS_ADD,
zclient->ibuf, vrf_id);
if (c == NULL)
return 0;
+ oi = (struct ospf6_interface *)c->ifp->info;
+ if (oi == NULL)
+ oi = ospf6_interface_create(c->ifp);
+ assert(oi);
+
if (IS_OSPF6_DEBUG_ZEBRA(RECV))
zlog_debug("Zebra Interface address add: %s %5s %pFX",
c->ifp->name, prefix_family_str(c->address),
c->address);
+ ipv6_count = connected_count_by_family(c->ifp, AF_INET6);
+ if (oi->ifmtu == OSPF6_DEFAULT_MTU && ipv6_count > OSPF6_MAX_IF_ADDRS) {
+ zlog_warn(
+ "Zebra Interface : %s has too many interface addresses %d only support %d, increase MTU",
+ c->ifp->name, ipv6_count, OSPF6_MAX_IF_ADDRS);
+ return 0;
+ } else if (oi->ifmtu >= OSPF6_JUMBO_MTU
+ && ipv6_count > OSPF6_MAX_IF_ADDRS_JUMBO) {
+ zlog_warn(
+ "Zebra Interface : %s has too many interface addresses %d only support %d",
+ c->ifp->name, ipv6_count, OSPF6_MAX_IF_ADDRS_JUMBO);
+ return 0;
+ }
+
if (c->address->family == AF_INET6) {
ospf6_interface_state_update(c->ifp);
ospf6_interface_connected_route_update(c->ifp);
@@ -303,7 +324,7 @@ static void ospf6_zebra_route_update(int type, struct ospf6_route *request,
struct prefix *dest;
if (IS_OSPF6_DEBUG_ZEBRA(SEND))
- zlog_debug("Send %s route: %pFX",
+ zlog_debug("Zebra Send %s route: %pFX",
(type == REM ? "remove" : "add"), &request->prefix);
if (zclient->sock < 0) {
diff --git a/ospf6d/ospf6d.c b/ospf6d/ospf6d.c
index 91d427c78c..da8c695f65 100644
--- a/ospf6d/ospf6d.c
+++ b/ospf6d/ospf6d.c
@@ -25,6 +25,7 @@
#include "vty.h"
#include "command.h"
#include "plist.h"
+#include "filter.h"
#include "ospf6_proto.h"
#include "ospf6_top.h"
@@ -388,161 +389,190 @@ static void ospf6_lsdb_type_show_wrapper(struct vty *vty,
vty_out(vty, "\n");
}
-DEFUN (show_ipv6_ospf6_database,
- show_ipv6_ospf6_database_cmd,
- "show ipv6 ospf6 database [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database, show_ipv6_ospf6_database_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
- int idx_level = 4;
int level;
- bool uj = use_json(argc, argv);
+ int idx_level = 4;
+ struct listnode *node;
struct ospf6 *ospf6;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+ bool uj = use_json(argc, argv);
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_level += 2;
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_show_wrapper(vty, level, NULL, NULL, NULL, uj, ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_show_wrapper(vty, level, NULL, NULL, NULL,
+ uj, ospf6);
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_type, show_ipv6_ospf6_database_type_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Router LSAs\n"
- "Display Network LSAs\n"
- "Display Inter-Area-Prefix LSAs\n"
- "Display Inter-Area-Router LSAs\n"
- "Display As-External LSAs\n"
- "Display Group-Membership LSAs\n"
- "Display Type-7 LSAs\n"
- "Display Link LSAs\n"
- "Display Intra-Area-Prefix LSAs\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_type, show_ipv6_ospf6_database_type_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_lsa = 4;
int idx_level = 5;
int level;
- uint16_t type = 0;
bool uj = use_json(argc, argv);
+ struct listnode *node;
struct ospf6 *ospf6;
-
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ uint16_t type = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_level += 2;
+ }
type = parse_type_spec(idx_lsa, argc, argv);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_type_show_wrapper(vty, level, &type, NULL, NULL, uj, ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, NULL,
+ NULL, uj, ospf6);
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_id,
- show_ipv6_ospf6_database_id_cmd,
- "show ipv6 ospf6 database <*|linkstate-id> A.B.C.D [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Any Link state Type\n"
- "Search by Link state ID\n"
- "Specify Link state ID as IPv4 address notation\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_id, show_ipv6_ospf6_database_id_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <*|linkstate-id> A.B.C.D [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Search by Link state ID\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_ipv4 = 5;
int idx_level = 6;
int level;
- uint32_t id = 0;
bool uj = use_json(argc, argv);
+ struct listnode *node;
struct ospf6 *ospf6;
+ uint32_t id = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
-
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
if (argv[idx_ipv4]->type == IPV4_TKN)
inet_pton(AF_INET, argv[idx_ipv4]->arg, &id);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_show_wrapper(vty, level, NULL, &id, NULL, uj, ospf6);
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_show_wrapper(vty, level, NULL, &id, NULL, uj,
+ ospf6);
+ if (!all_vrf)
+ break;
+ }
+ }
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_router,
- show_ipv6_ospf6_database_router_cmd,
- "show ipv6 ospf6 database <*|adv-router> * A.B.C.D <detail|dump|internal> [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Any Link state Type\n"
- "Search by Advertising Router\n"
- "Any Link state ID\n"
- "Specify Advertising Router as IPv4 address notation\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_router, show_ipv6_ospf6_database_router_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <*|adv-router> * A.B.C.D <detail|dump|internal> [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Search by Advertising Router\n"
+ "Any Link state ID\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_ipv4 = 6;
int idx_level = 7;
int level;
+ struct listnode *node;
+ struct ospf6 *ospf6;
uint32_t adv_router = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
bool uj = use_json(argc, argv);
- struct ospf6 *ospf6;
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_ipv4 += 2;
+ idx_level += 2;
+ }
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
inet_pton(AF_INET, argv[idx_ipv4]->arg, &adv_router);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_show_wrapper(vty, level, NULL, NULL, &adv_router, uj, ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_show_wrapper(vty, level, NULL, NULL,
+ &adv_router, uj, ospf6);
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN_HIDDEN (show_ipv6_ospf6_database_aggr_router,
- show_ipv6_ospf6_database_aggr_router_cmd,
- "show ipv6 ospf6 database aggr adv-router A.B.C.D",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Aggregated Router LSA\n"
- "Search by Advertising Router\n"
- "Specify Advertising Router as IPv4 address notation\n")
+static int ipv6_ospf6_database_aggr_router_common(struct vty *vty,
+ uint32_t adv_router,
+ struct ospf6 *ospf6)
{
int level = OSPF6_LSDB_SHOW_LEVEL_DETAIL;
uint16_t type = htons(OSPF6_LSTYPE_ROUTER);
- int idx_ipv4 = 6;
struct listnode *i;
- struct ospf6 *ospf6;
struct ospf6_area *oa;
struct ospf6_lsdb *lsdb;
- uint32_t adv_router = 0;
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
-
- inet_pton(AF_INET, argv[idx_ipv4]->arg, &adv_router);
for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, i, oa)) {
if (adv_router == ospf6->router_id)
@@ -561,225 +591,338 @@ DEFUN_HIDDEN (show_ipv6_ospf6_database_aggr_router,
}
vty_out(vty, "\n");
+ return CMD_SUCCESS;
+}
+
+DEFUN_HIDDEN(
+ show_ipv6_ospf6_database_aggr_router,
+ show_ipv6_ospf6_database_aggr_router_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database aggr adv-router A.B.C.D",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Aggregated Router LSA\n"
+ "Search by Advertising Router\n"
+ "Specify Advertising Router as IPv4 address notation\n")
+{
+ int idx_ipv4 = 6;
+ struct listnode *node;
+ struct ospf6 *ospf6;
+ uint32_t adv_router = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_ipv4 += 2;
+
+ inet_pton(AF_INET, argv[idx_ipv4]->arg, &adv_router);
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ipv6_ospf6_database_aggr_router_common(vty, adv_router,
+ ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_type_id,
- show_ipv6_ospf6_database_type_id_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Router LSAs\n"
- "Display Network LSAs\n"
- "Display Inter-Area-Prefix LSAs\n"
- "Display Inter-Area-Router LSAs\n"
- "Display As-External LSAs\n"
- "Display Group-Membership LSAs\n"
- "Display Type-7 LSAs\n"
- "Display Link LSAs\n"
- "Display Intra-Area-Prefix LSAs\n"
- "Search by Link state ID\n"
- "Specify Link state ID as IPv4 address notation\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_type_id, show_ipv6_ospf6_database_type_id_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Search by Link state ID\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_lsa = 4;
int idx_ipv4 = 6;
int idx_level = 7;
int level;
- uint16_t type = 0;
- uint32_t id = 0;
bool uj = use_json(argc, argv);
+ struct listnode *node;
struct ospf6 *ospf6;
-
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ uint16_t type = 0;
+ uint32_t id = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_ipv4 += 2;
+ idx_level += 2;
+ }
type = parse_type_spec(idx_lsa, argc, argv);
inet_pton(AF_INET, argv[idx_ipv4]->arg, &id);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_type_show_wrapper(vty, level, &type, &id, NULL, uj, ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, &id,
+ NULL, uj, ospf6);
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_type_router,
- show_ipv6_ospf6_database_type_router_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> <*|adv-router> A.B.C.D [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Router LSAs\n"
- "Display Network LSAs\n"
- "Display Inter-Area-Prefix LSAs\n"
- "Display Inter-Area-Router LSAs\n"
- "Display As-External LSAs\n"
- "Display Group-Membership LSAs\n"
- "Display Type-7 LSAs\n"
- "Display Link LSAs\n"
- "Display Intra-Area-Prefix LSAs\n"
- "Any Link state ID\n"
- "Search by Advertising Router\n"
- "Specify Advertising Router as IPv4 address notation\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_type_router,
+ show_ipv6_ospf6_database_type_router_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> <*|adv-router> A.B.C.D [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Any Link state ID\n"
+ "Search by Advertising Router\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_lsa = 4;
int idx_ipv4 = 6;
int idx_level = 7;
int level;
- uint16_t type = 0;
- uint32_t adv_router = 0;
bool uj = use_json(argc, argv);
+ struct listnode *node;
struct ospf6 *ospf6;
+ uint16_t type = 0;
+ uint32_t adv_router = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_ipv4 += 2;
+ idx_level += 2;
+ }
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
type = parse_type_spec(idx_lsa, argc, argv);
inet_pton(AF_INET, argv[idx_ipv4]->arg, &adv_router);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_type_show_wrapper(vty, level, &type, NULL, &adv_router, uj,
- ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, NULL,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-
-DEFUN (show_ipv6_ospf6_database_id_router,
- show_ipv6_ospf6_database_id_router_cmd,
- "show ipv6 ospf6 database * A.B.C.D A.B.C.D [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Any Link state Type\n"
- "Specify Link state ID as IPv4 address notation\n"
- "Specify Advertising Router as IPv4 address notation\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_id_router,
+ show_ipv6_ospf6_database_id_router_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database * A.B.C.D A.B.C.D [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Any Link state Type\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_ls_id = 5;
int idx_adv_rtr = 6;
int idx_level = 7;
int level;
- uint32_t id = 0;
- uint32_t adv_router = 0;
bool uj = use_json(argc, argv);
+ struct listnode *node;
struct ospf6 *ospf6;
+ uint32_t id = 0;
+ uint32_t adv_router = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_ls_id += 2;
+ idx_adv_rtr += 2;
+ idx_level += 2;
+ }
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
inet_pton(AF_INET, argv[idx_ls_id]->arg, &id);
inet_pton(AF_INET, argv[idx_adv_rtr]->arg, &adv_router);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_show_wrapper(vty, level, NULL, &id, &adv_router, uj, ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_show_wrapper(vty, level, NULL, &id,
+ &adv_router, uj, ospf6);
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-
-DEFUN (show_ipv6_ospf6_database_adv_router_linkstate_id,
- show_ipv6_ospf6_database_adv_router_linkstate_id_cmd,
- "show ipv6 ospf6 database adv-router A.B.C.D linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Search by Advertising Router\n"
- "Specify Advertising Router as IPv4 address notation\n"
- "Search by Link state ID\n"
- "Specify Link state ID as IPv4 address notation\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_adv_router_linkstate_id,
+ show_ipv6_ospf6_database_adv_router_linkstate_id_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database adv-router A.B.C.D linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Search by Advertising Router\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "Search by Link state ID\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_adv_rtr = 5;
int idx_ls_id = 7;
int idx_level = 8;
int level;
- uint32_t id = 0;
- uint32_t adv_router = 0;
bool uj = use_json(argc, argv);
+ struct listnode *node;
struct ospf6 *ospf6;
+ uint32_t id = 0;
+ uint32_t adv_router = 0;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_adv_rtr += 2;
+ idx_ls_id += 2;
+ idx_level += 2;
+ }
inet_pton(AF_INET, argv[idx_adv_rtr]->arg, &adv_router);
inet_pton(AF_INET, argv[idx_ls_id]->arg, &id);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_show_wrapper(vty, level, NULL, &id, &adv_router, uj, ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_type_show_wrapper(vty, level, NULL, &id,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_type_id_router,
- show_ipv6_ospf6_database_type_id_router_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> A.B.C.D A.B.C.D [<dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Router LSAs\n"
- "Display Network LSAs\n"
- "Display Inter-Area-Prefix LSAs\n"
- "Display Inter-Area-Router LSAs\n"
- "Display As-External LSAs\n"
- "Display Group-Membership LSAs\n"
- "Display Type-7 LSAs\n"
- "Display Link LSAs\n"
- "Display Intra-Area-Prefix LSAs\n"
- "Specify Link state ID as IPv4 address notation\n"
- "Specify Advertising Router as IPv4 address notation\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_type_id_router,
+ show_ipv6_ospf6_database_type_id_router_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> A.B.C.D A.B.C.D [<dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Specify Advertising Router as IPv4 address notation\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_lsa = 4;
int idx_ls_id = 5;
int idx_adv_rtr = 6;
int idx_level = 7;
int level;
+ bool uj = use_json(argc, argv);
+ struct listnode *node;
+ struct ospf6 *ospf6;
uint16_t type = 0;
uint32_t id = 0;
uint32_t adv_router = 0;
- bool uj = use_json(argc, argv);
- struct ospf6 *ospf6;
-
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_ls_id += 2;
+ idx_adv_rtr += 2;
+ idx_level += 2;
+ }
type = parse_type_spec(idx_lsa, argc, argv);
inet_pton(AF_INET, argv[idx_ls_id]->arg, &id);
inet_pton(AF_INET, argv[idx_adv_rtr]->arg, &adv_router);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_type_show_wrapper(vty, level, &type, &id, &adv_router, uj,
- ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, &id,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
DEFUN (show_ipv6_ospf6_database_type_adv_router_linkstate_id,
show_ipv6_ospf6_database_type_adv_router_linkstate_id_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> adv-router A.B.C.D linkstate-id A.B.C.D [<dump|internal>] [json]",
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> adv-router A.B.C.D linkstate-id A.B.C.D [<dump|internal>] [json]",
SHOW_STR
IPV6_STR
OSPF6_STR
+ VRF_CMD_HELP_STR
+ "All VRFs\n"
"Display Link state database\n"
"Display Router LSAs\n"
"Display Network LSAs\n"
@@ -803,208 +946,278 @@ DEFUN (show_ipv6_ospf6_database_type_adv_router_linkstate_id,
int idx_ls_id = 8;
int idx_level = 9;
int level;
+ bool uj = use_json(argc, argv);
+ struct listnode *node;
+ struct ospf6 *ospf6;
uint16_t type = 0;
uint32_t id = 0;
uint32_t adv_router = 0;
- bool uj = use_json(argc, argv);
- struct ospf6 *ospf6;
-
-
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_adv_rtr += 2;
+ idx_ls_id += 2;
+ idx_level += 2;
+ }
type = parse_type_spec(idx_lsa, argc, argv);
inet_pton(AF_INET, argv[idx_adv_rtr]->arg, &adv_router);
inet_pton(AF_INET, argv[idx_ls_id]->arg, &id);
level = parse_show_level(idx_level, argc, argv);
- ospf6_lsdb_type_show_wrapper(vty, level, &type, &id, &adv_router, uj,
- ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, &id,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_self_originated,
- show_ipv6_ospf6_database_self_originated_cmd,
- "show ipv6 ospf6 database self-originated [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Self-originated LSAs\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_self_originated,
+ show_ipv6_ospf6_database_self_originated_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database self-originated [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Self-originated LSAs\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_level = 5;
int level;
+ struct listnode *node;
+ struct ospf6 *ospf6;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
uint32_t adv_router = 0;
bool uj = use_json(argc, argv);
- struct ospf6 *ospf6;
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_level += 2;
+
level = parse_show_level(idx_level, argc, argv);
- adv_router = ospf6->router_id;
- ospf6_lsdb_show_wrapper(vty, level, NULL, NULL, &adv_router, uj, ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ adv_router = ospf6->router_id;
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ ospf6_lsdb_show_wrapper(vty, level, NULL, NULL,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_type_self_originated,
- show_ipv6_ospf6_database_type_self_originated_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Router LSAs\n"
- "Display Network LSAs\n"
- "Display Inter-Area-Prefix LSAs\n"
- "Display Inter-Area-Router LSAs\n"
- "Display As-External LSAs\n"
- "Display Group-Membership LSAs\n"
- "Display Type-7 LSAs\n"
- "Display Link LSAs\n"
- "Display Intra-Area-Prefix LSAs\n"
- "Display Self-originated LSAs\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_type_self_originated,
+ show_ipv6_ospf6_database_type_self_originated_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Display Self-originated LSAs\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_lsa = 4;
int idx_level = 6;
int level;
+ struct listnode *node;
+ struct ospf6 *ospf6;
uint16_t type = 0;
uint32_t adv_router = 0;
bool uj = use_json(argc, argv);
- struct ospf6 *ospf6;
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_level += 2;
+ }
+
type = parse_type_spec(idx_lsa, argc, argv);
level = parse_show_level(idx_level, argc, argv);
- adv_router = ospf6->router_id;
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ adv_router = ospf6->router_id;
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, NULL,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
- ospf6_lsdb_type_show_wrapper(vty, level, &type, NULL, &adv_router, uj,
- ospf6);
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_type_self_originated_linkstate_id,
- show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Router LSAs\n"
- "Display Network LSAs\n"
- "Display Inter-Area-Prefix LSAs\n"
- "Display Inter-Area-Router LSAs\n"
- "Display As-External LSAs\n"
- "Display Group-Membership LSAs\n"
- "Display Type-7 LSAs\n"
- "Display Link LSAs\n"
- "Display Intra-Area-Prefix LSAs\n"
- "Display Self-originated LSAs\n"
- "Search by Link state ID\n"
- "Specify Link state ID as IPv4 address notation\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_type_self_originated_linkstate_id,
+ show_ipv6_ospf6_database_type_self_originated_linkstate_id_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> self-originated linkstate-id A.B.C.D [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Display Self-originated LSAs\n"
+ "Search by Link state ID\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_lsa = 4;
int idx_ls_id = 7;
int idx_level = 8;
int level;
+ bool uj = use_json(argc, argv);
+ struct listnode *node;
+ struct ospf6 *ospf6;
uint16_t type = 0;
uint32_t adv_router = 0;
uint32_t id = 0;
- bool uj = use_json(argc, argv);
- struct ospf6 *ospf6;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_ls_id += 2;
+ idx_level += 2;
+ }
+
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
type = parse_type_spec(idx_lsa, argc, argv);
inet_pton(AF_INET, argv[idx_ls_id]->arg, &id);
level = parse_show_level(idx_level, argc, argv);
- adv_router = ospf6->router_id;
- ospf6_lsdb_type_show_wrapper(vty, level, &type, &id, &adv_router, uj,
- ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ adv_router = ospf6->router_id;
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, &id,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_database_type_id_self_originated,
- show_ipv6_ospf6_database_type_id_self_originated_cmd,
- "show ipv6 ospf6 database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> A.B.C.D self-originated [<detail|dump|internal>] [json]",
- SHOW_STR
- IPV6_STR
- OSPF6_STR
- "Display Link state database\n"
- "Display Router LSAs\n"
- "Display Network LSAs\n"
- "Display Inter-Area-Prefix LSAs\n"
- "Display Inter-Area-Router LSAs\n"
- "Display As-External LSAs\n"
- "Display Group-Membership LSAs\n"
- "Display Type-7 LSAs\n"
- "Display Link LSAs\n"
- "Display Intra-Area-Prefix LSAs\n"
- "Specify Link state ID as IPv4 address notation\n"
- "Display Self-originated LSAs\n"
- "Display details of LSAs\n"
- "Dump LSAs\n"
- "Display LSA's internal information\n"
- JSON_STR)
+DEFUN(show_ipv6_ospf6_database_type_id_self_originated,
+ show_ipv6_ospf6_database_type_id_self_originated_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] database <router|network|inter-prefix|inter-router|as-external|group-membership|type-7|link|intra-prefix> A.B.C.D self-originated [<detail|dump|internal>] [json]",
+ SHOW_STR IPV6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display Link state database\n"
+ "Display Router LSAs\n"
+ "Display Network LSAs\n"
+ "Display Inter-Area-Prefix LSAs\n"
+ "Display Inter-Area-Router LSAs\n"
+ "Display As-External LSAs\n"
+ "Display Group-Membership LSAs\n"
+ "Display Type-7 LSAs\n"
+ "Display Link LSAs\n"
+ "Display Intra-Area-Prefix LSAs\n"
+ "Specify Link state ID as IPv4 address notation\n"
+ "Display Self-originated LSAs\n"
+ "Display details of LSAs\n"
+ "Dump LSAs\n"
+ "Display LSA's internal information\n" JSON_STR)
{
int idx_lsa = 4;
int idx_ls_id = 5;
int idx_level = 7;
int level;
+ bool uj = use_json(argc, argv);
+ struct listnode *node;
+ struct ospf6 *ospf6;
uint16_t type = 0;
uint32_t adv_router = 0;
uint32_t id = 0;
- bool uj = use_json(argc, argv);
- struct ospf6 *ospf6;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_lsa += 2;
+ idx_ls_id += 2;
+ idx_level += 2;
+ }
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
type = parse_type_spec(idx_lsa, argc, argv);
inet_pton(AF_INET, argv[idx_ls_id]->arg, &id);
level = parse_show_level(idx_level, argc, argv);
- adv_router = ospf6->router_id;
- ospf6_lsdb_type_show_wrapper(vty, level, &type, &id, &adv_router, uj,
- ospf6);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ adv_router = ospf6->router_id;
+ ospf6_lsdb_type_show_wrapper(vty, level, &type, &id,
+ &adv_router, uj, ospf6);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_border_routers,
- show_ipv6_ospf6_border_routers_cmd,
- "show ipv6 ospf6 border-routers [<A.B.C.D|detail>]",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "Display routing table for ABR and ASBR\n"
- "Router ID\n"
- "Show detailed output\n")
+static int show_ospf6_border_routers_common(struct vty *vty, int argc,
+ struct cmd_token **argv,
+ struct ospf6 *ospf6, int idx_ipv4,
+ int idx_argc)
{
- int idx_ipv4 = 4;
uint32_t adv_router;
struct ospf6_route *ro;
struct prefix prefix;
- struct ospf6 *ospf6 = NULL;
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
- if (argc == 5) {
+ if (argc == idx_argc) {
if (strmatch(argv[idx_ipv4]->text, "detail")) {
for (ro = ospf6_route_head(ospf6->brouter_table); ro;
ro = ospf6_route_next(ro))
@@ -1017,7 +1230,7 @@ DEFUN (show_ipv6_ospf6_border_routers,
if (!ro) {
vty_out(vty,
"No Route found for Router ID: %s\n",
- argv[4]->arg);
+ argv[idx_ipv4]->arg);
return CMD_SUCCESS;
}
@@ -1035,62 +1248,125 @@ DEFUN (show_ipv6_ospf6_border_routers,
return CMD_SUCCESS;
}
+DEFUN(show_ipv6_ospf6_border_routers, show_ipv6_ospf6_border_routers_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] border-routers [<A.B.C.D|detail>]",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display routing table for ABR and ASBR\n"
+ "Router ID\n"
+ "Show detailed output\n")
+{
+ int idx_ipv4 = 4;
+ struct ospf6 *ospf6 = NULL;
+ struct listnode *node;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+ int idx_argc = 5;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0) {
+ idx_argc += 2;
+ idx_ipv4 += 2;
+ }
-DEFUN (show_ipv6_ospf6_linkstate,
- show_ipv6_ospf6_linkstate_cmd,
- "show ipv6 ospf6 linkstate <router A.B.C.D|network A.B.C.D A.B.C.D>",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "Display linkstate routing table\n"
- "Display Router Entry\n"
- "Specify Router ID as IPv4 address notation\n"
- "Display Network Entry\n"
- "Specify Router ID as IPv4 address notation\n"
- "Specify Link state ID as IPv4 address notation\n")
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ show_ospf6_border_routers_common(vty, argc, argv, ospf6,
+ idx_ipv4, idx_argc);
+
+ if (!all_vrf)
+ break;
+ }
+ }
+
+ return CMD_SUCCESS;
+}
+
+
+DEFUN(show_ipv6_ospf6_linkstate, show_ipv6_ospf6_linkstate_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] linkstate <router A.B.C.D|network A.B.C.D A.B.C.D>",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display linkstate routing table\n"
+ "Display Router Entry\n"
+ "Specify Router ID as IPv4 address notation\n"
+ "Display Network Entry\n"
+ "Specify Router ID as IPv4 address notation\n"
+ "Specify Link state ID as IPv4 address notation\n")
{
int idx_ipv4 = 5;
- struct listnode *node;
+ struct listnode *node, *nnode;
struct ospf6_area *oa;
struct ospf6 *ospf6 = NULL;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_ipv4 += 2;
+
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, nnode, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) {
+ vty_out(vty,
+ "\n SPF Result in Area %s\n\n",
+ oa->name);
+ ospf6_linkstate_table_show(vty, idx_ipv4, argc,
+ argv, oa->spf_table);
+ }
+ vty_out(vty, "\n");
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
- for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) {
- vty_out(vty, "\n SPF Result in Area %s\n\n", oa->name);
- ospf6_linkstate_table_show(vty, idx_ipv4, argc, argv,
- oa->spf_table);
+ if (!all_vrf)
+ break;
+ }
}
- vty_out(vty, "\n");
return CMD_SUCCESS;
}
-DEFUN (show_ipv6_ospf6_linkstate_detail,
- show_ipv6_ospf6_linkstate_detail_cmd,
- "show ipv6 ospf6 linkstate detail",
- SHOW_STR
- IP6_STR
- OSPF6_STR
- "Display linkstate routing table\n"
- "Display detailed information\n")
+DEFUN(show_ipv6_ospf6_linkstate_detail, show_ipv6_ospf6_linkstate_detail_cmd,
+ "show ipv6 ospf6 [vrf <NAME|all>] linkstate detail",
+ SHOW_STR IP6_STR OSPF6_STR VRF_CMD_HELP_STR
+ "All VRFs\n"
+ "Display linkstate routing table\n"
+ "Display detailed information\n")
{
int idx_detail = 4;
struct listnode *node;
struct ospf6_area *oa;
struct ospf6 *ospf6 = NULL;
+ const char *vrf_name = NULL;
+ bool all_vrf = false;
+ int idx_vrf = 0;
+
- ospf6 = ospf6_lookup_by_vrf_name(VRF_DEFAULT_NAME);
- OSPF6_CMD_CHECK_RUNNING(ospf6);
+ OSPF6_CMD_CHECK_RUNNING();
+ OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf);
+ if (idx_vrf > 0)
+ idx_detail += 2;
- for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) {
- vty_out(vty, "\n SPF Result in Area %s\n\n", oa->name);
- ospf6_linkstate_table_show(vty, idx_detail, argc, argv,
- oa->spf_table);
+ for (ALL_LIST_ELEMENTS_RO(om6->ospf6, node, ospf6)) {
+ if (all_vrf || strcmp(ospf6->name, vrf_name) == 0) {
+ for (ALL_LIST_ELEMENTS_RO(ospf6->area_list, node, oa)) {
+ vty_out(vty,
+ "\n SPF Result in Area %s\n\n",
+ oa->name);
+ ospf6_linkstate_table_show(vty, idx_detail,
+ argc, argv,
+ oa->spf_table);
+ }
+ vty_out(vty, "\n");
+
+ if (!all_vrf)
+ break;
+ }
}
- vty_out(vty, "\n");
return CMD_SUCCESS;
}
@@ -1123,8 +1399,11 @@ void ospf6_init(struct thread_master *master)
ospf6_asbr_init();
ospf6_abr_init();
+ /* initialize hooks for modifying filter rules */
prefix_list_add_hook(ospf6_plist_add);
prefix_list_delete_hook(ospf6_plist_del);
+ access_list_add_hook(ospf6_filter_update);
+ access_list_delete_hook(ospf6_filter_update);
ospf6_bfd_init();
install_node(&debug_node);
diff --git a/ospf6d/ospf6d.h b/ospf6d/ospf6d.h
index dfac57aa2f..e054803df3 100644
--- a/ospf6d/ospf6d.h
+++ b/ospf6d/ospf6d.h
@@ -89,13 +89,21 @@ extern struct thread_master *master;
#define OSPF6_ROUTER_ID_STR "Specify Router-ID\n"
#define OSPF6_LS_ID_STR "Specify Link State ID\n"
-#define OSPF6_CMD_CHECK_RUNNING(ospf6) \
- if (ospf6 == NULL) { \
+#define OSPF6_CMD_CHECK_RUNNING() \
+ if (om6->ospf6 == NULL) { \
vty_out(vty, "OSPFv3 is not running\n"); \
return CMD_SUCCESS; \
}
#define IS_OSPF6_ASBR(O) ((O)->flag & OSPF6_FLAG_ASBR)
+#define OSPF6_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf) \
+ if (argv_find(argv, argc, "vrf", &idx_vrf)) { \
+ vrf_name = argv[idx_vrf + 1]->arg; \
+ all_vrf = strmatch(vrf_name, "all"); \
+ } else { \
+ vrf_name = VRF_DEFAULT_NAME; \
+ }
+
extern struct zebra_privs_t ospf6d_privs;
/* Function Prototypes */
diff --git a/ospfd/ospf_asbr.c b/ospfd/ospf_asbr.c
index e01cfe3e03..bda00e0c9e 100644
--- a/ospfd/ospf_asbr.c
+++ b/ospfd/ospf_asbr.c
@@ -113,7 +113,6 @@ ospf_external_info_add(struct ospf *ospf, uint8_t type, unsigned short instance,
struct external_info *new;
struct route_node *rn;
struct ospf_external *ext;
- char inetbuf[INET6_BUFSIZ];
ext = ospf_external_lookup(ospf, type, instance);
if (!ext)
@@ -121,26 +120,23 @@ ospf_external_info_add(struct ospf *ospf, uint8_t type, unsigned short instance,
rn = route_node_get(EXTERNAL_INFO(ext), (struct prefix *)&p);
/* If old info exists, -- discard new one or overwrite with new one? */
- if (rn)
- if (rn->info) {
- new = rn->info;
- if ((new->ifindex == ifindex)
- && (new->nexthop.s_addr == nexthop.s_addr)
- && (new->tag == tag)) {
- route_unlock_node(rn);
- return NULL; /* NULL => no LSA to refresh */
- }
-
- inet_ntop(AF_INET, (void *)&nexthop.s_addr, inetbuf,
- sizeof(inetbuf));
- if (IS_DEBUG_OSPF(lsa, LSA_GENERATE))
- zlog_debug(
- "Redistribute[%s][%d][%u]: %pFX discarding old info with NH %s.",
- ospf_redist_string(type), instance,
- ospf->vrf_id, &p, inetbuf);
- XFREE(MTYPE_OSPF_EXTERNAL_INFO, rn->info);
+ if (rn && rn->info) {
+ new = rn->info;
+ if ((new->ifindex == ifindex)
+ && (new->nexthop.s_addr == nexthop.s_addr)
+ && (new->tag == tag)) {
+ route_unlock_node(rn);
+ return NULL; /* NULL => no LSA to refresh */
}
+ if (IS_DEBUG_OSPF(lsa, LSA_GENERATE))
+ zlog_debug(
+ "Redistribute[%s][%d][%u]: %pFX discarding old info with NH %pI4.",
+ ospf_redist_string(type), instance,
+ ospf->vrf_id, &p, &nexthop.s_addr);
+ XFREE(MTYPE_OSPF_EXTERNAL_INFO, rn->info);
+ }
+
/* Create new External info instance. */
new = ospf_external_info_new(type, instance);
new->p = p;
@@ -155,12 +151,10 @@ ospf_external_info_add(struct ospf *ospf, uint8_t type, unsigned short instance,
rn->info = new;
if (IS_DEBUG_OSPF(lsa, LSA_GENERATE)) {
- inet_ntop(AF_INET, (void *)&nexthop.s_addr, inetbuf,
- sizeof(inetbuf));
zlog_debug(
- "Redistribute[%s][%u]: %pFX external info created, with NH %s",
- ospf_redist_string(type), ospf->vrf_id,
- &p, inetbuf);
+ "Redistribute[%s][%u]: %pFX external info created, with NH %pI4",
+ ospf_redist_string(type), ospf->vrf_id, &p,
+ &nexthop.s_addr);
}
return new;
}
@@ -329,34 +323,36 @@ void ospf_redistribute_withdraw(struct ospf *ospf, uint8_t type,
return;
/* Delete external info for specified type. */
- if (EXTERNAL_INFO(ext))
- for (rn = route_top(EXTERNAL_INFO(ext)); rn;
- rn = route_next(rn))
- if ((ei = rn->info)) {
- struct ospf_external_aggr_rt *aggr;
-
- if (is_prefix_default(&ei->p)
- && ospf->default_originate
- != DEFAULT_ORIGINATE_NONE)
- continue;
+ if (!EXTERNAL_INFO(ext))
+ return;
+
+ for (rn = route_top(EXTERNAL_INFO(ext)); rn; rn = route_next(rn)) {
+ ei = rn->info;
- aggr = ei->aggr_route;
+ if (!ei)
+ continue;
+
+ struct ospf_external_aggr_rt *aggr;
+
+ if (is_prefix_default(&ei->p)
+ && ospf->default_originate != DEFAULT_ORIGINATE_NONE)
+ continue;
+
+ aggr = ei->aggr_route;
- if (aggr)
- ospf_unlink_ei_from_aggr(ospf, aggr,
- ei);
- else if (ospf_external_info_find_lsa(ospf,
- &ei->p))
- ospf_external_lsa_flush(
- ospf, type, &ei->p,
+ if (aggr)
+ ospf_unlink_ei_from_aggr(ospf, aggr, ei);
+ else if (ospf_external_info_find_lsa(ospf, &ei->p))
+ ospf_external_lsa_flush(ospf, type, &ei->p,
ei->ifindex /*, ei->nexthop */);
- ospf_external_info_free(ei);
- route_unlock_node(rn);
- rn->info = NULL;
- }
+ ospf_external_info_free(ei);
+ route_unlock_node(rn);
+ rn->info = NULL;
+ }
}
+
/* External Route Aggregator Handlers */
bool is_valid_summary_addr(struct prefix_ipv4 *p)
{
@@ -696,8 +692,7 @@ struct ospf_lsa *ospf_originate_summary_lsa(struct ospf *ospf,
if (IS_DEBUG_OSPF(lsa, EXTNL_LSA_AGGR))
zlog_debug(
"%s: LSA is in MAX-AGE so refreshing LSA(%pI4/%d)",
- __PRETTY_FUNCTION__, &aggr->p.prefix,
- aggr->p.prefixlen);
+ __func__, &aggr->p.prefix, aggr->p.prefixlen);
ospf_external_lsa_refresh(ospf, lsa, &ei_aggr,
LSA_REFRESH_FORCE, 1);
@@ -715,8 +710,7 @@ struct ospf_lsa *ospf_originate_summary_lsa(struct ospf *ospf,
if (IS_DEBUG_OSPF(lsa, EXTNL_LSA_AGGR))
zlog_debug(
"%s: External route prefix is same as aggr so refreshing LSA(%pI4/%d)",
- __PRETTY_FUNCTION__, &aggr->p.prefix,
- aggr->p.prefixlen);
+ __func__, &aggr->p.prefix, aggr->p.prefixlen);
ospf_external_lsa_refresh(ospf, lsa, &ei_aggr,
LSA_REFRESH_FORCE, 1);
SET_FLAG(aggr->flags, OSPF_EXTERNAL_AGGRT_ORIGINATED);
diff --git a/ospfd/ospf_flood.c b/ospfd/ospf_flood.c
index caba03c1b5..7eb587899b 100644
--- a/ospfd/ospf_flood.c
+++ b/ospfd/ospf_flood.c
@@ -388,8 +388,7 @@ int ospf_flood(struct ospf *ospf, struct ospf_neighbor *nbr,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Received a maxage GRACE-LSA from router %pI4",
- __PRETTY_FUNCTION__,
- &new->data->adv_router);
+ __func__, &new->data->adv_router);
if (current) {
ospf_process_maxage_grace_lsa(ospf, new, nbr);
@@ -397,22 +396,21 @@ int ospf_flood(struct ospf *ospf, struct ospf_neighbor *nbr,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Grace LSA doesn't exist in lsdb, so discarding grace lsa",
- __PRETTY_FUNCTION__);
+ __func__);
return -1;
}
} else {
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Received a GRACE-LSA from router %pI4",
- __PRETTY_FUNCTION__,
- &new->data->adv_router);
+ __func__, &new->data->adv_router);
if (ospf_process_grace_lsa(ospf, new, nbr)
== OSPF_GR_NOT_HELPER) {
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Not moving to HELPER role, So discarding grace LSA",
- __PRETTY_FUNCTION__);
+ __func__);
return -1;
}
}
diff --git a/ospfd/ospf_gr_helper.c b/ospfd/ospf_gr_helper.c
index a86e1b8401..d818878cf5 100644
--- a/ospfd/ospf_gr_helper.c
+++ b/ospfd/ospf_gr_helper.c
@@ -164,7 +164,7 @@ void ospf_gr_helper_init(struct ospf *ospf)
int rc;
if (IS_DEBUG_OSPF_GR_HELPER)
- zlog_debug("%s, GR Helper init.", __PRETTY_FUNCTION__);
+ zlog_debug("%s, GR Helper init.", __func__);
ospf->is_helper_supported = OSPF_GR_FALSE;
ospf->strict_lsa_check = OSPF_GR_TRUE;
@@ -201,7 +201,7 @@ void ospf_gr_helper_stop(struct ospf *ospf)
{
if (IS_DEBUG_OSPF_GR_HELPER)
- zlog_debug("%s, GR helper deinit.", __PRETTY_FUNCTION__);
+ zlog_debug("%s, GR helper deinit.", __func__);
ospf_enable_rtr_hash_destroy(ospf);
@@ -305,7 +305,7 @@ static int ospf_extract_grace_lsa_fields(struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Malformed packet.Invalid TLV type:%d",
- __PRETTY_FUNCTION__, ntohs(tlvh->type));
+ __func__, ntohs(tlvh->type));
return OSPF_GR_FAILURE;
}
}
@@ -370,16 +370,14 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
&restart_reason);
if (ret != OSPF_GR_SUCCESS) {
if (IS_DEBUG_OSPF_GR_HELPER)
- zlog_debug("%s, Wrong Grace LSA packet.",
- __PRETTY_FUNCTION__);
+ zlog_debug("%s, Wrong Grace LSA packet.", __func__);
return OSPF_GR_NOT_HELPER;
}
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Grace LSA received from %pI4, grace interval:%u, restartreason :%s",
- __PRETTY_FUNCTION__, &restart_addr,
- grace_interval,
+ __func__, &restart_addr, grace_interval,
ospf_restart_reason2str(restart_reason));
/* Incase of broadcast links, if RESTARTER is DR_OTHER,
@@ -393,8 +391,7 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Restarter is not a nbr(%pI4) for this router.",
- __PRETTY_FUNCTION__,
- &restart_addr);
+ __func__, &restart_addr);
return OSPF_GR_NOT_HELPER;
}
} else
@@ -411,7 +408,7 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, HELPER support is disabled, So not a HELPER",
- __PRETTY_FUNCTION__);
+ __func__);
restarter->gr_helper_info.rejected_reason =
OSPF_HELPER_SUPPORT_DISABLED;
return OSPF_GR_NOT_HELPER;
@@ -426,7 +423,7 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, This Neighbour %pI4 is not in FULL state.",
- __PRETTY_FUNCTION__, &restarter->src);
+ __func__, &restarter->src);
restarter->gr_helper_info.rejected_reason =
OSPF_HELPER_NOT_A_VALID_NEIGHBOUR;
return OSPF_GR_NOT_HELPER;
@@ -440,7 +437,7 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Router supports only planned restarts but received the GRACE LSA for an unplanned restart.",
- __PRETTY_FUNCTION__);
+ __func__);
restarter->gr_helper_info.rejected_reason =
OSPF_HELPER_PLANNED_ONLY_RESTART;
return OSPF_GR_NOT_HELPER;
@@ -454,7 +451,7 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Changed LSA in Rxmt list. So not Helper.",
- __PRETTY_FUNCTION__);
+ __func__);
restarter->gr_helper_info.rejected_reason =
OSPF_HELPER_TOPO_CHANGE_RTXMT_LIST;
return OSPF_GR_NOT_HELPER;
@@ -465,8 +462,7 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Grace LSA age(%d) is more than the graceinterval(%d)",
- __PRETTY_FUNCTION__, lsa->data->ls_age,
- grace_interval);
+ __func__, lsa->data->ls_age, grace_interval);
restarter->gr_helper_info.rejected_reason =
OSPF_HELPER_LSA_AGE_MORE;
return OSPF_GR_NOT_HELPER;
@@ -482,7 +478,7 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Received grace period %d is larger than supported grace %d",
- __PRETTY_FUNCTION__, grace_interval,
+ __func__, grace_interval,
ospf->supported_grace_time);
actual_grace_interval = ospf->supported_grace_time;
}
@@ -497,12 +493,12 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Router is already acting as a HELPER for this nbr,so restart the grace timer",
- __PRETTY_FUNCTION__);
+ __func__);
} else {
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, This Router becomes a HELPER for the neighbour %pI4",
- __PRETTY_FUNCTION__, &restarter->src);
+ __func__, &restarter->src);
}
/* Became a Helper to the RESTART neighbour.
@@ -518,8 +514,8 @@ int ospf_process_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
ospf->active_restarter_cnt++;
if (IS_DEBUG_OSPF_GR_HELPER)
- zlog_debug("%s, Grace timer started.interval:%d",
- __PRETTY_FUNCTION__, actual_grace_interval);
+ zlog_debug("%s, Grace timer started.interval:%d", __func__,
+ actual_grace_interval);
/* Start the grace timer */
thread_add_timer(master, ospf_handle_grace_timer_expiry, restarter,
@@ -607,8 +603,7 @@ void ospf_helper_handle_topo_chg(struct ospf *ospf, struct ospf_lsa *lsa)
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Topo change detected due to lsa LSID:%pI4 type:%d",
- __PRETTY_FUNCTION__, &lsa->data->id,
- lsa->data->type);
+ __func__, &lsa->data->id, lsa->data->type);
lsa->to_be_acknowledged = OSPF_GR_TRUE;
@@ -671,8 +666,7 @@ void ospf_gr_helper_exit(struct ospf_neighbor *nbr,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug("%s, Exiting from HELPER support to %pI4, due to %s",
- __PRETTY_FUNCTION__, &nbr->src,
- ospf_exit_reason2str(reason));
+ __func__, &nbr->src, ospf_exit_reason2str(reason));
/* Reset helper status*/
nbr->gr_helper_info.gr_helper_status = OSPF_GR_NOT_HELPER;
@@ -704,7 +698,7 @@ void ospf_gr_helper_exit(struct ospf_neighbor *nbr,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Failed GR exit, so bringing down the neighbour",
- __PRETTY_FUNCTION__);
+ __func__);
OSPF_NSM_EVENT_EXECUTE(nbr, NSM_KillNbr);
}
@@ -752,14 +746,13 @@ void ospf_process_maxage_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
&restartReason);
if (ret != OSPF_GR_SUCCESS) {
if (IS_DEBUG_OSPF_GR_HELPER)
- zlog_debug("%s, Wrong Grace LSA packet.",
- __PRETTY_FUNCTION__);
+ zlog_debug("%s, Wrong Grace LSA packet.", __func__);
return;
}
if (IS_DEBUG_OSPF_GR_HELPER)
- zlog_debug("%s, GraceLSA received for neighbour %pI4",
- __PRETTY_FUNCTION__, &restartAddr);
+ zlog_debug("%s, GraceLSA received for neighbour %pI4", __func__,
+ &restartAddr);
/* In case of broadcast links, if RESTARTER is DR_OTHER,
* grace LSA might be received from DR, so fetching the
@@ -772,7 +765,7 @@ void ospf_process_maxage_grace_lsa(struct ospf *ospf, struct ospf_lsa *lsa,
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Restarter is not a neighbour for this router.",
- __PRETTY_FUNCTION__);
+ __func__);
return;
}
} else {
diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c
index 006c4888ae..b3b9244b22 100644
--- a/ospfd/ospf_nsm.c
+++ b/ospfd/ospf_nsm.c
@@ -78,7 +78,7 @@ static int ospf_inactivity_timer(struct thread *thread)
else if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug(
"%s, Acting as HELPER for this neighbour, So inactivitytimer event will not be fired.",
- __PRETTY_FUNCTION__);
+ __func__);
return 0;
}
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index aa98d7dd28..2de6731758 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -4266,7 +4266,7 @@ void ospf_ls_ack_send(struct ospf_neighbor *nbr, struct ospf_lsa *lsa)
if (IS_GRACE_LSA(lsa)) {
if (IS_DEBUG_OSPF_GR_HELPER)
zlog_debug("%s, Sending GRACE ACK to Restarter.",
- __PRETTY_FUNCTION__);
+ __func__);
}
if (listcount(oi->ls_ack_direct.ls_ack) == 0)
diff --git a/ospfd/ospf_routemap_nb.c b/ospfd/ospf_routemap_nb.c
index 1f6b0ef78c..e53d009a55 100644
--- a/ospfd/ospf_routemap_nb.c
+++ b/ospfd/ospf_routemap_nb.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "lib/northbound.h"
#include "lib/routemap.h"
#include "ospf_routemap_nb.h"
diff --git a/ospfd/ospf_routemap_nb_config.c b/ospfd/ospf_routemap_nb_config.c
index bfb18c5e08..9026795425 100644
--- a/ospfd/ospf_routemap_nb_config.c
+++ b/ospfd/ospf_routemap_nb_config.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "lib/command.h"
#include "lib/log.h"
#include "lib/northbound.h"
diff --git a/ospfd/ospf_spf.c b/ospfd/ospf_spf.c
index 0164bfac67..3849d4b7ea 100644
--- a/ospfd/ospf_spf.c
+++ b/ospfd/ospf_spf.c
@@ -1994,7 +1994,7 @@ void ospf_spf_calculate_schedule(struct ospf *ospf, ospf_spf_reason_t reason)
void ospf_restart_spf(struct ospf *ospf)
{
if (IS_DEBUG_OSPF_EVENT)
- zlog_debug("%s: Restart SPF.", __PRETTY_FUNCTION__);
+ zlog_debug("%s: Restart SPF.", __func__);
/* Handling inter area and intra area routes*/
if (ospf->new_table) {
diff --git a/ospfd/ospf_sr.c b/ospfd/ospf_sr.c
index a7a2e03632..d003f3bf7c 100644
--- a/ospfd/ospf_sr.c
+++ b/ospfd/ospf_sr.c
@@ -1689,7 +1689,8 @@ void ospf_sr_ext_itf_add(struct ext_itf *exti)
else
srl->nhlfe[1].nexthop = exti->rmt_itf_addr.value;
break;
- default:
+ case PREF_SID:
+ case LOCAL_SID:
/* Wrong SID Type. Abort! */
XFREE(MTYPE_OSPF_SR_PARAMS, srl);
return;
diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c
index 57ef6029ad..50943c4ccf 100644
--- a/ospfd/ospf_vty.c
+++ b/ospfd/ospf_vty.c
@@ -9111,14 +9111,13 @@ DEFUN (ospf_redistribute_source,
int metric = -1;
struct ospf_redist *red;
int idx = 0;
+ bool update = false;
/* Get distribute source. */
source = proto_redistnum(AFI_IP, argv[idx_protocol]->text);
if (source < 0)
return CMD_WARNING_CONFIG_FAILED;
- red = ospf_redist_add(ospf, source, 0);
-
/* Get metric value. */
if (argv_find(argv, argc, "(0-16777214)", &idx)) {
if (!str2metric(argv[idx]->arg, &metric))
@@ -9131,13 +9130,25 @@ DEFUN (ospf_redistribute_source,
return CMD_WARNING_CONFIG_FAILED;
}
idx = 1;
+
+ red = ospf_redist_lookup(ospf, source, 0);
+ if (!red)
+ red = ospf_redist_add(ospf, source, 0);
+ else
+ update = true;
+
/* Get route-map */
if (argv_find(argv, argc, "WORD", &idx)) {
ospf_routemap_set(red, argv[idx]->arg);
} else
ospf_routemap_unset(red);
- return ospf_redistribute_set(ospf, source, 0, type, metric);
+ if (update)
+ return ospf_redistribute_update(ospf, red, source, 0, type,
+ metric);
+ else
+ return ospf_redistribute_set(ospf, red, source, 0, type,
+ metric);
}
DEFUN (no_ospf_redistribute_source,
@@ -9195,6 +9206,7 @@ DEFUN (ospf_redistribute_instance_source,
int metric = -1;
unsigned short instance;
struct ospf_redist *red;
+ bool update = false;
source = proto_redistnum(AFI_IP, argv[idx_ospf_table]->text);
@@ -9227,7 +9239,11 @@ DEFUN (ospf_redistribute_instance_source,
if (!str2metric_type(argv[idx + 1]->arg, &type))
return CMD_WARNING_CONFIG_FAILED;
- red = ospf_redist_add(ospf, source, instance);
+ red = ospf_redist_lookup(ospf, source, instance);
+ if (!red)
+ red = ospf_redist_add(ospf, source, instance);
+ else
+ update = true;
idx = 3;
if (argv_find(argv, argc, "route-map", &idx))
@@ -9235,7 +9251,12 @@ DEFUN (ospf_redistribute_instance_source,
else
ospf_routemap_unset(red);
- return ospf_redistribute_set(ospf, source, instance, type, metric);
+ if (update)
+ return ospf_redistribute_update(ospf, red, source, instance,
+ type, metric);
+ else
+ return ospf_redistribute_set(ospf, red, source, instance, type,
+ metric);
}
DEFUN (no_ospf_redistribute_instance_source,
diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c
index a2ce4d1ce7..5853b506f8 100644
--- a/ospfd/ospf_zebra.c
+++ b/ospfd/ospf_zebra.c
@@ -637,7 +637,8 @@ void ospf_zebra_update_prefix_sid(const struct sr_prefix *srp)
}
}
break;
- default:
+ case ADJ_SID:
+ case LAN_ADJ_SID:
return;
}
@@ -765,53 +766,44 @@ int ospf_is_type_redistributed(struct ospf *ospf, int type,
ospf->vrf_id)
: ((instance
&& redist_check_instance(
- &zclient->mi_redist[AFI_IP][type],
- instance))
+ &zclient->mi_redist[AFI_IP][type],
+ instance))
|| (!instance
&& vrf_bitmap_check(
- zclient->redist[AFI_IP][type],
- ospf->vrf_id))));
+ zclient->redist[AFI_IP][type],
+ ospf->vrf_id))));
}
-int ospf_redistribute_set(struct ospf *ospf, int type, unsigned short instance,
- int mtype, int mvalue)
+int ospf_redistribute_update(struct ospf *ospf, struct ospf_redist *red,
+ int type, unsigned short instance, int mtype,
+ int mvalue)
{
int force = 0;
- struct ospf_redist *red;
-
- red = ospf_redist_lookup(ospf, type, instance);
- if (red == NULL) {
- zlog_err(
- "Redistribute[%s][%d]: Lookup failed Type[%d] , Metric[%d]",
- ospf_redist_string(type), instance,
- metric_type(ospf, type, instance),
- metric_value(ospf, type, instance));
- return CMD_WARNING_CONFIG_FAILED;
+ if (mtype != red->dmetric.type) {
+ red->dmetric.type = mtype;
+ force = LSA_REFRESH_FORCE;
+ }
+ if (mvalue != red->dmetric.value) {
+ red->dmetric.value = mvalue;
+ force = LSA_REFRESH_FORCE;
}
- if (ospf_is_type_redistributed(ospf, type, instance)) {
- if (mtype != red->dmetric.type) {
- red->dmetric.type = mtype;
- force = LSA_REFRESH_FORCE;
- }
- if (mvalue != red->dmetric.value) {
- red->dmetric.value = mvalue;
- force = LSA_REFRESH_FORCE;
- }
-
- ospf_external_lsa_refresh_type(ospf, type, instance, force);
+ ospf_external_lsa_refresh_type(ospf, type, instance, force);
- if (IS_DEBUG_OSPF(zebra, ZEBRA_REDISTRIBUTE))
- zlog_debug(
- "Redistribute[%s][%d]: Refresh Type[%d], Metric[%d]",
- ospf_redist_string(type), instance,
- metric_type(ospf, type, instance),
- metric_value(ospf, type, instance));
+ if (IS_DEBUG_OSPF(zebra, ZEBRA_REDISTRIBUTE))
+ zlog_debug(
+ "Redistribute[%s][%d]: Refresh Type[%d], Metric[%d]",
+ ospf_redist_string(type), instance,
+ metric_type(ospf, type, instance),
+ metric_value(ospf, type, instance));
- return CMD_SUCCESS;
- }
+ return CMD_SUCCESS;
+}
+int ospf_redistribute_set(struct ospf *ospf, struct ospf_redist *red, int type,
+ unsigned short instance, int mtype, int mvalue)
+{
red->dmetric.type = mtype;
red->dmetric.value = mvalue;
@@ -838,9 +830,6 @@ int ospf_redistribute_unset(struct ospf *ospf, int type,
if (type == zclient->redist_default && instance == zclient->instance)
return CMD_SUCCESS;
- if (!ospf_is_type_redistributed(ospf, type, instance))
- return CMD_SUCCESS;
-
zclient_redistribute(ZEBRA_REDISTRIBUTE_DELETE, zclient, AFI_IP, type,
instance, ospf->vrf_id);
@@ -1262,104 +1251,92 @@ static int ospf_zebra_read_route(ZAPI_CALLBACK_ARGS)
return 0;
}
if (ospf->router_id.s_addr != INADDR_ANY) {
- if (ei) {
- if (is_prefix_default(&p))
- ospf_external_lsa_refresh_default(ospf);
- else {
- struct ospf_external_aggr_rt *aggr;
- struct as_external_lsa *al;
- struct ospf_lsa *lsa = NULL;
- struct in_addr mask;
-
- aggr = ospf_external_aggr_match(ospf,
- &ei->p);
+ if (is_prefix_default(&p))
+ ospf_external_lsa_refresh_default(ospf);
+ else {
+ struct ospf_external_aggr_rt *aggr;
+ struct as_external_lsa *al;
+ struct ospf_lsa *lsa = NULL;
+ struct in_addr mask;
+
+ aggr = ospf_external_aggr_match(ospf, &ei->p);
+
+ if (aggr) {
+ /* Check the AS-external-LSA
+ * should be originated.
+ */
+ if (!ospf_redistribute_check(ospf, ei,
+ NULL))
+ return 0;
+
+ if (IS_DEBUG_OSPF(lsa, EXTNL_LSA_AGGR))
+ zlog_debug(
+ "%s: Send Aggreate LSA (%pI4/%d)",
+ __func__,
+ &aggr->p.prefix,
+ aggr->p.prefixlen);
+
+ ospf_originate_summary_lsa(ospf, aggr,
+ ei);
+
+ /* Handling the case where the
+ * external route prefix
+ * and aggegate prefix is same
+ * If same dont flush the
+ * originated
+ * external LSA.
+ */
+ if (prefix_same(
+ (struct prefix *)&aggr->p,
+ (struct prefix *)&ei->p))
+ return 0;
+
+ lsa = ospf_external_info_find_lsa(
+ ospf, &ei->p);
+
+ if (lsa) {
+ al = (struct as_external_lsa *)
+ lsa->data;
+ masklen2ip(ei->p.prefixlen,
+ &mask);
+
+ if (mask.s_addr
+ != al->mask.s_addr)
+ return 0;
- if (aggr) {
- /* Check the AS-external-LSA
- * should be originated.
+ ospf_external_lsa_flush(
+ ospf, ei->type, &ei->p,
+ 0);
+ }
+ } else {
+ struct ospf_lsa *current;
+
+ current = ospf_external_info_find_lsa(
+ ospf, &ei->p);
+ if (!current) {
+ /* Check the
+ * AS-external-LSA
+ * should be
+ * originated.
*/
if (!ospf_redistribute_check(
ospf, ei, NULL))
return 0;
+ ospf_external_lsa_originate(
+ ospf, ei);
+ } else {
if (IS_DEBUG_OSPF(
- lsa,
- EXTNL_LSA_AGGR))
+ zebra,
+ ZEBRA_REDISTRIBUTE))
zlog_debug(
- "%s: Send Aggreate LSA (%pI4/%d)",
+ "%s: %pI4 refreshing LSA",
__func__,
- &aggr->p.prefix,
- aggr->p.prefixlen);
-
- ospf_originate_summary_lsa(
- ospf, aggr, ei);
-
- /* Handling the case where the
- * external route prefix
- * and aggegate prefix is same
- * If same dont flush the
- * originated
- * external LSA.
- */
- if (prefix_same(
- (struct prefix
- *)&aggr->p,
- (struct prefix *)&ei
- ->p))
- return 0;
-
- lsa = ospf_external_info_find_lsa(
- ospf, &ei->p);
-
- if (lsa) {
- al = (struct
- as_external_lsa *)
- lsa->data;
- masklen2ip(
- ei->p.prefixlen,
- &mask);
-
- if (mask.s_addr
- != al->mask.s_addr)
- return 0;
-
- ospf_external_lsa_flush(
- ospf, ei->type,
- &ei->p, 0);
- }
- } else {
- struct ospf_lsa *current;
-
- current =
- ospf_external_info_find_lsa(
- ospf, &ei->p);
- if (!current) {
- /* Check the
- * AS-external-LSA
- * should be
- * originated.
- */
- if (!ospf_redistribute_check(
- ospf, ei,
- NULL))
- return 0;
-
- ospf_external_lsa_originate(
- ospf, ei);
- } else {
- if (IS_DEBUG_OSPF(
- zebra,
- ZEBRA_REDISTRIBUTE))
- zlog_debug(
- "%s: %pI4 refreshing LSA",
- __func__,
- &p.prefix);
- ospf_external_lsa_refresh(
- ospf, current,
- ei,
- LSA_REFRESH_FORCE,
- false);
- }
+ &p.prefix);
+ ospf_external_lsa_refresh(
+ ospf, current, ei,
+ LSA_REFRESH_FORCE,
+ false);
}
}
}
@@ -1371,20 +1348,19 @@ static int ospf_zebra_read_route(ZAPI_CALLBACK_ARGS)
*/
ospf_external_lsa_default_routemap_apply(ospf, ei, cmd);
- } else /* if (cmd == ZEBRA_REDISTRIBUTE_ROUTE_DEL) */
- {
+ } else { /* if (cmd == ZEBRA_REDISTRIBUTE_ROUTE_DEL) */
struct ospf_external_aggr_rt *aggr;
ei = ospf_external_info_lookup(ospf, rt_type, api.instance, &p);
if (ei == NULL)
return 0;
- else
- /*
- * Check if default-information originate i
- * with some routemap prefix/access list match.
- * Apply before ei is deleted.
- */
- ospf_external_lsa_default_routemap_apply(ospf, ei, cmd);
+
+ /*
+ * Check if default-information originate i
+ * with some routemap prefix/access list match.
+ * Apply before ei is deleted.
+ */
+ ospf_external_lsa_default_routemap_apply(ospf, ei, cmd);
aggr = ospf_external_aggr_match(ospf, &ei->p);
@@ -1405,7 +1381,6 @@ static int ospf_zebra_read_route(ZAPI_CALLBACK_ARGS)
}
}
-
return 0;
}
@@ -1490,85 +1465,83 @@ static int ospf_distribute_list_update_timer(struct thread *thread)
rt = ext->external_info;
if (!rt)
continue;
- for (rn = route_top(rt); rn; rn = route_next(rn))
- if ((ei = rn->info) != NULL) {
- if (is_prefix_default(&ei->p))
- default_refresh = 1;
- else {
- struct ospf_external_aggr_rt
- *aggr;
- aggr = ospf_external_aggr_match(
- ospf, &ei->p);
- if (aggr) {
- /* Check the
- * AS-external-LSA
- * should be originated.
- */
- if (!ospf_redistribute_check(
- ospf, ei,
- NULL)) {
-
- ospf_unlink_ei_from_aggr(
- ospf,
- aggr,
- ei);
- continue;
- }
-
- if (IS_DEBUG_OSPF(
- lsa,
- EXTNL_LSA_AGGR))
- zlog_debug(
- "%s: Send Aggregate LSA (%pI4/%d)",
- __func__,
- &aggr->p.prefix,
- aggr->p.prefixlen);
-
- /* Originate Aggregate
- * LSA
- */
- ospf_originate_summary_lsa(
+ for (rn = route_top(rt); rn; rn = route_next(rn)) {
+ ei = rn->info;
+ if (!ei)
+ continue;
+
+ if (is_prefix_default(&ei->p))
+ default_refresh = 1;
+ else {
+ struct ospf_external_aggr_rt *aggr;
+
+ aggr = ospf_external_aggr_match(ospf,
+ &ei->p);
+ if (aggr) {
+ /* Check the
+ * AS-external-LSA
+ * should be originated.
+ */
+ if (!ospf_redistribute_check(
+ ospf, ei, NULL)) {
+
+ ospf_unlink_ei_from_aggr(
ospf, aggr, ei);
- } else if (
- (lsa = ospf_external_info_find_lsa(
- ospf,
- &ei->p))) {
- int force =
- LSA_REFRESH_IF_CHANGED;
- /* If this is a MaxAge
- * LSA, we need to
- * force refresh it
- * because distribute
- * settings might have
- * changed and now,
- * this LSA needs to be
- * originated, not be
- * removed.
- * If we don't force
- * refresh it, it will
- * remain a MaxAge LSA
- * because it will look
- * like it hasn't
- * changed. Neighbors
- * will not receive
- * updates for this LSA.
- */
- if (IS_LSA_MAXAGE(lsa))
- force = LSA_REFRESH_FORCE;
-
- ospf_external_lsa_refresh(
- ospf, lsa, ei,
- force, false);
- } else {
- if (!ospf_redistribute_check(
- ospf, ei,
- NULL))
- continue;
- ospf_external_lsa_originate(
- ospf, ei);
+ continue;
}
+
+ if (IS_DEBUG_OSPF(
+ lsa,
+ EXTNL_LSA_AGGR))
+ zlog_debug(
+ "%s: Send Aggregate LSA (%pI4/%d)",
+ __func__,
+ &aggr->p.prefix,
+ aggr->p.prefixlen);
+
+ /* Originate Aggregate
+ * LSA
+ */
+ ospf_originate_summary_lsa(
+ ospf, aggr, ei);
+ } else if (
+ (lsa = ospf_external_info_find_lsa(
+ ospf, &ei->p))) {
+ int force =
+ LSA_REFRESH_IF_CHANGED;
+ /* If this is a MaxAge
+ * LSA, we need to
+ * force refresh it
+ * because distribute
+ * settings might have
+ * changed and now,
+ * this LSA needs to be
+ * originated, not be
+ * removed.
+ * If we don't force
+ * refresh it, it will
+ * remain a MaxAge LSA
+ * because it will look
+ * like it hasn't
+ * changed. Neighbors
+ * will not receive
+ * updates for this LSA.
+ */
+ if (IS_LSA_MAXAGE(lsa))
+ force = LSA_REFRESH_FORCE;
+
+ ospf_external_lsa_refresh(
+ ospf, lsa, ei, force,
+ false);
+ } else {
+ if (!ospf_redistribute_check(
+ ospf, ei, NULL))
+ continue;
+ ospf_external_lsa_originate(
+ ospf, ei);
}
}
+ }
}
}
if (default_refresh)
@@ -1718,17 +1691,16 @@ void ospf_prefix_list_update(struct prefix_list *plist)
struct ospf_redist *red;
red_list = ospf->redist[type];
- if (red_list) {
- for (ALL_LIST_ELEMENTS_RO(red_list, node,
- red)) {
- if (ROUTEMAP(red)) {
- /* if route-map is not NULL
- * it may be using
- * this prefix list */
- ospf_distribute_list_update(
- ospf, type,
- red->instance);
- }
+ if (!red_list)
+ continue;
+
+ for (ALL_LIST_ELEMENTS_RO(red_list, node, red)) {
+ if (ROUTEMAP(red)) {
+ /* if route-map is not NULL
+ * it may be using
+ * this prefix list */
+ ospf_distribute_list_update(
+ ospf, type, red->instance);
}
}
}
@@ -1736,28 +1708,24 @@ void ospf_prefix_list_update(struct prefix_list *plist)
/* Update area filter-lists. */
for (ALL_LIST_ELEMENTS_RO(ospf->areas, node, area)) {
/* Update filter-list in. */
- if (PREFIX_NAME_IN(area))
- if (strcmp(PREFIX_NAME_IN(area),
- prefix_list_name(plist))
- == 0) {
- PREFIX_LIST_IN(area) =
- prefix_list_lookup(
- AFI_IP,
- PREFIX_NAME_IN(area));
- abr_inv++;
- }
+ if (PREFIX_NAME_IN(area)
+ && strcmp(PREFIX_NAME_IN(area),
+ prefix_list_name(plist))
+ == 0) {
+ PREFIX_LIST_IN(area) = prefix_list_lookup(
+ AFI_IP, PREFIX_NAME_IN(area));
+ abr_inv++;
+ }
/* Update filter-list out. */
- if (PREFIX_NAME_OUT(area))
- if (strcmp(PREFIX_NAME_OUT(area),
- prefix_list_name(plist))
- == 0) {
- PREFIX_LIST_IN(area) =
- prefix_list_lookup(
- AFI_IP,
- PREFIX_NAME_OUT(area));
- abr_inv++;
- }
+ if (PREFIX_NAME_OUT(area)
+ && strcmp(PREFIX_NAME_OUT(area),
+ prefix_list_name(plist))
+ == 0) {
+ PREFIX_LIST_IN(area) = prefix_list_lookup(
+ AFI_IP, PREFIX_NAME_OUT(area));
+ abr_inv++;
+ }
}
/* Schedule ABR task. */
@@ -1857,14 +1825,17 @@ void ospf_distance_reset(struct ospf *ospf)
struct route_node *rn;
struct ospf_distance *odistance;
- for (rn = route_top(ospf->distance_table); rn; rn = route_next(rn))
- if ((odistance = rn->info) != NULL) {
- if (odistance->access_list)
- free(odistance->access_list);
- ospf_distance_free(odistance);
- rn->info = NULL;
- route_unlock_node(rn);
- }
+ for (rn = route_top(ospf->distance_table); rn; rn = route_next(rn)) {
+ odistance = rn->info;
+ if (!odistance)
+ continue;
+
+ if (odistance->access_list)
+ free(odistance->access_list);
+ ospf_distance_free(odistance);
+ rn->info = NULL;
+ route_unlock_node(rn);
+ }
}
uint8_t ospf_distance_apply(struct ospf *ospf, struct prefix_ipv4 *p,
@@ -1874,18 +1845,16 @@ uint8_t ospf_distance_apply(struct ospf *ospf, struct prefix_ipv4 *p,
if (ospf == NULL)
return 0;
- if (ospf->distance_intra)
- if (or->path_type == OSPF_PATH_INTRA_AREA)
- return ospf->distance_intra;
+ if (ospf->distance_intra && or->path_type == OSPF_PATH_INTRA_AREA)
+ return ospf->distance_intra;
- if (ospf->distance_inter)
- if (or->path_type == OSPF_PATH_INTER_AREA)
- return ospf->distance_inter;
+ if (ospf->distance_inter && or->path_type == OSPF_PATH_INTER_AREA)
+ return ospf->distance_inter;
- if (ospf->distance_external)
- if (or->path_type == OSPF_PATH_TYPE1_EXTERNAL ||
- or->path_type == OSPF_PATH_TYPE2_EXTERNAL)
- return ospf->distance_external;
+ if (ospf->distance_external
+ && (or->path_type == OSPF_PATH_TYPE1_EXTERNAL ||
+ or->path_type == OSPF_PATH_TYPE2_EXTERNAL))
+ return ospf->distance_external;
if (ospf->distance_all)
return ospf->distance_all;
diff --git a/ospfd/ospf_zebra.h b/ospfd/ospf_zebra.h
index bdc8af0402..3f4edfa29c 100644
--- a/ospfd/ospf_zebra.h
+++ b/ospfd/ospf_zebra.h
@@ -78,10 +78,12 @@ extern struct ospf_redist *ospf_redist_add(struct ospf *, uint8_t,
unsigned short);
extern void ospf_redist_del(struct ospf *, uint8_t, unsigned short);
-extern int ospf_redistribute_set(struct ospf *, int, unsigned short, int, int);
+extern int ospf_redistribute_update(struct ospf *, struct ospf_redist *, int,
+ unsigned short, int, int);
+extern int ospf_redistribute_set(struct ospf *, struct ospf_redist *, int,
+ unsigned short, int, int);
extern int ospf_redistribute_unset(struct ospf *, int, unsigned short);
extern int ospf_redistribute_default_set(struct ospf *, int, int, int);
-extern int ospf_redistribute_default_unset(struct ospf *);
extern int ospf_distribute_list_out_set(struct ospf *, int, const char *);
extern int ospf_distribute_list_out_unset(struct ospf *, int, const char *);
extern void ospf_routemap_set(struct ospf_redist *, const char *);
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index faec868b2a..cc1404e5e9 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -648,7 +648,6 @@ void ospf_terminate(void)
if (listcount(om->ospf) == 0)
goto done;
- bfd_gbl_exit();
for (ALL_LIST_ELEMENTS(om->ospf, node, nnode, ospf))
ospf_finish(ospf);
@@ -697,6 +696,7 @@ static void ospf_finish_final(struct ospf *ospf)
struct ospf_area *area;
struct ospf_vl_data *vl_data;
struct listnode *node, *nnode;
+ struct ospf_redist *red;
int i;
QOBJ_UNREG(ospf);
@@ -710,7 +710,6 @@ static void ospf_finish_final(struct ospf *ospf)
/* Unregister redistribution */
for (i = 0; i < ZEBRA_ROUTE_MAX; i++) {
struct list *red_list;
- struct ospf_redist *red;
red_list = ospf->redist[i];
if (!red_list)
@@ -721,7 +720,12 @@ static void ospf_finish_final(struct ospf *ospf)
ospf_redist_del(ospf, i, red->instance);
}
}
- ospf_redistribute_default_set(ospf, DEFAULT_ORIGINATE_NONE, 0, 0);
+ red = ospf_redist_lookup(ospf, DEFAULT_ROUTE, 0);
+ if (red) {
+ ospf_routemap_unset(red);
+ ospf_redist_del(ospf, DEFAULT_ROUTE, 0);
+ ospf_redistribute_default_set(ospf, DEFAULT_ORIGINATE_NONE, 0, 0);
+ }
for (ALL_LIST_ELEMENTS(ospf->areas, node, nnode, area))
ospf_remove_vls_through_area(ospf, area);
@@ -2158,7 +2162,7 @@ static int ospf_vrf_delete(struct vrf *vrf)
return 0;
}
-static void ospf_set_redist_vrf_bitmaps(struct ospf *ospf)
+static void ospf_set_redist_vrf_bitmaps(struct ospf *ospf, bool set)
{
int type;
struct list *red_list;
@@ -2171,7 +2175,12 @@ static void ospf_set_redist_vrf_bitmaps(struct ospf *ospf)
zlog_debug(
"%s: setting redist vrf %d bitmap for type %d",
__func__, ospf->vrf_id, type);
- vrf_bitmap_set(zclient->redist[AFI_IP][type], ospf->vrf_id);
+ if (set)
+ vrf_bitmap_set(zclient->redist[AFI_IP][type],
+ ospf->vrf_id);
+ else
+ vrf_bitmap_unset(zclient->redist[AFI_IP][type],
+ ospf->vrf_id);
}
}
@@ -2201,18 +2210,12 @@ static int ospf_vrf_enable(struct vrf *vrf)
__func__, vrf->name, ospf->vrf_id, old_vrf_id);
if (old_vrf_id != ospf->vrf_id) {
- frr_with_privs(&ospfd_privs) {
- /* stop zebra redist to us for old vrf */
- zclient_send_dereg_requests(zclient,
- old_vrf_id);
-
- ospf_set_redist_vrf_bitmaps(ospf);
+ ospf_set_redist_vrf_bitmaps(ospf, true);
- /* start zebra redist to us for new vrf */
- ospf_zebra_vrf_register(ospf);
+ /* start zebra redist to us for new vrf */
+ ospf_zebra_vrf_register(ospf);
- ret = ospf_sock_init(ospf);
- }
+ ret = ospf_sock_init(ospf);
if (ret < 0 || ospf->fd <= 0)
return 0;
thread_add_read(master, ospf_read, ospf, ospf->fd,
@@ -2242,6 +2245,10 @@ static int ospf_vrf_disable(struct vrf *vrf)
if (ospf) {
old_vrf_id = ospf->vrf_id;
+ ospf_zebra_vrf_deregister(ospf);
+
+ ospf_set_redist_vrf_bitmaps(ospf, false);
+
/* We have instance configured, unlink
* from VRF and make it "down".
*/
diff --git a/pathd/path_cli.c b/pathd/path_cli.c
index cf14aa8c61..7a28449e4e 100644
--- a/pathd/path_cli.c
+++ b/pathd/path_cli.c
@@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include <float.h>
#include <math.h>
#include <zebra.h>
@@ -32,6 +34,7 @@
#ifndef VTYSH_EXTRACT_PL
#include "pathd/path_cli_clippy.c"
#endif
+#include "pathd/path_ted.h"
#define XPATH_MAXATTRSIZE 64
#define XPATH_MAXKEYSIZE 42
@@ -45,6 +48,18 @@ static int config_write_segment_routing(struct vty *vty);
static int config_write_traffic_eng(struct vty *vty);
static int config_write_segment_lists(struct vty *vty);
static int config_write_sr_policies(struct vty *vty);
+static int segment_list_has_src_dst(
+ struct vty *vty, char *xpath, long index, const char *index_str,
+ struct in_addr adj_src_ipv4, struct in_addr adj_dst_ipv4,
+ struct in6_addr adj_src_ipv6, struct in6_addr adj_dst_ipv6,
+ const char *adj_src_ipv4_str, const char *adj_dst_ipv4_str,
+ const char *adj_src_ipv6_str, const char *adj_dst_ipv6_str);
+static int segment_list_has_prefix(
+ struct vty *vty, char *xpath, long index, const char *index_str,
+ const struct prefix_ipv4 *prefix_ipv4, const char *prefix_ipv4_str,
+ const struct prefix_ipv6 *prefix_ipv6, const char *prefix_ipv6_str,
+ const char *has_algo, long algo, const char *algo_str,
+ const char *has_iface_id, long iface_id, const char *iface_id_str);
DEFINE_MTYPE_STATIC(PATHD, PATH_CLI, "Client");
@@ -142,6 +157,7 @@ DEFPY(show_srte_policy,
return CMD_SUCCESS;
}
+
/*
* Show detailed SR-TE info
*/
@@ -293,56 +309,227 @@ void cli_show_srte_segment_list(struct vty *vty, struct lyd_node *dnode,
yang_dnode_get_string(dnode, "./name"));
}
+static int segment_list_has_src_dst(
+ struct vty *vty, char *xpath, long index, const char *index_str,
+ struct in_addr adj_src_ipv4, struct in_addr adj_dst_ipv4,
+ struct in6_addr adj_src_ipv6, struct in6_addr adj_dst_ipv6,
+ const char *adj_src_ipv4_str, const char *adj_dst_ipv4_str,
+ const char *adj_src_ipv6_str, const char *adj_dst_ipv6_str)
+{
+ const char *node_src_id;
+ uint32_t ted_sid = MPLS_LABEL_NONE;
+
+ struct ipaddr ip_src = {};
+ struct ipaddr ip_dst = {};
+ if (adj_src_ipv4_str != NULL) {
+ ip_src.ipa_type = IPADDR_V4;
+ ip_src.ip._v4_addr = adj_src_ipv4;
+ ip_dst.ipa_type = IPADDR_V4;
+ ip_dst.ip._v4_addr = adj_dst_ipv4;
+ } else if (adj_src_ipv6_str != NULL) {
+ ip_src.ipa_type = IPADDR_V6;
+ ip_src.ip._v6_addr = adj_src_ipv6;
+ ip_dst.ipa_type = IPADDR_V6;
+ ip_dst.ip._v6_addr = adj_dst_ipv6;
+ } else {
+ return CMD_ERR_NO_MATCH;
+ }
+ ted_sid = path_ted_query_type_f(&ip_src, &ip_dst);
+ if (ted_sid == MPLS_LABEL_NONE) {
+ zlog_warn(
+ "%s: [rcv ted] CLI NOT FOUND Continue query_type_f SRC (%pIA) DST (%pIA)!",
+ __func__, &ip_src, &ip_dst);
+ }
+ /* type */
+ snprintf(xpath, XPATH_MAXLEN, "./segment[index='%s']/nai/type",
+ index_str);
+ if (adj_src_ipv4_str != NULL) {
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ "ipv4_adjacency");
+ node_src_id = adj_src_ipv4_str;
+ } else if (adj_src_ipv6_str != NULL) {
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ "ipv6_adjacency");
+ node_src_id = adj_src_ipv6_str;
+ } else {
+ return CMD_ERR_NO_MATCH;
+ }
+ /* addresses */
+ snprintf(xpath, XPATH_MAXLEN, "./segment[index='%s']/nai/local-address",
+ index_str);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, node_src_id);
+ snprintf(xpath, XPATH_MAXLEN,
+ "./segment[index='%s']/nai/remote-address", index_str);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ adj_dst_ipv4_str ? adj_dst_ipv4_str
+ : adj_dst_ipv6_str);
+ return CMD_SUCCESS;
+}
+int segment_list_has_prefix(
+ struct vty *vty, char *xpath, long index, const char *index_str,
+ const struct prefix_ipv4 *prefix_ipv4, const char *prefix_ipv4_str,
+ const struct prefix_ipv6 *prefix_ipv6, const char *prefix_ipv6_str,
+ const char *has_algo, long algo, const char *algo_str,
+ const char *has_iface_id, long iface_id, const char *iface_id_str)
+{
+ char buf_prefix[INET6_ADDRSTRLEN];
+
+ uint32_t ted_sid = MPLS_LABEL_NONE;
+ struct prefix prefix_cli = {};
+ struct ipaddr pre_ipaddr = {};
+ /* prefix with algorithm or local interface id */
+ /* Type */
+ snprintf(xpath, XPATH_MAXLEN, "./segment[index='%s']/nai/type",
+ index_str);
+ if (has_iface_id != NULL) {
+ if (prefix_ipv4_str != NULL) {
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ "ipv4_local_iface");
+ } else if (prefix_ipv6_str != NULL) {
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ "ipv6_local_iface");
+ } else {
+ return CMD_ERR_NO_MATCH;
+ }
+ } else {
+ if (prefix_ipv4_str != NULL) {
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ "ipv4_algo");
+ } else if (prefix_ipv6_str != NULL) {
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ "ipv6_algo");
+ } else {
+ return CMD_ERR_NO_MATCH;
+ }
+ }
+ /* Prefix */
+ if (prefix_ipv4_str != NULL) {
+ if (!str2prefix(prefix_ipv4_str, &prefix_cli)) {
+ vty_out(vty, "%% Malformed prefix\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ inet_ntop(AF_INET, &prefix_cli.u.prefix4, buf_prefix,
+ sizeof(buf_prefix));
+ pre_ipaddr.ipa_type = IPADDR_V4;
+ pre_ipaddr.ip._v4_addr = prefix_cli.u.prefix4;
+ } else if (prefix_ipv6_str != NULL) {
+ if (!str2prefix(prefix_ipv6_str, &prefix_cli)) {
+ vty_out(vty, "%% Malformed prefix\n");
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+ inet_ntop(AF_INET6, &prefix_cli.u.prefix6, buf_prefix,
+ sizeof(buf_prefix));
+ pre_ipaddr.ipa_type = IPADDR_V6;
+ pre_ipaddr.ip._v6_addr = prefix_cli.u.prefix6;
+ } else {
+ return CMD_ERR_NO_MATCH;
+ }
+ snprintf(xpath, XPATH_MAXLEN, "./segment[index='%s']/nai/local-address",
+ index_str);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, buf_prefix);
+ snprintf(xpath, XPATH_MAXLEN,
+ "./segment[index='%s']/nai/local-prefix-len", index_str);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ prefix_ipv4_str
+ ? strchr(prefix_ipv4_str, '/') + 1
+ : strchr(prefix_ipv6_str, '/') + 1);
+ /* Alg / Iface */
+ if (has_algo != NULL) {
+ snprintf(xpath, XPATH_MAXLEN,
+ "./segment[index='%s']/nai/algorithm", index_str);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, algo_str);
+ } else {
+ if (has_iface_id != NULL) {
+ snprintf(xpath, XPATH_MAXLEN,
+ "./segment[index='%s']/nai/local-interface",
+ index_str);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
+ iface_id_str);
+ }
+ }
+ if (has_algo != NULL) {
+ ted_sid = path_ted_query_type_c(&prefix_cli, algo);
+ if (ted_sid == MPLS_LABEL_NONE) {
+ zlog_err(
+ "%s: [rcv ted] CLI NOT FOUND Continue query_type_c PREFIX (%pIA/%d) ALGO (%ld) sid:(%d)!",
+ __func__, &pre_ipaddr, prefix_cli.prefixlen,
+ algo, ted_sid);
+ }
+ }
+ if (has_iface_id != NULL) {
+ ted_sid = path_ted_query_type_e(&prefix_cli, iface_id);
+ if (ted_sid == MPLS_LABEL_NONE) {
+ zlog_err(
+ "%s: [rcv ted] CLI NOT FOUND Continue query_type_e PREFIX (%pIA/%d) IFACE (%ld) sid:(%d)!",
+ __func__, &pre_ipaddr, prefix_cli.prefixlen,
+ iface_id, ted_sid);
+ }
+ }
+ return CMD_SUCCESS;
+}
/*
* XPath: /frr-pathd:pathd/srte/segment-list/segment
*/
-DEFPY(srte_segment_list_segment,
- srte_segment_list_segment_cmd,
- "index (0-4294967295)$index mpls label (16-1048575)$label "
+/* clang-format off */
+DEFPY(srte_segment_list_segment, srte_segment_list_segment_cmd,
+ "index (0-4294967295)$index <[mpls$has_mpls_label label (16-1048575)$label] "
+ "|"
"[nai$has_nai <"
- "node <A.B.C.D$node_ipv4|X:X::X:X$node_ipv6>"
- ">]",
+ "prefix <A.B.C.D/M$prefix_ipv4|X:X::X:X/M$prefix_ipv6>"
+ "<algorithm$has_algo (0-1)$algo| iface$has_iface_id (0-4294967295)$iface_id>"
+ "| adjacency$has_adj "
+ "<A.B.C.D$adj_src_ipv4 A.B.C.D$adj_dst_ipv4|X:X::X:X$adj_src_ipv6 X:X::X:X$adj_dst_ipv6>"
+ ">]"
+ ">",
"Index\n"
"Index Value\n"
"MPLS or IP Label\n"
"Label\n"
"Label Value\n"
"Segment NAI\n"
- "NAI node identifier\n"
- "NAI IPv4 node identifier\n"
- "NAI IPv6 node identifier\n")
+ "NAI prefix identifier\n"
+ "NAI IPv4 prefix identifier\n"
+ "NAI IPv6 prefix identifier\n"
+ "IGP Algorithm\n"
+ "Algorithm Value SPF or Strict-SPF\n"
+ "Interface Id\n"
+ "Interface Value\n"
+ "ADJ identifier\n"
+ "ADJ IPv4 src identifier\n"
+ "ADJ IPv4 dst identifier\n"
+ "ADJ IPv6 src identifier\n"
+ "ADJ IPv6 dst identifier\n")
+/* clang-format on */
{
char xpath[XPATH_MAXLEN];
- const char *node_id;
+ int status = CMD_SUCCESS;
+
snprintf(xpath, sizeof(xpath), "./segment[index='%s']", index_str);
nb_cli_enqueue_change(vty, xpath, NB_OP_CREATE, NULL);
- snprintf(xpath, sizeof(xpath), "./segment[index='%s']/sid-value",
- index_str);
- nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, label_str);
-
- if (has_nai != NULL) {
- snprintf(xpath, sizeof(xpath), "./segment[index='%s']/nai/type",
- index_str);
- if (node_ipv4_str != NULL) {
- nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
- "ipv4_node");
- node_id = node_ipv4_str;
- } else if (node_ipv6_str != NULL) {
- nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY,
- "ipv6_node");
- node_id = node_ipv6_str;
- } else {
- return CMD_ERR_NO_MATCH;
- }
+ if (has_mpls_label != NULL) {
snprintf(xpath, sizeof(xpath),
- "./segment[index='%s']/nai/local-address", index_str);
- nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, node_id);
+ "./segment[index='%s']/sid-value", index_str);
+ nb_cli_enqueue_change(vty, xpath, NB_OP_MODIFY, label_str);
+ return nb_cli_apply_changes(vty, NULL);
+ }
+
+ if (has_adj != NULL) {
+ status = segment_list_has_src_dst(vty, xpath, index, index_str,
+ adj_src_ipv4, adj_dst_ipv4,
+ adj_src_ipv6, adj_dst_ipv6,
+ adj_src_ipv4_str, adj_dst_ipv4_str,
+ adj_dst_ipv6_str, adj_src_ipv6_str);
+ if (status != CMD_SUCCESS)
+ return status;
} else {
- snprintf(xpath, sizeof(xpath), "./segment[index='%s']/nai",
- index_str);
- nb_cli_enqueue_change(vty, xpath, NB_OP_DESTROY, NULL);
+ segment_list_has_prefix(
+ vty, xpath, index, index_str, prefix_ipv4,
+ prefix_ipv4_str, prefix_ipv6, prefix_ipv6_str, has_algo,
+ algo, algo_str, has_iface_id, iface_id, iface_id_str);
+ if (status != CMD_SUCCESS)
+ return status;
}
return nb_cli_apply_changes(vty, NULL);
@@ -367,23 +554,60 @@ void cli_show_srte_segment_list_segment(struct vty *vty,
struct lyd_node *dnode,
bool show_defaults)
{
- vty_out(vty, " index %s mpls label %s",
- yang_dnode_get_string(dnode, "./index"),
- yang_dnode_get_string(dnode, "./sid-value"));
+ vty_out(vty, " index %s ", yang_dnode_get_string(dnode, "./index"));
+ if (yang_dnode_exists(dnode, "./sid-value")) {
+ vty_out(vty, " mpls label %s",
+ yang_dnode_get_string(dnode, "./sid-value"));
+ }
if (yang_dnode_exists(dnode, "./nai")) {
struct ipaddr addr;
+ struct ipaddr addr_rmt;
+
switch (yang_dnode_get_enum(dnode, "./nai/type")) {
case SRTE_SEGMENT_NAI_TYPE_IPV4_NODE:
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE:
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM:
yang_dnode_get_ip(&addr, dnode, "./nai/local-address");
- vty_out(vty, " nai node %pI4", &addr.ipaddr_v4);
+ vty_out(vty, " nai prefix %pI4", &addr.ipaddr_v4);
break;
case SRTE_SEGMENT_NAI_TYPE_IPV6_NODE:
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_LOCAL_IFACE:
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ALGORITHM:
yang_dnode_get_ip(&addr, dnode, "./nai/local-address");
- vty_out(vty, " nai node %pI6", &addr.ipaddr_v6);
+ vty_out(vty, " nai prefix %pI6", &addr.ipaddr_v6);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ADJACENCY:
+ yang_dnode_get_ip(&addr, dnode, "./nai/local-address");
+ yang_dnode_get_ip(&addr_rmt, dnode,
+ "./nai/remote-address");
+ vty_out(vty, " nai adjacency %pI4", &addr.ipaddr_v4);
+ vty_out(vty, " %pI4", &addr_rmt.ipaddr_v4);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ADJACENCY:
+ yang_dnode_get_ip(&addr, dnode, "./nai/local-address");
+ yang_dnode_get_ip(&addr_rmt, dnode,
+ "./nai/remote-address");
+ vty_out(vty, " nai adjacency %pI6", &addr.ipaddr_v6);
+ vty_out(vty, " %pI6", &addr_rmt.ipaddr_v6);
break;
default:
break;
}
+ if (yang_dnode_exists(dnode, "./nai/local-prefix-len")) {
+ vty_out(vty, "/%s",
+ yang_dnode_get_string(
+ dnode, "./nai/local-prefix-len"));
+ }
+ if (yang_dnode_exists(dnode, "./nai/local-interface")) {
+ vty_out(vty, " iface %s",
+ yang_dnode_get_string(dnode,
+ "./nai/local-interface"));
+ }
+ if (yang_dnode_exists(dnode, "./nai/algorithm")) {
+ vty_out(vty, " algorithm %s",
+ yang_dnode_get_string(dnode,
+ "./nai/algorithm"));
+ }
}
vty_out(vty, "\n");
}
@@ -1036,6 +1260,7 @@ int config_write_segment_routing(struct vty *vty)
int config_write_traffic_eng(struct vty *vty)
{
vty_out(vty, " traffic-eng\n");
+ path_ted_config_write(vty);
return 1;
}
diff --git a/pathd/path_debug.c b/pathd/path_debug.c
index df0550715a..eec5707396 100644
--- a/pathd/path_debug.c
+++ b/pathd/path_debug.c
@@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include <string.h>
#include <stdbool.h>
#include <time.h>
diff --git a/pathd/path_main.c b/pathd/path_main.c
index f54ab736c4..8d88475206 100644
--- a/pathd/path_main.c
+++ b/pathd/path_main.c
@@ -33,6 +33,7 @@
#include "path_nb.h"
#include "path_zebra.h"
#include "path_errors.h"
+#include "path_ted.h"
char backup_config_file[256];
@@ -70,6 +71,8 @@ static void sighup(void)
static void sigint(void)
{
zlog_notice("Terminating on signal");
+ zlog_notice("Unregisterfrom opaque,etc ");
+ pathd_shutdown();
exit(0);
}
@@ -146,6 +149,7 @@ int main(int argc, char **argv, char **envp)
path_error_init();
path_zebra_init(master);
path_cli_init();
+ path_ted_init(master);
frr_config_fork();
frr_run(master);
diff --git a/pathd/path_nb.c b/pathd/path_nb.c
index a210e31b9c..9c622883bc 100644
--- a/pathd/path_nb.c
+++ b/pathd/path_nb.c
@@ -90,6 +90,7 @@ const struct frr_yang_module_info frr_pathd_info = {
.xpath = "/frr-pathd:pathd/srte/segment-list/segment/sid-value",
.cbs = {
.modify = pathd_srte_segment_list_segment_sid_value_modify,
+ .destroy = pathd_srte_segment_list_segment_sid_value_destroy,
},
.priority = NB_DFLT_PRIORITY - 1
},
@@ -115,6 +116,10 @@ const struct frr_yang_module_info frr_pathd_info = {
.cbs = {.modify = dummy_modify, .destroy = dummy_destroy}
},
{
+ .xpath = "/frr-pathd:pathd/srte/segment-list/segment/nai/local-prefix-len",
+ .cbs = {.modify = dummy_modify, .destroy = dummy_destroy}
+ },
+ {
.xpath = "/frr-pathd:pathd/srte/segment-list/segment/nai/remote-address",
.cbs = {.modify = dummy_modify, .destroy = dummy_destroy}
},
@@ -123,6 +128,10 @@ const struct frr_yang_module_info frr_pathd_info = {
.cbs = {.modify = dummy_modify, .destroy = dummy_destroy}
},
{
+ .xpath = "/frr-pathd:pathd/srte/segment-list/segment/nai/algorithm",
+ .cbs = {.modify = dummy_modify, .destroy = dummy_destroy}
+ },
+ {
.xpath = "/frr-pathd:pathd/srte/policy",
.cbs = {
.create = pathd_srte_policy_create,
diff --git a/pathd/path_nb.h b/pathd/path_nb.h
index 3a0b3863ce..caeadd9ccc 100644
--- a/pathd/path_nb.h
+++ b/pathd/path_nb.h
@@ -43,6 +43,8 @@ int pathd_srte_segment_list_segment_nai_destroy(
struct nb_cb_destroy_args *args);
void pathd_srte_segment_list_segment_nai_apply_finish(
struct nb_cb_apply_finish_args *args);
+int pathd_srte_segment_list_segment_sid_value_destroy(
+ struct nb_cb_destroy_args *args);
int pathd_srte_policy_create(struct nb_cb_create_args *args);
int pathd_srte_policy_destroy(struct nb_cb_destroy_args *args);
const void *pathd_srte_policy_get_next(struct nb_cb_get_next_args *args);
diff --git a/pathd/path_nb_config.c b/pathd/path_nb_config.c
index af54f5bce2..5b0f5b44e5 100644
--- a/pathd/path_nb_config.c
+++ b/pathd/path_nb_config.c
@@ -160,6 +160,22 @@ int pathd_srte_segment_list_segment_sid_value_modify(
return NB_OK;
}
+int pathd_srte_segment_list_segment_sid_value_destroy(
+ struct nb_cb_destroy_args *args)
+{
+ struct srte_segment_entry *segment;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ segment = nb_running_get_entry(args->dnode, NULL, true);
+ segment->sid_value = MPLS_LABEL_NONE;
+ SET_FLAG(segment->segment_list->flags, F_SEGMENT_LIST_MODIFIED);
+
+ return NB_OK;
+}
+
+
int pathd_srte_segment_list_segment_nai_destroy(struct nb_cb_destroy_args *args)
{
struct srte_segment_entry *segment;
@@ -184,6 +200,8 @@ void pathd_srte_segment_list_segment_nai_apply_finish(
enum srte_segment_nai_type type;
struct ipaddr local_addr, remote_addr;
uint32_t local_iface = 0, remote_iface = 0;
+ uint8_t algo = 0, local_prefix_len = 0;
+ const char *algo_buf, *local_prefix_len_buf;
segment = nb_running_get_entry(args->dnode, NULL, true);
type = yang_dnode_get_enum(args->dnode, "./type");
@@ -207,12 +225,31 @@ void pathd_srte_segment_list_segment_nai_apply_finish(
remote_iface = yang_dnode_get_uint32(args->dnode,
"./remote-interface");
break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM:
+ algo_buf = yang_dnode_get_string(args->dnode, "./algorithm");
+ algo = atoi(algo_buf);
+ local_prefix_len_buf = yang_dnode_get_string(
+ args->dnode, "./local-prefix-len");
+ local_prefix_len = atoi(local_prefix_len_buf);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE:
+ local_iface =
+ yang_dnode_get_uint32(args->dnode, "./local-interface");
+ local_prefix_len_buf = yang_dnode_get_string(
+ args->dnode, "./local-prefix-len");
+ local_prefix_len = atoi(local_prefix_len_buf);
+ break;
default:
break;
}
- srte_segment_entry_set_nai(segment, type, &local_addr, local_iface,
- &remote_addr, remote_iface);
+ zlog_debug(" Segment list name (%d) index (%s) ", segment->index,
+ segment->segment_list->name);
+ if (srte_segment_entry_set_nai(segment, type, &local_addr, local_iface,
+ &remote_addr, remote_iface, algo,
+ local_prefix_len))
+ SET_FLAG(segment->segment_list->flags,
+ F_SEGMENT_LIST_SID_CONFLICT);
}
/*
diff --git a/pathd/path_pcep_config.c b/pathd/path_pcep_config.c
index 107475bec9..609f091559 100644
--- a/pathd/path_pcep_config.c
+++ b/pathd/path_pcep_config.c
@@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include <northbound.h>
#include <yang.h>
#include <printfrr.h>
@@ -244,6 +246,10 @@ path_pcep_config_list_path_hops(struct srte_segment_list *segment_list)
switch (segment->nai_type) {
case SRTE_SEGMENT_NAI_TYPE_IPV4_NODE:
case SRTE_SEGMENT_NAI_TYPE_IPV6_NODE:
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE:
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_LOCAL_IFACE:
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM:
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ALGORITHM:
memcpy(&hop->nai.local_addr, &segment->nai_local_addr,
sizeof(struct ipaddr));
break;
@@ -276,6 +282,7 @@ int path_pcep_config_update_path(struct path *path)
assert(path->nbkey.preference != 0);
assert(path->nbkey.endpoint.ipa_type == IPADDR_V4);
+ int number_of_sid_clashed = 0;
struct path_hop *hop;
struct path_metric *metric;
int index;
@@ -295,40 +302,44 @@ int path_pcep_config_update_path(struct path *path)
if (candidate->lsp->segment_list) {
SET_FLAG(candidate->lsp->segment_list->flags,
F_SEGMENT_LIST_DELETED);
+ srte_segment_list_del(candidate->lsp->segment_list);
candidate->lsp->segment_list = NULL;
}
- if (path->first_hop != NULL) {
- snprintf(segment_list_name_buff, sizeof(segment_list_name_buff),
- "%s-%u", path->name, path->plsp_id);
- segment_list_name = segment_list_name_buff;
-
- segment_list = srte_segment_list_add(segment_list_name);
- segment_list->protocol_origin = path->update_origin;
- strlcpy(segment_list->originator, path->originator,
- sizeof(segment_list->originator));
- SET_FLAG(segment_list->flags, F_SEGMENT_LIST_NEW);
- SET_FLAG(segment_list->flags, F_SEGMENT_LIST_MODIFIED);
-
- for (hop = path->first_hop, index = 10; hop != NULL;
- hop = hop->next, index += 10) {
- assert(hop->has_sid);
- assert(hop->is_mpls);
-
- segment = srte_segment_entry_add(segment_list, index);
-
- segment->sid_value = (mpls_label_t)hop->sid.mpls.label;
- SET_FLAG(segment->segment_list->flags,
- F_SEGMENT_LIST_MODIFIED);
-
- if (hop->has_nai)
- srte_segment_entry_set_nai(
- segment, srte_nai_type(hop->nai.type),
- &hop->nai.local_addr,
- hop->nai.local_iface,
- &hop->nai.remote_addr,
- hop->nai.remote_iface);
- }
+ if (path->first_hop == NULL)
+ return PATH_NB_ERR;
+
+ snprintf(segment_list_name_buff, sizeof(segment_list_name_buff),
+ "%s-%u", path->name, path->plsp_id);
+ segment_list_name = segment_list_name_buff;
+
+ segment_list = srte_segment_list_add(segment_list_name);
+ segment_list->protocol_origin = path->update_origin;
+ strlcpy(segment_list->originator, path->originator,
+ sizeof(segment_list->originator));
+ SET_FLAG(segment_list->flags, F_SEGMENT_LIST_NEW);
+ SET_FLAG(segment_list->flags, F_SEGMENT_LIST_MODIFIED);
+
+ for (hop = path->first_hop, index = 10; hop != NULL;
+ hop = hop->next, index += 10) {
+ assert(hop->has_sid);
+ assert(hop->is_mpls);
+
+ segment = srte_segment_entry_add(segment_list, index);
+
+ segment->sid_value = (mpls_label_t)hop->sid.mpls.label;
+ SET_FLAG(segment->segment_list->flags, F_SEGMENT_LIST_MODIFIED);
+
+ if (!hop->has_nai)
+ continue;
+ if (srte_segment_entry_set_nai(
+ segment, srte_nai_type(hop->nai.type),
+ &hop->nai.local_addr, hop->nai.local_iface,
+ &hop->nai.remote_addr, hop->nai.remote_iface, 0, 0)
+ == PATH_SID_ERROR)
+ /* TED queries don't match PCE */
+ /* Don't apply srte,zebra changes */
+ number_of_sid_clashed++;
}
candidate->lsp->segment_list = segment_list;
@@ -350,7 +361,11 @@ int path_pcep_config_update_path(struct path *path)
candidate->lsp->objfun = path->pce_objfun;
}
- srte_apply_changes();
+ if (number_of_sid_clashed)
+ SET_FLAG(segment->segment_list->flags,
+ F_SEGMENT_LIST_SID_CONFLICT);
+ else
+ srte_apply_changes();
return 0;
}
@@ -400,6 +415,16 @@ enum pcep_sr_subobj_nai pcep_nai_type(enum srte_segment_nai_type type)
return PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY;
case SRTE_SEGMENT_NAI_TYPE_IPV4_UNNUMBERED_ADJACENCY:
return PCEP_SR_SUBOBJ_NAI_UNNUMBERED_IPV4_ADJACENCY;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ADJACENCY_LINK_LOCAL_ADDRESSES:
+ return PCEP_SR_SUBOBJ_NAI_LINK_LOCAL_IPV6_ADJACENCY;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE:
+ return PCEP_SR_SUBOBJ_NAI_IPV4_NODE;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_LOCAL_IFACE:
+ return PCEP_SR_SUBOBJ_NAI_IPV6_NODE;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM:
+ return PCEP_SR_SUBOBJ_NAI_IPV4_NODE;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ALGORITHM:
+ return PCEP_SR_SUBOBJ_NAI_IPV6_NODE;
default:
return PCEP_SR_SUBOBJ_NAI_UNKNOWN;
}
diff --git a/pathd/path_pcep_debug.c b/pathd/path_pcep_debug.c
index d222371bbb..370484dc1b 100644
--- a/pathd/path_pcep_debug.c
+++ b/pathd/path_pcep_debug.c
@@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include <string.h>
#include <stdbool.h>
#include <time.h>
diff --git a/pathd/path_ted.c b/pathd/path_ted.c
new file mode 100644
index 0000000000..01ada92258
--- /dev/null
+++ b/pathd/path_ted.c
@@ -0,0 +1,726 @@
+/*
+ * Copyright (C) 2020 Volta Networks, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+#include "stdlib.h"
+
+#include <zebra.h>
+
+#include "memory.h"
+#include "log.h"
+#include "command.h"
+#include "prefix.h"
+#include <lib/json.h>
+
+#include "pathd.h"
+#include "pathd/path_errors.h"
+#include "pathd/path_ted.h"
+
+#ifndef VTYSH_EXTRACT_PL
+#include "pathd/path_ted_clippy.c"
+#endif
+
+static struct ls_ted *path_ted_create_ted(void);
+static void path_ted_register_vty(void);
+static void path_ted_unregister_vty(void);
+static uint32_t path_ted_start_importing_igp(const char *daemon_str);
+static uint32_t path_ted_stop_importing_igp(void);
+static enum zclient_send_status path_ted_link_state_sync(void);
+static int path_ted_timer_handler_sync(struct thread *thread);
+static int path_ted_timer_handler_refresh(struct thread *thread);
+static int path_ted_cli_debug_config_write(struct vty *vty);
+static int path_ted_cli_debug_set_all(uint32_t flags, bool set);
+
+extern struct zclient *zclient;
+
+struct ted_state ted_state_g = {};
+
+/*
+ * path_path_ted public API function implementations
+ */
+
+void path_ted_init(struct thread_master *master)
+{
+ ted_state_g.main = master;
+ ted_state_g.link_state_delay_interval = TIMER_RETRY_DELAY;
+ ted_state_g.segment_list_refresh_interval = TIMER_RETRY_DELAY;
+ path_ted_register_vty();
+ path_ted_segment_list_refresh();
+}
+
+uint32_t path_ted_teardown(void)
+{
+ PATH_TED_DEBUG("%s : TED [%p]", __func__, ted_state_g.ted);
+ path_ted_unregister_vty();
+ path_ted_stop_importing_igp();
+ ls_ted_del_all(ted_state_g.ted);
+ path_ted_timer_sync_cancel();
+ path_ted_timer_refresh_cancel();
+ return 0;
+}
+
+/**
+ * Set all needed to receive igp data.
+ *
+ * @return true if ok
+ *
+ */
+uint32_t path_ted_start_importing_igp(const char *daemon_str)
+{
+ uint32_t status = 0;
+
+ if (strcmp(daemon_str, "ospfv2") == 0)
+ ted_state_g.import = IMPORT_OSPFv2;
+ else if (strcmp(daemon_str, "ospfv3") == 0) {
+ ted_state_g.import = IMPORT_UNKNOWN;
+ return 1;
+ } else if (strcmp(daemon_str, "isis") == 0)
+ ted_state_g.import = IMPORT_ISIS;
+ else {
+ ted_state_g.import = IMPORT_UNKNOWN;
+ return 1;
+ }
+
+ if (ls_register(zclient, false /*client*/) != 0) {
+ PATH_TED_ERROR("%s: PATHD-TED: Unable to register Link State",
+ __func__);
+ ted_state_g.import = IMPORT_UNKNOWN;
+ status = 1;
+ } else {
+ if (path_ted_link_state_sync() != -1) {
+ PATH_TED_DEBUG("%s: PATHD-TED: Importing %s data ON",
+ __func__,
+ PATH_TED_IGP_PRINT(ted_state_g.import));
+ } else {
+ PATH_TED_WARN("%s: PATHD-TED: Importing %s data OFF",
+ __func__,
+ PATH_TED_IGP_PRINT(ted_state_g.import));
+ ted_state_g.import = IMPORT_UNKNOWN;
+ }
+ }
+ return status;
+}
+
+/**
+ * Unset all needed to receive igp data.
+ *
+ * @return true if ok
+ *
+ */
+uint32_t path_ted_stop_importing_igp(void)
+{
+ uint32_t status = 0;
+
+ if (ted_state_g.import != IMPORT_UNKNOWN) {
+ if (ls_unregister(zclient, false /*client*/) != 0) {
+ PATH_TED_ERROR(
+ "%s: PATHD-TED: Unable to unregister Link State",
+ __func__);
+ status = 1;
+ } else {
+ ted_state_g.import = IMPORT_UNKNOWN;
+ PATH_TED_DEBUG("%s: PATHD-TED: Importing igp data OFF",
+ __func__);
+ }
+ path_ted_timer_sync_cancel();
+ }
+ return status;
+}
+/**
+ * Check for ted status
+ *
+ * @return true if ok
+ *
+ */
+bool path_ted_is_initialized(void)
+{
+ if (ted_state_g.ted == NULL) {
+ PATH_TED_WARN("PATHD TED ls_ted not initialized");
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Creates an empty ted
+ *
+ * @param void
+ *
+ * @return Ptr to ted or NULL
+ */
+struct ls_ted *path_ted_create_ted()
+{
+ struct ls_ted *ted = ls_ted_new(TED_KEY, TED_NAME, TED_ASN);
+
+ if (ted == NULL) {
+ PATH_TED_ERROR("%s Unable to initialize TED Key [%d] ASN [%d] Name [%s]",
+ __func__, TED_KEY, TED_ASN, TED_NAME);
+ } else {
+ PATH_TED_INFO("%s Initialize TED Key [%d] ASN [%d] Name [%s]",
+ __func__, TED_KEY, TED_ASN, TED_NAME);
+ }
+
+ return ted;
+}
+
+uint32_t path_ted_rcvd_message(struct ls_message *msg)
+{
+ if (!path_ted_is_initialized())
+ return 1;
+
+ if (msg == NULL) {
+ PATH_TED_ERROR("%s: [rcv ted] TED received NULL message ",
+ __func__);
+ return 1;
+ }
+
+ if (path_ted_get_current_igp(msg->data.node->adv.origin))
+ return 1;
+
+ switch (msg->type) {
+ case LS_MSG_TYPE_NODE:
+ ls_msg2vertex(ted_state_g.ted, msg, true /*hard delete*/);
+ break;
+
+ case LS_MSG_TYPE_ATTRIBUTES:
+ ls_msg2edge(ted_state_g.ted, msg, true /*Ä¥ard delete*/);
+ break;
+
+ case LS_MSG_TYPE_PREFIX:
+ ls_msg2subnet(ted_state_g.ted, msg, true /*hard delete*/);
+ break;
+
+ default:
+ PATH_TED_DEBUG(
+ "%s: [rcv ted] TED received unknown message type [%d]",
+ __func__, msg->type);
+ break;
+ }
+ return 0;
+}
+
+uint32_t path_ted_query_type_f(struct ipaddr *local, struct ipaddr *remote)
+{
+ uint32_t sid = MPLS_LABEL_NONE;
+ struct ls_edge *edge;
+ uint64_t key;
+
+ if (!path_ted_is_initialized())
+ return MPLS_LABEL_NONE;
+
+ if (!local || !remote)
+ return MPLS_LABEL_NONE;
+
+ switch (local->ipa_type) {
+ case IPADDR_V4:
+ /* We have local and remote ip */
+ /* so check all attributes in ted */
+ key = ((uint64_t)ntohl(local->ip._v4_addr.s_addr)) & 0xffffffff;
+ edge = ls_find_edge_by_key(ted_state_g.ted, key);
+ if (edge) {
+ if (edge->attributes->standard.remote.s_addr
+ == remote->ip._v4_addr.s_addr
+ && CHECK_FLAG(edge->attributes->flags,
+ LS_ATTR_ADJ_SID)) {
+ sid = edge->attributes->adj_sid[0]
+ .sid; /* from primary */
+ break;
+ }
+ }
+ break;
+ case IPADDR_V6:
+ key = (uint64_t)(local->ip._v6_addr.s6_addr32[0] & 0xffffffff)
+ | ((uint64_t)local->ip._v6_addr.s6_addr32[1] << 32);
+ edge = ls_find_edge_by_key(ted_state_g.ted, key);
+ if (edge) {
+ if ((memcmp(&edge->attributes->standard.remote6,
+ &remote->ip._v6_addr,
+ sizeof(remote->ip._v6_addr))
+ && CHECK_FLAG(edge->attributes->flags,
+ LS_ATTR_ADJ_SID))) {
+ sid = edge->attributes->adj_sid[0]
+ .sid; /* from primary */
+ break;
+ }
+ }
+ break;
+ case IPADDR_NONE:
+ break;
+ }
+
+ return sid;
+}
+
+uint32_t path_ted_query_type_c(struct prefix *prefix, uint8_t algo)
+{
+ uint32_t sid = MPLS_LABEL_NONE;
+ struct ls_subnet *subnet;
+
+ if (!path_ted_is_initialized())
+ return MPLS_LABEL_NONE;
+
+ if (!prefix)
+ return MPLS_LABEL_NONE;
+
+ switch (prefix->family) {
+ case AF_INET:
+ case AF_INET6:
+ subnet = ls_find_subnet(ted_state_g.ted, *prefix);
+ if (subnet) {
+ if ((CHECK_FLAG(subnet->ls_pref->flags, LS_PREF_SR))
+ && (subnet->ls_pref->sr.algo == algo))
+ sid = subnet->ls_pref->sr.sid;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return sid;
+}
+
+uint32_t path_ted_query_type_e(struct prefix *prefix, uint32_t iface_id)
+{
+ uint32_t sid = MPLS_LABEL_NONE;
+ struct ls_subnet *subnet;
+ struct listnode *lst_node;
+ struct ls_edge *edge;
+
+ if (!path_ted_is_initialized())
+ return MPLS_LABEL_NONE;
+
+ if (!prefix)
+ return MPLS_LABEL_NONE;
+
+ switch (prefix->family) {
+ case AF_INET:
+ case AF_INET6:
+ subnet = ls_find_subnet(ted_state_g.ted, *prefix);
+ if (subnet && subnet->vertex
+ && subnet->vertex->outgoing_edges) {
+ /* from the vertex linked in subnet */
+ /* loop over outgoing edges */
+ for (ALL_LIST_ELEMENTS_RO(
+ subnet->vertex->outgoing_edges, lst_node,
+ edge)) {
+ /* and look for ifaceid */
+ /* so get sid of attribute */
+ if (CHECK_FLAG(edge->attributes->flags,
+ LS_ATTR_LOCAL_ID)
+ && edge->attributes->standard.local_id
+ == iface_id) {
+ sid = subnet->ls_pref->sr.sid;
+ break;
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ return sid;
+}
+
+DEFPY (debug_path_ted,
+ debug_path_ted_cmd,
+ "[no] debug pathd mpls-te",
+ NO_STR
+ DEBUG_STR
+ "path debugging\n"
+ "ted debugging\n")
+{
+ uint32_t mode = DEBUG_NODE2MODE(vty->node);
+ bool no_debug = (no != NULL);
+
+ DEBUG_MODE_SET(&ted_state_g.dbg, mode, !no);
+ DEBUG_FLAGS_SET(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC, !no_debug);
+ return CMD_SUCCESS;
+}
+
+/*
+ * Followings are vty command functions.
+ */
+/* clang-format off */
+DEFUN (path_ted_on,
+ path_ted_on_cmd,
+ "mpls-te on",
+ NO_STR
+ "Enable the TE database (TED) functionality\n")
+/* clang-format on */
+{
+
+ if (ted_state_g.enabled) {
+ PATH_TED_DEBUG("%s: PATHD-TED: Enabled ON -> ON.", __func__);
+ return CMD_SUCCESS;
+ }
+
+ ted_state_g.ted = path_ted_create_ted();
+ ted_state_g.enabled = true;
+ PATH_TED_DEBUG("%s: PATHD-TED: Enabled OFF -> ON.", __func__);
+
+ return CMD_SUCCESS;
+}
+
+/* clang-format off */
+DEFUN (no_path_ted,
+ no_path_ted_cmd,
+ "no mpls-te [on]",
+ NO_STR
+ NO_STR
+ "Disable the TE Database functionality\n")
+/* clang-format on */
+{
+ if (ted_state_g.enabled) {
+ PATH_TED_DEBUG("%s: PATHD-TED: OFF -> OFF", __func__);
+ return CMD_SUCCESS;
+ }
+
+ /* Remove TED */
+ ls_ted_del_all(ted_state_g.ted);
+ ted_state_g.enabled = false;
+ PATH_TED_DEBUG("%s: PATHD-TED: ON -> OFF", __func__);
+ ted_state_g.import = IMPORT_UNKNOWN;
+ if (ls_unregister(zclient, false /*client*/) != 0) {
+ vty_out(vty, "Unable to unregister Link State\n");
+ return CMD_WARNING;
+ }
+
+ return CMD_SUCCESS;
+}
+
+/* clang-format off */
+DEFPY(path_ted_import,
+ path_ted_import_cmd,
+ "mpls-te import <ospfv2|ospfv3|isis>$import_daemon",
+ "Enable the TE database (TED) fill with remote igp data\n"
+ "import\n"
+ "Origin ospfv2\n"
+ "Origin ospfv3\n"
+ "Origin isis\n")
+/* clang-format on */
+{
+
+ if (ted_state_g.enabled)
+ if (path_ted_start_importing_igp(import_daemon)) {
+ vty_out(vty, "Unable to start importing\n");
+ return CMD_WARNING;
+ }
+ return CMD_SUCCESS;
+}
+
+/* clang-format off */
+DEFUN (no_path_ted_import,
+ no_path_ted_import_cmd,
+ "no mpls-te import",
+ NO_STR
+ NO_STR
+ "Disable the TE Database fill with remote igp data\n")
+/* clang-format on */
+{
+
+ if (ted_state_g.import) {
+ if (path_ted_stop_importing_igp()) {
+ vty_out(vty, "Unable to stop importing\n");
+ return CMD_WARNING;
+ } else {
+ PATH_TED_DEBUG(
+ "%s: PATHD-TED: Importing igp data already OFF",
+ __func__);
+ }
+ }
+ return CMD_SUCCESS;
+}
+
+/* clang-format off */
+DEFPY (show_pahtd_ted_db,
+ show_pathd_ted_db_cmd,
+ "show pathd ted database <verbose|json>$ver_json ",
+ "show command\n"
+ "pathd daemon\n"
+ "traffic eng\n"
+ "database\n"
+ "verbose output\n"
+ "Show complete received TED database\n")
+/* clang-format on */
+{
+ bool st_json = false;
+ json_object *json = NULL;
+
+ if (!ted_state_g.enabled) {
+ vty_out(vty, "PATHD TED database is not enabled\n");
+ return CMD_WARNING;
+ }
+ if (strcmp(ver_json, "json") == 0) {
+ st_json = true;
+ json = json_object_new_object();
+ }
+ /* Show the complete TED */
+ ls_show_ted(ted_state_g.ted, vty, json, !st_json);
+ if (st_json) {
+ vty_out(vty, "%s\n",
+ json_object_to_json_string_ext(
+ json, JSON_C_TO_STRING_PRETTY));
+ json_object_free(json);
+ }
+ return CMD_SUCCESS;
+}
+
+/*
+ * Config Write functions
+ */
+
+int path_ted_cli_debug_config_write(struct vty *vty)
+{
+ if (DEBUG_MODE_CHECK(&ted_state_g.dbg, DEBUG_MODE_CONF)) {
+ if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC))
+ vty_out(vty, "debug pathd mpls-te\n");
+ return 1;
+ }
+ return 0;
+}
+
+int path_ted_cli_debug_set_all(uint32_t flags, bool set)
+{
+ DEBUG_FLAGS_SET(&ted_state_g.dbg, flags, set);
+
+ /* If all modes have been turned off, don't preserve options. */
+ if (!DEBUG_MODE_CHECK(&ted_state_g.dbg, DEBUG_MODE_ALL))
+ DEBUG_CLEAR(&ted_state_g.dbg);
+
+ return 0;
+}
+
+/**
+ * Help fn to show ted related configuration
+ *
+ * @param vty
+ *
+ * @return Status
+ */
+uint32_t path_ted_config_write(struct vty *vty)
+{
+
+ if (ted_state_g.enabled) {
+ vty_out(vty, " mpls-te on\n");
+ switch (ted_state_g.import) {
+ case IMPORT_ISIS:
+ vty_out(vty, " mpls-te import isis\n");
+ break;
+ case IMPORT_OSPFv2:
+ vty_out(vty, " mpls-te import ospfv2\n");
+ break;
+ case IMPORT_OSPFv3:
+ vty_out(vty, " mpls-te import ospfv3\n");
+ break;
+ default:
+ break;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Register the fn's for CLI and hook for config show
+ *
+ * @param void
+ *
+ */
+static void path_ted_register_vty(void)
+{
+ install_element(VIEW_NODE, &show_pathd_ted_db_cmd);
+ install_element(SR_TRAFFIC_ENG_NODE, &path_ted_on_cmd);
+ install_element(SR_TRAFFIC_ENG_NODE, &no_path_ted_cmd);
+ install_element(SR_TRAFFIC_ENG_NODE, &path_ted_import_cmd);
+ install_element(SR_TRAFFIC_ENG_NODE, &no_path_ted_import_cmd);
+
+ install_element(CONFIG_NODE, &debug_path_ted_cmd);
+ install_element(ENABLE_NODE, &debug_path_ted_cmd);
+
+ hook_register(nb_client_debug_config_write,
+ path_ted_cli_debug_config_write);
+ hook_register(nb_client_debug_set_all, path_ted_cli_debug_set_all);
+}
+
+/**
+ * UnRegister the fn's for CLI and hook for config show
+ *
+ * @param void
+ *
+ */
+static void path_ted_unregister_vty(void)
+{
+ uninstall_element(VIEW_NODE, &show_pathd_ted_db_cmd);
+ uninstall_element(SR_TRAFFIC_ENG_NODE, &path_ted_on_cmd);
+ uninstall_element(SR_TRAFFIC_ENG_NODE, &no_path_ted_cmd);
+ uninstall_element(SR_TRAFFIC_ENG_NODE, &path_ted_import_cmd);
+ uninstall_element(SR_TRAFFIC_ENG_NODE, &no_path_ted_import_cmd);
+}
+
+/**
+ * Ask igp for a complete TED so far
+ *
+ * @param void
+ *
+ * @return zclient status
+ */
+enum zclient_send_status path_ted_link_state_sync(void)
+{
+ enum zclient_send_status status;
+
+ status = ls_request_sync(zclient);
+ if (status == -1) {
+ PATH_TED_ERROR(
+ "%s: PATHD-TED: Opaque error asking for TED sync ",
+ __func__);
+ return status;
+ } else {
+ PATH_TED_DEBUG("%s: PATHD-TED: Opaque asked for TED sync ",
+ __func__);
+ }
+ thread_add_timer(ted_state_g.main, path_ted_timer_handler_sync,
+ &ted_state_g, ted_state_g.link_state_delay_interval,
+ &ted_state_g.t_link_state_sync);
+
+ return status;
+}
+
+/**
+ * Timer cb for check link state sync
+ *
+ * @param thread Current thread
+ *
+ * @return status
+ */
+int path_ted_timer_handler_sync(struct thread *thread)
+{
+ /* data unpacking */
+ struct ted_state *data = THREAD_ARG(thread);
+
+ assert(data != NULL);
+ /* Retry the sync */
+ return path_ted_link_state_sync();
+}
+
+/**
+ * refresg segment list and create timer to keep up updated
+ *
+ * @param void
+ *
+ * @return status
+ */
+int path_ted_segment_list_refresh(void)
+{
+ int status = 0;
+
+ path_ted_timer_refresh_cancel();
+ thread_add_timer(ted_state_g.main, path_ted_timer_handler_refresh,
+ &ted_state_g,
+ ted_state_g.segment_list_refresh_interval,
+ &ted_state_g.t_segment_list_refresh);
+
+ return status;
+}
+
+/**
+ * Timer cb for refreshing sid in segment lists
+ *
+ * @param void
+ *
+ * @return status
+ */
+int path_ted_timer_handler_refresh(struct thread *thread)
+{
+ if (!path_ted_is_initialized())
+ return MPLS_LABEL_NONE;
+
+ PATH_TED_DEBUG("%s: PATHD-TED: Refresh sid from current TED", __func__);
+ /* data unpacking */
+ struct ted_state *data = THREAD_ARG(thread);
+
+ assert(data != NULL);
+
+ srte_policy_update_ted_sid();
+ return 0;
+}
+
+/**
+ * Cancel sync timer
+ *
+ * @param void
+ *
+ * @return void status
+ */
+void path_ted_timer_sync_cancel(void)
+{
+ if (ted_state_g.t_link_state_sync != NULL) {
+ thread_cancel(&ted_state_g.t_link_state_sync);
+ ted_state_g.t_link_state_sync = NULL;
+ }
+}
+
+/**
+ * Cancel refresh timer
+ *
+ * @param void
+ *
+ * @return void status
+ */
+void path_ted_timer_refresh_cancel(void)
+{
+ if (ted_state_g.t_segment_list_refresh != NULL) {
+ thread_cancel(&ted_state_g.t_segment_list_refresh);
+ ted_state_g.t_segment_list_refresh = NULL;
+ }
+}
+
+/**
+ * Check which igp is configured
+ *
+ * @param igp who want to check against config-
+ *
+ * @return status
+ */
+uint32_t path_ted_get_current_igp(uint32_t igp)
+{
+ switch (igp) {
+ case ISIS_L1:
+ case ISIS_L2:
+ if (ted_state_g.import != IMPORT_ISIS) {
+ PATH_TED_ERROR(
+ "%s: [rcv ted] Incorrect igp origin wait (%s) got (%s) ",
+ __func__,
+ PATH_TED_IGP_PRINT(ted_state_g.import),
+ LS_IGP_PRINT(igp));
+ return 1;
+ }
+ break;
+ case OSPFv2:
+ if (ted_state_g.import != IMPORT_OSPFv2) {
+ PATH_TED_ERROR(
+ "%s: [rcv ted] Incorrect igp origin wait (%s) got (%s) ",
+ __func__,
+ PATH_TED_IGP_PRINT(ted_state_g.import),
+ LS_IGP_PRINT(igp));
+ return 1;
+ }
+ break;
+ case STATIC:
+ break;
+ }
+ return 0;
+}
diff --git a/pathd/path_ted.h b/pathd/path_ted.h
new file mode 100644
index 0000000000..c6897b1520
--- /dev/null
+++ b/pathd/path_ted.h
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2020 Volta Networks, Inc
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ *
+ */
+
+#ifndef _PATH_TED_H
+#define _PATH_TED_H
+
+#ifdef __cplusplus
+
+extern "C" {
+#endif
+
+#include <zebra.h>
+
+#include <stdbool.h>
+
+#include <debug.h>
+#include "linklist.h"
+#include "log.h"
+#include "command.h"
+#include "stream.h"
+#include "prefix.h"
+#include "zclient.h"
+#include "link_state.h"
+
+extern struct ted_state ted_state_g;
+#define TIMER_RETRY_DELAY 5 /* Timeout in seconds between ls sync request */
+#define TED_KEY 1
+#define TED_ASN 1
+#define TED_NAME "PATHD TED"
+
+enum igp_import {
+ IMPORT_UNKNOWN = 0,
+ IMPORT_ISIS,
+ IMPORT_OSPFv2,
+ IMPORT_OSPFv3
+};
+struct ted_state {
+ struct thread_master *main;
+ /* Status of TED: enable or disable */
+ bool enabled;
+ /* From which igp is going to receive data */
+ enum igp_import import;
+ /* The TED itself as in link_state.h */
+ struct ls_ted *ted;
+ /* Timer for ted sync */
+ struct thread *t_link_state_sync;
+ /* Timer for refresh sid in segment list */
+ struct thread *t_segment_list_refresh;
+ /* delay interval in seconds */
+ uint32_t link_state_delay_interval;
+ /* delay interval refresh in seconds */
+ uint32_t segment_list_refresh_interval;
+ struct debug dbg;
+};
+/* Debug flags. */
+#define PATH_TED_DEBUG_BASIC 0x01
+#define PATH_TED_DEBUG(fmt, ...) \
+ do { \
+ if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
+ DEBUGD(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
+ } while (0)
+
+#define PATH_TED_ERROR(fmt, ...) \
+ do { \
+ if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
+ DEBUGE(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
+ } while (0)
+#define PATH_TED_WARN(fmt, ...) \
+ do { \
+ if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
+ DEBUGW(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
+ } while (0)
+#define PATH_TED_INFO(fmt, ...) \
+ do { \
+ if (DEBUG_FLAGS_CHECK(&ted_state_g.dbg, PATH_TED_DEBUG_BASIC)) \
+ DEBUGI(&ted_state_g.dbg, "mpls-te: " fmt, ##__VA_ARGS__); \
+ } while (0)
+
+/* TED management functions */
+bool path_ted_is_initialized(void);
+void path_ted_init(struct thread_master *master);
+uint32_t path_ted_teardown(void);
+void path_ted_timer_sync_cancel(void);
+void path_ted_timer_refresh_cancel(void);
+int path_ted_segment_list_refresh(void);
+
+/* TED configuration functions */
+uint32_t path_ted_config_write(struct vty *vty);
+
+/* TED util functions */
+/* clang-format off */
+#define LS_MSG_EVENT_PRINT(event) event == LS_MSG_EVENT_ADD?"add"\
+ : event == LS_MSG_EVENT_DELETE?"del"\
+ : event == LS_MSG_EVENT_UPDATE?"upd"\
+ : event == LS_MSG_EVENT_SYNC?"syn"\
+ : event == LS_MSG_EVENT_SYNC?"und" : "none"
+#define LS_MSG_TYPE_PRINT(type) type == LS_MSG_TYPE_NODE?"node"\
+ : type == LS_MSG_TYPE_ATTRIBUTES?"att"\
+ : type == LS_MSG_TYPE_PREFIX?"pre" : "none"
+#define LS_IGP_PRINT(type) type == ISIS_L1?"ISIS_L1"\
+ : type == ISIS_L2?"ISIS_L2"\
+ : type == DIRECT?"DIRECT"\
+ : type == STATIC?"STATIC"\
+ : type == OSPFv2?"OSPFv2" : "none"
+#define PATH_TED_IGP_PRINT(type) type == IMPORT_OSPFv2?"OSPFv2"\
+ : type == IMPORT_OSPFv3?"OSPFv3"\
+ : type == IMPORT_ISIS?"ISIS" : "none"
+/* clang-format on */
+
+
+uint32_t path_ted_get_current_igp(uint32_t);
+/* TED Query functions */
+
+/*
+ * Type of queries from draft-ietf-spring-segment-routing-policy-07 for types
+ * f,c,e
+ */
+
+/**
+ * Search for sid based in prefix and optional algo
+ *
+ * @param prefix Net prefix to resolv
+ * @param algo Algorithm for link state
+ *
+ * @return sid of attribute
+ */
+uint32_t path_ted_query_type_c(struct prefix *prefix, uint8_t algo);
+
+/**
+ * Search for sid based in prefix and interface id
+ *
+ * @param prefix Net prefix to resolv
+ * @param iface_id The interface id
+ *
+ * @return sid of attribute
+ */
+uint32_t path_ted_query_type_e(struct prefix *prefix, uint32_t iface_id);
+
+/**
+ * Search for sid based in local, remote pair
+ *
+ * @param local local ip of attribute
+ * @param remote remote ip of attribute
+ *
+ * @return sid of attribute
+ */
+uint32_t path_ted_query_type_f(struct ipaddr *local, struct ipaddr *remote);
+
+
+/**
+ * Handle the received opaque msg
+ *
+ * @param msg Holds the ted data
+ *
+ * @return sid of attribute
+ */
+uint32_t path_ted_rcvd_message(struct ls_message *msg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PATH_TED_H */
diff --git a/pathd/path_zebra.c b/pathd/path_zebra.c
index 276bc9289c..53d834f360 100644
--- a/pathd/path_zebra.c
+++ b/pathd/path_zebra.c
@@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "thread.h"
#include "log.h"
#include "lib_errors.h"
@@ -30,9 +32,14 @@
#include "typesafe.h"
#include "pathd/pathd.h"
+#include "pathd/path_ted.h"
#include "pathd/path_zebra.h"
+#include "lib/command.h"
+#include "lib/link_state.h"
+
+static int path_zebra_opaque_msg_handler(ZAPI_CALLBACK_ARGS);
-static struct zclient *zclient;
+struct zclient *zclient;
static struct zclient *zclient_sync;
/* Global Variables */
@@ -265,6 +272,54 @@ static void path_zebra_label_manager_connect(void)
}
}
+static int path_zebra_opaque_msg_handler(ZAPI_CALLBACK_ARGS)
+{
+ int ret = 0;
+ struct stream *s;
+ struct zapi_opaque_msg info;
+
+ s = zclient->ibuf;
+
+ if (zclient_opaque_decode(s, &info) != 0)
+ return -1;
+
+ switch (info.type) {
+ case LINK_STATE_UPDATE:
+ case LINK_STATE_SYNC:
+ /* Start receiving ls data so cancel request sync timer */
+ path_ted_timer_sync_cancel();
+
+ struct ls_message *msg = ls_parse_msg(s);
+
+ if (msg) {
+ zlog_debug("%s: [rcv ted] ls (%s) msg (%s)-(%s) !",
+ __func__,
+ info.type == LINK_STATE_UPDATE
+ ? "LINK_STATE_UPDATE"
+ : "LINK_STATE_SYNC",
+ LS_MSG_TYPE_PRINT(msg->type),
+ LS_MSG_EVENT_PRINT(msg->event));
+ } else {
+ zlog_err(
+ "%s: [rcv ted] Could not parse LinkState stream message.",
+ __func__);
+ return -1;
+ }
+
+ ret = path_ted_rcvd_message(msg);
+ ls_delete_msg(msg);
+ /* Update local configuration after process update. */
+ path_ted_segment_list_refresh();
+ break;
+ default:
+ zlog_debug("%s: [rcv ted] unknown opaque event (%d) !",
+ __func__, info.type);
+ break;
+ }
+
+ return ret;
+}
+
/**
* Initializes Zebra asynchronous connection.
*
@@ -281,6 +336,7 @@ void path_zebra_init(struct thread_master *master)
zclient->zebra_connected = path_zebra_connected;
zclient->sr_policy_notify_status = path_zebra_sr_policy_notify_status;
zclient->router_id_update = path_zebra_router_id_update;
+ zclient->opaque_msg_handler = path_zebra_opaque_msg_handler;
/* Initialize special zclient for synchronous message exchanges. */
zclient_sync = zclient_new(master, &options);
diff --git a/pathd/pathd.c b/pathd/pathd.c
index ae82186315..2462b08306 100644
--- a/pathd/pathd.c
+++ b/pathd/pathd.c
@@ -26,6 +26,7 @@
#include "pathd/pathd.h"
#include "pathd/path_zebra.h"
#include "pathd/path_debug.h"
+#include "pathd/path_ted.h"
#define HOOK_DELAY 3
@@ -188,14 +189,20 @@ void srte_segment_entry_del(struct srte_segment_entry *segment)
* @param type The remote address of the adjacency
* @param type The remote interface index of the unumbered adjacency
*/
-void srte_segment_entry_set_nai(struct srte_segment_entry *segment,
- enum srte_segment_nai_type type,
- struct ipaddr *local_ip, uint32_t local_iface,
- struct ipaddr *remote_ip, uint32_t remote_iface)
+int srte_segment_entry_set_nai(struct srte_segment_entry *segment,
+ enum srte_segment_nai_type type,
+ struct ipaddr *local_ip, uint32_t local_iface,
+ struct ipaddr *remote_ip, uint32_t remote_iface,
+ uint8_t algo, uint8_t pref_len)
{
+ int32_t status = 0;
+ struct prefix pre = {0};
segment->nai_type = type;
memcpy(&segment->nai_local_addr, local_ip, sizeof(struct ipaddr));
+ if (!segment || !local_ip || !remote_ip)
+ return 1;
+
switch (type) {
case SRTE_SEGMENT_NAI_TYPE_IPV4_NODE:
case SRTE_SEGMENT_NAI_TYPE_IPV6_NODE:
@@ -204,6 +211,7 @@ void srte_segment_entry_set_nai(struct srte_segment_entry *segment,
case SRTE_SEGMENT_NAI_TYPE_IPV6_ADJACENCY:
memcpy(&segment->nai_remote_addr, remote_ip,
sizeof(struct ipaddr));
+ status = srte_ted_do_query_type_f(segment, local_ip, remote_ip);
break;
case SRTE_SEGMENT_NAI_TYPE_IPV4_UNNUMBERED_ADJACENCY:
memcpy(&segment->nai_remote_addr, remote_ip,
@@ -211,12 +219,68 @@ void srte_segment_entry_set_nai(struct srte_segment_entry *segment,
segment->nai_local_iface = local_iface;
segment->nai_remote_iface = remote_iface;
break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ALGORITHM:
+ pre.family = AF_INET6;
+ pre.prefixlen = pref_len;
+ pre.u.prefix6 = local_ip->ip._v6_addr;
+ segment->nai_local_prefix_len = pref_len;
+ segment->nai_algorithm = algo;
+ status = srte_ted_do_query_type_c(segment, &pre, algo);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM:
+ pre.family = AF_INET;
+ pre.prefixlen = pref_len;
+ pre.u.prefix4 = local_ip->ip._v4_addr;
+ segment->nai_local_prefix_len = pref_len;
+ segment->nai_algorithm = algo;
+ status = srte_ted_do_query_type_c(segment, &pre, algo);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_LOCAL_IFACE:
+ pre.family = AF_INET6;
+ pre.prefixlen = pref_len;
+ pre.u.prefix6 = local_ip->ip._v6_addr;
+ segment->nai_local_prefix_len = pref_len;
+ segment->nai_local_iface = local_iface;
+ status = srte_ted_do_query_type_e(segment, &pre, local_iface);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE:
+ pre.family = AF_INET;
+ pre.prefixlen = pref_len;
+ pre.u.prefix4 = local_ip->ip._v4_addr;
+ segment->nai_local_prefix_len = pref_len;
+ segment->nai_local_iface = local_iface;
+ status = srte_ted_do_query_type_e(segment, &pre, local_iface);
+ break;
default:
segment->nai_local_addr.ipa_type = IPADDR_NONE;
segment->nai_local_iface = 0;
segment->nai_remote_addr.ipa_type = IPADDR_NONE;
segment->nai_remote_iface = 0;
}
+ return status;
+}
+
+/**
+ * Mark segment as modified depending in protocol and sid conditions
+ *
+ * @param protocol_origin Origin of the segment list
+ * @param s_list Ptr to segment list with flags,sid to modidy
+ * @param s_entry Ptr to segment entry with sid to modidy
+ * @param ted_sid The sid from ted query
+ * @return void
+ */
+void srte_segment_set_local_modification(struct srte_segment_list *s_list,
+ struct srte_segment_entry *s_entry,
+ uint32_t ted_sid)
+{
+ if (!s_list || !s_entry)
+ return;
+
+ if (s_list->protocol_origin == SRTE_ORIGIN_LOCAL
+ && s_entry->sid_value != ted_sid) {
+ s_entry->sid_value = ted_sid;
+ SET_FLAG(s_list->flags, F_SEGMENT_LIST_MODIFIED);
+ }
}
/**
@@ -287,6 +351,105 @@ struct srte_policy *srte_policy_find(uint32_t color, struct ipaddr *endpoint)
return RB_FIND(srte_policy_head, &srte_policies, &search);
}
+/*
+ * After new data from igp,local and pce the segment list :
+ * Mark as invalid for origin pce if cannot be validated
+ * Updated for origin local
+ */
+int srte_policy_update_ted_sid(void)
+{
+
+ int number_of_sid_clashed = 0;
+ struct srte_segment_list *s_list;
+ struct srte_segment_entry *s_entry;
+
+ if (!path_ted_is_initialized())
+ return 0;
+ if (RB_EMPTY(srte_segment_list_head, &srte_segment_lists))
+ return 0;
+
+ RB_FOREACH (s_list, srte_segment_list_head, &srte_segment_lists) {
+ if (CHECK_FLAG(s_list->flags, F_SEGMENT_LIST_DELETED))
+ continue;
+ RB_FOREACH (s_entry, srte_segment_entry_head,
+ &s_list->segments) {
+ PATH_TED_DEBUG(
+ "%s:PATHD-TED: SL: Name: %s index:(%d) sid:(%d) prefix_len:(%d) local iface:(%d) algorithm:(%d)",
+ __func__, s_list->name, s_entry->index,
+ s_entry->sid_value,
+ s_entry->nai_local_prefix_len,
+ s_entry->nai_local_iface,
+ s_entry->nai_algorithm);
+ struct prefix prefix_cli = {0};
+
+ switch (s_entry->nai_type) {
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ADJACENCY:
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ADJACENCY:
+ number_of_sid_clashed +=
+ srte_ted_do_query_type_f(
+ s_entry,
+ &s_entry->nai_local_addr,
+ &s_entry->nai_remote_addr);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_LOCAL_IFACE:
+ prefix_cli.family = AF_INET6;
+ prefix_cli.prefixlen =
+ s_entry->nai_local_prefix_len;
+ prefix_cli.u.prefix6 =
+ s_entry->nai_local_addr.ip._v6_addr;
+ number_of_sid_clashed +=
+ srte_ted_do_query_type_e(
+ s_entry, &prefix_cli,
+ s_entry->nai_local_iface);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE:
+ prefix_cli.family = AF_INET;
+ prefix_cli.prefixlen =
+ s_entry->nai_local_prefix_len;
+ prefix_cli.u.prefix4 =
+ s_entry->nai_local_addr.ip._v4_addr;
+ number_of_sid_clashed +=
+ srte_ted_do_query_type_e(
+ s_entry, &prefix_cli,
+ s_entry->nai_local_iface);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV6_ALGORITHM:
+ prefix_cli.family = AF_INET6;
+ prefix_cli.prefixlen =
+ s_entry->nai_local_prefix_len;
+ prefix_cli.u.prefix6 =
+ s_entry->nai_local_addr.ip._v6_addr;
+ number_of_sid_clashed +=
+ srte_ted_do_query_type_c(
+ s_entry, &prefix_cli,
+ s_entry->nai_algorithm);
+ break;
+ case SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM:
+ prefix_cli.family = AF_INET;
+ prefix_cli.prefixlen =
+ s_entry->nai_local_prefix_len;
+ prefix_cli.u.prefix4 =
+ s_entry->nai_local_addr.ip._v4_addr;
+ number_of_sid_clashed +=
+ srte_ted_do_query_type_c(
+ s_entry, &prefix_cli,
+ s_entry->nai_algorithm);
+ break;
+ default:
+ break;
+ }
+ }
+ if (number_of_sid_clashed) {
+ SET_FLAG(s_list->flags, F_SEGMENT_LIST_SID_CONFLICT);
+ number_of_sid_clashed = 0;
+ } else
+ UNSET_FLAG(s_list->flags, F_SEGMENT_LIST_SID_CONFLICT);
+ }
+ srte_apply_changes();
+
+ return 0;
+}
+
/**
* Update a policy binding SID.
*
@@ -322,13 +485,23 @@ srte_policy_best_candidate(const struct srte_policy *policy)
&policy->candidate_paths) {
/* search for highest preference with existing segment list */
if (!CHECK_FLAG(candidate->flags, F_CANDIDATE_DELETED)
- && candidate->lsp->segment_list)
+ && candidate->lsp->segment_list
+ && (!CHECK_FLAG(candidate->lsp->segment_list->flags,
+ F_SEGMENT_LIST_SID_CONFLICT)))
return candidate;
}
return NULL;
}
+void srte_clean_zebra(void)
+{
+ struct srte_policy *policy, *safe_pol;
+
+ RB_FOREACH_SAFE (policy, srte_policy_head, &srte_policies, safe_pol)
+ srte_policy_del(policy);
+}
+
/**
* Apply changes defined by setting the policies, candidate paths
* and segment lists modification flags NEW, MODIFIED and DELETED.
@@ -526,6 +699,7 @@ void srte_candidate_set_bandwidth(struct srte_candidate *candidate,
{
struct srte_policy *policy = candidate->policy;
char endpoint[46];
+
ipaddr2str(&policy->endpoint, endpoint, sizeof(endpoint));
zlog_debug(
"SR-TE(%s, %u): candidate %s %sconfig bandwidth set to %f B/s",
@@ -1024,6 +1198,12 @@ const char *srte_origin2str(enum srte_protocol_origin origin)
}
}
+void pathd_shutdown(void)
+{
+ path_ted_teardown();
+ srte_clean_zebra();
+}
+
void trigger_pathd_candidate_created(struct srte_candidate *candidate)
{
/* The hook is called asynchronously to let the PCEP module
@@ -1124,3 +1304,91 @@ const char *srte_candidate_metric_name(enum srte_candidate_metric_type type)
return "UNKNOWN";
}
}
+
+int32_t srte_ted_do_query_type_c(struct srte_segment_entry *entry,
+ struct prefix *prefix_cli, uint32_t algo)
+{
+ int32_t status = 0;
+ uint32_t ted_sid = MPLS_LABEL_NONE;
+
+ if (!entry || !prefix_cli)
+ return 0;
+
+ if (!path_ted_is_initialized())
+ return 0;
+
+ ted_sid = path_ted_query_type_c(prefix_cli, algo);
+ if (ted_sid == MPLS_LABEL_NONE) {
+ zlog_warn(" %s: PATHD-TED: SL: ERROR query C : ted-sid (%d)",
+ __func__, ted_sid);
+ } else {
+ zlog_debug("%s: PATHD-TED: SL: Sucess query C : ted-sid (%d)",
+ __func__, ted_sid);
+ }
+ if (CHECK_SID(entry->segment_list->protocol_origin, ted_sid,
+ entry->sid_value)) {
+ status = PATH_SID_ERROR;
+ } else
+ srte_segment_set_local_modification(entry->segment_list, entry,
+ ted_sid);
+ return status;
+}
+
+int32_t srte_ted_do_query_type_e(struct srte_segment_entry *entry,
+ struct prefix *prefix_cli,
+ uint32_t local_iface)
+{
+ int32_t status = 0;
+ uint32_t ted_sid = MPLS_LABEL_NONE;
+
+ if (!entry || !prefix_cli)
+ return 0;
+
+ if (!path_ted_is_initialized())
+ return 0;
+
+ ted_sid = path_ted_query_type_e(prefix_cli, local_iface);
+ if (ted_sid == MPLS_LABEL_NONE) {
+ zlog_warn(" %s: PATHD-TED: SL: ERROR query E : ted-sid (%d)",
+ __func__, ted_sid);
+ } else {
+ zlog_debug("%s: PATHD-TED: SL: Sucess query E : ted-sid (%d)",
+ __func__, ted_sid);
+ }
+ if (CHECK_SID(entry->segment_list->protocol_origin, ted_sid,
+ entry->sid_value)) {
+ status = PATH_SID_ERROR;
+ } else
+ srte_segment_set_local_modification(entry->segment_list, entry,
+ ted_sid);
+ return status;
+}
+
+int32_t srte_ted_do_query_type_f(struct srte_segment_entry *entry,
+ struct ipaddr *local, struct ipaddr *remote)
+{
+ int32_t status = 0;
+ uint32_t ted_sid = MPLS_LABEL_NONE;
+
+ if (!entry || !local || !remote)
+ return 0;
+
+ if (!path_ted_is_initialized())
+ return status;
+
+ ted_sid = path_ted_query_type_f(local, remote);
+ if (ted_sid == MPLS_LABEL_NONE) {
+ zlog_warn("%s:SL: ERROR query F : ted-sid (%d)", __func__,
+ ted_sid);
+ } else {
+ zlog_debug("%s:SL: Sucess query F : ted-sid (%d)", __func__,
+ ted_sid);
+ }
+ if (CHECK_SID(entry->segment_list->protocol_origin, ted_sid,
+ entry->sid_value)) {
+ status = PATH_SID_ERROR;
+ } else
+ srte_segment_set_local_modification(entry->segment_list, entry,
+ ted_sid);
+ return status;
+}
diff --git a/pathd/pathd.h b/pathd/pathd.h
index 9c4d256cef..7d38272e85 100644
--- a/pathd/pathd.h
+++ b/pathd/pathd.h
@@ -24,6 +24,13 @@
#include "lib/ipaddr.h"
#include "lib/srte.h"
#include "lib/hook.h"
+#include "lib/prefix.h"
+
+#define PATH_SID_ERROR 1
+#define PATH_SID_NO_ERROR 0
+#define CHECK_SID(or, ts, es) \
+ ((or == SRTE_ORIGIN_PCEP && (ts == MPLS_LABEL_NONE || es != ts)) \
+ || (or == SRTE_ORIGIN_LOCAL && ts == MPLS_LABEL_NONE))
DECLARE_MGROUP(PATHD);
@@ -100,7 +107,12 @@ enum srte_segment_nai_type {
SRTE_SEGMENT_NAI_TYPE_IPV6_NODE = 2,
SRTE_SEGMENT_NAI_TYPE_IPV4_ADJACENCY = 3,
SRTE_SEGMENT_NAI_TYPE_IPV6_ADJACENCY = 4,
- SRTE_SEGMENT_NAI_TYPE_IPV4_UNNUMBERED_ADJACENCY = 5
+ SRTE_SEGMENT_NAI_TYPE_IPV4_UNNUMBERED_ADJACENCY = 5,
+ SRTE_SEGMENT_NAI_TYPE_IPV6_ADJACENCY_LINK_LOCAL_ADDRESSES = 6,
+ SRTE_SEGMENT_NAI_TYPE_IPV4_LOCAL_IFACE = 7,
+ SRTE_SEGMENT_NAI_TYPE_IPV6_LOCAL_IFACE = 8,
+ SRTE_SEGMENT_NAI_TYPE_IPV4_ALGORITHM = 9,
+ SRTE_SEGMENT_NAI_TYPE_IPV6_ALGORITHM = 10
};
enum objfun_type {
@@ -175,6 +187,9 @@ struct srte_segment_entry {
/* NAI remote interface when nai type is not IPv4 unnumbered adjacency
*/
uint32_t nai_remote_iface;
+ /* Support draft-ietf-spring-segment-routing-policy sl types queries*/
+ uint8_t nai_local_prefix_len;
+ uint8_t nai_algorithm;
};
RB_HEAD(srte_segment_entry_head, srte_segment_entry);
RB_PROTOTYPE(srte_segment_entry_head, srte_segment_entry, entry,
@@ -200,6 +215,7 @@ struct srte_segment_list {
#define F_SEGMENT_LIST_NEW 0x0002
#define F_SEGMENT_LIST_MODIFIED 0x0004
#define F_SEGMENT_LIST_DELETED 0x0008
+#define F_SEGMENT_LIST_SID_CONFLICT 0x0010
};
RB_HEAD(srte_segment_list_head, srte_segment_list);
RB_PROTOTYPE(srte_segment_list_head, srte_segment_list, entry,
@@ -361,17 +377,22 @@ struct srte_segment_list *srte_segment_list_find(const char *name);
struct srte_segment_entry *
srte_segment_entry_add(struct srte_segment_list *segment_list, uint32_t index);
void srte_segment_entry_del(struct srte_segment_entry *segment);
-void srte_segment_entry_set_nai(struct srte_segment_entry *segment,
- enum srte_segment_nai_type type,
- struct ipaddr *local_ip, uint32_t local_iface,
- struct ipaddr *remote_ip,
- uint32_t remote_iface);
+int srte_segment_entry_set_nai(struct srte_segment_entry *segment,
+ enum srte_segment_nai_type type,
+ struct ipaddr *local_ip, uint32_t local_iface,
+ struct ipaddr *remote_ip, uint32_t remote_iface,
+ uint8_t algo, uint8_t pref_len);
+void srte_segment_set_local_modification(struct srte_segment_list *s_list,
+ struct srte_segment_entry *s_entry,
+ uint32_t ted_sid);
struct srte_policy *srte_policy_add(uint32_t color, struct ipaddr *endpoint);
void srte_policy_del(struct srte_policy *policy);
struct srte_policy *srte_policy_find(uint32_t color, struct ipaddr *endpoint);
+int srte_policy_update_ted_sid(void);
void srte_policy_update_binding_sid(struct srte_policy *policy,
uint32_t binding_sid);
void srte_apply_changes(void);
+void srte_clean_zebra(void);
void srte_policy_apply_changes(struct srte_policy *policy);
struct srte_candidate *srte_candidate_add(struct srte_policy *policy,
uint32_t preference);
@@ -408,8 +429,45 @@ srte_segment_entry_find(struct srte_segment_list *segment_list, uint32_t index);
void srte_candidate_status_update(struct srte_candidate *candidate, int status);
void srte_candidate_unset_segment_list(const char *originator, bool force);
const char *srte_origin2str(enum srte_protocol_origin origin);
+void pathd_shutdown(void);
/* path_cli.c */
void path_cli_init(void);
+
+/**
+ * Search for sid based in prefix and algorithm
+ *
+ * @param Prefix The prefix to use
+ * @param algo Algorithm we want to query for
+ * @param ted_sid Sid to query
+ *
+ * @return void
+ */
+int32_t srte_ted_do_query_type_c(struct srte_segment_entry *entry,
+ struct prefix *prefix_cli, uint32_t algo);
+
+/**
+ * Search for sid based in prefix and interface id
+ *
+ * @param Prefix The prefix to use
+ * @param local_iface The id of interface
+ * @param ted_sid Sid to query
+ *
+ * @return void
+ */
+int32_t srte_ted_do_query_type_e(struct srte_segment_entry *entry,
+ struct prefix *prefix_cli,
+ uint32_t local_iface);
+/**
+ * Search for sid based in local and remote ip
+ *
+ * @param entry entry to update
+ * @param local Local addr for query
+ * @param remote Local addr for query
+ *
+ * @return void
+ */
+int32_t srte_ted_do_query_type_f(struct srte_segment_entry *entry,
+ struct ipaddr *local, struct ipaddr *remote);
#endif /* _FRR_PATHD_H_ */
diff --git a/pathd/subdir.am b/pathd/subdir.am
index 0666e8d3c8..693afabb39 100644
--- a/pathd/subdir.am
+++ b/pathd/subdir.am
@@ -5,7 +5,10 @@
if PATHD
noinst_LIBRARIES += pathd/libpath.a
sbin_PROGRAMS += pathd/pathd
-vtysh_scan += pathd/path_cli.c
+vtysh_scan += \
+ pathd/path_cli.c \
+ pathd/path_ted.c \
+ #end
vtysh_daemons += pathd
# TODO add man page
#man8 += $(MANBUILD)/pathd.8
@@ -24,6 +27,7 @@ pathd_libpath_a_SOURCES = \
pathd/path_nb.c \
pathd/path_nb_config.c \
pathd/path_nb_state.c \
+ pathd/path_ted.c \
pathd/path_zebra.c \
pathd/pathd.c \
# end
@@ -31,6 +35,7 @@ pathd_libpath_a_SOURCES = \
clippy_scan += \
pathd/path_cli.c \
pathd/path_pcep_cli.c \
+ pathd/path_ted.c \
# end
noinst_HEADERS += \
@@ -44,6 +49,7 @@ noinst_HEADERS += \
pathd/path_pcep_lib.h \
pathd/path_pcep_config.h \
pathd/path_pcep_pcc.h \
+ pathd/path_ted.h \
pathd/path_zebra.h \
pathd/pathd.h \
# end
diff --git a/pbrd/pbr_zebra.c b/pbrd/pbr_zebra.c
index 4b73e13c27..eb41bf6043 100644
--- a/pbrd/pbr_zebra.c
+++ b/pbrd/pbr_zebra.c
@@ -50,8 +50,8 @@ struct pbr_interface *pbr_if_new(struct interface *ifp)
{
struct pbr_interface *pbr_ifp;
- zassert(ifp);
- zassert(!ifp->info);
+ assert(ifp);
+ assert(!ifp->info);
pbr_ifp = XCALLOC(MTYPE_PBR_INTERFACE, sizeof(*pbr_ifp));
diff --git a/pceplib/pcep_msg_messages.c b/pceplib/pcep_msg_messages.c
index ec2a237f30..9bbfc5372b 100644
--- a/pceplib/pcep_msg_messages.c
+++ b/pceplib/pcep_msg_messages.c
@@ -25,6 +25,10 @@
* This is the implementation of a High Level PCEP message API.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <string.h>
#include <arpa/inet.h>
#include <stdarg.h>
diff --git a/pceplib/pcep_msg_messages_encoding.c b/pceplib/pcep_msg_messages_encoding.c
index 7c8e1b3a1f..e90ca1cfd8 100644
--- a/pceplib/pcep_msg_messages_encoding.c
+++ b/pceplib/pcep_msg_messages_encoding.c
@@ -25,6 +25,10 @@
* Encoding and decoding for PCEP messages.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
diff --git a/pceplib/pcep_msg_object_error_types.c b/pceplib/pcep_msg_object_error_types.c
index a4fd8151cd..c72dfd7061 100644
--- a/pceplib/pcep_msg_object_error_types.c
+++ b/pceplib/pcep_msg_object_error_types.c
@@ -19,6 +19,10 @@
* Author : Brady Johnson <brady@voltanet.io>
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
#include "pcep_msg_object_error_types.h"
diff --git a/pceplib/pcep_msg_objects.c b/pceplib/pcep_msg_objects.c
index 6c943ddc2a..e253fcc540 100644
--- a/pceplib/pcep_msg_objects.c
+++ b/pceplib/pcep_msg_objects.c
@@ -25,6 +25,10 @@
* This is the implementation of a High Level PCEP message object API.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <string.h>
#include <arpa/inet.h>
#include <stdarg.h>
diff --git a/pceplib/pcep_msg_objects_encoding.c b/pceplib/pcep_msg_objects_encoding.c
index c4089ba5ec..9ab96f7bce 100644
--- a/pceplib/pcep_msg_objects_encoding.c
+++ b/pceplib/pcep_msg_objects_encoding.c
@@ -25,6 +25,10 @@
* Encoding and decoding for PCEP Objects.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
#include <string.h>
diff --git a/pceplib/pcep_msg_tlvs.c b/pceplib/pcep_msg_tlvs.c
index 9c84e71ee1..6298ed4b8d 100644
--- a/pceplib/pcep_msg_tlvs.c
+++ b/pceplib/pcep_msg_tlvs.c
@@ -25,6 +25,10 @@
* This is the implementation of a High Level PCEP message object TLV API.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
diff --git a/pceplib/pcep_msg_tools.c b/pceplib/pcep_msg_tools.c
index e190d2a850..8f32f2c537 100644
--- a/pceplib/pcep_msg_tools.c
+++ b/pceplib/pcep_msg_tools.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <errno.h>
#include <stdio.h>
#include <string.h>
diff --git a/pceplib/pcep_session_logic.c b/pceplib/pcep_session_logic.c
index 52655914c6..2ec2fd72a8 100644
--- a/pceplib/pcep_session_logic.c
+++ b/pceplib/pcep_session_logic.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <errno.h>
#include <limits.h>
#include <pthread.h>
diff --git a/pceplib/pcep_session_logic_counters.c b/pceplib/pcep_session_logic_counters.c
index a6bd41b4f1..fceb15af76 100644
--- a/pceplib/pcep_session_logic_counters.c
+++ b/pceplib/pcep_session_logic_counters.c
@@ -25,6 +25,10 @@
* PCEP session logic counters configuration.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <time.h>
diff --git a/pceplib/pcep_session_logic_loop.c b/pceplib/pcep_session_logic_loop.c
index 269aa1e07e..4b855c06cd 100644
--- a/pceplib/pcep_session_logic_loop.c
+++ b/pceplib/pcep_session_logic_loop.c
@@ -20,6 +20,10 @@
*
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <pthread.h>
#include <stdbool.h>
#include <stdio.h>
diff --git a/pceplib/pcep_session_logic_states.c b/pceplib/pcep_session_logic_states.c
index 3beceefad0..3e9c701a62 100644
--- a/pceplib/pcep_session_logic_states.c
+++ b/pceplib/pcep_session_logic_states.c
@@ -20,6 +20,10 @@
*
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <pthread.h>
#include <stdbool.h>
#include <stdio.h>
diff --git a/pceplib/pcep_socket_comm_loop.c b/pceplib/pcep_socket_comm_loop.c
index d58409c4f3..d9a6b9ae48 100644
--- a/pceplib/pcep_socket_comm_loop.c
+++ b/pceplib/pcep_socket_comm_loop.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <errno.h>
#include <stdbool.h>
#include <stddef.h>
diff --git a/pceplib/pcep_socket_comm_mock.c b/pceplib/pcep_socket_comm_mock.c
index 069d0cf998..7a9511e315 100644
--- a/pceplib/pcep_socket_comm_mock.c
+++ b/pceplib/pcep_socket_comm_mock.c
@@ -27,6 +27,10 @@
* created.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <netinet/in.h>
#include <stdbool.h>
#include <stdlib.h>
diff --git a/pceplib/pcep_timers.c b/pceplib/pcep_timers.c
index d0a2349d05..4c06d2b3f7 100644
--- a/pceplib/pcep_timers.c
+++ b/pceplib/pcep_timers.c
@@ -25,6 +25,10 @@
* Implementation of public API timer functions.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <limits.h>
#include <pthread.h>
#include <stddef.h>
diff --git a/pceplib/pcep_timers_event_loop.c b/pceplib/pcep_timers_event_loop.c
index 932a53eb2a..8984496717 100644
--- a/pceplib/pcep_timers_event_loop.c
+++ b/pceplib/pcep_timers_event_loop.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <errno.h>
#include <stddef.h>
#include <stdbool.h>
diff --git a/pceplib/pcep_utils_double_linked_list.c b/pceplib/pcep_utils_double_linked_list.c
index acdcee0598..696e46632a 100644
--- a/pceplib/pcep_utils_double_linked_list.c
+++ b/pceplib/pcep_utils_double_linked_list.c
@@ -20,6 +20,10 @@
*
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stddef.h>
#include <string.h>
diff --git a/pceplib/pcep_utils_logging.c b/pceplib/pcep_utils_logging.c
index 65e1abbc03..0286c23078 100644
--- a/pceplib/pcep_utils_logging.c
+++ b/pceplib/pcep_utils_logging.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdarg.h>
#include <stdio.h>
#include "pcep_utils_logging.h"
diff --git a/pceplib/pcep_utils_memory.c b/pceplib/pcep_utils_memory.c
index 7362e3433b..c564705f66 100644
--- a/pceplib/pcep_utils_memory.c
+++ b/pceplib/pcep_utils_memory.c
@@ -20,6 +20,10 @@
*
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
#include <string.h>
diff --git a/pceplib/pcep_utils_ordered_list.c b/pceplib/pcep_utils_ordered_list.c
index f5c7f70240..81eb614494 100644
--- a/pceplib/pcep_utils_ordered_list.c
+++ b/pceplib/pcep_utils_ordered_list.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <string.h>
diff --git a/pceplib/pcep_utils_queue.c b/pceplib/pcep_utils_queue.c
index e8c3f2be0e..627533d01b 100644
--- a/pceplib/pcep_utils_queue.c
+++ b/pceplib/pcep_utils_queue.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
diff --git a/pceplib/test/pcep_msg_messages_test.c b/pceplib/test/pcep_msg_messages_test.c
index b8984a42bc..6ae449acd1 100644
--- a/pceplib/test/pcep_msg_messages_test.c
+++ b/pceplib/test/pcep_msg_messages_test.c
@@ -21,7 +21,12 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
+#include <assert.h>
#include <CUnit/CUnit.h>
@@ -75,13 +80,16 @@ void test_pcep_msg_create_open()
pcep_msg_create_open(keepalive, deadtimer, sid);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 1);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ pcep_object_get_length(PCEP_OBJ_CLASS_OPEN,
PCEP_OBJ_TYPE_OPEN));
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_OPEN);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -118,6 +126,7 @@ void test_pcep_msg_create_request()
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 2);
@@ -126,6 +135,7 @@ void test_pcep_msg_create_request()
MESSAGE_HEADER_LENGTH
+ pcep_object_get_length_by_hdr(&rp_obj->header)
+ pcep_object_get_length_by_hdr(&ipv4_obj->header));
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREQ);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -140,14 +150,17 @@ void test_pcep_msg_create_request()
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 2);
CU_ASSERT_EQUAL(
message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ pcep_object_get_length_by_hdr(&rp_obj->header)
+ pcep_object_get_length_by_hdr(&ipv6_obj->header));
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREQ);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -165,8 +178,10 @@ void test_pcep_msg_create_request()
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 3);
CU_ASSERT_EQUAL(
message->encoded_message_length,
@@ -175,6 +190,7 @@ void test_pcep_msg_create_request()
+ pcep_object_get_length_by_hdr(&ipv4_obj->header)
+ pcep_object_get_length_by_hdr(
&bandwidth_obj->header));
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREQ);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -199,13 +215,16 @@ void test_pcep_msg_create_reply_nopath()
struct pcep_message *message = pcep_msg_create_reply(rp_obj, obj_list);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 2);
CU_ASSERT_EQUAL(message->encoded_message_length,
(MESSAGE_HEADER_LENGTH
+ pcep_object_get_length_by_hdr(&rp_obj->header)
+ pcep_object_get_length_by_hdr(&nopath_obj->header)));
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREP);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -220,10 +239,12 @@ void test_pcep_msg_create_reply()
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 0);
CU_ASSERT_EQUAL(message->encoded_message_length, MESSAGE_HEADER_LENGTH);
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREP);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -245,6 +266,7 @@ void test_pcep_msg_create_reply()
pcep_encode_message(message, versioning);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 2);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
@@ -266,13 +288,16 @@ void test_pcep_msg_create_close()
struct pcep_message *message = pcep_msg_create_close(reason);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 1);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ pcep_object_get_length(PCEP_OBJ_CLASS_CLOSE,
PCEP_OBJ_TYPE_CLOSE));
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_CLOSE);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -281,6 +306,7 @@ void test_pcep_msg_create_close()
* are verified in pcep-objects-test.c */
struct pcep_object_close *close_obj =
(struct pcep_object_close *)message->obj_list->head->data;
+ assert(close_obj != NULL);
CU_ASSERT_EQUAL(close_obj->header.object_class, PCEP_OBJ_CLASS_CLOSE);
CU_ASSERT_EQUAL(close_obj->header.object_type, PCEP_OBJ_TYPE_CLOSE);
CU_ASSERT_EQUAL(close_obj->reason, reason);
@@ -297,13 +323,16 @@ void test_pcep_msg_create_error()
pcep_msg_create_error(error_type, error_value);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 1);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ pcep_object_get_length(PCEP_OBJ_CLASS_ERROR,
PCEP_OBJ_TYPE_ERROR));
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_ERROR);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -326,10 +355,13 @@ void test_pcep_msg_create_keepalive()
struct pcep_message *message = pcep_msg_create_keepalive();
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 0);
CU_ASSERT_EQUAL(message->encoded_message_length, MESSAGE_HEADER_LENGTH);
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_KEEPALIVE);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -351,12 +383,15 @@ void test_pcep_msg_create_report()
message = pcep_msg_create_report(obj_list);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 1);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ lsp->header.encoded_object_length);
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_REPORT);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -401,14 +436,17 @@ void test_pcep_msg_create_update()
message = pcep_msg_create_update(obj_list);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 3);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ srp->header.encoded_object_length
+ lsp->header.encoded_object_length
+ ero->header.encoded_object_length);
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_UPDATE);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -450,14 +488,17 @@ void test_pcep_msg_create_initiate()
message = pcep_msg_create_initiate(obj_list);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->msg_header);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 3);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ srp->header.encoded_object_length
+ lsp->header.encoded_object_length
+ ero->header.encoded_object_length);
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_INITIATE);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -478,11 +519,14 @@ void test_pcep_msg_create_notify(void)
message = pcep_msg_create_notify(notify_obj, NULL);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 1);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
+ notify_obj->header.encoded_object_length);
+ assert(message->msg_header != NULL);
CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCNOTF);
CU_ASSERT_EQUAL(message->msg_header->pcep_version,
PCEP_MESSAGE_HEADER_VERSION);
@@ -500,7 +544,9 @@ void test_pcep_msg_create_notify(void)
message = pcep_msg_create_notify(notify_obj, obj_list);
CU_ASSERT_PTR_NOT_NULL(message);
pcep_encode_message(message, versioning);
+ assert(message != NULL);
CU_ASSERT_PTR_NOT_NULL(message->obj_list);
+ assert(message->obj_list != NULL);
CU_ASSERT_EQUAL(message->obj_list->num_entries, 2);
CU_ASSERT_EQUAL(message->encoded_message_length,
MESSAGE_HEADER_LENGTH
diff --git a/pceplib/test/pcep_msg_messages_tests.c b/pceplib/test/pcep_msg_messages_tests.c
index bd85a16530..f24a797f77 100644
--- a/pceplib/test/pcep_msg_messages_tests.c
+++ b/pceplib/test/pcep_msg_messages_tests.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <CUnit/Basic.h>
#include <CUnit/CUnit.h>
#include <CUnit/TestDB.h>
diff --git a/pceplib/test/pcep_msg_object_error_types_test.c b/pceplib/test/pcep_msg_object_error_types_test.c
index 7275eaf098..b1463751d6 100644
--- a/pceplib/test/pcep_msg_object_error_types_test.c
+++ b/pceplib/test/pcep_msg_object_error_types_test.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdio.h>
#include <CUnit/CUnit.h>
diff --git a/pceplib/test/pcep_msg_objects_test.c b/pceplib/test/pcep_msg_objects_test.c
index a4c069945c..a92bbe4896 100644
--- a/pceplib/test/pcep_msg_objects_test.c
+++ b/pceplib/test/pcep_msg_objects_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <stdlib.h>
#include <CUnit/CUnit.h>
@@ -124,6 +129,7 @@ static void verify_pcep_obj_header2(uint8_t obj_class, uint8_t obj_type,
static void verify_pcep_obj_header(uint8_t obj_class, uint8_t obj_type,
struct pcep_object_header *obj_hdr)
{
+ assert(obj_hdr != NULL);
verify_pcep_obj_header2(obj_class, obj_type,
pcep_object_get_length_by_hdr(obj_hdr),
obj_hdr->encoded_object);
@@ -168,12 +174,14 @@ void test_pcep_obj_create_open_with_tlvs()
pcep_obj_create_open(keepalive, deadtimer, sid, tlv_list);
CU_ASSERT_PTR_NOT_NULL(open);
+ assert(open != NULL);
pcep_encode_object(&open->header, versioning, object_buf);
verify_pcep_obj_header2(PCEP_OBJ_CLASS_OPEN, PCEP_OBJ_TYPE_OPEN,
pcep_object_get_length_by_hdr(&open->header)
+ sizeof(uint32_t) * 2,
open->header.encoded_object);
CU_ASSERT_PTR_NOT_NULL(open->header.tlv_list);
+ assert(open->header.tlv_list != NULL);
CU_ASSERT_EQUAL(open->header.tlv_list->num_entries, 1);
CU_ASSERT_EQUAL(open->header.encoded_object[4],
@@ -236,6 +244,8 @@ void test_pcep_obj_create_nopath()
CU_ASSERT_EQUAL(nopath->header.encoded_object[7], 0);
/* Verify the TLV */
+ assert(nopath != NULL);
+ assert(nopath->header.tlv_list != NULL);
CU_ASSERT_PTR_NOT_NULL(nopath->header.tlv_list);
struct pcep_object_tlv_nopath_vector *tlv =
(struct pcep_object_tlv_nopath_vector *)
@@ -265,6 +275,7 @@ void test_pcep_obj_create_association_ipv4()
false, PCEP_ASSOCIATION_TYPE_SR_POLICY_ASSOCIATION_TYPE,
all_assoc_groups, src);
CU_ASSERT_PTR_NOT_NULL(assoc);
+ assert(assoc != NULL);
CU_ASSERT_EQUAL(assoc->association_type,
PCEP_ASSOCIATION_TYPE_SR_POLICY_ASSOCIATION_TYPE);
CU_ASSERT_EQUAL(assoc->association_id, all_assoc_groups);
@@ -287,6 +298,7 @@ void test_pcep_obj_create_association_ipv6()
false, PCEP_ASSOCIATION_TYPE_SR_POLICY_ASSOCIATION_TYPE,
all_assoc_groups, src);
CU_ASSERT_PTR_NOT_NULL(assoc);
+ assert(assoc != NULL);
CU_ASSERT_EQUAL(assoc->association_type,
PCEP_ASSOCIATION_TYPE_SR_POLICY_ASSOCIATION_TYPE);
CU_ASSERT_EQUAL(assoc->association_id, all_assoc_groups);
@@ -462,6 +474,7 @@ void test_pcep_obj_create_svec()
svec = pcep_obj_create_svec(true, true, true, id_list);
CU_ASSERT_PTR_NOT_NULL(svec);
+ assert(svec != NULL);
pcep_encode_object(&svec->header, versioning, object_buf);
verify_pcep_obj_header2(PCEP_OBJ_CLASS_SVEC, PCEP_OBJ_TYPE_SVEC,
(OBJECT_HEADER_LENGTH + sizeof(uint32_t) * 2),
@@ -610,6 +623,7 @@ static void test_pcep_obj_create_object_common(ro_func func_to_test,
struct pcep_object_ro *ero = func_to_test(NULL);
CU_ASSERT_PTR_NOT_NULL(ero);
+ assert(ero != NULL);
pcep_encode_object(&ero->header, versioning, object_buf);
verify_pcep_obj_header2(object_class, object_type, OBJECT_HEADER_LENGTH,
ero->header.encoded_object);
@@ -618,6 +632,7 @@ static void test_pcep_obj_create_object_common(ro_func func_to_test,
reset_objects_buffer();
ero = func_to_test(ero_list);
CU_ASSERT_PTR_NOT_NULL(ero);
+ assert(ero != NULL);
pcep_encode_object(&ero->header, versioning, object_buf);
verify_pcep_obj_header2(object_class, object_type, OBJECT_HEADER_LENGTH,
ero->header.encoded_object);
@@ -630,6 +645,7 @@ static void test_pcep_obj_create_object_common(ro_func func_to_test,
dll_append(ero_list, ro_subobj);
ero = func_to_test(ero_list);
CU_ASSERT_PTR_NOT_NULL(ero);
+ assert(ero != NULL);
pcep_encode_object(&ero->header, versioning, object_buf);
/* 4 bytes for obj header +
* 2 bytes for ro_subobj header +
@@ -913,6 +929,7 @@ void test_pcep_obj_create_ro_subobj_sr_ipv4_node()
sr = pcep_obj_create_ro_subobj_sr_ipv4_node(true, true, false, false,
sid, &ipv4_node_id);
CU_ASSERT_PTR_NOT_NULL(sr);
+ assert(sr != NULL);
struct pcep_object_ro *ro = encode_ro_subobj(&sr->ro_subobj);
verify_pcep_obj_ro_sr_header(ro, &sr->ro_subobj,
PCEP_SR_SUBOBJ_NAI_IPV4_NODE, true,
@@ -932,10 +949,12 @@ void test_pcep_obj_create_ro_subobj_sr_ipv4_node()
sr = pcep_obj_create_ro_subobj_sr_ipv4_node(false, false, true, true,
sid, &ipv4_node_id);
CU_ASSERT_PTR_NOT_NULL(sr);
+ assert(sr != NULL);
ro = encode_ro_subobj(&sr->ro_subobj);
verify_pcep_obj_ro_sr_header(ro, &sr->ro_subobj,
PCEP_SR_SUBOBJ_NAI_IPV4_NODE, false,
sizeof(uint32_t) * 4);
+ assert(ro != NULL);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & OBJECT_SUBOBJ_SR_FLAG_C);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & OBJECT_SUBOBJ_SR_FLAG_M);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_S);
@@ -1036,6 +1055,7 @@ void test_pcep_obj_create_ro_subobj_sr_ipv4_adj()
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_F);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_C);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_M);
+ assert(sr != NULL);
CU_ASSERT_EQUAL(sr->sid, 0);
uint32_t *uint32_ptr = (uint32_t *)(ro->header.encoded_object + 8);
CU_ASSERT_EQUAL(uint32_ptr[0], local_ipv4.s_addr);
@@ -1090,6 +1110,7 @@ void test_pcep_obj_create_ro_subobj_sr_ipv6_adj()
sr = pcep_obj_create_ro_subobj_sr_ipv6_adj(true, true, true, true, sid,
&local_ipv6, &remote_ipv6);
CU_ASSERT_PTR_NOT_NULL(sr);
+ assert(sr != NULL);
struct pcep_object_ro *ro = encode_ro_subobj(&sr->ro_subobj);
verify_pcep_obj_ro_sr_header(ro, &sr->ro_subobj,
PCEP_SR_SUBOBJ_NAI_IPV6_ADJACENCY, true,
@@ -1164,6 +1185,7 @@ void test_pcep_obj_create_ro_subobj_sr_unnumbered_ipv4_adj()
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_F);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_C);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_M);
+ assert(sr != NULL);
CU_ASSERT_EQUAL(sr->sid, 0);
uint32_t *uint32_ptr = (uint32_t *)(ro->header.encoded_object + 8);
CU_ASSERT_EQUAL(uint32_ptr[0], local_node_id);
@@ -1240,6 +1262,7 @@ void test_pcep_obj_create_ro_subobj_sr_linklocal_ipv6_adj()
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_F);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_C);
CU_ASSERT_TRUE(ro->header.encoded_object[7] & ~OBJECT_SUBOBJ_SR_FLAG_M);
+ assert(sr != NULL);
CU_ASSERT_EQUAL(sr->sid, 0);
uint32_t *uint32_ptr = (uint32_t *)(ro->header.encoded_object + 8);
CU_ASSERT_EQUAL(uint32_ptr[0], local_ipv6.__in6_u.__u6_addr32[0]);
diff --git a/pceplib/test/pcep_msg_tlvs_test.c b/pceplib/test/pcep_msg_tlvs_test.c
index 57e1d16e91..888925fdbf 100644
--- a/pceplib/test/pcep_msg_tlvs_test.c
+++ b/pceplib/test/pcep_msg_tlvs_test.c
@@ -30,6 +30,7 @@
#else
#include <endian.h>
#endif /* __FreeBSD__ */
+#include <assert.h>
#include <stdlib.h>
#include <CUnit/CUnit.h>
@@ -88,6 +89,7 @@ void test_pcep_tlv_create_stateful_pce_capability()
pcep_tlv_create_stateful_pce_capability(true, true, true, true,
true, true);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type,
@@ -126,11 +128,13 @@ void test_pcep_tlv_create_speaker_entity_id()
dll_append(list, speaker_entity);
tlv = pcep_tlv_create_speaker_entity_id(list);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_SPEAKER_ENTITY_ID);
CU_ASSERT_EQUAL(tlv->header.encoded_tlv_length, sizeof(uint32_t));
CU_ASSERT_PTR_NOT_NULL(tlv->speaker_entity_id_list);
+ assert(tlv->speaker_entity_id_list != NULL);
CU_ASSERT_EQUAL(tlv->speaker_entity_id_list->num_entries, 1);
uint32_t *uint32_ptr = (uint32_t *)tlv->header.encoded_tlv;
CU_ASSERT_EQUAL(uint32_ptr[1], htonl(*speaker_entity));
@@ -144,6 +148,7 @@ void test_pcep_tlv_create_lsp_db_version()
struct pcep_object_tlv_lsp_db_version *tlv =
pcep_tlv_create_lsp_db_version(lsp_db_version);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_LSP_DB_VERSION);
@@ -162,6 +167,7 @@ void test_pcep_tlv_create_path_setup_type()
struct pcep_object_tlv_path_setup_type *tlv =
pcep_tlv_create_path_setup_type(pst);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE);
CU_ASSERT_EQUAL(tlv->header.encoded_tlv_length, sizeof(uint32_t));
@@ -231,6 +237,7 @@ void test_pcep_tlv_create_path_setup_type_capability()
PCEP_OBJ_TLV_TYPE_PATH_SETUP_TYPE_CAPABILITY);
CU_ASSERT_EQUAL(tlv->header.encoded_tlv_length, sizeof(uint32_t) * 2);
CU_ASSERT_PTR_NOT_NULL(tlv->pst_list);
+ assert(tlv != NULL);
CU_ASSERT_EQUAL(tlv->pst_list->num_entries, 3);
uint32_t *uint32_ptr = (uint32_t *)tlv->header.encoded_tlv;
CU_ASSERT_EQUAL(uint32_ptr[1], htonl(0x00000003));
@@ -251,6 +258,7 @@ void test_pcep_tlv_create_path_setup_type_capability()
tlv = pcep_tlv_create_path_setup_type_capability(pst_list,
sub_tlv_list);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type,
@@ -283,6 +291,7 @@ void test_pcep_tlv_create_sr_pce_capability()
struct pcep_object_tlv_sr_pce_capability *tlv =
pcep_tlv_create_sr_pce_capability(true, true, 8);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_SR_PCE_CAPABILITY);
@@ -305,6 +314,7 @@ void test_pcep_tlv_create_symbolic_path_name()
struct pcep_object_tlv_symbolic_path_name *tlv =
pcep_tlv_create_symbolic_path_name(path_name, path_name_length);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME);
@@ -325,6 +335,8 @@ void test_pcep_tlv_create_symbolic_path_name()
reset_tlv_buffer();
tlv = pcep_tlv_create_symbolic_path_name(path_name, 3);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ printf("El tlv es %p", tlv);
+ assert(tlv != NULL); // crash si FALSE
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_SYMBOLIC_PATH_NAME);
CU_ASSERT_EQUAL(tlv->header.encoded_tlv_length, 3);
@@ -359,6 +371,7 @@ void test_pcep_tlv_create_ipv4_lsp_identifiers()
tlv = pcep_tlv_create_ipv4_lsp_identifiers(
NULL, NULL, lsp_id, tunnel_id, &extended_tunnel_id);
CU_ASSERT_PTR_NULL(tlv);
+ assert(tlv == NULL);
tlv = pcep_tlv_create_ipv4_lsp_identifiers(&sender_ip, &endpoint_ip,
lsp_id, tunnel_id,
@@ -381,6 +394,7 @@ void test_pcep_tlv_create_ipv4_lsp_identifiers()
tlv = pcep_tlv_create_ipv4_lsp_identifiers(&sender_ip, &endpoint_ip,
lsp_id, tunnel_id, NULL);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type,
@@ -424,11 +438,13 @@ void test_pcep_tlv_create_ipv6_lsp_identifiers()
NULL, NULL, lsp_id, tunnel_id,
(struct in6_addr *)&extended_tunnel_id);
CU_ASSERT_PTR_NULL(tlv);
+ assert(tlv == NULL);
tlv = pcep_tlv_create_ipv6_lsp_identifiers(
&sender_ip, &endpoint_ip, lsp_id, tunnel_id,
(struct in6_addr *)&extended_tunnel_id);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type,
@@ -449,6 +465,7 @@ void test_pcep_tlv_create_srpag_pol_id_ipv4()
struct pcep_object_tlv_srpag_pol_id *tlv =
pcep_tlv_create_srpag_pol_id_ipv4(color, (void *)&src);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, (PCEP_OBJ_TLV_TYPE_SRPOLICY_POL_ID));
@@ -506,6 +523,7 @@ void test_pcep_tlv_create_srpag_pol_name()
struct pcep_object_tlv_srpag_pol_name *tlv =
pcep_tlv_create_srpag_pol_name(pol_name, strlen(pol_name));
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type,
@@ -559,6 +577,7 @@ void test_pcep_tlv_create_srpag_cp_pref()
struct pcep_object_tlv_srpag_cp_pref *tlv =
pcep_tlv_create_srpag_cp_pref(preference_default);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type,
@@ -586,6 +605,7 @@ void test_pcep_tlv_create_lsp_error_code()
pcep_tlv_create_lsp_error_code(
PCEP_TLV_LSP_ERROR_CODE_RSVP_SIGNALING_ERROR);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_LSP_ERROR_CODE);
@@ -612,6 +632,7 @@ void test_pcep_tlv_create_rsvp_ipv4_error_spec()
tlv = pcep_tlv_create_rsvp_ipv4_error_spec(&error_node_ip, error_code,
error_value);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_RSVP_ERROR_SPEC);
@@ -635,6 +656,7 @@ void test_pcep_tlv_create_rsvp_ipv6_error_spec()
tlv = pcep_tlv_create_rsvp_ipv6_error_spec(&error_node_ip, error_code,
error_value);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_RSVP_ERROR_SPEC);
@@ -651,6 +673,7 @@ void test_pcep_tlv_create_nopath_vector()
struct pcep_object_tlv_vendor_info *tlv = pcep_tlv_create_vendor_info(
enterprise_number, enterprise_specific_info);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, PCEP_OBJ_TLV_TYPE_VENDOR_INFO);
@@ -670,6 +693,7 @@ void test_pcep_tlv_create_arbitrary()
struct pcep_object_tlv_arbitrary *tlv = pcep_tlv_create_tlv_arbitrary(
data, data_length, tlv_id_unknown);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, tlv_id_unknown);
@@ -688,6 +712,7 @@ void test_pcep_tlv_create_arbitrary()
reset_tlv_buffer();
tlv = pcep_tlv_create_tlv_arbitrary(data, 3, tlv_id_unknown);
CU_ASSERT_PTR_NOT_NULL(tlv);
+ assert(tlv != NULL);
pcep_encode_tlv(&tlv->header, versioning, tlv_buf);
CU_ASSERT_EQUAL(tlv->header.type, tlv_id_unknown);
CU_ASSERT_EQUAL(tlv->header.encoded_tlv_length, 3);
diff --git a/pceplib/test/pcep_msg_tools_test.c b/pceplib/test/pcep_msg_tools_test.c
index ff5fc62390..5a7644b21a 100644
--- a/pceplib/test/pcep_msg_tools_test.c
+++ b/pceplib/test/pcep_msg_tools_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
@@ -209,6 +214,7 @@ void test_pcep_msg_read_pcep_initiate()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -270,6 +276,7 @@ void test_pcep_msg_read_pcep_initiate()
double_linked_list *ero_subobj_list =
((struct pcep_object_ro *)obj_hdr)->sub_objects;
CU_ASSERT_PTR_NOT_NULL(ero_subobj_list);
+ assert(ero_subobj_list != NULL);
CU_ASSERT_EQUAL(ero_subobj_list->num_entries, 2);
double_linked_list_node *subobj_node = ero_subobj_list->head;
struct pcep_object_ro_subobj *subobj_hdr =
@@ -308,6 +315,7 @@ void test_pcep_msg_read_pcep_initiate2()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -363,6 +371,7 @@ void test_pcep_msg_read_pcep_initiate2()
double_linked_list *ero_subobj_list =
((struct pcep_object_ro *)obj_hdr)->sub_objects;
CU_ASSERT_PTR_NOT_NULL(ero_subobj_list);
+ assert(ero_subobj_list != NULL);
CU_ASSERT_EQUAL(ero_subobj_list->num_entries, 0);
double_linked_list_node *subobj_node = ero_subobj_list->head;
CU_ASSERT_PTR_NULL(subobj_node);
@@ -395,6 +404,7 @@ void test_pcep_msg_read_pcep_open()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -439,6 +449,7 @@ void test_pcep_msg_read_pcep_update()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -488,6 +499,7 @@ void test_pcep_msg_read_pcep_update()
double_linked_list *ero_subobj_list =
((struct pcep_object_ro *)obj_hdr)->sub_objects;
CU_ASSERT_PTR_NOT_NULL(ero_subobj_list);
+ assert(ero_subobj_list != NULL);
CU_ASSERT_EQUAL(ero_subobj_list->num_entries, 0);
double_linked_list_node *subobj_node = ero_subobj_list->head;
CU_ASSERT_PTR_NULL(subobj_node);
@@ -521,6 +533,7 @@ void test_pcep_msg_read_pcep_open_initiate()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 2);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -550,6 +563,7 @@ void test_pcep_msg_read_pcep_open_cisco_pce()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -569,6 +583,7 @@ void test_pcep_msg_read_pcep_open_cisco_pce()
CU_ASSERT_EQUAL(open->open_sid, 0);
CU_ASSERT_EQUAL(open->open_version, 1);
CU_ASSERT_PTR_NOT_NULL(open->header.tlv_list);
+ assert(open->header.tlv_list != NULL);
CU_ASSERT_EQUAL(open->header.tlv_list->num_entries, 2);
/* Stateful PCE Capability TLV */
@@ -612,6 +627,7 @@ void test_pcep_msg_read_pcep_update_cisco_pce()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -627,6 +643,7 @@ void test_pcep_msg_read_pcep_update_cisco_pce()
CU_ASSERT_EQUAL(srp->header.object_type, PCEP_OBJ_TYPE_SRP);
CU_ASSERT_EQUAL(srp->header.encoded_object_length, 20);
CU_ASSERT_PTR_NOT_NULL(srp->header.tlv_list);
+ assert(srp->header.tlv_list != NULL);
CU_ASSERT_EQUAL(srp->header.tlv_list->num_entries, 1);
CU_ASSERT_EQUAL(srp->srp_id_number, 1);
CU_ASSERT_FALSE(srp->flag_lsp_remove);
@@ -647,6 +664,7 @@ void test_pcep_msg_read_pcep_update_cisco_pce()
CU_ASSERT_EQUAL(lsp->header.object_type, PCEP_OBJ_TYPE_LSP);
CU_ASSERT_EQUAL(lsp->header.encoded_object_length, 24);
CU_ASSERT_PTR_NOT_NULL(lsp->header.tlv_list);
+ assert(lsp->header.tlv_list != NULL);
CU_ASSERT_EQUAL(lsp->header.tlv_list->num_entries, 1);
CU_ASSERT_EQUAL(lsp->plsp_id, 524303);
CU_ASSERT_EQUAL(lsp->operational_status, PCEP_LSP_OPERATIONAL_DOWN);
@@ -673,6 +691,7 @@ void test_pcep_msg_read_pcep_update_cisco_pce()
CU_ASSERT_EQUAL(ero->header.encoded_object_length, 40);
CU_ASSERT_PTR_NULL(ero->header.tlv_list);
CU_ASSERT_PTR_NOT_NULL(ero->sub_objects);
+ assert(ero->sub_objects != NULL);
CU_ASSERT_EQUAL(ero->sub_objects->num_entries, 3);
/* ERO Subobjects */
@@ -753,6 +772,7 @@ void test_pcep_msg_read_pcep_report_cisco_pcc()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -768,6 +788,7 @@ void test_pcep_msg_read_pcep_report_cisco_pcc()
CU_ASSERT_EQUAL(srp->header.object_type, PCEP_OBJ_TYPE_SRP);
CU_ASSERT_EQUAL(srp->header.encoded_object_length, 20);
CU_ASSERT_PTR_NOT_NULL(srp->header.tlv_list);
+ assert(srp->header.tlv_list != NULL);
CU_ASSERT_EQUAL(srp->header.tlv_list->num_entries, 1);
CU_ASSERT_EQUAL(srp->srp_id_number, 0);
CU_ASSERT_FALSE(srp->flag_lsp_remove);
@@ -834,6 +855,7 @@ void test_pcep_msg_read_pcep_report_cisco_pcc()
CU_ASSERT_EQUAL(ero->header.encoded_object_length, 4);
CU_ASSERT_PTR_NULL(ero->header.tlv_list);
CU_ASSERT_PTR_NOT_NULL(ero->sub_objects);
+ assert(ero->sub_objects != NULL);
CU_ASSERT_EQUAL(ero->sub_objects->num_entries, 0);
/* LSPA object */
@@ -912,6 +934,7 @@ void test_pcep_msg_read_pcep_initiate_cisco_pcc()
}
double_linked_list *msg_list = pcep_msg_read(fd);
CU_ASSERT_PTR_NOT_NULL(msg_list);
+ assert(msg_list != NULL);
CU_ASSERT_EQUAL(msg_list->num_entries, 1);
struct pcep_message *msg = (struct pcep_message *)msg_list->head->data;
@@ -927,6 +950,7 @@ void test_pcep_msg_read_pcep_initiate_cisco_pcc()
CU_ASSERT_EQUAL(srp->header.object_type, PCEP_OBJ_TYPE_SRP);
CU_ASSERT_EQUAL(srp->header.encoded_object_length, 20);
CU_ASSERT_PTR_NOT_NULL(srp->header.tlv_list);
+ assert(srp->header.tlv_list != NULL);
CU_ASSERT_EQUAL(srp->header.tlv_list->num_entries, 1);
CU_ASSERT_EQUAL(srp->srp_id_number, 1);
CU_ASSERT_FALSE(srp->flag_lsp_remove);
@@ -938,6 +962,7 @@ void test_pcep_msg_read_pcep_initiate_cisco_pcc()
CU_ASSERT_EQUAL(lsp->header.object_type, PCEP_OBJ_TYPE_LSP);
CU_ASSERT_EQUAL(lsp->header.encoded_object_length, 48);
CU_ASSERT_PTR_NOT_NULL(lsp->header.tlv_list);
+ assert(lsp->header.tlv_list != NULL);
CU_ASSERT_EQUAL(lsp->header.tlv_list->num_entries, 2);
CU_ASSERT_EQUAL(lsp->plsp_id, 0);
CU_ASSERT_EQUAL(lsp->operational_status, PCEP_LSP_OPERATIONAL_DOWN);
@@ -984,7 +1009,9 @@ void test_pcep_msg_read_pcep_initiate_cisco_pcc()
PCEP_OBJ_TYPE_SWITCH_LAYER);
CU_ASSERT_EQUAL(switch_layer->header.encoded_object_length, 8);
CU_ASSERT_PTR_NULL(switch_layer->header.tlv_list);
+ assert(switch_layer->header.tlv_list == NULL);
CU_ASSERT_PTR_NOT_NULL(switch_layer->switch_layer_rows);
+ assert(switch_layer->switch_layer_rows != NULL);
CU_ASSERT_EQUAL(switch_layer->switch_layer_rows->num_entries, 1);
struct pcep_object_switch_layer_row *switch_layer_row =
(struct pcep_object_switch_layer_row *)
diff --git a/pceplib/test/pcep_pcc_api_test.c b/pceplib/test/pcep_pcc_api_test.c
index c227dc1a3d..9106671873 100644
--- a/pceplib/test/pcep_pcc_api_test.c
+++ b/pceplib/test/pcep_pcc_api_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <netdb.h> // gethostbyname
#include <pthread.h>
#include <stdlib.h>
@@ -104,6 +109,8 @@ void test_connect_pce()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
+ assert(open_msg->msg_header != NULL);
CU_ASSERT_EQUAL(open_msg->msg_header->type, PCEP_TYPE_OPEN);
pcep_msg_free_message(open_msg);
@@ -130,6 +137,7 @@ void test_connect_pce_ipv6()
pcep_session *session = connect_pce_ipv6(config, &dest_address);
CU_ASSERT_PTR_NOT_NULL(session);
+ assert(session != NULL);
CU_ASSERT_TRUE(session->socket_comm_session->is_ipv6);
CU_ASSERT_EQUAL(mock_info->sent_message_list->num_entries, 1);
/* What gets saved in the mock is the msg byte buffer. The msg struct
@@ -140,6 +148,7 @@ void test_connect_pce_ipv6()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
CU_ASSERT_EQUAL(open_msg->msg_header->type, PCEP_TYPE_OPEN);
pcep_msg_free_message(open_msg);
@@ -171,6 +180,8 @@ void test_connect_pce_with_src_ip()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
+ assert(open_msg->msg_header != NULL);
CU_ASSERT_EQUAL(open_msg->msg_header->type, PCEP_TYPE_OPEN);
pcep_msg_free_message(open_msg);
@@ -203,6 +214,7 @@ void test_disconnect_pce()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(msg);
+ assert(msg != NULL);
CU_ASSERT_EQUAL(msg->msg_header->type, PCEP_TYPE_OPEN);
pcep_msg_free_message(msg);
pceplib_free(PCEPLIB_MESSAGES, encoded_msg);
@@ -212,6 +224,8 @@ void test_disconnect_pce()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(msg);
+ assert(msg != NULL);
+ assert(msg->msg_header != NULL);
CU_ASSERT_EQUAL(msg->msg_header->type, PCEP_TYPE_CLOSE);
pcep_msg_free_message(msg);
diff --git a/pceplib/test/pcep_pcc_api_tests.c b/pceplib/test/pcep_pcc_api_tests.c
index 04895d6340..5d9e92c1d3 100644
--- a/pceplib/test/pcep_pcc_api_tests.c
+++ b/pceplib/test/pcep_pcc_api_tests.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <CUnit/Basic.h>
#include <CUnit/CUnit.h>
#include <CUnit/TestDB.h>
diff --git a/pceplib/test/pcep_session_logic_loop_test.c b/pceplib/test/pcep_session_logic_loop_test.c
index 3a40f59bb9..4dfed7321f 100644
--- a/pceplib/test/pcep_session_logic_loop_test.c
+++ b/pceplib/test/pcep_session_logic_loop_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
@@ -157,6 +162,7 @@ void test_session_logic_msg_ready_handler()
pcep_session_event *socket_event = (pcep_session_event *)queue_dequeue(
session_logic_handle_->session_event_queue);
CU_ASSERT_PTR_NOT_NULL(socket_event);
+ assert(socket_event != NULL);
CU_ASSERT_TRUE(socket_event->socket_closed);
pceplib_free(PCEPLIB_INFRA, socket_event);
@@ -175,6 +181,7 @@ void test_session_logic_msg_ready_handler()
socket_event = (pcep_session_event *)queue_dequeue(
session_logic_handle_->session_event_queue);
CU_ASSERT_PTR_NOT_NULL(socket_event);
+ assert(socket_event != NULL);
CU_ASSERT_FALSE(socket_event->socket_closed);
CU_ASSERT_PTR_EQUAL(socket_event->session, &session);
CU_ASSERT_EQUAL(socket_event->expired_timer_id, TIMER_ID_NOT_SET);
@@ -202,6 +209,7 @@ void test_session_logic_conn_except_notifier()
pcep_session_event *socket_event = (pcep_session_event *)queue_dequeue(
session_logic_handle_->session_event_queue);
CU_ASSERT_PTR_NOT_NULL_FATAL(socket_event);
+ assert(socket_event != NULL);
CU_ASSERT_TRUE(socket_event->socket_closed);
CU_ASSERT_PTR_EQUAL(socket_event->session, &session);
CU_ASSERT_EQUAL(socket_event->expired_timer_id, TIMER_ID_NOT_SET);
@@ -226,6 +234,7 @@ void test_session_logic_timer_expire_handler()
pcep_session_event *socket_event = (pcep_session_event *)queue_dequeue(
session_logic_handle_->session_event_queue);
CU_ASSERT_PTR_NOT_NULL_FATAL(socket_event);
+ assert(socket_event != NULL);
CU_ASSERT_FALSE(socket_event->socket_closed);
CU_ASSERT_PTR_EQUAL(socket_event->session, &session);
CU_ASSERT_EQUAL(socket_event->expired_timer_id, 42);
diff --git a/pceplib/test/pcep_session_logic_states_test.c b/pceplib/test/pcep_session_logic_states_test.c
index f75c16e397..e967d74e48 100644
--- a/pceplib/test/pcep_session_logic_states_test.c
+++ b/pceplib/test/pcep_session_logic_states_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <stdlib.h>
#include <string.h>
@@ -390,6 +395,7 @@ void test_handle_socket_comm_event_open()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(msg);
+ assert(msg != NULL);
CU_ASSERT_EQUAL(PCEP_TYPE_ERROR, msg->msg_header->type);
/* Verify the error object */
CU_ASSERT_EQUAL(1, msg->obj_list->num_entries);
@@ -452,6 +458,7 @@ void test_handle_socket_comm_event_open_error()
uint8_t *encoded_msg =
dll_delete_first_node(mock_info->sent_message_list);
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
+ assert(encoded_msg != NULL);
struct pcep_message *open_msg_corrected =
pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg_corrected);
@@ -459,6 +466,7 @@ void test_handle_socket_comm_event_open_error()
(struct pcep_object_open *)pcep_obj_get(
open_msg_corrected->obj_list, PCEP_OBJ_CLASS_OPEN);
CU_ASSERT_PTR_NOT_NULL(open_object_corrected);
+ assert(open_object_corrected != NULL);
/* Verify the Keep-alive and Dead timers have been negotiated */
CU_ASSERT_EQUAL(error_open_object->open_keepalive,
open_object_corrected->open_keepalive);
@@ -592,6 +600,7 @@ void test_handle_socket_comm_event_pcreq()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *error_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(error_msg);
+ assert(error_msg != NULL);
CU_ASSERT_EQUAL(PCEP_TYPE_ERROR, error_msg->msg_header->type);
/* Verify the error object */
CU_ASSERT_EQUAL(1, error_msg->obj_list->num_entries);
@@ -623,6 +632,7 @@ void test_handle_socket_comm_event_report()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *error_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(error_msg);
+ assert(error_msg != NULL);
CU_ASSERT_EQUAL(PCEP_TYPE_ERROR, error_msg->msg_header->type);
/* Verify the error object */
CU_ASSERT_EQUAL(1, error_msg->obj_list->num_entries);
@@ -740,6 +750,7 @@ void test_handle_socket_comm_event_unknown_msg()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(msg);
+ assert(msg != NULL);
CU_ASSERT_EQUAL(PCEP_TYPE_ERROR, msg->msg_header->type);
/* Verify the error object */
CU_ASSERT_EQUAL(1, msg->obj_list->num_entries);
@@ -772,6 +783,7 @@ void test_handle_socket_comm_event_unknown_msg()
/* Verify the error message */
encoded_msg = dll_delete_first_node(mock_info->sent_message_list);
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
+ assert(encoded_msg != NULL);
msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(msg);
CU_ASSERT_EQUAL(PCEP_TYPE_ERROR, msg->msg_header->type);
@@ -789,8 +801,10 @@ void test_handle_socket_comm_event_unknown_msg()
/* Verify the Close message */
encoded_msg = dll_delete_first_node(mock_info->sent_message_list);
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
+ assert(encoded_msg != NULL);
msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(msg);
+ assert(msg != NULL);
CU_ASSERT_EQUAL(PCEP_TYPE_CLOSE, msg->msg_header->type);
/* Verify the error object */
CU_ASSERT_EQUAL(1, msg->obj_list->num_entries);
diff --git a/pceplib/test/pcep_session_logic_test.c b/pceplib/test/pcep_session_logic_test.c
index 66db4fbaea..8339a7a280 100644
--- a/pceplib/test/pcep_session_logic_test.c
+++ b/pceplib/test/pcep_session_logic_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
@@ -130,6 +135,7 @@ void test_create_destroy_pcep_session()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
/* Should be an Open, with no TLVs: length = 12 */
CU_ASSERT_EQUAL(open_msg->msg_header->type, PCEP_TYPE_OPEN);
CU_ASSERT_EQUAL(open_msg->encoded_message_length, 12);
@@ -162,6 +168,7 @@ void test_create_destroy_pcep_session_ipv6()
mock_info->send_message_save_message = true;
session = create_pcep_session_ipv6(&config, &pce_ip);
CU_ASSERT_PTR_NOT_NULL(session);
+ assert(session != NULL);
CU_ASSERT_TRUE(session->socket_comm_session->is_ipv6);
/* What gets saved in the mock is the msg byte buffer. The msg struct
* was deleted when it was sent. Instead of inspecting the msg byte
@@ -171,6 +178,7 @@ void test_create_destroy_pcep_session_ipv6()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
struct pcep_message *open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
/* Should be an Open, with no TLVs: length = 12 */
CU_ASSERT_EQUAL(open_msg->msg_header->type, PCEP_TYPE_OPEN);
CU_ASSERT_EQUAL(open_msg->encoded_message_length, 12);
@@ -211,14 +219,17 @@ void test_create_pcep_session_open_tlvs()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
/* Get and verify the Open Message objects */
CU_ASSERT_PTR_NOT_NULL(open_msg->obj_list);
+ assert(open_msg->obj_list != NULL);
CU_ASSERT_TRUE(open_msg->obj_list->num_entries > 0);
/* Get and verify the Open object */
open_obj = pcep_obj_get(open_msg->obj_list, PCEP_OBJ_CLASS_OPEN);
CU_ASSERT_PTR_NOT_NULL(open_obj);
/* Get and verify the Open object TLVs */
CU_ASSERT_PTR_NOT_NULL(open_obj->tlv_list);
+ assert(open_obj->tlv_list != NULL);
CU_ASSERT_EQUAL(open_obj->tlv_list->num_entries, 1);
CU_ASSERT_EQUAL(((struct pcep_object_tlv_header *)
open_obj->tlv_list->head->data)
@@ -246,12 +257,14 @@ void test_create_pcep_session_open_tlvs()
CU_ASSERT_PTR_NOT_NULL(open_msg);
/* Get and verify the Open Message objects */
CU_ASSERT_PTR_NOT_NULL(open_msg->obj_list);
+ assert(open_msg != NULL);
CU_ASSERT_TRUE(open_msg->obj_list->num_entries > 0);
/* Get and verify the Open object */
open_obj = pcep_obj_get(open_msg->obj_list, PCEP_OBJ_CLASS_OPEN);
CU_ASSERT_PTR_NOT_NULL(open_obj);
/* Get and verify the Open object TLVs */
CU_ASSERT_PTR_NOT_NULL(open_obj->tlv_list);
+ assert(open_obj->tlv_list != NULL);
CU_ASSERT_EQUAL(open_obj->tlv_list->num_entries, 2);
CU_ASSERT_EQUAL(((struct pcep_object_tlv_header *)
open_obj->tlv_list->head->data)
@@ -283,14 +296,17 @@ void test_create_pcep_session_open_tlvs()
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
/* Get and verify the Open Message objects */
CU_ASSERT_PTR_NOT_NULL(open_msg->obj_list);
+ assert(open_msg->obj_list != NULL);
CU_ASSERT_TRUE(open_msg->obj_list->num_entries > 0);
/* Get and verify the Open object */
open_obj = pcep_obj_get(open_msg->obj_list, PCEP_OBJ_CLASS_OPEN);
CU_ASSERT_PTR_NOT_NULL(open_obj);
/* Get and verify the Open object TLVs */
CU_ASSERT_PTR_NOT_NULL(open_obj->tlv_list);
+ assert(open_obj->tlv_list != NULL);
CU_ASSERT_EQUAL(open_obj->tlv_list->num_entries, 3);
double_linked_list_node *tlv_node = open_obj->tlv_list->head;
CU_ASSERT_EQUAL(((struct pcep_object_tlv_header *)tlv_node->data)->type,
@@ -320,16 +336,21 @@ void test_create_pcep_session_open_tlvs()
/* Get and verify the Open Message */
encoded_msg = dll_delete_first_node(mock_info->sent_message_list);
CU_ASSERT_PTR_NOT_NULL(encoded_msg);
+ assert(encoded_msg != NULL);
open_msg = pcep_decode_message(encoded_msg);
CU_ASSERT_PTR_NOT_NULL(open_msg);
+ assert(open_msg != NULL);
/* Get and verify the Open Message objects */
CU_ASSERT_PTR_NOT_NULL(open_msg->obj_list);
+ assert(open_msg->obj_list != NULL);
CU_ASSERT_TRUE(open_msg->obj_list->num_entries > 0);
/* Get and verify the Open object */
open_obj = pcep_obj_get(open_msg->obj_list, PCEP_OBJ_CLASS_OPEN);
CU_ASSERT_PTR_NOT_NULL(open_obj);
+ assert(open_obj != NULL);
/* Get and verify the Open object TLVs */
CU_ASSERT_PTR_NOT_NULL(open_obj->tlv_list);
+ assert(open_obj->tlv_list != NULL);
CU_ASSERT_EQUAL(open_obj->tlv_list->num_entries, 4);
tlv_node = open_obj->tlv_list->head;
CU_ASSERT_EQUAL(((struct pcep_object_tlv_header *)tlv_node->data)->type,
diff --git a/pceplib/test/pcep_session_logic_tests.c b/pceplib/test/pcep_session_logic_tests.c
index 67bf6e22ef..9a15390c1b 100644
--- a/pceplib/test/pcep_session_logic_tests.c
+++ b/pceplib/test/pcep_session_logic_tests.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <CUnit/Basic.h>
#include <CUnit/CUnit.h>
#include <CUnit/TestDB.h>
diff --git a/pceplib/test/pcep_socket_comm_loop_test.c b/pceplib/test/pcep_socket_comm_loop_test.c
index 94f0983ca7..748cf433e6 100644
--- a/pceplib/test/pcep_socket_comm_loop_test.c
+++ b/pceplib/test/pcep_socket_comm_loop_test.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <pthread.h>
#include <stdlib.h>
diff --git a/pceplib/test/pcep_socket_comm_test.c b/pceplib/test/pcep_socket_comm_test.c
index 35afbcbb13..116531f12d 100644
--- a/pceplib/test/pcep_socket_comm_test.c
+++ b/pceplib/test/pcep_socket_comm_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <netinet/in.h>
#include <CUnit/CUnit.h>
@@ -108,6 +113,7 @@ void test_pcep_socket_comm_initialize()
test_connection_except_notifier, &test_host_ip, test_port,
connect_timeout_millis, NULL, false, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_FALSE(test_session->is_ipv6);
}
@@ -119,6 +125,7 @@ void test_pcep_socket_comm_initialize_ipv6()
test_connection_except_notifier, &test_host_ipv6, test_port,
connect_timeout_millis, NULL, false, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_TRUE(test_session->is_ipv6);
}
@@ -131,6 +138,7 @@ void test_pcep_socket_comm_initialize_with_src()
test_connection_except_notifier, NULL, 0, &test_host_ip,
test_port, connect_timeout_millis, NULL, false, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(
test_session->src_sock_addr.src_sock_addr_ipv4.sin_addr.s_addr,
INADDR_ANY);
@@ -143,6 +151,7 @@ void test_pcep_socket_comm_initialize_with_src()
&test_host_ip, test_port, connect_timeout_millis, NULL, false,
NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(
test_session->src_sock_addr.src_sock_addr_ipv4.sin_addr.s_addr,
test_src_ip.s_addr);
@@ -160,6 +169,7 @@ void test_pcep_socket_comm_initialize_with_src_ipv6()
test_connection_except_notifier, NULL, 0, &test_host_ipv6,
test_port, connect_timeout_millis, NULL, false, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(memcmp(&test_session->src_sock_addr.src_sock_addr_ipv6
.sin6_addr,
&in6addr_any, sizeof(struct in6_addr)),
@@ -173,6 +183,7 @@ void test_pcep_socket_comm_initialize_with_src_ipv6()
&test_host_ipv6, test_port, connect_timeout_millis, NULL, false,
NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(memcmp(&test_session->src_sock_addr.src_sock_addr_ipv6
.sin6_addr,
&test_src_ipv6, sizeof(struct in6_addr)),
@@ -194,6 +205,7 @@ void test_pcep_socket_comm_initialize_tcpmd5()
test_connection_except_notifier, &test_host_ip, test_port, 1,
tcp_md5_str, true, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(0, strncmp(tcp_md5_str,
test_session->tcp_authentication_str,
tcp_md5_strlen));
@@ -209,6 +221,7 @@ void test_pcep_socket_comm_initialize_tcpmd5()
test_connection_except_notifier, &test_host_ip, test_port, 1,
tcp_md5_str, false, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(0, strncmp(tcp_md5_str,
test_session->tcp_authentication_str,
tcp_md5_strlen));
@@ -227,6 +240,7 @@ void test_pcep_socket_comm_initialize_ipv6_tcpmd5()
test_connection_except_notifier, &test_host_ipv6, test_port, 1,
tcp_md5_str, true, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(0, strncmp(tcp_md5_str,
test_session->tcp_authentication_str,
tcp_md5_strlen));
@@ -242,6 +256,7 @@ void test_pcep_socket_comm_initialize_ipv6_tcpmd5()
test_connection_except_notifier, &test_host_ipv6, test_port, 1,
tcp_md5_str, false, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_EQUAL(0, strncmp(tcp_md5_str,
test_session->tcp_authentication_str,
tcp_md5_strlen));
@@ -296,7 +311,9 @@ void test_pcep_socket_comm_session_destroy()
test_connection_except_notifier, &test_host_ip, test_port,
connect_timeout_millis, NULL, false, NULL);
CU_ASSERT_PTR_NOT_NULL(test_session);
+ assert(test_session != NULL);
CU_ASSERT_PTR_NOT_NULL(socket_comm_handle_);
+ assert(socket_comm_handle_ != NULL);
CU_ASSERT_EQUAL(socket_comm_handle_->num_active_sessions, 1);
CU_ASSERT_TRUE(socket_comm_session_teardown(test_session));
diff --git a/pceplib/test/pcep_socket_comm_tests.c b/pceplib/test/pcep_socket_comm_tests.c
index 293678f1a7..6a5839d3d0 100644
--- a/pceplib/test/pcep_socket_comm_tests.c
+++ b/pceplib/test/pcep_socket_comm_tests.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <CUnit/Basic.h>
#include <CUnit/CUnit.h>
#include <CUnit/TestDB.h>
diff --git a/pceplib/test/pcep_timers_event_loop_test.c b/pceplib/test/pcep_timers_event_loop_test.c
index ae63601df2..79ed84bfeb 100644
--- a/pceplib/test/pcep_timers_event_loop_test.c
+++ b/pceplib/test/pcep_timers_event_loop_test.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
#include <CUnit/CUnit.h>
diff --git a/pceplib/test/pcep_timers_test.c b/pceplib/test/pcep_timers_test.c
index 9d9e0f6c1b..e5be90a8ed 100644
--- a/pceplib/test/pcep_timers_test.c
+++ b/pceplib/test/pcep_timers_test.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdbool.h>
#include <CUnit/CUnit.h>
diff --git a/pceplib/test/pcep_timers_tests.c b/pceplib/test/pcep_timers_tests.c
index adfea17e29..f3aa8307a7 100644
--- a/pceplib/test/pcep_timers_tests.c
+++ b/pceplib/test/pcep_timers_tests.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <CUnit/Basic.h>
#include <CUnit/CUnit.h>
#include <CUnit/TestDB.h>
diff --git a/pceplib/test/pcep_utils_counters_test.c b/pceplib/test/pcep_utils_counters_test.c
index 6f53e4d400..b31715f7ac 100644
--- a/pceplib/test/pcep_utils_counters_test.c
+++ b/pceplib/test/pcep_utils_counters_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <stdlib.h>
#include <CUnit/CUnit.h>
@@ -43,6 +48,7 @@ void test_create_counters_group()
group = create_counters_group(group_name, num_subgroups);
CU_ASSERT_PTR_NOT_NULL(group);
+ assert(group != NULL);
CU_ASSERT_EQUAL(group->num_subgroups, 0);
CU_ASSERT_EQUAL(group->max_subgroups, num_subgroups);
@@ -72,6 +78,7 @@ void test_create_counters_subgroup()
subgroup = create_counters_subgroup(subgroup_name, subgroup_id,
num_counters);
CU_ASSERT_PTR_NOT_NULL(subgroup);
+ assert(subgroup != NULL);
CU_ASSERT_EQUAL(subgroup->subgroup_id, subgroup_id);
CU_ASSERT_EQUAL(subgroup->num_counters, 0);
diff --git a/pceplib/test/pcep_utils_double_linked_list_test.c b/pceplib/test/pcep_utils_double_linked_list_test.c
index d2600e66c4..181cbeca37 100644
--- a/pceplib/test/pcep_utils_double_linked_list_test.c
+++ b/pceplib/test/pcep_utils_double_linked_list_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <CUnit/CUnit.h>
#include "pcep_utils_double_linked_list.h"
@@ -68,16 +73,22 @@ void test_dll_prepend_data()
CU_ASSERT_EQUAL(handle->num_entries, 3);
double_linked_list_node *node = handle->head;
+ CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data1);
CU_ASSERT_PTR_NULL(node->prev_node);
CU_ASSERT_PTR_NOT_NULL(node->next_node);
node = node->next_node;
+ CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data2);
CU_ASSERT_PTR_NOT_NULL(node->prev_node);
CU_ASSERT_PTR_NOT_NULL(node->next_node);
node = node->next_node;
+ CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data3);
CU_ASSERT_PTR_NOT_NULL(node->prev_node);
CU_ASSERT_PTR_NULL(node->next_node);
@@ -108,11 +119,15 @@ void test_dll_append_data()
CU_ASSERT_PTR_NOT_NULL(node->next_node);
node = node->next_node;
+ CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data2);
CU_ASSERT_PTR_NOT_NULL(node->prev_node);
CU_ASSERT_PTR_NOT_NULL(node->next_node);
node = node->next_node;
+ CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data3);
CU_ASSERT_PTR_NOT_NULL(node->prev_node);
CU_ASSERT_PTR_NULL(node->next_node);
@@ -274,8 +289,11 @@ void test_dll_delete_node()
node2 = dll_append(handle, &data2);
node3 = dll_append(handle, &data3);
CU_ASSERT_PTR_NOT_NULL(node1);
+ assert(node1 != NULL);
CU_ASSERT_PTR_NOT_NULL(node2);
+ assert(node2 != NULL);
CU_ASSERT_PTR_NOT_NULL(node3);
+ assert(node3 != NULL);
CU_ASSERT_EQUAL(handle->num_entries, 3);
/* Delete the middle entry */
diff --git a/pceplib/test/pcep_utils_memory_test.c b/pceplib/test/pcep_utils_memory_test.c
index b0b528f084..0958626a0c 100644
--- a/pceplib/test/pcep_utils_memory_test.c
+++ b/pceplib/test/pcep_utils_memory_test.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <stdlib.h>
#include <stdint.h>
diff --git a/pceplib/test/pcep_utils_ordered_list_test.c b/pceplib/test/pcep_utils_ordered_list_test.c
index fe9ee58825..12ac456e23 100644
--- a/pceplib/test/pcep_utils_ordered_list_test.c
+++ b/pceplib/test/pcep_utils_ordered_list_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <CUnit/CUnit.h>
#include "pcep_utils_ordered_list.h"
@@ -51,6 +56,7 @@ void test_empty_list()
ordered_list_initialize(node_data_compare);
CU_ASSERT_PTR_NOT_NULL(handle);
+ assert(handle != NULL);
CU_ASSERT_PTR_NULL(handle->head);
CU_ASSERT_PTR_NOT_NULL(handle->compare_function);
CU_ASSERT_EQUAL(handle->num_entries, 0);
@@ -130,14 +136,17 @@ void test_find()
ordered_list_node *node = ordered_list_find(handle, &data1);
CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data1);
node = ordered_list_find(handle, &data2);
CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data2);
node = ordered_list_find(handle, &data3);
CU_ASSERT_PTR_NOT_NULL(node);
+ assert(node != NULL);
CU_ASSERT_PTR_EQUAL(node->data, &data3);
node = ordered_list_find(handle, &data_not_inList);
diff --git a/pceplib/test/pcep_utils_queue_test.c b/pceplib/test/pcep_utils_queue_test.c
index 1731457789..6e62c75636 100644
--- a/pceplib/test/pcep_utils_queue_test.c
+++ b/pceplib/test/pcep_utils_queue_test.c
@@ -21,6 +21,11 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <assert.h>
#include <CUnit/CUnit.h>
#include "pcep_utils_queue.h"
@@ -37,6 +42,7 @@ void test_empty_queue()
queue_handle *handle = queue_initialize();
CU_ASSERT_PTR_NOT_NULL(handle);
+ assert(handle != NULL);
CU_ASSERT_PTR_NULL(handle->head);
CU_ASSERT_EQUAL(handle->num_entries, 0);
diff --git a/pceplib/test/pcep_utils_tests.c b/pceplib/test/pcep_utils_tests.c
index 452b9fa09c..ad9f76933a 100644
--- a/pceplib/test/pcep_utils_tests.c
+++ b/pceplib/test/pcep_utils_tests.c
@@ -21,6 +21,10 @@
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <CUnit/Basic.h>
#include <CUnit/CUnit.h>
#include <CUnit/TestDB.h>
diff --git a/pimd/pim_assert.c b/pimd/pim_assert.c
index 957f904714..0988938701 100644
--- a/pimd/pim_assert.c
+++ b/pimd/pim_assert.c
@@ -304,7 +304,7 @@ int pim_assert_recv(struct interface *ifp, struct pim_neighbor *neigh,
msg_metric.ip_address = src_addr;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
++pim_ifp->pim_ifstat_assert_recv;
return dispatch_assert(ifp, msg_source_addr.u.prefix4, sg.grp,
diff --git a/pimd/pim_bsm.c b/pimd/pim_bsm.c
index f43a31fde2..3fbe3317ba 100644
--- a/pimd/pim_bsm.c
+++ b/pimd/pim_bsm.c
@@ -43,8 +43,8 @@ static inline void pim_g2rp_timer_restart(struct bsm_rpinfo *bsrp,
/* Memory Types */
DEFINE_MTYPE_STATIC(PIMD, PIM_BSGRP_NODE, "PIM BSR advertised grp info");
-DEFINE_MTYPE_STATIC(PIMD, PIM_BSRP_NODE, "PIM BSR advertised RP info");
-DEFINE_MTYPE_STATIC(PIMD, PIM_BSM_INFO, "PIM BSM Info");
+DEFINE_MTYPE_STATIC(PIMD, PIM_BSRP_INFO, "PIM BSR advertised RP info");
+DEFINE_MTYPE_STATIC(PIMD, PIM_BSM_FRAG, "PIM BSM fragment");
DEFINE_MTYPE_STATIC(PIMD, PIM_BSM_PKT_VAR_MEM, "PIM BSM Packet");
/* All bsm packets forwarded shall be fit within ip mtu less iphdr(max) */
@@ -63,12 +63,24 @@ void pim_bsm_write_config(struct vty *vty, struct interface *ifp)
}
}
+static void pim_bsm_rpinfo_free(struct bsm_rpinfo *bsrp_info)
+{
+ THREAD_OFF(bsrp_info->g2rp_timer);
+ XFREE(MTYPE_PIM_BSRP_INFO, bsrp_info);
+}
+
+void pim_bsm_rpinfos_free(struct bsm_rpinfos_head *head)
+{
+ struct bsm_rpinfo *bsrp_info;
+
+ while ((bsrp_info = bsm_rpinfos_pop(head)))
+ pim_bsm_rpinfo_free(bsrp_info);
+}
+
void pim_free_bsgrp_data(struct bsgrp_node *bsgrp_node)
{
- if (bsgrp_node->bsrp_list)
- list_delete(&bsgrp_node->bsrp_list);
- if (bsgrp_node->partial_bsrp_list)
- list_delete(&bsgrp_node->partial_bsrp_list);
+ pim_bsm_rpinfos_free(bsgrp_node->bsrp_list);
+ pim_bsm_rpinfos_free(bsgrp_node->partial_bsrp_list);
XFREE(MTYPE_PIM_BSGRP_NODE, bsgrp_node);
}
@@ -84,14 +96,21 @@ void pim_free_bsgrp_node(struct route_table *rt, struct prefix *grp)
}
}
-static void pim_bsm_node_free(struct bsm_info *bsm)
+static void pim_bsm_frag_free(struct bsm_frag *bsfrag)
{
- XFREE(MTYPE_PIM_BSM_PKT_VAR_MEM, bsm->bsm);
- XFREE(MTYPE_PIM_BSM_INFO, bsm);
+ XFREE(MTYPE_PIM_BSM_FRAG, bsfrag);
}
-static int pim_g2rp_list_compare(struct bsm_rpinfo *node1,
- struct bsm_rpinfo *node2)
+void pim_bsm_frags_free(struct bsm_scope *scope)
+{
+ struct bsm_frag *bsfrag;
+
+ while ((bsfrag = bsm_frags_pop(scope->bsm_frags)))
+ pim_bsm_frag_free(bsfrag);
+}
+
+int pim_bsm_rpinfo_cmp(const struct bsm_rpinfo *node1,
+ const struct bsm_rpinfo *node2)
{
/* RP election Algo :
* Step-1 : Loweset Rp priority will have higher precedance.
@@ -115,27 +134,6 @@ static int pim_g2rp_list_compare(struct bsm_rpinfo *node1,
return 0;
}
-static void pim_free_bsrp_node(struct bsm_rpinfo *bsrp_info)
-{
- THREAD_OFF(bsrp_info->g2rp_timer);
- XFREE(MTYPE_PIM_BSRP_NODE, bsrp_info);
-}
-
-static struct list *pim_alloc_bsrp_list(void)
-{
- struct list *new_list = NULL;
-
- new_list = list_new();
-
- if (!new_list)
- return NULL;
-
- new_list->cmp = (int (*)(void *, void *))pim_g2rp_list_compare;
- new_list->del = (void (*)(void *))pim_free_bsrp_node;
-
- return new_list;
-}
-
static struct bsgrp_node *pim_bsm_new_bsgrp_node(struct route_table *rt,
struct prefix *grp)
{
@@ -150,14 +148,8 @@ static struct bsgrp_node *pim_bsm_new_bsgrp_node(struct route_table *rt,
bsgrp = XCALLOC(MTYPE_PIM_BSGRP_NODE, sizeof(struct bsgrp_node));
rn->info = bsgrp;
- bsgrp->bsrp_list = pim_alloc_bsrp_list();
- bsgrp->partial_bsrp_list = pim_alloc_bsrp_list();
-
- if ((!bsgrp->bsrp_list) || (!bsgrp->partial_bsrp_list)) {
- route_unlock_node(rn);
- pim_free_bsgrp_data(bsgrp);
- return NULL;
- }
+ bsm_rpinfos_init(bsgrp->bsrp_list);
+ bsm_rpinfos_init(bsgrp->partial_bsrp_list);
prefix_copy(&bsgrp->group, grp);
return bsgrp;
@@ -197,7 +189,7 @@ static int pim_on_bs_timer(struct thread *t)
scope->current_bsr_first_ts = 0;
scope->current_bsr_last_ts = 0;
scope->bsm_frag_tag = 0;
- list_delete_all_node(scope->bsm_list);
+ pim_bsm_frags_free(scope);
for (rn = route_top(scope->bsrp_table); rn; rn = route_next(rn)) {
@@ -208,16 +200,13 @@ static int pim_on_bs_timer(struct thread *t)
continue;
}
/* Give grace time for rp to continue for another hold time */
- if ((bsgrp_node->bsrp_list) && (bsgrp_node->bsrp_list->count)) {
- bsrp = listnode_head(bsgrp_node->bsrp_list);
+ bsrp = bsm_rpinfos_first(bsgrp_node->bsrp_list);
+ if (bsrp)
pim_g2rp_timer_restart(bsrp, bsrp->rp_holdtime);
- }
+
/* clear pending list */
- if ((bsgrp_node->partial_bsrp_list)
- && (bsgrp_node->partial_bsrp_list->count)) {
- list_delete_all_node(bsgrp_node->partial_bsrp_list);
- bsgrp_node->pend_rp_cnt = 0;
- }
+ pim_bsm_rpinfos_free(bsgrp_node->partial_bsrp_list);
+ bsgrp_node->pend_rp_cnt = 0;
}
return 0;
}
@@ -260,8 +249,7 @@ void pim_bsm_proc_init(struct pim_instance *pim)
pim->global_scope.accept_nofwd_bsm = true;
pim->global_scope.state = NO_INFO;
pim->global_scope.pim = pim;
- pim->global_scope.bsm_list = list_new();
- pim->global_scope.bsm_list->del = (void (*)(void *))pim_bsm_node_free;
+ bsm_frags_init(pim->global_scope.bsm_frags);
pim_bs_timer_start(&pim->global_scope, PIM_BS_TIME);
}
@@ -271,9 +259,7 @@ void pim_bsm_proc_free(struct pim_instance *pim)
struct bsgrp_node *bsgrp;
pim_bs_timer_stop(&pim->global_scope);
-
- if (pim->global_scope.bsm_list)
- list_delete(&pim->global_scope.bsm_list);
+ pim_bsm_frags_free(&pim->global_scope);
for (rn = route_top(pim->global_scope.bsrp_table); rn;
rn = route_next(rn)) {
@@ -303,7 +289,6 @@ static int pim_on_g2rp_timer(struct thread *t)
struct bsm_rpinfo *bsrp;
struct bsm_rpinfo *bsrp_node;
struct bsgrp_node *bsgrp_node;
- struct listnode *bsrp_ln;
struct pim_instance *pim;
struct rp_info *rp_info;
struct route_node *rn;
@@ -319,14 +304,17 @@ static int pim_on_g2rp_timer(struct thread *t)
bsrp_addr = bsrp->rp_address;
/* update elapse for all bsrp nodes */
- for (ALL_LIST_ELEMENTS_RO(bsgrp_node->bsrp_list, bsrp_ln, bsrp_node))
+ frr_each_safe (bsm_rpinfos, bsgrp_node->bsrp_list, bsrp_node) {
bsrp_node->elapse_time += elapse;
- /* remove the expired nodes from the list */
- list_filter_out_nodes(bsgrp_node->bsrp_list, is_hold_time_elapsed);
+ if (is_hold_time_elapsed(bsrp_node)) {
+ bsm_rpinfos_del(bsgrp_node->bsrp_list, bsrp_node);
+ pim_bsm_rpinfo_free(bsrp_node);
+ }
+ }
/* Get the next elected rp node */
- bsrp = listnode_head(bsgrp_node->bsrp_list);
+ bsrp = bsm_rpinfos_first(bsgrp_node->bsrp_list);
pim = bsgrp_node->scope->pim;
rn = route_node_lookup(pim->rp_table, &bsgrp_node->group);
@@ -356,8 +344,8 @@ static int pim_on_g2rp_timer(struct thread *t)
}
}
- if ((!bsgrp_node->bsrp_list->count)
- && (!bsgrp_node->partial_bsrp_list->count)) {
+ if (!bsm_rpinfos_count(bsgrp_node->bsrp_list)
+ && !bsm_rpinfos_count(bsgrp_node->partial_bsrp_list)) {
pim_free_bsgrp_node(pim->global_scope.bsrp_table,
&bsgrp_node->group);
pim_free_bsgrp_data(bsgrp_node);
@@ -420,7 +408,6 @@ static void pim_instate_pend_list(struct bsgrp_node *bsgrp_node)
{
struct bsm_rpinfo *active;
struct bsm_rpinfo *pend;
- struct list *temp;
struct rp_info *rp_info;
struct route_node *rn;
struct pim_instance *pim;
@@ -429,11 +416,14 @@ static void pim_instate_pend_list(struct bsgrp_node *bsgrp_node)
bool had_rp_node = true;
pim = bsgrp_node->scope->pim;
- active = listnode_head(bsgrp_node->bsrp_list);
+ active = bsm_rpinfos_first(bsgrp_node->bsrp_list);
/* Remove nodes with hold time 0 & check if list still has a head */
- list_filter_out_nodes(bsgrp_node->partial_bsrp_list, is_hold_time_zero);
- pend = listnode_head(bsgrp_node->partial_bsrp_list);
+ frr_each_safe (bsm_rpinfos, bsgrp_node->partial_bsrp_list, pend)
+ if (is_hold_time_zero(pend))
+ bsm_rpinfos_del(bsgrp_node->partial_bsrp_list, pend);
+
+ pend = bsm_rpinfos_first(bsgrp_node->partial_bsrp_list);
if (!str2prefix("224.0.0.0/4", &group_all))
return;
@@ -541,14 +531,12 @@ static void pim_instate_pend_list(struct bsgrp_node *bsgrp_node)
* pend is head of bsrp list
* So check appriate head after swap and clean the new partial list
*/
- temp = bsgrp_node->bsrp_list;
- bsgrp_node->bsrp_list = bsgrp_node->partial_bsrp_list;
- bsgrp_node->partial_bsrp_list = temp;
+ bsm_rpinfos_swap_all(bsgrp_node->bsrp_list,
+ bsgrp_node->partial_bsrp_list);
- if (active) {
+ if (active)
pim_g2rp_timer_stop(active);
- list_delete_all_node(bsgrp_node->partial_bsrp_list);
- }
+ pim_bsm_rpinfos_free(bsgrp_node->partial_bsrp_list);
}
static bool pim_bsr_rpf_check(struct pim_instance *pim, struct in_addr bsr,
@@ -896,8 +884,7 @@ bool pim_bsm_new_nbr_fwd(struct pim_neighbor *neigh, struct interface *ifp)
struct in_addr dst_addr;
struct pim_interface *pim_ifp;
struct bsm_scope *scope;
- struct listnode *bsm_ln;
- struct bsm_info *bsminfo;
+ struct bsm_frag *bsfrag;
char neigh_src_str[INET_ADDRSTRLEN];
uint32_t pim_mtu;
bool no_fwd = true;
@@ -929,7 +916,7 @@ bool pim_bsm_new_nbr_fwd(struct pim_neighbor *neigh, struct interface *ifp)
scope = &pim_ifp->pim->global_scope;
- if (!scope->bsm_list->count) {
+ if (!bsm_frags_count(scope->bsm_frags)) {
if (PIM_DEBUG_BSM)
zlog_debug("%s: BSM list for the scope is empty",
__func__);
@@ -950,10 +937,10 @@ bool pim_bsm_new_nbr_fwd(struct pim_neighbor *neigh, struct interface *ifp)
pim_mtu = ifp->mtu - MAX_IP_HDR_LEN;
pim_hello_require(ifp);
- for (ALL_LIST_ELEMENTS_RO(scope->bsm_list, bsm_ln, bsminfo)) {
- if (pim_mtu < bsminfo->size) {
- ret = pim_bsm_frag_send(bsminfo->bsm, bsminfo->size,
- ifp, pim_mtu, dst_addr, no_fwd);
+ frr_each (bsm_frags, scope->bsm_frags, bsfrag) {
+ if (pim_mtu < bsfrag->size) {
+ ret = pim_bsm_frag_send(bsfrag->data, bsfrag->size, ifp,
+ pim_mtu, dst_addr, no_fwd);
if (!ret) {
if (PIM_DEBUG_BSM)
zlog_debug(
@@ -962,10 +949,10 @@ bool pim_bsm_new_nbr_fwd(struct pim_neighbor *neigh, struct interface *ifp)
}
} else {
/* Pim header needs to be constructed */
- pim_msg_build_header(bsminfo->bsm, bsminfo->size,
+ pim_msg_build_header(bsfrag->data, bsfrag->size,
PIM_MSG_TYPE_BOOTSTRAP, no_fwd);
- ret = pim_bsm_send_intf(bsminfo->bsm, bsminfo->size,
- ifp, dst_addr);
+ ret = pim_bsm_send_intf(bsfrag->data, bsfrag->size, ifp,
+ dst_addr);
if (!ret) {
if (PIM_DEBUG_BSM)
zlog_debug(
@@ -1035,7 +1022,7 @@ static bool pim_install_bsm_grp_rp(struct pim_instance *pim,
uint8_t hashMask_len = pim->global_scope.hashMasklen;
/*memory allocation for bsm_rpinfo */
- bsm_rpinfo = XCALLOC(MTYPE_PIM_BSRP_NODE, sizeof(*bsm_rpinfo));
+ bsm_rpinfo = XCALLOC(MTYPE_PIM_BSRP_INFO, sizeof(*bsm_rpinfo));
bsm_rpinfo->rp_prio = rp->rp_pri;
bsm_rpinfo->rp_holdtime = rp->rp_holdtime;
@@ -1049,7 +1036,7 @@ static bool pim_install_bsm_grp_rp(struct pim_instance *pim,
/* update hash for this rp node */
bsm_rpinfo->hash = hash_calc_on_grp_rp(grpnode->group, rp->rpaddr.addr,
hashMask_len);
- if (listnode_add_sort_nodup(grpnode->partial_bsrp_list, bsm_rpinfo)) {
+ if (bsm_rpinfos_add(grpnode->partial_bsrp_list, bsm_rpinfo) == NULL) {
if (PIM_DEBUG_BSM)
zlog_debug(
"%s, bs_rpinfo node added to the partial bs_rplist.",
@@ -1060,7 +1047,7 @@ static bool pim_install_bsm_grp_rp(struct pim_instance *pim,
if (PIM_DEBUG_BSM)
zlog_debug("%s: list node not added", __func__);
- XFREE(MTYPE_PIM_BSRP_NODE, bsm_rpinfo);
+ XFREE(MTYPE_PIM_BSRP_INFO, bsm_rpinfo);
return false;
}
@@ -1078,7 +1065,7 @@ static void pim_update_pending_rp_cnt(struct bsm_scope *sz,
zlog_debug(
"%s,Received a new BSM ,so clear the pending bs_rpinfo list.",
__func__);
- list_delete_all_node(bsgrp->partial_bsrp_list);
+ pim_bsm_rpinfos_free(bsgrp->partial_bsrp_list);
bsgrp->pend_rp_cnt = total_rp_count;
}
} else
@@ -1227,7 +1214,7 @@ int pim_bsm_process(struct interface *ifp, struct ip *ip_hdr, uint8_t *buf,
int sz = PIM_GBL_SZ_ID;
struct bsmmsg_grpinfo *msg_grp;
struct pim_interface *pim_ifp = NULL;
- struct bsm_info *bsminfo;
+ struct bsm_frag *bsfrag;
struct pim_instance *pim;
char bsr_str[INET_ADDRSTRLEN];
uint16_t frag_tag;
@@ -1383,7 +1370,7 @@ int pim_bsm_process(struct interface *ifp, struct ip *ip_hdr, uint8_t *buf,
pim_ifp->pim->global_scope.bsm_frag_tag,
frag_tag);
}
- list_delete_all_node(pim_ifp->pim->global_scope.bsm_list);
+ pim_bsm_frags_free(&pim_ifp->pim->global_scope);
pim_ifp->pim->global_scope.bsm_frag_tag = frag_tag;
}
@@ -1392,13 +1379,13 @@ int pim_bsm_process(struct interface *ifp, struct ip *ip_hdr, uint8_t *buf,
if (!no_fwd) {
pim_bsm_fwd_whole_sz(pim_ifp->pim, buf, buf_size, sz);
- bsminfo = XCALLOC(MTYPE_PIM_BSM_INFO, sizeof(struct bsm_info));
-
- bsminfo->bsm = XCALLOC(MTYPE_PIM_BSM_PKT_VAR_MEM, buf_size);
+ bsfrag = XCALLOC(MTYPE_PIM_BSM_FRAG,
+ sizeof(struct bsm_frag) + buf_size);
- bsminfo->size = buf_size;
- memcpy(bsminfo->bsm, buf, buf_size);
- listnode_add(pim_ifp->pim->global_scope.bsm_list, bsminfo);
+ bsfrag->size = buf_size;
+ memcpy(bsfrag->data, buf, buf_size);
+ bsm_frags_add_tail(pim_ifp->pim->global_scope.bsm_frags,
+ bsfrag);
}
return 0;
diff --git a/pimd/pim_bsm.h b/pimd/pim_bsm.h
index 2829c1e05a..dbfeeceec8 100644
--- a/pimd/pim_bsm.h
+++ b/pimd/pim_bsm.h
@@ -25,7 +25,7 @@
#include "if.h"
#include "vty.h"
-#include "linklist.h"
+#include "typesafe.h"
#include "table.h"
#include "pim_rp.h"
#include "pim_msg.h"
@@ -54,6 +54,8 @@ enum ncbsr_state {
ACCEPT_PREFERRED
};
+PREDECL_DLIST(bsm_frags);
+
/* BSM scope - bsm processing is per scope */
struct bsm_scope {
int sz_id; /* scope zone id */
@@ -66,36 +68,49 @@ struct bsm_scope {
uint16_t bsm_frag_tag; /* Last received frag tag from E-BSR */
uint8_t hashMasklen; /* Mask in hash calc RFC 7761 4.7.2 */
struct pim_instance *pim; /* Back pointer to pim instance */
- struct list *bsm_list; /* list of bsm frag for frowarding */
+
+ /* current set of fragments for forwarding */
+ struct bsm_frags_head bsm_frags[1];
+
struct route_table *bsrp_table; /* group2rp mapping rcvd from BSR */
struct thread *bs_timer; /* Boot strap timer */
- struct thread *sz_timer;
};
-/* BSM packet - this is stored as list in bsm_list inside scope
+/* BSM packet (= fragment) - this is stored as list in bsm_frags inside scope
* This is used for forwarding to new neighbors or restarting mcast routers
*/
-struct bsm_info {
- uint32_t size; /* size of the packet */
- unsigned char *bsm; /* Actual packet */
+struct bsm_frag {
+ struct bsm_frags_item item;
+
+ uint32_t size; /* size of the packet */
+ uint8_t data[0]; /* Actual packet (dyn size) */
};
+DECLARE_DLIST(bsm_frags, struct bsm_frag, item);
+
+PREDECL_SORTLIST_UNIQ(bsm_rpinfos);
+
/* This is the group node of the bsrp table in scope.
* this node maintains the list of rp for the group.
*/
struct bsgrp_node {
struct prefix group; /* Group range */
struct bsm_scope *scope; /* Back ptr to scope */
- struct list *bsrp_list; /* list of RPs adv by BSR */
- struct list *partial_bsrp_list; /* maintained until all RPs received */
+
+ /* RPs advertised by BSR, and temporary list while receiving new set */
+ struct bsm_rpinfos_head bsrp_list[1];
+ struct bsm_rpinfos_head partial_bsrp_list[1];
+
int pend_rp_cnt; /* Total RP - Received RP */
uint16_t frag_tag; /* frag tag to identify the fragment */
};
-/* This is the list node of bsrp_list and partial bsrp list in
- * bsgrp_node. Hold info of each RP received for the group
+/* Items on [partial_]bsrp_list above.
+ * Holds info of each candidate RP received for the bsgrp_node's prefix.
*/
struct bsm_rpinfo {
+ struct bsm_rpinfos_item item;
+
uint32_t hash; /* Hash Value as per RFC 7761 4.7.2 */
uint32_t elapse_time; /* upd at expiry of elected RP node */
uint16_t rp_prio; /* RP priority */
@@ -105,6 +120,10 @@ struct bsm_rpinfo {
struct thread *g2rp_timer; /* Run only for elected RP node */
};
+extern int pim_bsm_rpinfo_cmp(const struct bsm_rpinfo *a,
+ const struct bsm_rpinfo *b);
+DECLARE_SORTLIST_UNIQ(bsm_rpinfos, struct bsm_rpinfo, item, pim_bsm_rpinfo_cmp);
+
/* Structures to extract Bootstrap Message header and Grp to RP Mappings
* =====================================================================
* BSM Format:
@@ -196,6 +215,8 @@ bool pim_bsm_new_nbr_fwd(struct pim_neighbor *neigh, struct interface *ifp);
struct bsgrp_node *pim_bsm_get_bsgrp_node(struct bsm_scope *scope,
struct prefix *grp);
void pim_bs_timer_stop(struct bsm_scope *scope);
+void pim_bsm_frags_free(struct bsm_scope *scope);
+void pim_bsm_rpinfos_free(struct bsm_rpinfos_head *head);
void pim_free_bsgrp_data(struct bsgrp_node *bsgrp_node);
void pim_free_bsgrp_node(struct route_table *rt, struct prefix *grp);
#endif
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index c01cfec88e..90aa15beee 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -3000,15 +3000,14 @@ static void pim_show_nexthop(struct pim_instance *pim, struct vty *vty)
/* Display the bsm database details */
static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj)
{
- struct listnode *bsmnode;
int count = 0;
int fragment = 1;
- struct bsm_info *bsm;
+ struct bsm_frag *bsfrag;
json_object *json = NULL;
json_object *json_group = NULL;
json_object *json_row = NULL;
- count = pim->global_scope.bsm_list->count;
+ count = bsm_frags_count(pim->global_scope.bsm_frags);
if (uj) {
json = json_object_new_object();
@@ -3019,7 +3018,7 @@ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj)
vty_out(vty, "\n");
}
- for (ALL_LIST_ELEMENTS_RO(pim->global_scope.bsm_list, bsmnode, bsm)) {
+ frr_each (bsm_frags, pim->global_scope.bsm_frags, bsfrag) {
char grp_str[PREFIX_STRLEN];
char rp_str[INET_ADDRSTRLEN];
char bsr_str[INET_ADDRSTRLEN];
@@ -3032,8 +3031,8 @@ static void pim_show_bsm_db(struct pim_instance *pim, struct vty *vty, bool uj)
uint32_t len = 0;
uint32_t frag_rp_cnt = 0;
- buf = bsm->bsm;
- len = bsm->size;
+ buf = bsfrag->data;
+ len = bsfrag->size;
/* skip pim header */
buf += PIM_MSG_HEADER_LEN;
@@ -3160,7 +3159,6 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim,
struct vty *vty, bool uj)
{
struct bsgrp_node *bsgrp;
- struct listnode *rpnode;
struct bsm_rpinfo *bsm_rp;
struct route_node *rn;
char bsr_str[INET_ADDRSTRLEN];
@@ -3209,42 +3207,33 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim,
vty_out(vty, "(ACTIVE)\n");
}
- if (bsgrp->bsrp_list) {
- for (ALL_LIST_ELEMENTS_RO(bsgrp->bsrp_list, rpnode,
- bsm_rp)) {
- char rp_str[INET_ADDRSTRLEN];
+ frr_each (bsm_rpinfos, bsgrp->bsrp_list, bsm_rp) {
+ char rp_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<Rp Address?>",
- bsm_rp->rp_address, rp_str,
- sizeof(rp_str));
+ pim_inet4_dump("<Rp Address?>", bsm_rp->rp_address,
+ rp_str, sizeof(rp_str));
- if (uj) {
- json_row = json_object_new_object();
- json_object_string_add(
- json_row, "Rp Address", rp_str);
- json_object_int_add(
- json_row, "Rp HoldTime",
- bsm_rp->rp_holdtime);
- json_object_int_add(json_row,
- "Rp Priority",
- bsm_rp->rp_prio);
- json_object_int_add(json_row,
- "Hash Val",
- bsm_rp->hash);
- json_object_object_add(
- json_group, rp_str, json_row);
+ if (uj) {
+ json_row = json_object_new_object();
+ json_object_string_add(json_row, "Rp Address",
+ rp_str);
+ json_object_int_add(json_row, "Rp HoldTime",
+ bsm_rp->rp_holdtime);
+ json_object_int_add(json_row, "Rp Priority",
+ bsm_rp->rp_prio);
+ json_object_int_add(json_row, "Hash Val",
+ bsm_rp->hash);
+ json_object_object_add(json_group, rp_str,
+ json_row);
- } else {
- vty_out(vty,
- "%-15s %-15u %-15u %-15u\n",
- rp_str, bsm_rp->rp_prio,
- bsm_rp->rp_holdtime,
- bsm_rp->hash);
- }
+ } else {
+ vty_out(vty, "%-15s %-15u %-15u %-15u\n",
+ rp_str, bsm_rp->rp_prio,
+ bsm_rp->rp_holdtime, bsm_rp->hash);
}
- if (!bsgrp->bsrp_list->count && !uj)
- vty_out(vty, "Active List is empty.\n");
}
+ if (!bsm_rpinfos_count(bsgrp->bsrp_list) && !uj)
+ vty_out(vty, "Active List is empty.\n");
if (uj) {
json_object_int_add(json_group, "Pending RP count",
@@ -3259,40 +3248,32 @@ static void pim_show_group_rp_mappings_info(struct pim_instance *pim,
"Hash");
}
- if (bsgrp->partial_bsrp_list) {
- for (ALL_LIST_ELEMENTS_RO(bsgrp->partial_bsrp_list,
- rpnode, bsm_rp)) {
- char rp_str[INET_ADDRSTRLEN];
+ frr_each (bsm_rpinfos, bsgrp->partial_bsrp_list, bsm_rp) {
+ char rp_str[INET_ADDRSTRLEN];
- pim_inet4_dump("<Rp Addr?>", bsm_rp->rp_address,
- rp_str, sizeof(rp_str));
+ pim_inet4_dump("<Rp Addr?>", bsm_rp->rp_address, rp_str,
+ sizeof(rp_str));
- if (uj) {
- json_row = json_object_new_object();
- json_object_string_add(
- json_row, "Rp Address", rp_str);
- json_object_int_add(
- json_row, "Rp HoldTime",
- bsm_rp->rp_holdtime);
- json_object_int_add(json_row,
- "Rp Priority",
- bsm_rp->rp_prio);
- json_object_int_add(json_row,
- "Hash Val",
- bsm_rp->hash);
- json_object_object_add(
- json_group, rp_str, json_row);
- } else {
- vty_out(vty,
- "%-15s %-15u %-15u %-15u\n",
- rp_str, bsm_rp->rp_prio,
- bsm_rp->rp_holdtime,
- bsm_rp->hash);
- }
+ if (uj) {
+ json_row = json_object_new_object();
+ json_object_string_add(json_row, "Rp Address",
+ rp_str);
+ json_object_int_add(json_row, "Rp HoldTime",
+ bsm_rp->rp_holdtime);
+ json_object_int_add(json_row, "Rp Priority",
+ bsm_rp->rp_prio);
+ json_object_int_add(json_row, "Hash Val",
+ bsm_rp->hash);
+ json_object_object_add(json_group, rp_str,
+ json_row);
+ } else {
+ vty_out(vty, "%-15s %-15u %-15u %-15u\n",
+ rp_str, bsm_rp->rp_prio,
+ bsm_rp->rp_holdtime, bsm_rp->hash);
}
- if (!bsgrp->partial_bsrp_list->count && !uj)
- vty_out(vty, "Partial List is empty\n");
}
+ if (!bsm_rpinfos_count(bsgrp->partial_bsrp_list) && !uj)
+ vty_out(vty, "Partial List is empty\n");
if (!uj)
vty_out(vty, "\n");
@@ -3847,6 +3828,31 @@ static void clear_interfaces(struct pim_instance *pim)
return CMD_WARNING_CONFIG_FAILED; \
}
+/**
+ * Get current node VRF name.
+ *
+ * NOTE:
+ * In case of failure it will print error message to user.
+ *
+ * \returns name or NULL if failed to get VRF.
+ */
+static const char *pim_cli_get_vrf_name(struct vty *vty)
+{
+ const struct lyd_node *vrf_node;
+
+ /* Not inside any VRF context. */
+ if (vty->xpath_index == 0)
+ return VRF_DEFAULT_NAME;
+
+ vrf_node = yang_dnode_get(vty->candidate_config->dnode, VTY_CURR_XPATH);
+ if (vrf_node == NULL) {
+ vty_out(vty, "%% Failed to get vrf dnode in configuration\n");
+ return NULL;
+ }
+
+ return yang_dnode_get_string(vrf_node, "./name");
+}
+
DEFUN (clear_ip_interfaces,
clear_ip_interfaces_cmd,
"clear ip interfaces [vrf NAME]",
@@ -4083,7 +4089,7 @@ static void clear_pim_bsr_db(struct pim_instance *pim)
pim->global_scope.current_bsr_first_ts = 0;
pim->global_scope.current_bsr_last_ts = 0;
pim->global_scope.bsm_frag_tag = 0;
- list_delete_all_node(pim->global_scope.bsm_list);
+ pim_bsm_frags_free(&pim->global_scope);
pim_bs_timer_stop(&pim->global_scope);
@@ -6925,25 +6931,13 @@ DEFUN (ip_pim_spt_switchover_infinity,
"SPT-Switchover\n"
"Never switch to SPT Tree\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -6976,25 +6970,13 @@ DEFUN (ip_pim_spt_switchover_infinity_plist,
"Prefix-List to control which groups to switch\n"
"Prefix-List name\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7025,25 +7007,13 @@ DEFUN (no_ip_pim_spt_switchover_infinity,
"SPT_Switchover\n"
"Never switch to SPT Tree\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7075,25 +7045,13 @@ DEFUN (no_ip_pim_spt_switchover_infinity_plist,
"Prefix-List to control which groups to switch\n"
"Prefix-List name\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char spt_plist_xpath[XPATH_MAXLEN];
char spt_action_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(spt_plist_xpath, sizeof(spt_plist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7123,22 +7081,12 @@ DEFPY (pim_register_accept_list,
"Only accept registers from a specific source prefix list\n"
"Prefix-List name\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char reg_alist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(reg_alist_xpath, sizeof(reg_alist_xpath),
FRR_PIM_AF_XPATH, "frr-pim:pimd", "pim", vrfname,
@@ -7233,22 +7181,12 @@ DEFUN (ip_pim_rp_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char rp_ka_timer_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_ka_timer_xpath, sizeof(rp_ka_timer_xpath),
FRR_PIM_XPATH, "frr-pim:pimd", "pim", vrfname);
@@ -7271,26 +7209,16 @@ DEFUN (no_ip_pim_rp_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char rp_ka_timer[5];
char rp_ka_timer_xpath[XPATH_MAXLEN];
- snprintf(rp_ka_timer, sizeof(rp_ka_timer), "%d", PIM_KEEPALIVE_PERIOD);
-
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ snprintf(rp_ka_timer, sizeof(rp_ka_timer), "%d",
+ PIM_RP_KEEPALIVE_PERIOD);
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_ka_timer_xpath, sizeof(rp_ka_timer_xpath),
FRR_PIM_XPATH, "frr-pim:pimd", "pim", vrfname);
@@ -7311,22 +7239,12 @@ DEFUN (ip_pim_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ka_timer_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ka_timer_xpath, sizeof(ka_timer_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -7347,25 +7265,15 @@ DEFUN (no_ip_pim_keep_alive,
"Keep alive Timer\n"
"Seconds\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ka_timer[5];
char ka_timer_xpath[XPATH_MAXLEN];
snprintf(ka_timer, sizeof(ka_timer), "%d", PIM_KEEPALIVE_PERIOD);
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ka_timer_xpath, sizeof(ka_timer_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -7447,22 +7355,12 @@ DEFUN (ip_pim_v6_secondary,
"pim multicast routing\n"
"Send v6 secondary addresses\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char send_v6_secondary_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(send_v6_secondary_xpath, sizeof(send_v6_secondary_xpath),
FRR_PIM_AF_XPATH,
@@ -7484,22 +7382,12 @@ DEFUN (no_ip_pim_v6_secondary,
"pim multicast routing\n"
"Send v6 secondary addresses\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char send_v6_secondary_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(send_v6_secondary_xpath, sizeof(send_v6_secondary_xpath),
FRR_PIM_AF_XPATH,
@@ -7522,7 +7410,6 @@ DEFUN (ip_pim_rp,
"ip address of RP\n"
"Group Address range to cover\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
int idx_rp = 3, idx_group = 4;
char rp_group_xpath[XPATH_MAXLEN];
@@ -7558,20 +7445,9 @@ DEFUN (ip_pim_rp,
return CMD_WARNING_CONFIG_FAILED;
}
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_group_xpath, sizeof(rp_group_xpath),
FRR_PIM_STATIC_RP_XPATH,
@@ -7595,24 +7471,12 @@ DEFUN (ip_pim_rp_prefix_list,
"Name of a prefix-list\n")
{
int idx_rp = 3, idx_plist = 5;
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char rp_plist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_plist_xpath, sizeof(rp_plist_xpath),
FRR_PIM_STATIC_RP_XPATH,
@@ -7642,24 +7506,12 @@ DEFUN (no_ip_pim_rp,
char group_list_xpath[XPATH_MAXLEN + 32];
char group_xpath[XPATH_MAXLEN + 64];
char rp_xpath[XPATH_MAXLEN];
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const struct lyd_node *group_dnode;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_xpath, sizeof(rp_xpath), FRR_PIM_STATIC_RP_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4",
@@ -7702,23 +7554,13 @@ DEFUN (no_ip_pim_rp_prefix_list,
int idx_plist = 6;
char rp_xpath[XPATH_MAXLEN];
char plist_xpath[XPATH_MAXLEN];
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const struct lyd_node *plist_dnode;
const char *plist;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(rp_xpath, sizeof(rp_xpath), FRR_PIM_STATIC_RP_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4",
@@ -7755,22 +7597,12 @@ DEFUN (ip_pim_ssm_prefix_list,
"group range prefix-list filter\n"
"Name of a prefix-list\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ssm_plist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssm_plist_xpath, sizeof(ssm_plist_xpath), FRR_PIM_AF_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4");
@@ -7790,22 +7622,12 @@ DEFUN (no_ip_pim_ssm_prefix_list,
"Source Specific Multicast\n"
"group range prefix-list filter\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ssm_plist_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssm_plist_xpath, sizeof(ssm_plist_xpath),
FRR_PIM_AF_XPATH,
@@ -7827,27 +7649,14 @@ DEFUN (no_ip_pim_ssm_prefix_list_name,
"group range prefix-list filter\n"
"Name of a prefix-list\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const struct lyd_node *ssm_plist_dnode;
char ssm_plist_xpath[XPATH_MAXLEN];
const char *ssm_plist_name;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
-
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
-
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
-
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssm_plist_xpath, sizeof(ssm_plist_xpath),
FRR_PIM_AF_XPATH,
@@ -8001,22 +7810,12 @@ DEFUN (ip_ssmpingd,
{
int idx_ipv4 = 2;
const char *source_str = (argc == 3) ? argv[idx_ipv4]->arg : "0.0.0.0";
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ssmpingd_ip_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssmpingd_ip_xpath, sizeof(ssmpingd_ip_xpath),
FRR_PIM_AF_XPATH,
@@ -8038,24 +7837,14 @@ DEFUN (no_ip_ssmpingd,
CONF_SSMPINGD_STR
"Source address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
int idx_ipv4 = 3;
const char *source_str = (argc == 4) ? argv[idx_ipv4]->arg : "0.0.0.0";
char ssmpingd_ip_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ssmpingd_ip_xpath, sizeof(ssmpingd_ip_xpath),
FRR_PIM_AF_XPATH,
@@ -8076,22 +7865,12 @@ DEFUN (ip_pim_ecmp,
"pim multicast routing\n"
"Enable PIM ECMP \n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_xpath, sizeof(ecmp_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -8109,22 +7888,12 @@ DEFUN (no_ip_pim_ecmp,
"pim multicast routing\n"
"Disable PIM ECMP \n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_xpath, sizeof(ecmp_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -8143,23 +7912,13 @@ DEFUN (ip_pim_ecmp_rebalance,
"Enable PIM ECMP \n"
"Enable PIM ECMP Rebalance\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_xpath[XPATH_MAXLEN];
char ecmp_rebalance_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_xpath, sizeof(ecmp_xpath), FRR_PIM_XPATH,
"frr-pim:pimd", "pim", vrfname);
@@ -8185,22 +7944,12 @@ DEFUN (no_ip_pim_ecmp_rebalance,
"Disable PIM ECMP \n"
"Disable PIM ECMP Rebalance\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char ecmp_rebalance_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(ecmp_rebalance_xpath, sizeof(ecmp_rebalance_xpath),
FRR_PIM_XPATH,
@@ -9882,23 +9631,13 @@ ALIAS(no_ip_pim_bfd, no_ip_pim_bfd_param_cmd,
"Source address for TCP connection\n"
"local ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char temp_xpath[XPATH_MAXLEN];
char msdp_peer_source_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_peer_source_xpath, sizeof(msdp_peer_source_xpath),
FRR_PIM_AF_XPATH,
@@ -9924,23 +9663,13 @@ DEFUN (no_ip_msdp_peer,
"Delete MSDP peer\n"
"peer ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_peer_xpath[XPATH_MAXLEN];
char temp_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_peer_xpath, sizeof(msdp_peer_xpath),
FRR_PIM_AF_XPATH,
@@ -9966,23 +9695,13 @@ DEFUN (ip_msdp_mesh_group_member,
"mesh group member\n"
"peer ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_mesh_group_name_xpath[XPATH_MAXLEN];
char msdp_mesh_group_member_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_mesh_group_name_xpath, sizeof(msdp_mesh_group_name_xpath),
FRR_PIM_AF_XPATH,
@@ -10015,7 +9734,6 @@ DEFUN (no_ip_msdp_mesh_group_member,
"mesh group member\n"
"peer ip address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char pim_af_xpath[XPATH_MAXLEN];
char mesh_group_xpath[XPATH_MAXLEN + 32];
@@ -10026,18 +9744,9 @@ DEFUN (no_ip_msdp_mesh_group_member,
const char *mesh_group_name;
const struct lyd_node *member_dnode;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(pim_af_xpath, sizeof(pim_af_xpath), FRR_PIM_AF_XPATH,
"frr-pim:pimd", "pim", vrfname, "frr-routing:ipv4");
@@ -10103,23 +9812,13 @@ DEFUN (ip_msdp_mesh_group_source,
"mesh group local address\n"
"source ip address for the TCP connection\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_mesh_source_ip_xpath[XPATH_MAXLEN];
char msdp_mesh_group_name_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_mesh_group_name_xpath, sizeof(msdp_mesh_group_name_xpath),
FRR_PIM_AF_XPATH,
@@ -10152,7 +9851,6 @@ DEFUN (no_ip_msdp_mesh_group_source,
"mesh group source\n"
"mesh group local address\n")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
char msdp_mesh_xpath[XPATH_MAXLEN];
char source_xpath[XPATH_MAXLEN];
@@ -10160,18 +9858,9 @@ DEFUN (no_ip_msdp_mesh_group_source,
char mesh_group_name_xpath[XPATH_MAXLEN];
const char *mesh_group_name;
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
snprintf(msdp_mesh_xpath, sizeof(msdp_mesh_xpath),
FRR_PIM_AF_XPATH,
@@ -10226,24 +9915,14 @@ DEFUN (no_ip_msdp_mesh_group,
"Delete MSDP mesh-group\n"
"mesh group name")
{
- const struct lyd_node *vrf_dnode;
const char *vrfname;
const char *mesh_group_name;
char xpath[XPATH_MAXLEN];
char msdp_mesh_xpath[XPATH_MAXLEN];
- if (vty->xpath_index) {
- vrf_dnode =
- yang_dnode_get(vty->candidate_config->dnode,
- VTY_CURR_XPATH);
- if (!vrf_dnode) {
- vty_out(vty,
- "%% Failed to get vrf dnode in candidate db\n");
- return CMD_WARNING_CONFIG_FAILED;
- }
- vrfname = yang_dnode_get_string(vrf_dnode, "./name");
- } else
- vrfname = VRF_DEFAULT_NAME;
+ vrfname = pim_cli_get_vrf_name(vty);
+ if (vrfname == NULL)
+ return CMD_WARNING_CONFIG_FAILED;
if (argc == 5) {
snprintf(xpath, sizeof(xpath), FRR_PIM_AF_XPATH, "frr-pim:pimd",
@@ -11412,9 +11091,7 @@ void pim_cmd_init(void)
install_element(CONFIG_NODE, &ip_pim_ssm_prefix_list_cmd);
install_element(VRF_NODE, &ip_pim_ssm_prefix_list_cmd);
install_element(CONFIG_NODE, &ip_pim_register_suppress_cmd);
- install_element(VRF_NODE, &ip_pim_register_suppress_cmd);
install_element(CONFIG_NODE, &no_ip_pim_register_suppress_cmd);
- install_element(VRF_NODE, &no_ip_pim_register_suppress_cmd);
install_element(CONFIG_NODE, &ip_pim_spt_switchover_infinity_cmd);
install_element(VRF_NODE, &ip_pim_spt_switchover_infinity_cmd);
install_element(CONFIG_NODE, &ip_pim_spt_switchover_infinity_plist_cmd);
@@ -11427,9 +11104,7 @@ void pim_cmd_init(void)
install_element(CONFIG_NODE, &pim_register_accept_list_cmd);
install_element(VRF_NODE, &pim_register_accept_list_cmd);
install_element(CONFIG_NODE, &ip_pim_joinprune_time_cmd);
- install_element(VRF_NODE, &ip_pim_joinprune_time_cmd);
install_element(CONFIG_NODE, &no_ip_pim_joinprune_time_cmd);
- install_element(VRF_NODE, &no_ip_pim_joinprune_time_cmd);
install_element(CONFIG_NODE, &ip_pim_keep_alive_cmd);
install_element(VRF_NODE, &ip_pim_keep_alive_cmd);
install_element(CONFIG_NODE, &ip_pim_rp_keep_alive_cmd);
@@ -11439,9 +11114,7 @@ void pim_cmd_init(void)
install_element(CONFIG_NODE, &no_ip_pim_rp_keep_alive_cmd);
install_element(VRF_NODE, &no_ip_pim_rp_keep_alive_cmd);
install_element(CONFIG_NODE, &ip_pim_packets_cmd);
- install_element(VRF_NODE, &ip_pim_packets_cmd);
install_element(CONFIG_NODE, &no_ip_pim_packets_cmd);
- install_element(VRF_NODE, &no_ip_pim_packets_cmd);
install_element(CONFIG_NODE, &ip_pim_v6_secondary_cmd);
install_element(VRF_NODE, &ip_pim_v6_secondary_cmd);
install_element(CONFIG_NODE, &no_ip_pim_v6_secondary_cmd);
diff --git a/pimd/pim_hello.c b/pimd/pim_hello.c
index 6f5c4174e2..e48a4bdd4d 100644
--- a/pimd/pim_hello.c
+++ b/pimd/pim_hello.c
@@ -141,14 +141,14 @@ int pim_hello_recv(struct interface *ifp, struct in_addr src_addr,
on_trace(__func__, ifp, src_addr);
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
++pim_ifp->pim_ifstat_hello_recv;
/*
Parse PIM hello TLVs
*/
- zassert(tlv_buf_size >= 0);
+ assert(tlv_buf_size >= 0);
tlv_curr = tlv_buf;
tlv_pastend = tlv_buf + tlv_buf_size;
@@ -539,11 +539,11 @@ void pim_hello_require(struct interface *ifp)
{
struct pim_interface *pim_ifp;
- zassert(ifp);
+ assert(ifp);
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
if (pim_ifp->pim_ifstat_hello_sent)
return;
diff --git a/pimd/pim_iface.c b/pimd/pim_iface.c
index 62d19f7619..834399053b 100644
--- a/pimd/pim_iface.c
+++ b/pimd/pim_iface.c
@@ -115,8 +115,8 @@ struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim,
{
struct pim_interface *pim_ifp;
- zassert(ifp);
- zassert(!ifp->info);
+ assert(ifp);
+ assert(!ifp->info);
pim_ifp = XCALLOC(MTYPE_PIM_INTERFACE, sizeof(*pim_ifp));
@@ -145,8 +145,8 @@ struct pim_interface *pim_if_new(struct interface *ifp, bool igmp, bool pim,
The number of seconds represented by the [Query Response Interval]
must be less than the [Query Interval].
*/
- zassert(pim_ifp->igmp_query_max_response_time_dsec
- < pim_ifp->igmp_default_query_interval);
+ assert(pim_ifp->igmp_query_max_response_time_dsec
+ < pim_ifp->igmp_default_query_interval);
if (pim)
PIM_IF_DO_PIM(pim_ifp->options);
@@ -198,9 +198,9 @@ void pim_if_delete(struct interface *ifp)
struct pim_interface *pim_ifp;
struct pim_ifchannel *ch;
- zassert(ifp);
+ assert(ifp);
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
if (pim_ifp->igmp_join_list) {
pim_if_igmp_join_del_all(ifp);
@@ -238,7 +238,7 @@ void pim_if_update_could_assert(struct interface *ifp)
struct pim_ifchannel *ch;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
pim_ifchannel_update_could_assert(ch);
@@ -251,7 +251,7 @@ static void pim_if_update_my_assert_metric(struct interface *ifp)
struct pim_ifchannel *ch;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
pim_ifchannel_update_my_assert_metric(ch);
@@ -263,7 +263,7 @@ static void pim_addr_change(struct interface *ifp)
struct pim_interface *pim_ifp;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
pim_if_dr_election(ifp); /* router's own DR Priority (addr) changes --
Done TODO T30 */
@@ -507,10 +507,10 @@ void pim_if_addr_add(struct connected *ifc)
struct in_addr ifaddr;
bool vxlan_term;
- zassert(ifc);
+ assert(ifc);
ifp = ifc->ifp;
- zassert(ifp);
+ assert(ifp);
pim_ifp = ifp->info;
if (!pim_ifp)
return;
@@ -708,9 +708,9 @@ void pim_if_addr_del(struct connected *ifc, int force_prim_as_any)
{
struct interface *ifp;
- zassert(ifc);
+ assert(ifc);
ifp = ifc->ifp;
- zassert(ifp);
+ assert(ifp);
if (PIM_DEBUG_ZEBRA)
zlog_debug("%s: %s ifindex=%d disconnected IP address %pFX %s",
@@ -945,7 +945,7 @@ int pim_if_add_vif(struct interface *ifp, bool ispimreg, bool is_vxlan_term)
struct in_addr ifaddr;
unsigned char flags = 0;
- zassert(pim_ifp);
+ assert(pim_ifp);
if (pim_ifp->mroute_vif_index > 0) {
zlog_warn("%s: vif_index=%d > 0 on interface %s ifindex=%d",
@@ -1063,8 +1063,8 @@ int pim_if_lan_delay_enabled(struct interface *ifp)
struct pim_interface *pim_ifp;
pim_ifp = ifp->info;
- zassert(pim_ifp);
- zassert(pim_ifp->pim_number_of_nonlandelay_neighbors >= 0);
+ assert(pim_ifp);
+ assert(pim_ifp->pim_number_of_nonlandelay_neighbors >= 0);
return pim_ifp->pim_number_of_nonlandelay_neighbors == 0;
}
@@ -1128,7 +1128,7 @@ struct pim_neighbor *pim_if_find_neighbor(struct interface *ifp,
struct pim_interface *pim_ifp;
struct prefix p;
- zassert(ifp);
+ assert(ifp);
pim_ifp = ifp->info;
if (!pim_ifp) {
@@ -1171,7 +1171,7 @@ long pim_if_t_suppressed_msec(struct interface *ifp)
uint32_t ramount = 0;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
/* join suppression disabled ? */
if (PIM_IF_TEST_PIM_CAN_DISABLE_JOIN_SUPPRESSION(pim_ifp->options))
@@ -1196,7 +1196,7 @@ static struct igmp_join *igmp_join_find(struct list *join_list,
struct listnode *node;
struct igmp_join *ij;
- zassert(join_list);
+ assert(join_list);
for (ALL_LIST_ELEMENTS_RO(join_list, node, ij)) {
if ((group_addr.s_addr == ij->group_addr.s_addr)
@@ -1245,7 +1245,7 @@ static struct igmp_join *igmp_join_new(struct interface *ifp,
int join_fd;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
join_fd = igmp_join_sock(ifp->name, ifp->ifindex, group_addr,
source_addr);
@@ -1416,7 +1416,7 @@ void pim_if_assert_on_neighbor_down(struct interface *ifp,
struct pim_ifchannel *ch;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb) {
/* Is (S,G,I) assert loser ? */
diff --git a/pimd/pim_ifchannel.c b/pimd/pim_ifchannel.c
index cdaf7bcdd4..1bf3a619bf 100644
--- a/pimd/pim_ifchannel.c
+++ b/pimd/pim_ifchannel.c
@@ -498,7 +498,7 @@ void pim_ifchannel_membership_clear(struct interface *ifp)
struct pim_ifchannel *ch;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
RB_FOREACH (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb)
ifmembership_set(ch, PIM_IFMEMBERSHIP_NOINFO);
@@ -510,7 +510,7 @@ void pim_ifchannel_delete_on_noinfo(struct interface *ifp)
struct pim_ifchannel *ch, *ch_tmp;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
RB_FOREACH_SAFE (ch, pim_ifchannel_rb, &pim_ifp->ifchannel_rb, ch_tmp)
delete_on_noinfo(ch);
@@ -743,7 +743,7 @@ static int on_ifjoin_prune_pending_timer(struct thread *t)
if (!ch->upstream->channel_oil->installed)
pim_upstream_mroute_add(
ch->upstream->channel_oil,
- __PRETTY_FUNCTION__);
+ __func__);
}
}
/* from here ch may have been deleted */
@@ -825,7 +825,7 @@ static int nonlocal_upstream(int is_join, struct interface *recv_ifp,
int is_local; /* boolean */
recv_pim_ifp = recv_ifp->info;
- zassert(recv_pim_ifp);
+ assert(recv_pim_ifp);
is_local = (upstream.s_addr == recv_pim_ifp->primary_address.s_addr);
@@ -913,7 +913,7 @@ void pim_ifchannel_join_add(struct interface *ifp, struct in_addr neigh_addr,
}
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
switch (ch->ifjoin_state) {
case PIM_IFJOIN_NOINFO:
@@ -939,7 +939,7 @@ void pim_ifchannel_join_add(struct interface *ifp, struct in_addr neigh_addr,
}
break;
case PIM_IFJOIN_JOIN:
- zassert(!ch->t_ifjoin_prune_pending_timer);
+ assert(!ch->t_ifjoin_prune_pending_timer);
/*
In the JOIN state ch->t_ifjoin_expiry_timer may be NULL due to
diff --git a/pimd/pim_igmp.c b/pimd/pim_igmp.c
index 73e42e9d83..f2b909e268 100644
--- a/pimd/pim_igmp.c
+++ b/pimd/pim_igmp.c
@@ -159,7 +159,7 @@ static int pim_igmp_other_querier_expire(struct thread *t)
igmp = THREAD_ARG(t);
- zassert(!igmp->t_igmp_query_timer);
+ assert(!igmp->t_igmp_query_timer);
if (PIM_DEBUG_IGMP_TRACE) {
char ifaddr_str[INET_ADDRSTRLEN];
@@ -185,9 +185,9 @@ void pim_igmp_other_querier_timer_on(struct igmp_sock *igmp)
long other_querier_present_interval_msec;
struct pim_interface *pim_ifp;
- zassert(igmp);
- zassert(igmp->interface);
- zassert(igmp->interface->info);
+ assert(igmp);
+ assert(igmp->interface);
+ assert(igmp->interface->info);
pim_ifp = igmp->interface->info;
@@ -218,7 +218,7 @@ void pim_igmp_other_querier_timer_on(struct igmp_sock *igmp)
Since this socket is starting the other-querier-present timer,
there should not be periodic query timer for this socket.
*/
- zassert(!igmp->t_igmp_query_timer);
+ assert(!igmp->t_igmp_query_timer);
/*
RFC 3376: 8.5. Other Querier Present Interval
@@ -255,7 +255,7 @@ void pim_igmp_other_querier_timer_on(struct igmp_sock *igmp)
void pim_igmp_other_querier_timer_off(struct igmp_sock *igmp)
{
- zassert(igmp);
+ assert(igmp);
if (PIM_DEBUG_IGMP_TRACE) {
if (igmp->t_other_querier_timer) {
@@ -589,9 +589,9 @@ void pim_igmp_general_query_on(struct igmp_sock *igmp)
Since this socket is starting as querier,
there should not exist a timer for other-querier-present.
*/
- zassert(!igmp->t_other_querier_timer);
+ assert(!igmp->t_other_querier_timer);
pim_ifp = igmp->interface->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
/*
RFC 3376: 8.6. Startup Query Interval
@@ -638,7 +638,7 @@ void pim_igmp_general_query_on(struct igmp_sock *igmp)
void pim_igmp_general_query_off(struct igmp_sock *igmp)
{
- zassert(igmp);
+ assert(igmp);
if (PIM_DEBUG_IGMP_TRACE) {
if (igmp->t_igmp_query_timer) {
@@ -664,8 +664,8 @@ static int pim_igmp_general_query(struct thread *t)
igmp = THREAD_ARG(t);
- zassert(igmp->interface);
- zassert(igmp->interface->info);
+ assert(igmp->interface);
+ assert(igmp->interface->info);
pim_ifp = igmp->interface->info;
@@ -835,19 +835,19 @@ void igmp_group_delete(struct igmp_group *group)
void igmp_group_delete_empty_include(struct igmp_group *group)
{
- zassert(!group->group_filtermode_isexcl);
- zassert(!listcount(group->group_source_list));
+ assert(!group->group_filtermode_isexcl);
+ assert(!listcount(group->group_source_list));
igmp_group_delete(group);
}
void igmp_sock_free(struct igmp_sock *igmp)
{
- zassert(!igmp->t_igmp_read);
- zassert(!igmp->t_igmp_query_timer);
- zassert(!igmp->t_other_querier_timer);
- zassert(igmp->igmp_group_list);
- zassert(!listcount(igmp->igmp_group_list));
+ assert(!igmp->t_igmp_read);
+ assert(!igmp->t_igmp_query_timer);
+ assert(!igmp->t_other_querier_timer);
+ assert(igmp->igmp_group_list);
+ assert(!listcount(igmp->igmp_group_list));
list_delete(&igmp->igmp_group_list);
hash_free(igmp->igmp_group_hash);
@@ -1076,7 +1076,7 @@ static int igmp_group_timer(struct thread *t)
group_str, group->group_igmp_sock->interface->name);
}
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
group->group_filtermode_isexcl = 0;
@@ -1085,7 +1085,7 @@ static int igmp_group_timer(struct thread *t)
igmp_source_delete_expired(group->group_source_list);
- zassert(!group->group_filtermode_isexcl);
+ assert(!group->group_filtermode_isexcl);
/*
RFC 3376: 6.2.2. Definition of Group Timers
@@ -1137,7 +1137,7 @@ void igmp_group_timer_on(struct igmp_group *group, long interval_msec,
it represents the time for the *filter-mode* of the group to
expire and switch to INCLUDE mode.
*/
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
thread_add_timer_msec(router->master, igmp_group_timer, group,
interval_msec, &group->t_group_timer);
@@ -1228,8 +1228,8 @@ struct igmp_group *igmp_add_group_by_addr(struct igmp_sock *igmp,
it represents the time for the *filter-mode* of the group to
expire and switch to INCLUDE mode.
*/
- zassert(!group->group_filtermode_isexcl); /* INCLUDE mode */
- zassert(!group->t_group_timer); /* group timer == 0 */
+ assert(!group->group_filtermode_isexcl); /* INCLUDE mode */
+ assert(!group->t_group_timer); /* group timer == 0 */
/* Any source (*,G) is forwarded only if mode is EXCLUDE {empty} */
igmp_anysource_forward_stop(group);
diff --git a/pimd/pim_igmpv2.c b/pimd/pim_igmpv2.c
index 7f3c7a0f8c..6eadf87c83 100644
--- a/pimd/pim_igmpv2.c
+++ b/pimd/pim_igmpv2.c
@@ -54,7 +54,7 @@ void igmp_v2_send_query(struct igmp_group *group, int fd, const char *ifname,
/* max_resp_code must be non-zero else this will look like an IGMP v1
* query */
max_resp_code = igmp_msg_encode16to8(query_max_response_time_dsec);
- zassert(max_resp_code > 0);
+ assert(max_resp_code > 0);
query_buf[0] = PIM_IGMP_MEMBERSHIP_QUERY;
query_buf[1] = max_resp_code;
diff --git a/pimd/pim_igmpv3.c b/pimd/pim_igmpv3.c
index 425adfe166..3ae7744eb0 100644
--- a/pimd/pim_igmpv3.c
+++ b/pimd/pim_igmpv3.c
@@ -103,7 +103,7 @@ void igmp_group_reset_gmi(struct igmp_group *group)
it represents the time for the *filter-mode* of the group to
expire and switch to INCLUDE mode.
*/
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
igmp_group_timer_on(group, group_membership_interval_msec, ifp->name);
}
@@ -314,7 +314,7 @@ static void group_exclude_fwd_anysrc_ifempty(struct igmp_group *group)
{
struct pim_interface *pim_ifp = group->group_igmp_sock->interface->info;
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
if (listcount(group->group_source_list) < 1) {
igmp_anysource_forward_start(pim_ifp->pim, group);
@@ -324,7 +324,7 @@ static void group_exclude_fwd_anysrc_ifempty(struct igmp_group *group)
void igmp_source_free(struct igmp_source *source)
{
/* make sure there is no source timer running */
- zassert(!source->t_source_timer);
+ assert(!source->t_source_timer);
XFREE(MTYPE_PIM_IGMP_GROUP_SOURCE, source);
}
@@ -557,7 +557,7 @@ static void isex_excl(struct igmp_group *group, int num_sources,
int i;
/* EXCLUDE mode */
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
/* E.1: set deletion flag for known sources (X,Y) */
source_mark_delete_flag(group);
@@ -577,10 +577,10 @@ static void isex_excl(struct igmp_group *group, int num_sources,
/* E.4: if not found, create source with timer=GMI:
* (A-X-Y) */
source = source_new(group, *src_addr);
- zassert(!source->t_source_timer); /* timer == 0 */
+ assert(!source->t_source_timer); /* timer == 0 */
igmp_source_reset_gmi(group->group_igmp_sock, group,
source);
- zassert(source->t_source_timer); /* (A-X-Y) timer > 0 */
+ assert(source->t_source_timer); /* (A-X-Y) timer > 0 */
}
} /* scan received sources */
@@ -610,7 +610,7 @@ static void isex_incl(struct igmp_group *group, int num_sources,
int i;
/* INCLUDE mode */
- zassert(!group->group_filtermode_isexcl);
+ assert(!group->group_filtermode_isexcl);
/* I.1: set deletion flag for known sources (A) */
source_mark_delete_flag(group);
@@ -631,7 +631,7 @@ static void isex_incl(struct igmp_group *group, int num_sources,
/* I.4: if not found, create source with timer=0 (B-A)
*/
source = source_new(group, *src_addr);
- zassert(!source->t_source_timer); /* (B-A) timer=0 */
+ assert(!source->t_source_timer); /* (B-A) timer=0 */
}
} /* scan received sources */
@@ -641,7 +641,7 @@ static void isex_incl(struct igmp_group *group, int num_sources,
group->group_filtermode_isexcl = 1; /* boolean=true */
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
group_exclude_fwd_anysrc_ifempty(group);
}
@@ -675,10 +675,10 @@ void igmpv3_report_isex(struct igmp_sock *igmp, struct in_addr from,
} else {
/* INCLUDE mode */
isex_incl(group, num_sources, sources);
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
}
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
igmp_group_reset_gmi(group);
}
@@ -807,7 +807,7 @@ static void toex_incl(struct igmp_group *group, int num_sources,
int num_sources_tosend = 0;
int i;
- zassert(!group->group_filtermode_isexcl);
+ assert(!group->group_filtermode_isexcl);
/* Set DELETE flag for all known sources (A) */
source_mark_delete_flag(group);
@@ -834,7 +834,7 @@ static void toex_incl(struct igmp_group *group, int num_sources,
/* If source not found, create source with timer=0:
* (B-A)=0 */
source = source_new(group, *src_addr);
- zassert(!source->t_source_timer); /* (B-A) timer=0 */
+ assert(!source->t_source_timer); /* (B-A) timer=0 */
}
} /* Scan received sources (B) */
@@ -849,7 +849,7 @@ static void toex_incl(struct igmp_group *group, int num_sources,
source_query_send_by_flag(group, num_sources_tosend);
}
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
group_exclude_fwd_anysrc_ifempty(group);
}
@@ -894,17 +894,17 @@ static void toex_excl(struct igmp_group *group, int num_sources,
long group_timer_msec;
source = source_new(group, *src_addr);
- zassert(!source->t_source_timer); /* timer == 0 */
+ assert(!source->t_source_timer); /* timer == 0 */
group_timer_msec = igmp_group_timer_remain_msec(group);
igmp_source_timer_on(group, source, group_timer_msec);
- zassert(source->t_source_timer); /* (A-X-Y) timer > 0 */
+ assert(source->t_source_timer); /* (A-X-Y) timer > 0 */
/* make sure source is created with DELETE flag unset */
- zassert(!IGMP_SOURCE_TEST_DELETE(source->source_flags));
+ assert(!IGMP_SOURCE_TEST_DELETE(source->source_flags));
}
/* make sure reported source has DELETE flag unset */
- zassert(!IGMP_SOURCE_TEST_DELETE(source->source_flags));
+ assert(!IGMP_SOURCE_TEST_DELETE(source->source_flags));
if (source->t_source_timer) {
/* if source timer>0 mark SEND flag: Q(G,A-Y) */
@@ -948,9 +948,9 @@ void igmpv3_report_toex(struct igmp_sock *igmp, struct in_addr from,
} else {
/* INCLUDE mode */
toex_incl(group, num_sources, sources);
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
}
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
/* Group Timer=GMI */
igmp_group_reset_gmi(group);
@@ -1347,7 +1347,7 @@ static void source_query_send_by_flag(struct igmp_group *group,
long lmqi_msec; /* Last Member Query Interval */
long lmqt_msec; /* Last Member Query Time */
- zassert(num_sources_tosend > 0);
+ assert(num_sources_tosend > 0);
igmp = group->group_igmp_sock;
pim_ifp = igmp->interface->info;
@@ -1408,10 +1408,10 @@ static void block_excl(struct igmp_group *group, int num_sources,
long group_timer_msec;
source = source_new(group, *src_addr);
- zassert(!source->t_source_timer); /* timer == 0 */
+ assert(!source->t_source_timer); /* timer == 0 */
group_timer_msec = igmp_group_timer_remain_msec(group);
igmp_source_timer_on(group, source, group_timer_msec);
- zassert(source->t_source_timer); /* (A-X-Y) timer > 0 */
+ assert(source->t_source_timer); /* (A-X-Y) timer > 0 */
}
if (source->t_source_timer) {
@@ -1523,7 +1523,7 @@ void igmp_group_timer_lower_to_lmqt(struct igmp_group *group)
lmqt_msec);
}
- zassert(group->group_filtermode_isexcl);
+ assert(group->group_filtermode_isexcl);
igmp_group_timer_on(group, lmqt_msec, ifname);
}
@@ -1581,7 +1581,7 @@ void igmp_v3_send_query(struct igmp_group *group, int fd, const char *ifname,
socklen_t tolen;
uint16_t checksum;
- zassert(num_sources >= 0);
+ assert(num_sources >= 0);
msg_size = IGMP_V3_SOURCES_OFFSET + (num_sources << 2);
if (msg_size > query_buf_size) {
@@ -1593,7 +1593,7 @@ void igmp_v3_send_query(struct igmp_group *group, int fd, const char *ifname,
}
s_flag = PIM_FORCE_BOOLEAN(s_flag);
- zassert((s_flag == 0) || (s_flag == 1));
+ assert((s_flag == 0) || (s_flag == 1));
max_resp_code = igmp_msg_encode16to8(query_max_response_time_dsec);
qqic = igmp_msg_encode16to8(querier_query_interval);
diff --git a/pimd/pim_join.c b/pimd/pim_join.c
index 2766a6d2b5..c7a80ca8e0 100644
--- a/pimd/pim_join.c
+++ b/pimd/pim_join.c
@@ -71,7 +71,7 @@ static void recv_join(struct interface *ifp, struct pim_neighbor *neigh,
}
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
++pim_ifp->pim_ifstat_join_recv;
@@ -134,7 +134,7 @@ static void recv_prune(struct interface *ifp, struct pim_neighbor *neigh,
}
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
++pim_ifp->pim_ifstat_prune_recv;
diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c
index 7336cdfef8..9cf73c38c3 100644
--- a/pimd/pim_msdp.c
+++ b/pimd/pim_msdp.c
@@ -1562,6 +1562,26 @@ int pim_msdp_config_write(struct pim_instance *pim, struct vty *vty,
return count;
}
+bool pim_msdp_peer_config_write(struct vty *vty, struct pim_instance *pim,
+ const char *spaces)
+{
+ struct pim_msdp_peer *mp;
+ struct listnode *node;
+ bool written = false;
+
+ for (ALL_LIST_ELEMENTS_RO(pim->msdp.peer_list, node, mp)) {
+ /* Non meshed peers have the group name set to 'default'. */
+ if (strcmp(mp->mesh_group_name, "default"))
+ continue;
+
+ vty_out(vty, "%sip msdp peer %pI4 source %pI4\n", spaces,
+ &mp->peer, &mp->local);
+ written = true;
+ }
+
+ return written;
+}
+
/* Enable feature including active/periodic timers etc. on the first peer
* config. Till then MSDP should just stay quiet. */
static void pim_msdp_enable(struct pim_instance *pim)
diff --git a/pimd/pim_msdp.h b/pimd/pim_msdp.h
index 15a1041e21..4d01880fbf 100644
--- a/pimd/pim_msdp.h
+++ b/pimd/pim_msdp.h
@@ -234,6 +234,8 @@ char *pim_msdp_peer_key_dump(struct pim_msdp_peer *mp, char *buf, int buf_size,
bool long_format);
int pim_msdp_config_write(struct pim_instance *pim, struct vty *vty,
const char *spaces);
+bool pim_msdp_peer_config_write(struct vty *vty, struct pim_instance *pim,
+ const char *spaces);
void pim_msdp_peer_pkt_txed(struct pim_msdp_peer *mp);
void pim_msdp_sa_ref(struct pim_instance *pim, struct pim_msdp_peer *mp,
struct prefix_sg *sg, struct in_addr rp);
diff --git a/pimd/pim_nb_config.c b/pimd/pim_nb_config.c
index 8e6f2ec42b..4598297f93 100644
--- a/pimd/pim_nb_config.c
+++ b/pimd/pim_nb_config.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "pimd.h"
#include "pim_nb.h"
#include "lib/northbound_cli.h"
@@ -36,7 +38,7 @@ static void pim_if_membership_clear(struct interface *ifp)
struct pim_interface *pim_ifp;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
if (PIM_IF_TEST_PIM(pim_ifp->options)
&& PIM_IF_TEST_IGMP(pim_ifp->options)) {
@@ -62,7 +64,7 @@ static void pim_if_membership_refresh(struct interface *ifp)
struct igmp_sock *igmp;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
if (!PIM_IF_TEST_PIM(pim_ifp->options))
return;
@@ -576,7 +578,7 @@ static void igmp_sock_query_interval_reconfig(struct igmp_sock *igmp)
struct interface *ifp;
struct pim_interface *pim_ifp;
- zassert(igmp);
+ assert(igmp);
/* other querier present? */
@@ -585,8 +587,8 @@ static void igmp_sock_query_interval_reconfig(struct igmp_sock *igmp)
/* this is the querier */
- zassert(igmp->interface);
- zassert(igmp->interface->info);
+ assert(igmp->interface);
+ assert(igmp->interface->info);
ifp = igmp->interface;
pim_ifp = ifp->info;
@@ -616,25 +618,25 @@ static void igmp_sock_query_reschedule(struct igmp_sock *igmp)
if (igmp->t_igmp_query_timer) {
/* other querier present */
- zassert(igmp->t_igmp_query_timer);
- zassert(!igmp->t_other_querier_timer);
+ assert(igmp->t_igmp_query_timer);
+ assert(!igmp->t_other_querier_timer);
pim_igmp_general_query_off(igmp);
pim_igmp_general_query_on(igmp);
- zassert(igmp->t_igmp_query_timer);
- zassert(!igmp->t_other_querier_timer);
+ assert(igmp->t_igmp_query_timer);
+ assert(!igmp->t_other_querier_timer);
} else {
/* this is the querier */
- zassert(!igmp->t_igmp_query_timer);
- zassert(igmp->t_other_querier_timer);
+ assert(!igmp->t_igmp_query_timer);
+ assert(igmp->t_other_querier_timer);
pim_igmp_other_querier_timer_off(igmp);
pim_igmp_other_querier_timer_on(igmp);
- zassert(!igmp->t_igmp_query_timer);
- zassert(igmp->t_other_querier_timer);
+ assert(!igmp->t_igmp_query_timer);
+ assert(igmp->t_other_querier_timer);
}
}
@@ -761,8 +763,8 @@ int pim_register_suppress_time_modify(struct nb_cb_modify_args *args)
case NB_EV_ABORT:
break;
case NB_EV_APPLY:
- router->register_suppress_time =
- yang_dnode_get_uint16(args->dnode, NULL);
+ pim_update_suppress_timers(
+ yang_dnode_get_uint16(args->dnode, NULL));
break;
}
diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c
index 19dc469091..48b1a30f2d 100644
--- a/pimd/pim_neighbor.c
+++ b/pimd/pim_neighbor.c
@@ -49,7 +49,7 @@ static void dr_election_by_addr(struct interface *ifp)
struct pim_neighbor *neigh;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
pim_ifp->pim_dr_addr = pim_ifp->primary_address;
@@ -73,7 +73,7 @@ static void dr_election_by_pri(struct interface *ifp)
uint32_t dr_pri;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
pim_ifp->pim_dr_addr = pim_ifp->primary_address;
dr_pri = pim_ifp->pim_dr_priority;
@@ -310,9 +310,9 @@ pim_neighbor_new(struct interface *ifp, struct in_addr source_addr,
struct pim_neighbor *neigh;
char src_str[INET_ADDRSTRLEN];
- zassert(ifp);
+ assert(ifp);
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
neigh = XCALLOC(MTYPE_PIM_NEIGHBOR, sizeof(*neigh));
@@ -412,7 +412,7 @@ static void delete_prefix_list(struct pim_neighbor *neigh)
void pim_neighbor_free(struct pim_neighbor *neigh)
{
- zassert(!neigh->t_expire_timer);
+ assert(!neigh->t_expire_timer);
delete_prefix_list(neigh);
@@ -503,7 +503,7 @@ pim_neighbor_add(struct interface *ifp, struct in_addr source_addr,
}
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
listnode_add(pim_ifp->pim_neighbor_list, neigh);
@@ -566,7 +566,7 @@ static uint16_t find_neighbors_next_highest_propagation_delay_msec(
uint16_t next_highest_delay_msec;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
next_highest_delay_msec = pim_ifp->pim_propagation_delay_msec;
@@ -590,7 +590,7 @@ static uint16_t find_neighbors_next_highest_override_interval_msec(
uint16_t next_highest_interval_msec;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
next_highest_interval_msec = pim_ifp->pim_override_interval_msec;
@@ -613,7 +613,7 @@ void pim_neighbor_delete(struct interface *ifp, struct pim_neighbor *neigh,
char src_str[INET_ADDRSTRLEN];
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
pim_inet4_dump("<src?>", neigh->source_addr, src_str, sizeof(src_str));
zlog_info("PIM NEIGHBOR DOWN: neighbor %s on interface %s: %s", src_str,
@@ -637,10 +637,10 @@ void pim_neighbor_delete(struct interface *ifp, struct pim_neighbor *neigh,
--pim_ifp->pim_dr_num_nondrpri_neighbors;
}
- zassert(neigh->propagation_delay_msec
- <= pim_ifp->pim_neighbors_highest_propagation_delay_msec);
- zassert(neigh->override_interval_msec
- <= pim_ifp->pim_neighbors_highest_override_interval_msec);
+ assert(neigh->propagation_delay_msec
+ <= pim_ifp->pim_neighbors_highest_propagation_delay_msec);
+ assert(neigh->override_interval_msec
+ <= pim_ifp->pim_neighbors_highest_override_interval_msec);
if (pim_if_lan_delay_enabled(ifp)) {
@@ -683,7 +683,7 @@ void pim_neighbor_delete_all(struct interface *ifp, const char *delete_message)
struct pim_neighbor *neigh;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
for (ALL_LIST_ELEMENTS(pim_ifp->pim_neighbor_list, neigh_node,
neigh_nextnode, neigh)) {
@@ -728,9 +728,9 @@ static void delete_from_neigh_addr(struct interface *ifp,
struct pim_interface *pim_ifp;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
- zassert(addr_list);
+ assert(addr_list);
/*
Scan secondary address list
diff --git a/pimd/pim_oil.c b/pimd/pim_oil.c
index 3ec0720fc4..0a4e3e1a6f 100644
--- a/pimd/pim_oil.c
+++ b/pimd/pim_oil.c
@@ -219,8 +219,8 @@ int pim_channel_del_oif(struct channel_oil *channel_oil, struct interface *oif,
{
struct pim_interface *pim_ifp;
- zassert(channel_oil);
- zassert(oif);
+ assert(channel_oil);
+ assert(oif);
pim_ifp = oif->info;
diff --git a/pimd/pim_pim.c b/pimd/pim_pim.c
index 2ccff8b84a..4ba08a19d8 100644
--- a/pimd/pim_pim.c
+++ b/pimd/pim_pim.c
@@ -407,8 +407,8 @@ static void pim_sock_read_on(struct interface *ifp)
{
struct pim_interface *pim_ifp;
- zassert(ifp);
- zassert(ifp->info);
+ assert(ifp);
+ assert(ifp->info);
pim_ifp = ifp->info;
@@ -444,7 +444,7 @@ void pim_ifstat_reset(struct interface *ifp)
{
struct pim_interface *pim_ifp;
- zassert(ifp);
+ assert(ifp);
pim_ifp = ifp->info;
if (!pim_ifp) {
@@ -462,8 +462,8 @@ void pim_sock_reset(struct interface *ifp)
{
struct pim_interface *pim_ifp;
- zassert(ifp);
- zassert(ifp->info);
+ assert(ifp);
+ assert(ifp->info);
pim_ifp = ifp->info;
@@ -671,8 +671,8 @@ static int hello_send(struct interface *ifp, uint16_t holdtime)
pim_msg_size = pim_tlv_size + PIM_PIM_MIN_LEN;
- zassert(pim_msg_size >= PIM_PIM_MIN_LEN);
- zassert(pim_msg_size <= PIM_PIM_BUFSIZE_WRITE);
+ assert(pim_msg_size >= PIM_PIM_MIN_LEN);
+ assert(pim_msg_size <= PIM_PIM_BUFSIZE_WRITE);
pim_msg_build_header(pim_msg, pim_msg_size, PIM_MSG_TYPE_HELLO, false);
@@ -846,7 +846,7 @@ int pim_sock_add(struct interface *ifp)
uint32_t old_genid;
pim_ifp = ifp->info;
- zassert(pim_ifp);
+ assert(pim_ifp);
if (pim_ifp->pim_sock_fd >= 0) {
if (PIM_DEBUG_PIM_PACKETS)
diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c
index dbba6b66d8..feaeea929d 100644
--- a/pimd/pim_rp.c
+++ b/pimd/pim_rp.c
@@ -702,7 +702,7 @@ int pim_rp_del(struct pim_instance *pim, struct in_addr rp_addr,
bsgrp = pim_bsm_get_bsgrp_node(&pim->global_scope, &group);
if (bsgrp) {
- bsrp = listnode_head(bsgrp->bsrp_list);
+ bsrp = bsm_rpinfos_first(bsgrp->bsrp_list);
if (bsrp) {
if (PIM_DEBUG_PIM_TRACE) {
char bsrp_str[INET_ADDRSTRLEN];
diff --git a/pimd/pim_ssmpingd.c b/pimd/pim_ssmpingd.c
index f4d3547b3f..03e77de161 100644
--- a/pimd/pim_ssmpingd.c
+++ b/pimd/pim_ssmpingd.c
@@ -41,12 +41,12 @@ void pim_ssmpingd_init(struct pim_instance *pim)
{
int result;
- zassert(!pim->ssmpingd_list);
+ assert(!pim->ssmpingd_list);
result = inet_pton(AF_INET, PIM_SSMPINGD_REPLY_GROUP,
&pim->ssmpingd_group_addr);
- zassert(result > 0);
+ assert(result > 0);
}
void pim_ssmpingd_destroy(struct pim_instance *pim)
@@ -197,7 +197,7 @@ static int ssmpingd_socket(struct in_addr addr, int port, int mttl)
static void ssmpingd_delete(struct ssmpingd_sock *ss)
{
- zassert(ss);
+ assert(ss);
THREAD_OFF(ss->t_sock_read);
diff --git a/pimd/pim_time.c b/pimd/pim_time.c
index 9878fcf6b4..c88ee7554b 100644
--- a/pimd/pim_time.c
+++ b/pimd/pim_time.c
@@ -106,7 +106,7 @@ int pim_time_mmss(char *buf, int buf_size, long sec)
long mm;
int wr;
- zassert(buf_size >= 5);
+ assert(buf_size >= 5);
mm = sec / 60;
sec %= 60;
@@ -122,7 +122,7 @@ static int pim_time_hhmmss(char *buf, int buf_size, long sec)
long mm;
int wr;
- zassert(buf_size >= 8);
+ assert(buf_size >= 8);
hh = sec / 3600;
sec %= 3600;
@@ -156,7 +156,7 @@ void pim_time_timer_to_hhmmss(char *buf, int buf_size, struct thread *t_timer)
void pim_time_uptime(char *buf, int buf_size, int64_t uptime_sec)
{
- zassert(buf_size >= 8);
+ assert(buf_size >= 8);
pim_time_hhmmss(buf, buf_size, uptime_sec);
}
diff --git a/pimd/pim_tlv.c b/pimd/pim_tlv.c
index 633bb207bd..f21c369b8d 100644
--- a/pimd/pim_tlv.c
+++ b/pimd/pim_tlv.c
@@ -662,7 +662,7 @@ int pim_tlv_parse_addr_list(const char *ifname, struct in_addr src_addr,
const uint8_t *addr;
const uint8_t *pastend;
- zassert(hello_option_addr_list);
+ assert(hello_option_addr_list);
/*
Scan addr list
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index 9899172e6c..918a9a9c7d 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -407,6 +407,28 @@ static void pim_upstream_join_timer_restart_msec(struct pim_upstream *up,
&up->t_join_timer);
}
+void pim_update_suppress_timers(uint32_t suppress_time)
+{
+ struct pim_instance *pim;
+ struct vrf *vrf;
+ unsigned int old_rp_ka_time;
+
+ /* stash the old one so we know which values were manually configured */
+ old_rp_ka_time = (3 * router->register_suppress_time
+ + router->register_probe_time);
+ router->register_suppress_time = suppress_time;
+
+ RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
+ pim = vrf->info;
+ if (!pim)
+ continue;
+
+ /* Only adjust if not manually configured */
+ if (pim->rp_keep_alive_time == old_rp_ka_time)
+ pim->rp_keep_alive_time = PIM_RP_KEEPALIVE_PERIOD;
+ }
+}
+
void pim_upstream_join_suppress(struct pim_upstream *up,
struct in_addr rpf_addr, int holdtime)
{
diff --git a/pimd/pim_upstream.h b/pimd/pim_upstream.h
index adea3cd9ef..56039d5605 100644
--- a/pimd/pim_upstream.h
+++ b/pimd/pim_upstream.h
@@ -317,6 +317,7 @@ int pim_upstream_eval_inherit_if(struct pim_upstream *up,
void pim_upstream_update_join_desired(struct pim_instance *pim,
struct pim_upstream *up);
+void pim_update_suppress_timers(uint32_t suppress_time);
void pim_upstream_join_suppress(struct pim_upstream *up,
struct in_addr rpf_addr, int holdtime);
diff --git a/pimd/pim_vty.c b/pimd/pim_vty.c
index 57a0c69166..929d35101e 100644
--- a/pimd/pim_vty.c
+++ b/pimd/pim_vty.c
@@ -176,6 +176,7 @@ int pim_global_config_write_worker(struct pim_instance *pim, struct vty *vty)
else
snprintf(spaces, sizeof(spaces), "%s", " ");
+ writes += pim_msdp_peer_config_write(vty, pim, spaces);
writes += pim_msdp_config_write(pim, vty, spaces);
if (!pim->send_v6_secondary) {
@@ -185,16 +186,24 @@ int pim_global_config_write_worker(struct pim_instance *pim, struct vty *vty)
writes += pim_rp_config_write(pim, vty, spaces);
- if (router->register_suppress_time
- != PIM_REGISTER_SUPPRESSION_TIME_DEFAULT) {
- vty_out(vty, "%sip pim register-suppress-time %d\n", spaces,
- router->register_suppress_time);
- ++writes;
- }
- if (router->t_periodic != PIM_DEFAULT_T_PERIODIC) {
- vty_out(vty, "%sip pim join-prune-interval %d\n", spaces,
- router->t_periodic);
- ++writes;
+ if (pim->vrf_id == VRF_DEFAULT) {
+ if (router->register_suppress_time
+ != PIM_REGISTER_SUPPRESSION_TIME_DEFAULT) {
+ vty_out(vty, "%sip pim register-suppress-time %d\n",
+ spaces, router->register_suppress_time);
+ ++writes;
+ }
+ if (router->t_periodic != PIM_DEFAULT_T_PERIODIC) {
+ vty_out(vty, "%sip pim join-prune-interval %d\n",
+ spaces, router->t_periodic);
+ ++writes;
+ }
+
+ if (router->packet_process != PIM_DEFAULT_PACKET_PROCESS) {
+ vty_out(vty, "%sip pim packets %d\n", spaces,
+ router->packet_process);
+ ++writes;
+ }
}
if (pim->keep_alive_time != PIM_KEEPALIVE_PERIOD) {
vty_out(vty, "%sip pim keep-alive-timer %d\n", spaces,
@@ -206,11 +215,6 @@ int pim_global_config_write_worker(struct pim_instance *pim, struct vty *vty)
pim->rp_keep_alive_time);
++writes;
}
- if (router->packet_process != PIM_DEFAULT_PACKET_PROCESS) {
- vty_out(vty, "%sip pim packets %d\n", spaces,
- router->packet_process);
- ++writes;
- }
if (ssm->plist_name) {
vty_out(vty, "%sip pim ssm prefix-list %s\n", spaces,
ssm->plist_name);
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index f0eae955cc..6f933e9e72 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -471,8 +471,8 @@ void igmp_anysource_forward_start(struct pim_instance *pim,
struct igmp_source *source;
struct in_addr src_addr = {.s_addr = 0};
/* Any source (*,G) is forwarded only if mode is EXCLUDE {empty} */
- zassert(group->group_filtermode_isexcl);
- zassert(listcount(group->group_source_list) < 1);
+ assert(group->group_filtermode_isexcl);
+ assert(listcount(group->group_source_list) < 1);
source = source_new(group, src_addr);
if (!source) {
diff --git a/pimd/pimd.c b/pimd/pimd.c
index 811dc96b56..38e7273945 100644
--- a/pimd/pimd.c
+++ b/pimd/pimd.c
@@ -29,6 +29,7 @@
#include "jhash.h"
#include "vrf.h"
#include "lib_errors.h"
+#include "bfd.h"
#include "pimd.h"
#include "pim_cmd.h"
@@ -126,7 +127,7 @@ void pim_init(void)
"%s %s: could not solve %s to group address: errno=%d: %s",
__FILE__, __func__, PIM_ALL_PIM_ROUTERS, errno,
safe_strerror(errno));
- zassert(0);
+ assert(0);
return;
}
@@ -137,6 +138,8 @@ void pim_terminate(void)
{
struct zclient *zclient;
+ bfd_protocol_integration_set_shutdown(true);
+
/* reverse prefix_list_init */
prefix_list_add_hook(NULL);
prefix_list_delete_hook(NULL);
diff --git a/python/firstheader.py b/python/firstheader.py
index bf50f33a33..892e9da8d6 100644
--- a/python/firstheader.py
+++ b/python/firstheader.py
@@ -1,30 +1,90 @@
-#
# check that the first header included in C files is either
# zebra.h or config.h
#
+# Copyright (C) 2020 David Lamparter for NetDEF, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; see the file COPYING; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-import sys, os, re, subprocess
+import sys
+import os
+import re
+import subprocess
+import argparse
+
+argp = argparse.ArgumentParser(description="include fixer")
+argp.add_argument("--autofix", action="store_const", const=True)
+argp.add_argument("--warn-empty", action="store_const", const=True)
+argp.add_argument("--pipe", action="store_const", const=True)
include_re = re.compile('^#\s*include\s+["<]([^ ">]+)[">]', re.M)
-errors = 0
+ignore = [
+ lambda fn: fn.startswith("tools/"),
+ lambda fn: fn
+ in [
+ "lib/elf_py.c",
+ ],
+]
+
+
+def run(args):
+ out = []
+
+ files = subprocess.check_output(["git", "ls-files"]).decode("ASCII")
+ for fn in files.splitlines():
+ if not fn.endswith(".c"):
+ continue
+ if max([i(fn) for i in ignore]):
+ continue
+
+ with open(fn, "r") as fd:
+ data = fd.read()
-files = subprocess.check_output(["git", "ls-files"]).decode("ASCII")
-for fn in files.splitlines():
- if not fn.endswith(".c"):
- continue
- if fn.startswith("tools/"):
- continue
- with open(fn, "r") as fd:
- data = fd.read()
m = include_re.search(data)
if m is None:
- # sys.stderr.write('no #include in %s?\n' % (fn))
+ if args.warn_empty:
+ sys.stderr.write("no #include in %s?\n" % (fn))
continue
if m.group(1) in ["config.h", "zebra.h", "lib/zebra.h"]:
continue
- sys.stderr.write("%s: %s\n" % (fn, m.group(0)))
- errors += 1
-if errors:
- sys.exit(1)
+ if args.autofix:
+ sys.stderr.write("%s: %s - fixing\n" % (fn, m.group(0)))
+ if fn.startswith("pceplib/"):
+ insert = '#ifdef HAVE_CONFIG_H\n#include "config.h"\n#endif\n\n'
+ else:
+ insert = "#include <zebra.h>\n\n"
+
+ pos = m.span()[0]
+
+ data = data[:pos] + insert + data[pos:]
+ with open(fn + ".new", "w") as fd:
+ fd.write(data)
+ os.rename(fn + ".new", fn)
+ else:
+ sys.stderr.write("%s: %s\n" % (fn, m.group(0)))
+ out.append(fn)
+
+ if len(out):
+ if args.pipe:
+ # for "vim `firstheader.py`"
+ print("\n".join(out))
+ return 1
+ return 0
+
+
+if __name__ == "__main__":
+ args = argp.parse_args()
+ sys.exit(run(args))
diff --git a/qpb/subdir.am b/qpb/subdir.am
index 4f826355d9..704efc5930 100644
--- a/qpb/subdir.am
+++ b/qpb/subdir.am
@@ -44,6 +44,7 @@ am__v_PROTOC_C_1 =
.proto.pb-c.c:
$(AM_V_PROTOC_C)$(PROTOC_C) -I$(top_srcdir) --c_out=$(top_builddir) $^
+ $(AM_V_GEN)$(SED) -e '1i#include "config.h"' -i $@
.pb-c.c.pb-c.h:
@/bin/true
diff --git a/ripd/rip_cli.c b/ripd/rip_cli.c
index 87098ece64..43e5b21fa1 100644
--- a/ripd/rip_cli.c
+++ b/ripd/rip_cli.c
@@ -1019,11 +1019,56 @@ DEFPY_YANG (clear_ip_rip,
return ret;
}
+DEFUN (rip_distribute_list,
+ rip_distribute_list_cmd,
+ "distribute-list [prefix] WORD <in|out> [WORD]",
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[1]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_parser(prefix, true, argv[2 + prefix]->text,
+ argv[1 + prefix]->arg, ifname);
+}
+
+DEFUN (rip_no_distribute_list,
+ rip_no_distribute_list_cmd,
+ "no distribute-list [prefix] WORD <in|out> [WORD]",
+ NO_STR
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[2]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_no_parser(vty, prefix, true,
+ argv[3 + prefix]->text,
+ argv[2 + prefix]->arg, ifname);
+}
+
void rip_cli_init(void)
{
install_element(CONFIG_NODE, &router_rip_cmd);
install_element(CONFIG_NODE, &no_router_rip_cmd);
+ install_element(RIP_NODE, &rip_distribute_list_cmd);
+ install_element(RIP_NODE, &rip_no_distribute_list_cmd);
+
install_element(RIP_NODE, &rip_allow_ecmp_cmd);
install_element(RIP_NODE, &rip_default_information_originate_cmd);
install_element(RIP_NODE, &rip_default_metric_cmd);
diff --git a/ripd/ripd.c b/ripd/ripd.c
index 1c23575bf3..9832c7c52a 100644
--- a/ripd/ripd.c
+++ b/ripd/ripd.c
@@ -3722,9 +3722,6 @@ void rip_init(void)
prefix_list_add_hook(rip_distribute_update_all);
prefix_list_delete_hook(rip_distribute_update_all);
- /* Distribute list install. */
- distribute_list_init(RIP_NODE);
-
/* Route-map */
rip_route_map_init();
diff --git a/ripngd/ripng_cli.c b/ripngd/ripng_cli.c
index 365082f806..7e0d014086 100644
--- a/ripngd/ripng_cli.c
+++ b/ripngd/ripng_cli.c
@@ -503,11 +503,58 @@ DEFPY_YANG (clear_ipv6_rip,
return ret;
}
+DEFUN (ripng_ipv6_distribute_list,
+ ripng_ipv6_distribute_list_cmd,
+ "ipv6 distribute-list [prefix] WORD <in|out> [WORD]",
+ "IPv6\n"
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[2]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_parser(prefix, false, argv[3 + prefix]->text,
+ argv[2 + prefix]->arg, ifname);
+}
+
+DEFUN (ripng_no_ipv6_distribute_list,
+ ripng_no_ipv6_distribute_list_cmd,
+ "no ipv6 distribute-list [prefix] WORD <in|out> [WORD]",
+ NO_STR
+ "IPv6\n"
+ "Filter networks in routing updates\n"
+ "Specify a prefix\n"
+ "Access-list name\n"
+ "Filter incoming routing updates\n"
+ "Filter outgoing routing updates\n"
+ "Interface name\n")
+{
+ const char *ifname = NULL;
+ int prefix = (argv[3]->type == WORD_TKN) ? 1 : 0;
+
+ if (argv[argc - 1]->type == VARIABLE_TKN)
+ ifname = argv[argc - 1]->arg;
+
+ return distribute_list_no_parser(vty, prefix, false,
+ argv[4 + prefix]->text,
+ argv[3 + prefix]->arg, ifname);
+}
+
void ripng_cli_init(void)
{
install_element(CONFIG_NODE, &router_ripng_cmd);
install_element(CONFIG_NODE, &no_router_ripng_cmd);
+ install_element(RIPNG_NODE, &ripng_ipv6_distribute_list_cmd);
+ install_element(RIPNG_NODE, &ripng_no_ipv6_distribute_list_cmd);
+
install_element(RIPNG_NODE, &ripng_allow_ecmp_cmd);
install_element(RIPNG_NODE, &ripng_default_information_originate_cmd);
install_element(RIPNG_NODE, &ripng_default_metric_cmd);
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index 0e83140149..5a71928fbd 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -2723,9 +2723,6 @@ void ripng_init(void)
prefix_list_add_hook(ripng_distribute_update_all);
prefix_list_delete_hook(ripng_distribute_update_all);
- /* Distribute list install. */
- distribute_list_init(RIPNG_NODE);
-
/* Route-map for interface. */
ripng_route_map_init();
diff --git a/sharpd/sharp_vty.c b/sharpd/sharp_vty.c
index 8306aca9ee..1ff0591d5e 100644
--- a/sharpd/sharp_vty.c
+++ b/sharpd/sharp_vty.c
@@ -39,6 +39,33 @@
#include "sharpd/sharp_vty_clippy.c"
#endif
+DEFPY(watch_redistribute, watch_redistribute_cmd,
+ "sharp watch [vrf NAME$vrf_name] redistribute " FRR_REDIST_STR_SHARPD,
+ "Sharp routing Protocol\n"
+ "Watch for changes\n"
+ "The vrf we would like to watch if non-default\n"
+ "The NAME of the vrf\n"
+ "Redistribute into Sharp\n"
+ FRR_REDIST_HELP_STR_SHARPD)
+{
+ struct vrf *vrf;
+ int source;
+
+ if (!vrf_name)
+ vrf_name = VRF_DEFAULT_NAME;
+ vrf = vrf_lookup_by_name(vrf_name);
+ if (!vrf) {
+ vty_out(vty, "The vrf NAME specified: %s does not exist\n",
+ vrf_name);
+ return CMD_WARNING;
+ }
+
+ source = proto_redistnum(AFI_IP, argv[argc-1]->text);
+ sharp_redistribute_vrf(vrf, source);
+
+ return CMD_SUCCESS;
+}
+
DEFPY(watch_nexthop_v6, watch_nexthop_v6_cmd,
"sharp watch [vrf NAME$vrf_name] <nexthop$n X:X::X:X$nhop|import$import X:X::X:X/M$inhop> [connected$connected]",
"Sharp routing Protocol\n"
@@ -844,6 +871,7 @@ void sharp_vty_init(void)
install_element(ENABLE_NODE, &remove_routes_cmd);
install_element(ENABLE_NODE, &vrf_label_cmd);
install_element(ENABLE_NODE, &sharp_nht_data_dump_cmd);
+ install_element(ENABLE_NODE, &watch_redistribute_cmd);
install_element(ENABLE_NODE, &watch_nexthop_v6_cmd);
install_element(ENABLE_NODE, &watch_nexthop_v4_cmd);
install_element(ENABLE_NODE, &sharp_lsp_prefix_v4_cmd);
diff --git a/sharpd/sharp_zebra.c b/sharpd/sharp_zebra.c
index 0f2c634049..128cfe2de6 100644
--- a/sharpd/sharp_zebra.c
+++ b/sharpd/sharp_zebra.c
@@ -714,6 +714,12 @@ static int sharp_redistribute_route(ZAPI_CALLBACK_ARGS)
return 0;
}
+void sharp_redistribute_vrf(struct vrf *vrf, int type)
+{
+ zebra_redistribute_send(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, type,
+ 0, vrf->vrf_id);
+}
+
/* Add a zclient with a specified session id, for testing. */
int sharp_zclient_create(uint32_t session_id)
{
diff --git a/sharpd/sharp_zebra.h b/sharpd/sharp_zebra.h
index ffddb9e780..4355f49a2f 100644
--- a/sharpd/sharp_zebra.h
+++ b/sharpd/sharp_zebra.h
@@ -63,4 +63,6 @@ extern void sharp_zebra_send_arp(const struct interface *ifp,
/* Register Link State Opaque messages */
extern void sharp_zebra_register_te(void);
+extern void sharp_redistribute_vrf(struct vrf *vrf, int source);
+
#endif
diff --git a/staticd/static_nb.c b/staticd/static_nb.c
index a2a14751cf..aa9076aa88 100644
--- a/staticd/static_nb.c
+++ b/staticd/static_nb.c
@@ -16,6 +16,8 @@
* with this program; see the file COPYING; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "northbound.h"
#include "libfrr.h"
#include "static_nb.h"
diff --git a/staticd/static_nb_config.c b/staticd/static_nb_config.c
index db154992f9..e78f5172a3 100644
--- a/staticd/static_nb_config.c
+++ b/staticd/static_nb_config.c
@@ -16,6 +16,8 @@
* with this program; see the file COPYING; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "northbound.h"
#include "libfrr.h"
#include "log.h"
diff --git a/tests/.gitignore b/tests/.gitignore
index ca20b0ecac..0c938beab6 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -21,6 +21,7 @@
/lib/cli/test_commands_defun.c
/lib/northbound/test_oper_data
/lib/cxxcompat
+/lib/test_assert
/lib/test_atomlist
/lib/test_buffer
/lib/test_checksum
@@ -52,4 +53,4 @@
/lib/test_zmq
/ospf6d/test_lsdb
/ospf6d/test_lsdb_clippy.c
-/zebra/test_lm_plugin \ No newline at end of file
+/zebra/test_lm_plugin
diff --git a/tests/bgpd/test_aspath.c b/tests/bgpd/test_aspath.c
index 1a9183c472..aaf3fd2aa4 100644
--- a/tests/bgpd/test_aspath.c
+++ b/tests/bgpd/test_aspath.c
@@ -892,7 +892,7 @@ static int validate(struct aspath *as, const struct test_spec *sp)
/* Excercise AS4 parsing a bit, with a dogfood test */
if (!s)
- s = stream_new(BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE);
+ s = stream_new(BGP_MAX_PACKET_SIZE);
bytes4 = aspath_put(s, as, 1);
as4 = make_aspath(STREAM_DATA(s), bytes4, 1);
@@ -1201,13 +1201,13 @@ static int handle_attr_test(struct aspath_tests *t)
asp = make_aspath(t->segment->asdata, t->segment->len, 0);
- peer.curr = stream_new(BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE);
+ peer.curr = stream_new(BGP_MAX_PACKET_SIZE);
peer.obuf = stream_fifo_new();
peer.bgp = &bgp;
peer.host = (char *)"none";
peer.fd = -1;
peer.cap = t->cap;
- peer.max_packet_size = BGP_MAX_PACKET_SIZE;
+ peer.max_packet_size = BGP_STANDARD_MESSAGE_MAX_PACKET_SIZE;
stream_write(peer.curr, t->attrheader, t->len);
datalen = aspath_put(peer.curr, asp, t->as4 == AS4_DATA);
diff --git a/tests/bgpd/test_capability.c b/tests/bgpd/test_capability.c
index 91c0cce80c..153b83897d 100644
--- a/tests/bgpd/test_capability.c
+++ b/tests/bgpd/test_capability.c
@@ -935,7 +935,7 @@ int main(void)
peer->afc_adv[i][j] = 1;
}
- peer->curr = stream_new(BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE);
+ peer->curr = stream_new(BGP_MAX_PACKET_SIZE);
i = 0;
while (mp_segments[i].name)
diff --git a/tests/bgpd/test_mp_attr.c b/tests/bgpd/test_mp_attr.c
index 8de0604c45..f510760913 100644
--- a/tests/bgpd/test_mp_attr.c
+++ b/tests/bgpd/test_mp_attr.c
@@ -1100,7 +1100,7 @@ int main(void)
peer = peer_create_accept(bgp);
peer->host = (char *)"foo";
peer->status = Established;
- peer->curr = stream_new(BGP_MAX_EXTENDED_MESSAGE_PACKET_SIZE);
+ peer->curr = stream_new(BGP_MAX_PACKET_SIZE);
ifp.ifindex = 0;
peer->nexthop.ifp = &ifp;
diff --git a/tests/lib/cxxcompat.c b/tests/lib/cxxcompat.c
index fde0d6af52..2589fca614 100644
--- a/tests/lib/cxxcompat.c
+++ b/tests/lib/cxxcompat.c
@@ -104,7 +104,6 @@
#include "lib/yang.h"
#include "lib/yang_translator.h"
#include "lib/yang_wrappers.h"
-#include "lib/zassert.h"
#include "lib/zclient.h"
PREDECL_RBTREE_UNIQ(footree);
diff --git a/tests/lib/test_assert.c b/tests/lib/test_assert.c
new file mode 100644
index 0000000000..a4535651d4
--- /dev/null
+++ b/tests/lib/test_assert.c
@@ -0,0 +1,64 @@
+/*
+ * Quick test for assert()
+ * Copyright (C) 2021 David Lamparter for NetDEF, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+/* make sure this works with assert.h & nothing else. also check the include
+ * shadowing, we don't want to pick up system assert.h
+ */
+#include <assert.h>
+
+__attribute__((noinline))
+static void func_for_bt(int number)
+{
+ assert(number > 2);
+ assertf(number > 3, "(A) the number was %d", number);
+}
+
+#include <zebra.h>
+#include "lib/zlog.h"
+#include "lib/thread.h"
+#include "lib/sigevent.h"
+
+int main(int argc, char **argv)
+{
+ int number = 10;
+ struct thread_master *master;
+
+ zlog_aux_init("NONE: ", LOG_DEBUG);
+
+ if (argc > 1)
+ number = atoi(argv[1]);
+
+ assert(number > 0);
+ assertf(number > 1, "(B) the number was %d", number);
+
+ /* set up SIGABRT handler */
+ master = thread_master_create("test");
+ signal_init(master, 0, NULL);
+
+ func_for_bt(number);
+ assert(number > 4);
+ assertf(number > 5, "(C) the number was %d", number);
+
+ assertf(number > 10, "(D) the number was %d", number);
+ return 0;
+}
diff --git a/tests/lib/test_assert.py b/tests/lib/test_assert.py
new file mode 100644
index 0000000000..67c88e6220
--- /dev/null
+++ b/tests/lib/test_assert.py
@@ -0,0 +1,56 @@
+import frrtest
+import os
+import re
+import subprocess
+import inspect
+
+basedir = os.path.dirname(__file__)
+program = os.path.join(basedir, "test_assert")
+
+
+def check(number, rex=None):
+ proc = subprocess.Popen(
+ [frrtest.binpath(program), str(number)],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ )
+ out, err = proc.communicate()
+ exitcode = proc.wait()
+
+ if rex is None:
+ assert exitcode == 0
+ else:
+ assert exitcode != 0
+
+ text = out.decode("US-ASCII") + err.decode("US-ASCII")
+ rex = re.compile(rex, re.M | re.S)
+ m = rex.search(text)
+ assert m is not None, "non-matching output: %s" % text
+
+
+def test_assert_0():
+ check(0, r"test_assert\.c:\d+.*number > 0")
+
+
+def test_assert_1():
+ check(1, r"test_assert\.c:\d+.*number > 1.*\(B\) the number was 1")
+
+
+def test_assert_2():
+ check(2, r"test_assert\.c:\d+.*number > 2")
+
+
+def test_assert_3():
+ check(3, r"test_assert\.c:\d+.*number > 3.*\(A\) the number was 3")
+
+
+def test_assert_4():
+ check(4, r"test_assert\.c:\d+.*number > 4")
+
+
+def test_assert_10():
+ check(10, r"test_assert\.c:\d+.*number > 10.*\(D\) the number was 10")
+
+
+def test_assert_11():
+ check(11)
diff --git a/tests/lib/test_nexthop.c b/tests/lib/test_nexthop.c
new file mode 100644
index 0000000000..659d207b4e
--- /dev/null
+++ b/tests/lib/test_nexthop.c
@@ -0,0 +1,201 @@
+/*
+ * Nexthop module test.
+ *
+ * Copyright (C) 2021 by Volta Networks, Inc.
+ *
+ * This file is part of FRR.
+ *
+ * FRR is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2, or (at your option) any
+ * later version.
+ *
+ * FRR is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <zebra.h>
+#include <nexthop.h>
+
+static bool verbose;
+
+static void test_run_first(void)
+{
+ int ret, i;
+ struct nexthop *nh1, *nh2;
+ struct in_addr addr;
+ struct in6_addr addr6;
+ mpls_label_t labels[MPLS_MAX_LABELS];
+
+ /* Test comparison apis */
+
+ /* ifindex comparisons */
+ nh1 = nexthop_from_ifindex(11, 0);
+ nh2 = nexthop_from_ifindex(12, 0);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret < 0);
+
+ nexthop_free(nh1);
+ nh1 = nexthop_from_ifindex(12, 0);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret == 0);
+
+ nexthop_free(nh1);
+ nexthop_free(nh2);
+
+ /* ipv4, vrf */
+ addr.s_addr = 0x04030201;
+ nh1 = nexthop_from_ipv4(&addr, NULL, 0);
+ nh2 = nexthop_from_ipv4(&addr, NULL, 111);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ nexthop_free(nh2);
+
+ addr.s_addr = 0x04030202;
+ nh2 = nexthop_from_ipv4(&addr, NULL, 0);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ nexthop_free(nh2);
+
+ addr.s_addr = 0x04030201;
+ nh2 = nexthop_from_ipv4(&addr, NULL, 0);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret == 0);
+
+ /* Weight */
+ nh2->weight = 20;
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ nexthop_free(nh1);
+ nexthop_free(nh2);
+
+ /* ipv6 */
+ memset(addr6.s6_addr, 0, sizeof(addr6.s6_addr));
+ nh1 = nexthop_from_ipv6(&addr6, 0);
+ nh2 = nexthop_from_ipv6(&addr6, 0);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret == 0);
+
+ nexthop_free(nh2);
+
+ nh2 = nexthop_from_ipv6(&addr6, 1);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ nexthop_free(nh2);
+
+ addr6.s6_addr[14] = 1;
+ addr6.s6_addr[15] = 1;
+ nh2 = nexthop_from_ipv6(&addr6, 0);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ nexthop_free(nh1);
+ nexthop_free(nh2);
+
+ /* Blackhole */
+ nh1 = nexthop_from_blackhole(BLACKHOLE_REJECT);
+ nh2 = nexthop_from_blackhole(BLACKHOLE_REJECT);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret == 0);
+
+ nexthop_free(nh2);
+
+ nh2 = nexthop_from_blackhole(BLACKHOLE_NULL);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ /* Labels */
+ addr.s_addr = 0x04030201;
+ nh1 = nexthop_from_ipv4(&addr, NULL, 0);
+ nh2 = nexthop_from_ipv4(&addr, NULL, 0);
+
+ memset(labels, 0, sizeof(labels));
+ labels[0] = 111;
+ labels[1] = 222;
+
+ nexthop_add_labels(nh1, ZEBRA_LSP_STATIC, 2, labels);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ nexthop_add_labels(nh2, ZEBRA_LSP_STATIC, 2, labels);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret == 0);
+
+ nexthop_free(nh2);
+
+ /* LSP type isn't included */
+ nh2 = nexthop_from_ipv4(&addr, NULL, 0);
+ nexthop_add_labels(nh2, ZEBRA_LSP_LDP, 2, labels);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret == 0);
+
+ nexthop_free(nh2);
+
+ labels[2] = 333;
+ nh2 = nexthop_from_ipv4(&addr, NULL, 0);
+ nexthop_add_labels(nh2, ZEBRA_LSP_LDP, 3, labels);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ nexthop_free(nh1);
+ nexthop_free(nh2);
+
+ nh1 = nexthop_from_ipv4(&addr, NULL, 0);
+ nh2 = nexthop_from_ipv4(&addr, NULL, 0);
+
+ for (i = 0; i < MPLS_MAX_LABELS; i++)
+ labels[i] = 111 * (i + 1);
+
+ nexthop_add_labels(nh1, ZEBRA_LSP_LDP, MPLS_MAX_LABELS, labels);
+ nexthop_add_labels(nh2, ZEBRA_LSP_LDP, MPLS_MAX_LABELS, labels);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret == 0);
+
+ nexthop_free(nh2);
+
+ /* Test very last label in stack */
+ labels[15] = 999;
+ nh2 = nexthop_from_ipv4(&addr, NULL, 0);
+ nexthop_add_labels(nh2, ZEBRA_LSP_LDP, MPLS_MAX_LABELS, labels);
+
+ ret = nexthop_cmp_basic(nh1, nh2);
+ assert(ret != 0);
+
+ /* End */
+ nexthop_free(nh1);
+ nexthop_free(nh2);
+}
+
+int main(int argc, char **argv)
+{
+ if (argc >= 2 && !strcmp("-v", argv[1]))
+ verbose = true;
+ test_run_first();
+ printf("Simple test passed.\n");
+}
diff --git a/tests/lib/test_nexthop.py b/tests/lib/test_nexthop.py
new file mode 100644
index 0000000000..81bfa43ab5
--- /dev/null
+++ b/tests/lib/test_nexthop.py
@@ -0,0 +1,8 @@
+import frrtest
+
+
+class TestNexthopIter(frrtest.TestMultiOut):
+ program = "./test_nexthop"
+
+
+TestNexthopIter.onesimple("Simple test passed.")
diff --git a/tests/lib/test_ringbuf.c b/tests/lib/test_ringbuf.c
index 7ba5a29b62..4ac62940b8 100644
--- a/tests/lib/test_ringbuf.c
+++ b/tests/lib/test_ringbuf.c
@@ -93,7 +93,7 @@ int main(int argc, char **argv)
assert(ringbuf_get(soil, &compost, BUFSIZ) == BUFSIZ);
validate_state(soil, BUFSIZ, 0);
- assert(soil->empty = true);
+ assert(soil->empty == true);
assert(soil->start == soil->end);
assert(soil->start == 15);
diff --git a/tests/lib/test_seqlock.c b/tests/lib/test_seqlock.c
index 639c2bdc2b..768307d56d 100644
--- a/tests/lib/test_seqlock.c
+++ b/tests/lib/test_seqlock.c
@@ -32,6 +32,7 @@
#include "monotime.h"
#include "seqlock.h"
+#include "printfrr.h"
static struct seqlock sqlo;
static pthread_t thr1;
@@ -43,7 +44,7 @@ static void writestr(const char *str)
char buf[32];
int64_t usec = monotime_since(&start, NULL);
- snprintf(buf, sizeof(buf), "[%02"PRId64"] ", usec / 100000);
+ snprintfrr(buf, sizeof(buf), "[%02" PRId64 "] ", usec / 100000);
iov[0].iov_base = buf;
iov[0].iov_len = strlen(buf);
diff --git a/tests/lib/test_typelist.h b/tests/lib/test_typelist.h
index 32331c14a0..379a2396b4 100644
--- a/tests/lib/test_typelist.h
+++ b/tests/lib/test_typelist.h
@@ -17,6 +17,7 @@
/* C++ called, they want their templates back */
#define item concat(item_, TYPE)
#define itm concat(itm_, TYPE)
+#define itmswap concat(itmswap_, TYPE)
#define head concat(head_, TYPE)
#define list concat(TYPE, )
#define list_head concat(TYPE, _head)
@@ -40,8 +41,9 @@
#define list_find_gteq concat(TYPE, _find_gteq)
#define list_del concat(TYPE, _del)
#define list_pop concat(TYPE, _pop)
+#define list_swap_all concat(TYPE, _swap_all)
-#define ts_hash concat(ts_hash_, TYPE)
+#define ts_hash_head concat(ts_hash_head_, TYPE)
#ifndef REALTYPE
#define REALTYPE TYPE
@@ -89,10 +91,12 @@ DECLARE(REALTYPE, list, struct item, itm);
#endif
#define NITEM 10000
-struct item itm[NITEM];
+#define NITEM_SWAP 100 /* other container for swap */
+struct item itm[NITEM], itmswap[NITEM_SWAP];
static struct list_head head = concat(INIT_, REALTYPE)(head);
-static void ts_hash(const char *text, const char *expect)
+static void ts_hash_head(struct list_head *h, const char *text,
+ const char *expect)
{
int64_t us = monotime_since(&ref, NULL);
SHA256_CTX ctx;
@@ -102,13 +106,13 @@ static void ts_hash(const char *text, const char *expect)
char hashtext[65];
uint32_t swap_count, count;
- count = list_count(&head);
+ count = list_count(h);
swap_count = htonl(count);
SHA256_Init(&ctx);
SHA256_Update(&ctx, &swap_count, sizeof(swap_count));
- frr_each (list, &head, item) {
+ frr_each (list, h, item) {
struct {
uint32_t val_upper, val_lower, index;
} hashitem = {
@@ -135,15 +139,20 @@ static void ts_hash(const char *text, const char *expect)
}
/* hashes will have different item ordering */
#if IS_HASH(REALTYPE) || IS_HEAP(REALTYPE)
-#define ts_hashx(pos, csum) ts_hash(pos, NULL)
+#define ts_hash(pos, csum) ts_hash_head(&head, pos, NULL)
+#define ts_hashx(pos, csum) ts_hash_head(&head, pos, NULL)
+#define ts_hash_headx(head, pos, csum) ts_hash_head(head, pos, NULL)
#else
-#define ts_hashx(pos, csum) ts_hash(pos, csum)
+#define ts_hash(pos, csum) ts_hash_head(&head, pos, csum)
+#define ts_hashx(pos, csum) ts_hash_head(&head, pos, csum)
+#define ts_hash_headx(head, pos, csum) ts_hash_head(head, pos, csum)
#endif
static void concat(test_, TYPE)(void)
{
size_t i, j, k, l;
struct prng *prng;
+ struct prng *prng_swap __attribute__((unused));
struct item *item, *prev __attribute__((unused));
struct item dummy __attribute__((unused));
@@ -151,6 +160,10 @@ static void concat(test_, TYPE)(void)
for (i = 0; i < NITEM; i++)
itm[i].val = i;
+ memset(itmswap, 0, sizeof(itmswap));
+ for (i = 0; i < NITEM_SWAP; i++)
+ itmswap[i].val = i;
+
printfrr("%s start\n", str(TYPE));
ts_start();
@@ -178,6 +191,56 @@ static void concat(test_, TYPE)(void)
assert(list_first(&head) != NULL);
ts_hashx("fill", "a538546a6e6ab0484e925940aa8dd02fd934408bbaed8cb66a0721841584d838");
+#if !IS_ATOMIC(REALTYPE)
+ struct list_head other;
+
+ list_init(&other);
+ list_swap_all(&head, &other);
+
+ assert(list_count(&head) == 0);
+ assert(!list_first(&head));
+ assert(list_count(&other) == k);
+ assert(list_first(&other) != NULL);
+ ts_hash_headx(
+ &other, "swap1",
+ "a538546a6e6ab0484e925940aa8dd02fd934408bbaed8cb66a0721841584d838");
+
+ prng_swap = prng_new(0x1234dead);
+ l = 0;
+ for (i = 0; i < NITEM_SWAP; i++) {
+ j = prng_rand(prng_swap) % NITEM_SWAP;
+ if (itmswap[j].scratchpad == 0) {
+ list_add(&head, &itmswap[j]);
+ itmswap[j].scratchpad = 1;
+ l++;
+ }
+#if !IS_HEAP(REALTYPE)
+ else {
+ struct item *rv = list_add(&head, &itmswap[j]);
+ assert(rv == &itmswap[j]);
+ }
+#endif
+ }
+ assert(list_count(&head) == l);
+ assert(list_first(&head) != NULL);
+ ts_hash_headx(
+ &head, "swap-fill",
+ "26df437174051cf305d1bbb62d779ee450ca764167a1e7a94be1aece420008e6");
+
+ list_swap_all(&head, &other);
+
+ assert(list_count(&other) == l);
+ assert(list_first(&other));
+ ts_hash_headx(
+ &other, "swap2a",
+ "26df437174051cf305d1bbb62d779ee450ca764167a1e7a94be1aece420008e6");
+ assert(list_count(&head) == k);
+ assert(list_first(&head) != NULL);
+ ts_hash_headx(
+ &head, "swap2b",
+ "a538546a6e6ab0484e925940aa8dd02fd934408bbaed8cb66a0721841584d838");
+#endif /* !IS_ATOMIC */
+
k = 0;
#if IS_ATOMIC(REALTYPE)
@@ -344,6 +407,50 @@ static void concat(test_, TYPE)(void)
assert(list_first(&head) != NULL);
ts_hash("fill / add_tail", "eabfcf1413936daaf20965abced95762f45110a6619b84aac7d38481bce4ea19");
+#if !IS_ATOMIC(REALTYPE)
+ struct list_head other;
+
+ list_init(&other);
+ list_swap_all(&head, &other);
+
+ assert(list_count(&head) == 0);
+ assert(!list_first(&head));
+ assert(list_count(&other) == k);
+ assert(list_first(&other) != NULL);
+ ts_hash_head(
+ &other, "swap1",
+ "eabfcf1413936daaf20965abced95762f45110a6619b84aac7d38481bce4ea19");
+
+ prng_swap = prng_new(0x1234dead);
+ l = 0;
+ for (i = 0; i < NITEM_SWAP; i++) {
+ j = prng_rand(prng_swap) % NITEM_SWAP;
+ if (itmswap[j].scratchpad == 0) {
+ list_add_tail(&head, &itmswap[j]);
+ itmswap[j].scratchpad = 1;
+ l++;
+ }
+ }
+ assert(list_count(&head) == l);
+ assert(list_first(&head) != NULL);
+ ts_hash_head(
+ &head, "swap-fill",
+ "833e6ae437e322dfbd36eda8cfc33a61109be735b43f15d256c05e52d1b01909");
+
+ list_swap_all(&head, &other);
+
+ assert(list_count(&other) == l);
+ assert(list_first(&other));
+ ts_hash_head(
+ &other, "swap2a",
+ "833e6ae437e322dfbd36eda8cfc33a61109be735b43f15d256c05e52d1b01909");
+ assert(list_count(&head) == k);
+ assert(list_first(&head) != NULL);
+ ts_hash_head(
+ &head, "swap2b",
+ "eabfcf1413936daaf20965abced95762f45110a6619b84aac7d38481bce4ea19");
+#endif
+
for (i = 0; i < NITEM / 2; i++) {
j = prng_rand(prng) % NITEM;
if (itm[j].scratchpad == 1) {
@@ -546,10 +653,14 @@ static void concat(test_, TYPE)(void)
printfrr("%s end\n", str(TYPE));
}
+#undef ts_hash
#undef ts_hashx
+#undef ts_hash_head
+#undef ts_hash_headx
#undef item
#undef itm
+#undef itmswap
#undef head
#undef list
#undef list_head
@@ -571,6 +682,7 @@ static void concat(test_, TYPE)(void)
#undef list_find_gteq
#undef list_del
#undef list_pop
+#undef list_swap_all
#undef REALTYPE
#undef TYPE
diff --git a/tests/subdir.am b/tests/subdir.am
index ec0a154a2d..43fad29fa2 100644
--- a/tests/subdir.am
+++ b/tests/subdir.am
@@ -66,6 +66,7 @@ clippy_scan += \
check_PROGRAMS = \
tests/lib/cxxcompat \
+ tests/lib/test_assert \
tests/lib/test_atomlist \
tests/lib/test_buffer \
tests/lib/test_checksum \
@@ -75,6 +76,7 @@ check_PROGRAMS = \
tests/lib/test_idalloc \
tests/lib/test_memory \
tests/lib/test_nexthop_iter \
+ tests/lib/test_nexthop \
tests/lib/test_ntop \
tests/lib/test_prefix2str \
tests/lib/test_printfrr \
@@ -249,6 +251,10 @@ tests_lib_northbound_test_oper_data_CPPFLAGS = $(TESTS_CPPFLAGS)
tests_lib_northbound_test_oper_data_LDADD = $(ALL_TESTS_LDADD)
tests_lib_northbound_test_oper_data_SOURCES = tests/lib/northbound/test_oper_data.c
nodist_tests_lib_northbound_test_oper_data_SOURCES = yang/frr-test-module.yang.c
+tests_lib_test_assert_CFLAGS = $(TESTS_CFLAGS)
+tests_lib_test_assert_CPPFLAGS = $(TESTS_CPPFLAGS)
+tests_lib_test_assert_LDADD = $(ALL_TESTS_LDADD)
+tests_lib_test_assert_SOURCES = tests/lib/test_assert.c
tests_lib_test_atomlist_CFLAGS = $(TESTS_CFLAGS)
tests_lib_test_atomlist_CPPFLAGS = $(TESTS_CPPFLAGS)
tests_lib_test_atomlist_LDADD = $(ALL_TESTS_LDADD)
@@ -288,8 +294,12 @@ tests_lib_test_nexthop_iter_CFLAGS = $(TESTS_CFLAGS)
tests_lib_test_nexthop_iter_CPPFLAGS = $(TESTS_CPPFLAGS)
tests_lib_test_nexthop_iter_LDADD = $(ALL_TESTS_LDADD)
tests_lib_test_nexthop_iter_SOURCES = tests/lib/test_nexthop_iter.c tests/helpers/c/prng.c
+tests_lib_test_nexthop_CFLAGS = $(TESTS_CFLAGS)
+tests_lib_test_nexthop_CPPFLAGS = $(TESTS_CPPFLAGS)
+tests_lib_test_nexthop_LDADD = $(ALL_TESTS_LDADD)
+tests_lib_test_nexthop_SOURCES = tests/lib/test_nexthop.c
tests_lib_test_ntop_CFLAGS = $(TESTS_CFLAGS)
-tests_lib_test_ntop_CPPFLAGS = $(TESTS_CPPFLAGS)
+tests_lib_test_ntop_CPPFLAGS = $(CPPFLAGS_BASE) # no assert override
tests_lib_test_ntop_LDADD = # none
tests_lib_test_ntop_SOURCES = tests/lib/test_ntop.c tests/helpers/c/prng.c
tests_lib_test_prefix2str_CFLAGS = $(TESTS_CFLAGS)
@@ -404,8 +414,10 @@ EXTRA_DIST += \
tests/lib/northbound/test_oper_data.in \
tests/lib/northbound/test_oper_data.py \
tests/lib/northbound/test_oper_data.refout \
+ tests/lib/test_assert.py \
tests/lib/test_atomlist.py \
tests/lib/test_nexthop_iter.py \
+ tests/lib/test_nexthop.py \
tests/lib/test_ntop.py \
tests/lib/test_prefix2str.py \
tests/lib/test_printfrr.py \
diff --git a/tests/topotests/Dockerfile b/tests/topotests/Dockerfile
index c9110d2db9..1503e67d31 100644
--- a/tests/topotests/Dockerfile
+++ b/tests/topotests/Dockerfile
@@ -44,6 +44,7 @@ RUN export DEBIAN_FRONTEND=noninteractive \
xterm \
&& pip install \
exabgp==3.4.17 \
+ "scapy>=2.4.2" \
ipaddr \
pytest \
&& rm -rf /var/lib/apt/lists/*
diff --git a/tests/topotests/all-protocol-startup/r1/babeld.conf b/tests/topotests/all_protocol_startup/r1/babeld.conf
index 3e119bf24d..3e119bf24d 100644
--- a/tests/topotests/all-protocol-startup/r1/babeld.conf
+++ b/tests/topotests/all_protocol_startup/r1/babeld.conf
diff --git a/tests/topotests/all-protocol-startup/r1/bgpd.conf b/tests/topotests/all_protocol_startup/r1/bgpd.conf
index 32dcb727e5..32dcb727e5 100644
--- a/tests/topotests/all-protocol-startup/r1/bgpd.conf
+++ b/tests/topotests/all_protocol_startup/r1/bgpd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/ip_nht.ref b/tests/topotests/all_protocol_startup/r1/ip_nht.ref
index 1da4da4df5..1da4da4df5 100644
--- a/tests/topotests/all-protocol-startup/r1/ip_nht.ref
+++ b/tests/topotests/all_protocol_startup/r1/ip_nht.ref
diff --git a/tests/topotests/all-protocol-startup/r1/ipv4_routes.ref b/tests/topotests/all_protocol_startup/r1/ipv4_routes.ref
index 044cffae7a..044cffae7a 100644
--- a/tests/topotests/all-protocol-startup/r1/ipv4_routes.ref
+++ b/tests/topotests/all_protocol_startup/r1/ipv4_routes.ref
diff --git a/tests/topotests/all-protocol-startup/r1/ipv6_nht.ref b/tests/topotests/all_protocol_startup/r1/ipv6_nht.ref
index 0255ecdee8..0255ecdee8 100644
--- a/tests/topotests/all-protocol-startup/r1/ipv6_nht.ref
+++ b/tests/topotests/all_protocol_startup/r1/ipv6_nht.ref
diff --git a/tests/topotests/all-protocol-startup/r1/ipv6_routes.ref b/tests/topotests/all_protocol_startup/r1/ipv6_routes.ref
index ef12d615dc..ef12d615dc 100644
--- a/tests/topotests/all-protocol-startup/r1/ipv6_routes.ref
+++ b/tests/topotests/all_protocol_startup/r1/ipv6_routes.ref
diff --git a/tests/topotests/all-protocol-startup/r1/isisd.conf b/tests/topotests/all_protocol_startup/r1/isisd.conf
index 413f8d15a9..413f8d15a9 100644
--- a/tests/topotests/all-protocol-startup/r1/isisd.conf
+++ b/tests/topotests/all_protocol_startup/r1/isisd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/ldpd.conf b/tests/topotests/all_protocol_startup/r1/ldpd.conf
index 02332a4e75..02332a4e75 100644
--- a/tests/topotests/all-protocol-startup/r1/ldpd.conf
+++ b/tests/topotests/all_protocol_startup/r1/ldpd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/nhrpd.conf b/tests/topotests/all_protocol_startup/r1/nhrpd.conf
index 74e0f12e32..74e0f12e32 100644
--- a/tests/topotests/all-protocol-startup/r1/nhrpd.conf
+++ b/tests/topotests/all_protocol_startup/r1/nhrpd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/ospf6d.conf b/tests/topotests/all_protocol_startup/r1/ospf6d.conf
index 5c6f071644..5c6f071644 100644
--- a/tests/topotests/all-protocol-startup/r1/ospf6d.conf
+++ b/tests/topotests/all_protocol_startup/r1/ospf6d.conf
diff --git a/tests/topotests/all-protocol-startup/r1/ospf6d.conf-pre-v4 b/tests/topotests/all_protocol_startup/r1/ospf6d.conf-pre-v4
index 6d870f355f..6d870f355f 100644
--- a/tests/topotests/all-protocol-startup/r1/ospf6d.conf-pre-v4
+++ b/tests/topotests/all_protocol_startup/r1/ospf6d.conf-pre-v4
diff --git a/tests/topotests/all-protocol-startup/r1/ospfd.conf b/tests/topotests/all_protocol_startup/r1/ospfd.conf
index bac9f61620..bac9f61620 100644
--- a/tests/topotests/all-protocol-startup/r1/ospfd.conf
+++ b/tests/topotests/all_protocol_startup/r1/ospfd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/pbrd.conf b/tests/topotests/all_protocol_startup/r1/pbrd.conf
index 360fb13a1b..360fb13a1b 100644
--- a/tests/topotests/all-protocol-startup/r1/pbrd.conf
+++ b/tests/topotests/all_protocol_startup/r1/pbrd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/rip_status.ref b/tests/topotests/all_protocol_startup/r1/rip_status.ref
index 4a5255fe13..4a5255fe13 100644
--- a/tests/topotests/all-protocol-startup/r1/rip_status.ref
+++ b/tests/topotests/all_protocol_startup/r1/rip_status.ref
diff --git a/tests/topotests/all-protocol-startup/r1/ripd.conf b/tests/topotests/all_protocol_startup/r1/ripd.conf
index ace7608873..ace7608873 100644
--- a/tests/topotests/all-protocol-startup/r1/ripd.conf
+++ b/tests/topotests/all_protocol_startup/r1/ripd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/ripng_status.ref b/tests/topotests/all_protocol_startup/r1/ripng_status.ref
index 5d67c1467a..5d67c1467a 100644
--- a/tests/topotests/all-protocol-startup/r1/ripng_status.ref
+++ b/tests/topotests/all_protocol_startup/r1/ripng_status.ref
diff --git a/tests/topotests/all-protocol-startup/r1/ripngd.conf b/tests/topotests/all_protocol_startup/r1/ripngd.conf
index 2e0aef3a14..2e0aef3a14 100644
--- a/tests/topotests/all-protocol-startup/r1/ripngd.conf
+++ b/tests/topotests/all_protocol_startup/r1/ripngd.conf
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post4.1.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post4.1.ref
index b38701a53d..b38701a53d 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post4.1.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post4.1.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post5.0.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post5.0.ref
index 82b64c0d98..82b64c0d98 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post5.0.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post5.0.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post6.1.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post6.1.ref
index fd333b3084..fd333b3084 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4-post6.1.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post6.1.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4.ref
index 3be6cd3d7b..3be6cd3d7b 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv4.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6-post4.1.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6-post4.1.ref
index 20034b7408..20034b7408 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6-post4.1.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6-post4.1.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6.ref
index fffee63c6b..fffee63c6b 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6_post6.1.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_post6.1.ref
index 5b5f8596cf..5b5f8596cf 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6_post6.1.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_post6.1.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6_summary.ref b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_summary.ref
index 0246687200..0246687200 100644
--- a/tests/topotests/all-protocol-startup/r1/show_bgp_ipv6_summary.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_summary.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_ip_bgp_summary.ref b/tests/topotests/all_protocol_startup/r1/show_ip_bgp_summary.ref
index deeae87fa3..deeae87fa3 100644
--- a/tests/topotests/all-protocol-startup/r1/show_ip_bgp_summary.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_ip_bgp_summary.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_ip_ospf_interface.ref b/tests/topotests/all_protocol_startup/r1/show_ip_ospf_interface.ref
index ff85679256..ff85679256 100644
--- a/tests/topotests/all-protocol-startup/r1/show_ip_ospf_interface.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_ip_ospf_interface.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_ipv6_ospf6_interface b/tests/topotests/all_protocol_startup/r1/show_ipv6_ospf6_interface
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/all-protocol-startup/r1/show_ipv6_ospf6_interface
+++ b/tests/topotests/all_protocol_startup/r1/show_ipv6_ospf6_interface
diff --git a/tests/topotests/all-protocol-startup/r1/show_ipv6_ospf6_interface.ref b/tests/topotests/all_protocol_startup/r1/show_ipv6_ospf6_interface.ref
index 6fbf40bbb8..6fbf40bbb8 100644
--- a/tests/topotests/all-protocol-startup/r1/show_ipv6_ospf6_interface.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_ipv6_ospf6_interface.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_isis_interface_detail.ref b/tests/topotests/all_protocol_startup/r1/show_isis_interface_detail.ref
index 0534b64d33..0534b64d33 100644
--- a/tests/topotests/all-protocol-startup/r1/show_isis_interface_detail.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_isis_interface_detail.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_mpls_ldp_interface.ref b/tests/topotests/all_protocol_startup/r1/show_mpls_ldp_interface.ref
index c6bb01c34b..c6bb01c34b 100644
--- a/tests/topotests/all-protocol-startup/r1/show_mpls_ldp_interface.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_mpls_ldp_interface.ref
diff --git a/tests/topotests/all-protocol-startup/r1/show_route_map.ref b/tests/topotests/all_protocol_startup/r1/show_route_map.ref
index 612d0a729d..612d0a729d 100644
--- a/tests/topotests/all-protocol-startup/r1/show_route_map.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_route_map.ref
diff --git a/tests/topotests/all-protocol-startup/r1/zebra.conf b/tests/topotests/all_protocol_startup/r1/zebra.conf
index c5ef79630e..c5ef79630e 100644
--- a/tests/topotests/all-protocol-startup/r1/zebra.conf
+++ b/tests/topotests/all_protocol_startup/r1/zebra.conf
diff --git a/tests/topotests/all-protocol-startup/test_all_protocol_startup.dot b/tests/topotests/all_protocol_startup/test_all_protocol_startup.dot
index f39f8f87b8..f39f8f87b8 100644
--- a/tests/topotests/all-protocol-startup/test_all_protocol_startup.dot
+++ b/tests/topotests/all_protocol_startup/test_all_protocol_startup.dot
diff --git a/tests/topotests/all-protocol-startup/test_all_protocol_startup.pdf b/tests/topotests/all_protocol_startup/test_all_protocol_startup.pdf
index 23f69bcddf..23f69bcddf 100644
--- a/tests/topotests/all-protocol-startup/test_all_protocol_startup.pdf
+++ b/tests/topotests/all_protocol_startup/test_all_protocol_startup.pdf
Binary files differ
diff --git a/tests/topotests/all-protocol-startup/test_all_protocol_startup.py b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
index c10e32ad0a..c10e32ad0a 100644
--- a/tests/topotests/all-protocol-startup/test_all_protocol_startup.py
+++ b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/__init__.py b/tests/topotests/bfd_bgp_cbit_topo3/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/__init__.py
+++ b/tests/topotests/bfd_bgp_cbit_topo3/__init__.py
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r1/bfdd.conf b/tests/topotests/bfd_bgp_cbit_topo3/r1/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r1/bfdd.conf
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/bfdd.conf
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r1/bgp_ipv6_routes_down.json b/tests/topotests/bfd_bgp_cbit_topo3/r1/bgp_ipv6_routes_down.json
index 5cba71ef20..5cba71ef20 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r1/bgp_ipv6_routes_down.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/bgp_ipv6_routes_down.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r1/bgpd.conf b/tests/topotests/bfd_bgp_cbit_topo3/r1/bgpd.conf
index 689797a5e6..689797a5e6 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r1/bgpd.conf
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/bgpd.conf
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r1/ipv6_routes.json b/tests/topotests/bfd_bgp_cbit_topo3/r1/ipv6_routes.json
index 8eea183285..8eea183285 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r1/ipv6_routes.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/ipv6_routes.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r1/peers.json b/tests/topotests/bfd_bgp_cbit_topo3/r1/peers.json
index b436d5562e..b436d5562e 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r1/peers.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/peers.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r1/peers_down.json b/tests/topotests/bfd_bgp_cbit_topo3/r1/peers_down.json
index 4984b52cf2..4984b52cf2 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r1/peers_down.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/peers_down.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r1/zebra.conf b/tests/topotests/bfd_bgp_cbit_topo3/r1/zebra.conf
index 3a30cd42fb..3a30cd42fb 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r1/zebra.conf
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/zebra.conf
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r2/zebra.conf b/tests/topotests/bfd_bgp_cbit_topo3/r2/zebra.conf
index 0f70be1bda..0f70be1bda 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r2/zebra.conf
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r2/zebra.conf
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r3/bfdd.conf b/tests/topotests/bfd_bgp_cbit_topo3/r3/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r3/bfdd.conf
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r3/bfdd.conf
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r3/bgp_ipv6_routes_down.json b/tests/topotests/bfd_bgp_cbit_topo3/r3/bgp_ipv6_routes_down.json
index c0cb3c4ac9..c0cb3c4ac9 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r3/bgp_ipv6_routes_down.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r3/bgp_ipv6_routes_down.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r3/bgpd.conf b/tests/topotests/bfd_bgp_cbit_topo3/r3/bgpd.conf
index 1f5aac42ed..1f5aac42ed 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r3/bgpd.conf
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r3/bgpd.conf
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r3/ipv6_routes.json b/tests/topotests/bfd_bgp_cbit_topo3/r3/ipv6_routes.json
index 09808cc09a..09808cc09a 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r3/ipv6_routes.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r3/ipv6_routes.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r3/peers.json b/tests/topotests/bfd_bgp_cbit_topo3/r3/peers.json
index fc9e145340..fc9e145340 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r3/peers.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r3/peers.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r3/peers_down.json b/tests/topotests/bfd_bgp_cbit_topo3/r3/peers_down.json
index 620c6ddcd4..620c6ddcd4 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r3/peers_down.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r3/peers_down.json
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/r3/zebra.conf b/tests/topotests/bfd_bgp_cbit_topo3/r3/zebra.conf
index 7759251dc5..7759251dc5 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/r3/zebra.conf
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r3/zebra.conf
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/test_bfd_bgp_cbit_topo3.dot b/tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.dot
index 270de829c3..270de829c3 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/test_bfd_bgp_cbit_topo3.dot
+++ b/tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.dot
diff --git a/tests/topotests/bfd-bgp-cbit-topo3/test_bfd_bgp_cbit_topo3.py b/tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.py
index 560d6eebec..560d6eebec 100644
--- a/tests/topotests/bfd-bgp-cbit-topo3/test_bfd_bgp_cbit_topo3.py
+++ b/tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.py
diff --git a/tests/topotests/bfd-isis-topo1/__init__.py b/tests/topotests/bfd_isis_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-isis-topo1/__init__.py
+++ b/tests/topotests/bfd_isis_topo1/__init__.py
diff --git a/tests/topotests/bfd-isis-topo1/rt1/bfdd.conf b/tests/topotests/bfd_isis_topo1/rt1/bfdd.conf
index 57f9cd9e3d..57f9cd9e3d 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/bfdd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt1/bfdd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt1/isisd.conf b/tests/topotests/bfd_isis_topo1/rt1/isisd.conf
index 8026aad49d..8026aad49d 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/isisd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt1/isisd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/bfd_isis_topo1/rt1/step1/show_ip_route.ref
index af6e45cf33..af6e45cf33 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step1/show_ip_route.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/bfd_isis_topo1/rt1/step1/show_ipv6_route.ref
index 68d3fe2c44..68d3fe2c44 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step1/show_ipv6_route.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step2/show_bfd_peers.ref b/tests/topotests/bfd_isis_topo1/rt1/step2/show_bfd_peers.ref
index cb4083d2fd..cb4083d2fd 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step2/show_bfd_peers.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step2/show_bfd_peers.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_healthy.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_healthy.ref
index cb4083d2fd..cb4083d2fd 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_healthy.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_healthy.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_rt2_down.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_rt2_down.ref
index f00b9f3d32..f00b9f3d32 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_rt2_down.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_rt2_down.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_rt3_down.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_rt3_down.ref
index f5bd276a4a..f5bd276a4a 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_bfd_peers_rt3_down.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_bfd_peers_rt3_down.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_healthy.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_healthy.ref
index af6e45cf33..af6e45cf33 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_healthy.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_healthy.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_rt2_down.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_rt2_down.ref
index b8366bc0b7..b8366bc0b7 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_rt2_down.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_rt2_down.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_rt3_down.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_rt3_down.ref
index 42bd6abf82..42bd6abf82 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ip_route_rt3_down.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ip_route_rt3_down.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_healthy.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_healthy.ref
index 68d3fe2c44..68d3fe2c44 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_healthy.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_healthy.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_rt2_down.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt2_down.ref
index 200053c3e8..200053c3e8 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_rt2_down.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt2_down.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_rt3_down.ref b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt3_down.ref
index 4297f163b5..4297f163b5 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/step3/show_ipv6_route_rt3_down.ref
+++ b/tests/topotests/bfd_isis_topo1/rt1/step3/show_ipv6_route_rt3_down.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt1/zebra.conf b/tests/topotests/bfd_isis_topo1/rt1/zebra.conf
index 6003125b6b..6003125b6b 100644
--- a/tests/topotests/bfd-isis-topo1/rt1/zebra.conf
+++ b/tests/topotests/bfd_isis_topo1/rt1/zebra.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt2/bfdd.conf b/tests/topotests/bfd_isis_topo1/rt2/bfdd.conf
index 6b34e337d3..6b34e337d3 100644
--- a/tests/topotests/bfd-isis-topo1/rt2/bfdd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt2/bfdd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt2/isisd.conf b/tests/topotests/bfd_isis_topo1/rt2/isisd.conf
index b0fde64a5e..b0fde64a5e 100644
--- a/tests/topotests/bfd-isis-topo1/rt2/isisd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt2/isisd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt2/step2/show_bfd_peers.ref b/tests/topotests/bfd_isis_topo1/rt2/step2/show_bfd_peers.ref
index 8a90649efa..8a90649efa 100644
--- a/tests/topotests/bfd-isis-topo1/rt2/step2/show_bfd_peers.ref
+++ b/tests/topotests/bfd_isis_topo1/rt2/step2/show_bfd_peers.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt2/zebra.conf b/tests/topotests/bfd_isis_topo1/rt2/zebra.conf
index 5fc7fc5b28..5fc7fc5b28 100644
--- a/tests/topotests/bfd-isis-topo1/rt2/zebra.conf
+++ b/tests/topotests/bfd_isis_topo1/rt2/zebra.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt3/bfdd.conf b/tests/topotests/bfd_isis_topo1/rt3/bfdd.conf
index 22937fe46f..22937fe46f 100644
--- a/tests/topotests/bfd-isis-topo1/rt3/bfdd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt3/bfdd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt3/isisd.conf b/tests/topotests/bfd_isis_topo1/rt3/isisd.conf
index 5c36e96c0f..5c36e96c0f 100644
--- a/tests/topotests/bfd-isis-topo1/rt3/isisd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt3/isisd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt3/step2/show_bfd_peers.ref b/tests/topotests/bfd_isis_topo1/rt3/step2/show_bfd_peers.ref
index 13eb2a2c69..13eb2a2c69 100644
--- a/tests/topotests/bfd-isis-topo1/rt3/step2/show_bfd_peers.ref
+++ b/tests/topotests/bfd_isis_topo1/rt3/step2/show_bfd_peers.ref
diff --git a/tests/topotests/bfd-isis-topo1/rt3/zebra.conf b/tests/topotests/bfd_isis_topo1/rt3/zebra.conf
index d368de9bbe..d368de9bbe 100644
--- a/tests/topotests/bfd-isis-topo1/rt3/zebra.conf
+++ b/tests/topotests/bfd_isis_topo1/rt3/zebra.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt4/bfdd.conf b/tests/topotests/bfd_isis_topo1/rt4/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-isis-topo1/rt4/bfdd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt4/bfdd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt4/isisd.conf b/tests/topotests/bfd_isis_topo1/rt4/isisd.conf
index 3eac407776..3eac407776 100644
--- a/tests/topotests/bfd-isis-topo1/rt4/isisd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt4/isisd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt4/zebra.conf b/tests/topotests/bfd_isis_topo1/rt4/zebra.conf
index 7b053bac35..7b053bac35 100644
--- a/tests/topotests/bfd-isis-topo1/rt4/zebra.conf
+++ b/tests/topotests/bfd_isis_topo1/rt4/zebra.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt5/bfdd.conf b/tests/topotests/bfd_isis_topo1/rt5/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-isis-topo1/rt5/bfdd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt5/bfdd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt5/isisd.conf b/tests/topotests/bfd_isis_topo1/rt5/isisd.conf
index 5d449f6f93..5d449f6f93 100644
--- a/tests/topotests/bfd-isis-topo1/rt5/isisd.conf
+++ b/tests/topotests/bfd_isis_topo1/rt5/isisd.conf
diff --git a/tests/topotests/bfd-isis-topo1/rt5/zebra.conf b/tests/topotests/bfd_isis_topo1/rt5/zebra.conf
index 0b7c9e02f3..0b7c9e02f3 100644
--- a/tests/topotests/bfd-isis-topo1/rt5/zebra.conf
+++ b/tests/topotests/bfd_isis_topo1/rt5/zebra.conf
diff --git a/tests/topotests/bfd-isis-topo1/test_bfd_isis_topo1.py b/tests/topotests/bfd_isis_topo1/test_bfd_isis_topo1.py
index fcb5672dce..fcb5672dce 100644
--- a/tests/topotests/bfd-isis-topo1/test_bfd_isis_topo1.py
+++ b/tests/topotests/bfd_isis_topo1/test_bfd_isis_topo1.py
diff --git a/tests/topotests/bfd-ospf-topo1/__init__.py b/tests/topotests/bfd_ospf_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-ospf-topo1/__init__.py
+++ b/tests/topotests/bfd_ospf_topo1/__init__.py
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/bfdd.conf b/tests/topotests/bfd_ospf_topo1/rt1/bfdd.conf
index 610a20f88a..610a20f88a 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/bfdd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt1/bfdd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/ospf6d.conf b/tests/topotests/bfd_ospf_topo1/rt1/ospf6d.conf
index 18def599b4..18def599b4 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/ospf6d.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt1/ospf6d.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/ospfd.conf b/tests/topotests/bfd_ospf_topo1/rt1/ospfd.conf
index 07b42f9885..07b42f9885 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/ospfd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt1/ospfd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/bfd_ospf_topo1/rt1/step1/show_ip_route.ref
index f354eff697..f354eff697 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step1/show_ip_route.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/bfd_ospf_topo1/rt1/step1/show_ipv6_route.ref
index 6465efb8b5..6465efb8b5 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step1/show_ipv6_route.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step2/show_bfd_peers.ref b/tests/topotests/bfd_ospf_topo1/rt1/step2/show_bfd_peers.ref
index 63f0d50784..63f0d50784 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step2/show_bfd_peers.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step2/show_bfd_peers.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_healthy.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_healthy.ref
index 42051f9582..42051f9582 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_healthy.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_healthy.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_rt2_down.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_rt2_down.ref
index d844ee6813..d844ee6813 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_rt2_down.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_rt2_down.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_rt3_down.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_rt3_down.ref
index 32799084fb..32799084fb 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_bfd_peers_rt3_down.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_bfd_peers_rt3_down.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_healthy.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_healthy.ref
index f354eff697..f354eff697 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_healthy.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_healthy.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_rt2_down.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_rt2_down.ref
index 43eecd0b7a..43eecd0b7a 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_rt2_down.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_rt2_down.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_rt3_down.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_rt3_down.ref
index 409af6308b..409af6308b 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ip_route_rt3_down.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ip_route_rt3_down.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_healthy.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_healthy.ref
index 6465efb8b5..6465efb8b5 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_healthy.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_healthy.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_rt2_down.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt2_down.ref
index cfb1ef1bb6..cfb1ef1bb6 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_rt2_down.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt2_down.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_rt3_down.ref b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt3_down.ref
index 58b44da5c2..58b44da5c2 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/step3/show_ipv6_route_rt3_down.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt1/step3/show_ipv6_route_rt3_down.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt1/zebra.conf b/tests/topotests/bfd_ospf_topo1/rt1/zebra.conf
index 6003125b6b..6003125b6b 100644
--- a/tests/topotests/bfd-ospf-topo1/rt1/zebra.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt1/zebra.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt2/bfdd.conf b/tests/topotests/bfd_ospf_topo1/rt2/bfdd.conf
index 437f063d8f..437f063d8f 100644
--- a/tests/topotests/bfd-ospf-topo1/rt2/bfdd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt2/bfdd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt2/ospf6d.conf b/tests/topotests/bfd_ospf_topo1/rt2/ospf6d.conf
index 2f35099564..2f35099564 100644
--- a/tests/topotests/bfd-ospf-topo1/rt2/ospf6d.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt2/ospf6d.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt2/ospfd.conf b/tests/topotests/bfd_ospf_topo1/rt2/ospfd.conf
index a05d8b58c8..a05d8b58c8 100644
--- a/tests/topotests/bfd-ospf-topo1/rt2/ospfd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt2/ospfd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt2/step2/show_bfd_peers.ref b/tests/topotests/bfd_ospf_topo1/rt2/step2/show_bfd_peers.ref
index d6df1ebfb2..d6df1ebfb2 100644
--- a/tests/topotests/bfd-ospf-topo1/rt2/step2/show_bfd_peers.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt2/step2/show_bfd_peers.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt2/zebra.conf b/tests/topotests/bfd_ospf_topo1/rt2/zebra.conf
index 5fc7fc5b28..5fc7fc5b28 100644
--- a/tests/topotests/bfd-ospf-topo1/rt2/zebra.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt2/zebra.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt3/bfdd.conf b/tests/topotests/bfd_ospf_topo1/rt3/bfdd.conf
index 437f063d8f..437f063d8f 100644
--- a/tests/topotests/bfd-ospf-topo1/rt3/bfdd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt3/bfdd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt3/ospf6d.conf b/tests/topotests/bfd_ospf_topo1/rt3/ospf6d.conf
index 3e8777019e..3e8777019e 100644
--- a/tests/topotests/bfd-ospf-topo1/rt3/ospf6d.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt3/ospf6d.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt3/ospfd.conf b/tests/topotests/bfd_ospf_topo1/rt3/ospfd.conf
index 1196e6d189..1196e6d189 100644
--- a/tests/topotests/bfd-ospf-topo1/rt3/ospfd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt3/ospfd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt3/step2/show_bfd_peers.ref b/tests/topotests/bfd_ospf_topo1/rt3/step2/show_bfd_peers.ref
index d6df1ebfb2..d6df1ebfb2 100644
--- a/tests/topotests/bfd-ospf-topo1/rt3/step2/show_bfd_peers.ref
+++ b/tests/topotests/bfd_ospf_topo1/rt3/step2/show_bfd_peers.ref
diff --git a/tests/topotests/bfd-ospf-topo1/rt3/zebra.conf b/tests/topotests/bfd_ospf_topo1/rt3/zebra.conf
index d368de9bbe..d368de9bbe 100644
--- a/tests/topotests/bfd-ospf-topo1/rt3/zebra.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt3/zebra.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt4/bfdd.conf b/tests/topotests/bfd_ospf_topo1/rt4/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-ospf-topo1/rt4/bfdd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt4/bfdd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt4/ospf6d.conf b/tests/topotests/bfd_ospf_topo1/rt4/ospf6d.conf
index bccd1e75bd..bccd1e75bd 100644
--- a/tests/topotests/bfd-ospf-topo1/rt4/ospf6d.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt4/ospf6d.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt4/ospfd.conf b/tests/topotests/bfd_ospf_topo1/rt4/ospfd.conf
index 3a2568b4ab..3a2568b4ab 100644
--- a/tests/topotests/bfd-ospf-topo1/rt4/ospfd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt4/ospfd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt4/zebra.conf b/tests/topotests/bfd_ospf_topo1/rt4/zebra.conf
index 7b053bac35..7b053bac35 100644
--- a/tests/topotests/bfd-ospf-topo1/rt4/zebra.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt4/zebra.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt5/bfdd.conf b/tests/topotests/bfd_ospf_topo1/rt5/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-ospf-topo1/rt5/bfdd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt5/bfdd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt5/ospf6d.conf b/tests/topotests/bfd_ospf_topo1/rt5/ospf6d.conf
index 766862276c..766862276c 100644
--- a/tests/topotests/bfd-ospf-topo1/rt5/ospf6d.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt5/ospf6d.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt5/ospfd.conf b/tests/topotests/bfd_ospf_topo1/rt5/ospfd.conf
index a35de5f45f..a35de5f45f 100644
--- a/tests/topotests/bfd-ospf-topo1/rt5/ospfd.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt5/ospfd.conf
diff --git a/tests/topotests/bfd-ospf-topo1/rt5/zebra.conf b/tests/topotests/bfd_ospf_topo1/rt5/zebra.conf
index 0b7c9e02f3..0b7c9e02f3 100644
--- a/tests/topotests/bfd-ospf-topo1/rt5/zebra.conf
+++ b/tests/topotests/bfd_ospf_topo1/rt5/zebra.conf
diff --git a/tests/topotests/bfd-ospf-topo1/test_bfd_ospf_topo1.py b/tests/topotests/bfd_ospf_topo1/test_bfd_ospf_topo1.py
index ae148f948c..ae148f948c 100755
--- a/tests/topotests/bfd-ospf-topo1/test_bfd_ospf_topo1.py
+++ b/tests/topotests/bfd_ospf_topo1/test_bfd_ospf_topo1.py
diff --git a/tests/topotests/bfd-profiles-topo1/__init__.py b/tests/topotests/bfd_profiles_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-profiles-topo1/__init__.py
+++ b/tests/topotests/bfd_profiles_topo1/__init__.py
diff --git a/tests/topotests/bfd-profiles-topo1/r1/bfd-peers-initial.json b/tests/topotests/bfd_profiles_topo1/r1/bfd-peers-initial.json
index 86a7e5139c..86a7e5139c 100644
--- a/tests/topotests/bfd-profiles-topo1/r1/bfd-peers-initial.json
+++ b/tests/topotests/bfd_profiles_topo1/r1/bfd-peers-initial.json
diff --git a/tests/topotests/bfd-profiles-topo1/r1/bfdd.conf b/tests/topotests/bfd_profiles_topo1/r1/bfdd.conf
index 688f2e839c..688f2e839c 100644
--- a/tests/topotests/bfd-profiles-topo1/r1/bfdd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r1/bfdd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r1/ospfd.conf b/tests/topotests/bfd_profiles_topo1/r1/ospfd.conf
index fcea5d48fc..fcea5d48fc 100644
--- a/tests/topotests/bfd-profiles-topo1/r1/ospfd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r1/ospfd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r1/zebra.conf b/tests/topotests/bfd_profiles_topo1/r1/zebra.conf
index 4b7982b235..4b7982b235 100644
--- a/tests/topotests/bfd-profiles-topo1/r1/zebra.conf
+++ b/tests/topotests/bfd_profiles_topo1/r1/zebra.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r2/bfd-peers-initial.json b/tests/topotests/bfd_profiles_topo1/r2/bfd-peers-initial.json
index 503f776aec..503f776aec 100644
--- a/tests/topotests/bfd-profiles-topo1/r2/bfd-peers-initial.json
+++ b/tests/topotests/bfd_profiles_topo1/r2/bfd-peers-initial.json
diff --git a/tests/topotests/bfd-profiles-topo1/r2/bfdd.conf b/tests/topotests/bfd_profiles_topo1/r2/bfdd.conf
index 700c46ba1e..700c46ba1e 100644
--- a/tests/topotests/bfd-profiles-topo1/r2/bfdd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r2/bfdd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r2/bgpd.conf b/tests/topotests/bfd_profiles_topo1/r2/bgpd.conf
index 0c3db97bc1..0c3db97bc1 100644
--- a/tests/topotests/bfd-profiles-topo1/r2/bgpd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r2/bgpd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r2/zebra.conf b/tests/topotests/bfd_profiles_topo1/r2/zebra.conf
index 6acef139b9..6acef139b9 100644
--- a/tests/topotests/bfd-profiles-topo1/r2/zebra.conf
+++ b/tests/topotests/bfd_profiles_topo1/r2/zebra.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r3/bfd-peers-initial.json b/tests/topotests/bfd_profiles_topo1/r3/bfd-peers-initial.json
index d987a0ae7d..d987a0ae7d 100644
--- a/tests/topotests/bfd-profiles-topo1/r3/bfd-peers-initial.json
+++ b/tests/topotests/bfd_profiles_topo1/r3/bfd-peers-initial.json
diff --git a/tests/topotests/bfd-profiles-topo1/r3/bfdd.conf b/tests/topotests/bfd_profiles_topo1/r3/bfdd.conf
index 08eb0468d6..08eb0468d6 100644
--- a/tests/topotests/bfd-profiles-topo1/r3/bfdd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r3/bfdd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r3/bgpd.conf b/tests/topotests/bfd_profiles_topo1/r3/bgpd.conf
index 65647b39e5..65647b39e5 100644
--- a/tests/topotests/bfd-profiles-topo1/r3/bgpd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r3/bgpd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r3/isisd.conf b/tests/topotests/bfd_profiles_topo1/r3/isisd.conf
index ca965e3956..ca965e3956 100644
--- a/tests/topotests/bfd-profiles-topo1/r3/isisd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r3/isisd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r3/zebra.conf b/tests/topotests/bfd_profiles_topo1/r3/zebra.conf
index 2297bfafe9..2297bfafe9 100644
--- a/tests/topotests/bfd-profiles-topo1/r3/zebra.conf
+++ b/tests/topotests/bfd_profiles_topo1/r3/zebra.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r4/bfd-peers-initial.json b/tests/topotests/bfd_profiles_topo1/r4/bfd-peers-initial.json
index 9ab7479979..9ab7479979 100644
--- a/tests/topotests/bfd-profiles-topo1/r4/bfd-peers-initial.json
+++ b/tests/topotests/bfd_profiles_topo1/r4/bfd-peers-initial.json
diff --git a/tests/topotests/bfd-profiles-topo1/r4/bfdd.conf b/tests/topotests/bfd_profiles_topo1/r4/bfdd.conf
index 4f5e022077..4f5e022077 100644
--- a/tests/topotests/bfd-profiles-topo1/r4/bfdd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r4/bfdd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r4/bgpd.conf b/tests/topotests/bfd_profiles_topo1/r4/bgpd.conf
index 200937a9a5..200937a9a5 100644
--- a/tests/topotests/bfd-profiles-topo1/r4/bgpd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r4/bgpd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r4/isisd.conf b/tests/topotests/bfd_profiles_topo1/r4/isisd.conf
index d8ffc9bc2c..d8ffc9bc2c 100644
--- a/tests/topotests/bfd-profiles-topo1/r4/isisd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r4/isisd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r4/ospf6d.conf b/tests/topotests/bfd_profiles_topo1/r4/ospf6d.conf
index 4ef28c39ca..4ef28c39ca 100644
--- a/tests/topotests/bfd-profiles-topo1/r4/ospf6d.conf
+++ b/tests/topotests/bfd_profiles_topo1/r4/ospf6d.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r4/zebra.conf b/tests/topotests/bfd_profiles_topo1/r4/zebra.conf
index 753041f952..753041f952 100644
--- a/tests/topotests/bfd-profiles-topo1/r4/zebra.conf
+++ b/tests/topotests/bfd_profiles_topo1/r4/zebra.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r5/bfd-peers-initial.json b/tests/topotests/bfd_profiles_topo1/r5/bfd-peers-initial.json
index 0fe56d576b..0fe56d576b 100644
--- a/tests/topotests/bfd-profiles-topo1/r5/bfd-peers-initial.json
+++ b/tests/topotests/bfd_profiles_topo1/r5/bfd-peers-initial.json
diff --git a/tests/topotests/bfd-profiles-topo1/r5/bfdd.conf b/tests/topotests/bfd_profiles_topo1/r5/bfdd.conf
index 74dae5a60d..74dae5a60d 100644
--- a/tests/topotests/bfd-profiles-topo1/r5/bfdd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r5/bfdd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r5/ospf6d.conf b/tests/topotests/bfd_profiles_topo1/r5/ospf6d.conf
index 20b53cfc55..20b53cfc55 100644
--- a/tests/topotests/bfd-profiles-topo1/r5/ospf6d.conf
+++ b/tests/topotests/bfd_profiles_topo1/r5/ospf6d.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r5/zebra.conf b/tests/topotests/bfd_profiles_topo1/r5/zebra.conf
index de8ae1644b..de8ae1644b 100644
--- a/tests/topotests/bfd-profiles-topo1/r5/zebra.conf
+++ b/tests/topotests/bfd_profiles_topo1/r5/zebra.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r6/bfd-peers-initial.json b/tests/topotests/bfd_profiles_topo1/r6/bfd-peers-initial.json
index ec973eb365..ec973eb365 100644
--- a/tests/topotests/bfd-profiles-topo1/r6/bfd-peers-initial.json
+++ b/tests/topotests/bfd_profiles_topo1/r6/bfd-peers-initial.json
diff --git a/tests/topotests/bfd-profiles-topo1/r6/bfdd.conf b/tests/topotests/bfd_profiles_topo1/r6/bfdd.conf
index 74dae5a60d..74dae5a60d 100644
--- a/tests/topotests/bfd-profiles-topo1/r6/bfdd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r6/bfdd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r6/ospfd.conf b/tests/topotests/bfd_profiles_topo1/r6/ospfd.conf
index d8fce344a8..d8fce344a8 100644
--- a/tests/topotests/bfd-profiles-topo1/r6/ospfd.conf
+++ b/tests/topotests/bfd_profiles_topo1/r6/ospfd.conf
diff --git a/tests/topotests/bfd-profiles-topo1/r6/zebra.conf b/tests/topotests/bfd_profiles_topo1/r6/zebra.conf
index c0804b94a7..c0804b94a7 100644
--- a/tests/topotests/bfd-profiles-topo1/r6/zebra.conf
+++ b/tests/topotests/bfd_profiles_topo1/r6/zebra.conf
diff --git a/tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.dot b/tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.dot
index a3936093aa..a3936093aa 100644
--- a/tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.dot
+++ b/tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.dot
diff --git a/tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.png b/tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.png
index 775fae13f1..775fae13f1 100644
--- a/tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.png
+++ b/tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.png
Binary files differ
diff --git a/tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.py b/tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.py
index 4a2c8ee002..4a2c8ee002 100644
--- a/tests/topotests/bfd-profiles-topo1/test_bfd_profiles_topo1.py
+++ b/tests/topotests/bfd_profiles_topo1/test_bfd_profiles_topo1.py
diff --git a/tests/topotests/bfd-topo1/__init__.py b/tests/topotests/bfd_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-topo1/__init__.py
+++ b/tests/topotests/bfd_topo1/__init__.py
diff --git a/tests/topotests/bfd-topo1/r1/bfdd.conf b/tests/topotests/bfd_topo1/r1/bfdd.conf
index 4102000337..4102000337 100644
--- a/tests/topotests/bfd-topo1/r1/bfdd.conf
+++ b/tests/topotests/bfd_topo1/r1/bfdd.conf
diff --git a/tests/topotests/bfd-topo1/r1/bgp_prefixes.json b/tests/topotests/bfd_topo1/r1/bgp_prefixes.json
index 1262f5e984..1262f5e984 100644
--- a/tests/topotests/bfd-topo1/r1/bgp_prefixes.json
+++ b/tests/topotests/bfd_topo1/r1/bgp_prefixes.json
diff --git a/tests/topotests/bfd-topo1/r1/bgp_summary.json b/tests/topotests/bfd_topo1/r1/bgp_summary.json
index fa07d60df9..fa07d60df9 100644
--- a/tests/topotests/bfd-topo1/r1/bgp_summary.json
+++ b/tests/topotests/bfd_topo1/r1/bgp_summary.json
diff --git a/tests/topotests/bfd-topo1/r1/bgpd.conf b/tests/topotests/bfd_topo1/r1/bgpd.conf
index 57bde1f234..57bde1f234 100644
--- a/tests/topotests/bfd-topo1/r1/bgpd.conf
+++ b/tests/topotests/bfd_topo1/r1/bgpd.conf
diff --git a/tests/topotests/bfd-topo1/r1/peers.json b/tests/topotests/bfd_topo1/r1/peers.json
index f49768ff75..f49768ff75 100644
--- a/tests/topotests/bfd-topo1/r1/peers.json
+++ b/tests/topotests/bfd_topo1/r1/peers.json
diff --git a/tests/topotests/bfd-topo1/r1/zebra.conf b/tests/topotests/bfd_topo1/r1/zebra.conf
index a14cd7ac88..a14cd7ac88 100644
--- a/tests/topotests/bfd-topo1/r1/zebra.conf
+++ b/tests/topotests/bfd_topo1/r1/zebra.conf
diff --git a/tests/topotests/bfd-topo1/r2/bfdd.conf b/tests/topotests/bfd_topo1/r2/bfdd.conf
index 412450ca1e..412450ca1e 100644
--- a/tests/topotests/bfd-topo1/r2/bfdd.conf
+++ b/tests/topotests/bfd_topo1/r2/bfdd.conf
diff --git a/tests/topotests/bfd-topo1/r2/bgp_prefixes.json b/tests/topotests/bfd_topo1/r2/bgp_prefixes.json
index 0d47c0fc30..0d47c0fc30 100644
--- a/tests/topotests/bfd-topo1/r2/bgp_prefixes.json
+++ b/tests/topotests/bfd_topo1/r2/bgp_prefixes.json
diff --git a/tests/topotests/bfd-topo1/r2/bgp_summary.json b/tests/topotests/bfd_topo1/r2/bgp_summary.json
index c0ef11ac5f..c0ef11ac5f 100644
--- a/tests/topotests/bfd-topo1/r2/bgp_summary.json
+++ b/tests/topotests/bfd_topo1/r2/bgp_summary.json
diff --git a/tests/topotests/bfd-topo1/r2/bgpd.conf b/tests/topotests/bfd_topo1/r2/bgpd.conf
index 50d75ab67f..50d75ab67f 100644
--- a/tests/topotests/bfd-topo1/r2/bgpd.conf
+++ b/tests/topotests/bfd_topo1/r2/bgpd.conf
diff --git a/tests/topotests/bfd-topo1/r2/peers.json b/tests/topotests/bfd_topo1/r2/peers.json
index 267459c7a8..267459c7a8 100644
--- a/tests/topotests/bfd-topo1/r2/peers.json
+++ b/tests/topotests/bfd_topo1/r2/peers.json
diff --git a/tests/topotests/bfd-topo1/r2/zebra.conf b/tests/topotests/bfd_topo1/r2/zebra.conf
index 568abe751e..568abe751e 100644
--- a/tests/topotests/bfd-topo1/r2/zebra.conf
+++ b/tests/topotests/bfd_topo1/r2/zebra.conf
diff --git a/tests/topotests/bfd-topo1/r3/bfdd.conf b/tests/topotests/bfd_topo1/r3/bfdd.conf
index 4cf20bb904..4cf20bb904 100644
--- a/tests/topotests/bfd-topo1/r3/bfdd.conf
+++ b/tests/topotests/bfd_topo1/r3/bfdd.conf
diff --git a/tests/topotests/bfd-topo1/r3/bgp_prefixes.json b/tests/topotests/bfd_topo1/r3/bgp_prefixes.json
index 36fca17bbf..36fca17bbf 100644
--- a/tests/topotests/bfd-topo1/r3/bgp_prefixes.json
+++ b/tests/topotests/bfd_topo1/r3/bgp_prefixes.json
diff --git a/tests/topotests/bfd-topo1/r3/bgp_summary.json b/tests/topotests/bfd_topo1/r3/bgp_summary.json
index d47833377b..d47833377b 100644
--- a/tests/topotests/bfd-topo1/r3/bgp_summary.json
+++ b/tests/topotests/bfd_topo1/r3/bgp_summary.json
diff --git a/tests/topotests/bfd-topo1/r3/bgpd.conf b/tests/topotests/bfd_topo1/r3/bgpd.conf
index ce6055d518..ce6055d518 100644
--- a/tests/topotests/bfd-topo1/r3/bgpd.conf
+++ b/tests/topotests/bfd_topo1/r3/bgpd.conf
diff --git a/tests/topotests/bfd-topo1/r3/peers.json b/tests/topotests/bfd_topo1/r3/peers.json
index ef38008643..ef38008643 100644
--- a/tests/topotests/bfd-topo1/r3/peers.json
+++ b/tests/topotests/bfd_topo1/r3/peers.json
diff --git a/tests/topotests/bfd-topo1/r3/zebra.conf b/tests/topotests/bfd_topo1/r3/zebra.conf
index b4fd80fa10..b4fd80fa10 100644
--- a/tests/topotests/bfd-topo1/r3/zebra.conf
+++ b/tests/topotests/bfd_topo1/r3/zebra.conf
diff --git a/tests/topotests/bfd-topo1/r4/bfdd.conf b/tests/topotests/bfd_topo1/r4/bfdd.conf
index 34b88c9a35..34b88c9a35 100644
--- a/tests/topotests/bfd-topo1/r4/bfdd.conf
+++ b/tests/topotests/bfd_topo1/r4/bfdd.conf
diff --git a/tests/topotests/bfd-topo1/r4/bgp_prefixes.json b/tests/topotests/bfd_topo1/r4/bgp_prefixes.json
index efe7d47b1a..efe7d47b1a 100644
--- a/tests/topotests/bfd-topo1/r4/bgp_prefixes.json
+++ b/tests/topotests/bfd_topo1/r4/bgp_prefixes.json
diff --git a/tests/topotests/bfd-topo1/r4/bgp_summary.json b/tests/topotests/bfd_topo1/r4/bgp_summary.json
index 7d81784b56..7d81784b56 100644
--- a/tests/topotests/bfd-topo1/r4/bgp_summary.json
+++ b/tests/topotests/bfd_topo1/r4/bgp_summary.json
diff --git a/tests/topotests/bfd-topo1/r4/bgpd.conf b/tests/topotests/bfd_topo1/r4/bgpd.conf
index 0d032b4cdd..0d032b4cdd 100644
--- a/tests/topotests/bfd-topo1/r4/bgpd.conf
+++ b/tests/topotests/bfd_topo1/r4/bgpd.conf
diff --git a/tests/topotests/bfd-topo1/r4/peers.json b/tests/topotests/bfd_topo1/r4/peers.json
index 37140089e1..37140089e1 100644
--- a/tests/topotests/bfd-topo1/r4/peers.json
+++ b/tests/topotests/bfd_topo1/r4/peers.json
diff --git a/tests/topotests/bfd-topo1/r4/zebra.conf b/tests/topotests/bfd_topo1/r4/zebra.conf
index afdd44b1ab..afdd44b1ab 100644
--- a/tests/topotests/bfd-topo1/r4/zebra.conf
+++ b/tests/topotests/bfd_topo1/r4/zebra.conf
diff --git a/tests/topotests/bfd-topo1/test_bfd_topo1.dot b/tests/topotests/bfd_topo1/test_bfd_topo1.dot
index c84ace2780..c84ace2780 100644
--- a/tests/topotests/bfd-topo1/test_bfd_topo1.dot
+++ b/tests/topotests/bfd_topo1/test_bfd_topo1.dot
diff --git a/tests/topotests/bfd-topo1/test_bfd_topo1.jpg b/tests/topotests/bfd_topo1/test_bfd_topo1.jpg
index 4d6d56e072..4d6d56e072 100644
--- a/tests/topotests/bfd-topo1/test_bfd_topo1.jpg
+++ b/tests/topotests/bfd_topo1/test_bfd_topo1.jpg
Binary files differ
diff --git a/tests/topotests/bfd-topo1/test_bfd_topo1.py b/tests/topotests/bfd_topo1/test_bfd_topo1.py
index 86bdcfed04..86bdcfed04 100644
--- a/tests/topotests/bfd-topo1/test_bfd_topo1.py
+++ b/tests/topotests/bfd_topo1/test_bfd_topo1.py
diff --git a/tests/topotests/bfd-topo2/__init__.py b/tests/topotests/bfd_topo2/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-topo2/__init__.py
+++ b/tests/topotests/bfd_topo2/__init__.py
diff --git a/tests/topotests/bfd-topo2/r1/bfdd.conf b/tests/topotests/bfd_topo2/r1/bfdd.conf
index f03135021e..f03135021e 100644
--- a/tests/topotests/bfd-topo2/r1/bfdd.conf
+++ b/tests/topotests/bfd_topo2/r1/bfdd.conf
diff --git a/tests/topotests/bfd-topo2/r1/bgpd.conf b/tests/topotests/bfd_topo2/r1/bgpd.conf
index 0918796e95..0918796e95 100644
--- a/tests/topotests/bfd-topo2/r1/bgpd.conf
+++ b/tests/topotests/bfd_topo2/r1/bgpd.conf
diff --git a/tests/topotests/bfd-topo2/r1/ipv4_routes.json b/tests/topotests/bfd_topo2/r1/ipv4_routes.json
index 650c0a81bb..650c0a81bb 100644
--- a/tests/topotests/bfd-topo2/r1/ipv4_routes.json
+++ b/tests/topotests/bfd_topo2/r1/ipv4_routes.json
diff --git a/tests/topotests/bfd-topo2/r1/ipv6_routes.json b/tests/topotests/bfd_topo2/r1/ipv6_routes.json
index 50c1f9ad8f..50c1f9ad8f 100644
--- a/tests/topotests/bfd-topo2/r1/ipv6_routes.json
+++ b/tests/topotests/bfd_topo2/r1/ipv6_routes.json
diff --git a/tests/topotests/bfd-topo2/r1/peers.json b/tests/topotests/bfd_topo2/r1/peers.json
index 9bce991d0d..9bce991d0d 100644
--- a/tests/topotests/bfd-topo2/r1/peers.json
+++ b/tests/topotests/bfd_topo2/r1/peers.json
diff --git a/tests/topotests/bfd-topo2/r1/zebra.conf b/tests/topotests/bfd_topo2/r1/zebra.conf
index 7fe5eb218f..7fe5eb218f 100644
--- a/tests/topotests/bfd-topo2/r1/zebra.conf
+++ b/tests/topotests/bfd_topo2/r1/zebra.conf
diff --git a/tests/topotests/bfd-topo2/r2/bfdd.conf b/tests/topotests/bfd_topo2/r2/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-topo2/r2/bfdd.conf
+++ b/tests/topotests/bfd_topo2/r2/bfdd.conf
diff --git a/tests/topotests/bfd-topo2/r2/bgpd.conf b/tests/topotests/bfd_topo2/r2/bgpd.conf
index 55d48560e7..55d48560e7 100644
--- a/tests/topotests/bfd-topo2/r2/bgpd.conf
+++ b/tests/topotests/bfd_topo2/r2/bgpd.conf
diff --git a/tests/topotests/bfd-topo2/r2/ipv4_routes.json b/tests/topotests/bfd_topo2/r2/ipv4_routes.json
index 3d49b178b5..3d49b178b5 100644
--- a/tests/topotests/bfd-topo2/r2/ipv4_routes.json
+++ b/tests/topotests/bfd_topo2/r2/ipv4_routes.json
diff --git a/tests/topotests/bfd-topo2/r2/ipv6_routes.json b/tests/topotests/bfd_topo2/r2/ipv6_routes.json
index 4f3c74c5e2..4f3c74c5e2 100644
--- a/tests/topotests/bfd-topo2/r2/ipv6_routes.json
+++ b/tests/topotests/bfd_topo2/r2/ipv6_routes.json
diff --git a/tests/topotests/bfd-topo2/r2/ospf6d.conf b/tests/topotests/bfd_topo2/r2/ospf6d.conf
index 48a729ce19..48a729ce19 100644
--- a/tests/topotests/bfd-topo2/r2/ospf6d.conf
+++ b/tests/topotests/bfd_topo2/r2/ospf6d.conf
diff --git a/tests/topotests/bfd-topo2/r2/ospfd.conf b/tests/topotests/bfd_topo2/r2/ospfd.conf
index c786f1fe43..c786f1fe43 100644
--- a/tests/topotests/bfd-topo2/r2/ospfd.conf
+++ b/tests/topotests/bfd_topo2/r2/ospfd.conf
diff --git a/tests/topotests/bfd-topo2/r2/peers.json b/tests/topotests/bfd_topo2/r2/peers.json
index ec2135ce37..ec2135ce37 100644
--- a/tests/topotests/bfd-topo2/r2/peers.json
+++ b/tests/topotests/bfd_topo2/r2/peers.json
diff --git a/tests/topotests/bfd-topo2/r2/zebra.conf b/tests/topotests/bfd_topo2/r2/zebra.conf
index cccbf6574a..cccbf6574a 100644
--- a/tests/topotests/bfd-topo2/r2/zebra.conf
+++ b/tests/topotests/bfd_topo2/r2/zebra.conf
diff --git a/tests/topotests/bfd-topo2/r3/bfdd.conf b/tests/topotests/bfd_topo2/r3/bfdd.conf
index f35e772790..f35e772790 100644
--- a/tests/topotests/bfd-topo2/r3/bfdd.conf
+++ b/tests/topotests/bfd_topo2/r3/bfdd.conf
diff --git a/tests/topotests/bfd-topo2/r3/ipv4_routes.json b/tests/topotests/bfd_topo2/r3/ipv4_routes.json
index e96fdc0b15..e96fdc0b15 100644
--- a/tests/topotests/bfd-topo2/r3/ipv4_routes.json
+++ b/tests/topotests/bfd_topo2/r3/ipv4_routes.json
diff --git a/tests/topotests/bfd-topo2/r3/ipv6_routes.json b/tests/topotests/bfd_topo2/r3/ipv6_routes.json
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/bfd-topo2/r3/ipv6_routes.json
+++ b/tests/topotests/bfd_topo2/r3/ipv6_routes.json
diff --git a/tests/topotests/bfd-topo2/r3/ospfd.conf b/tests/topotests/bfd_topo2/r3/ospfd.conf
index 932ab4da63..932ab4da63 100644
--- a/tests/topotests/bfd-topo2/r3/ospfd.conf
+++ b/tests/topotests/bfd_topo2/r3/ospfd.conf
diff --git a/tests/topotests/bfd-topo2/r3/peers.json b/tests/topotests/bfd_topo2/r3/peers.json
index c19c980338..c19c980338 100644
--- a/tests/topotests/bfd-topo2/r3/peers.json
+++ b/tests/topotests/bfd_topo2/r3/peers.json
diff --git a/tests/topotests/bfd-topo2/r3/zebra.conf b/tests/topotests/bfd_topo2/r3/zebra.conf
index 96fd08c729..96fd08c729 100644
--- a/tests/topotests/bfd-topo2/r3/zebra.conf
+++ b/tests/topotests/bfd_topo2/r3/zebra.conf
diff --git a/tests/topotests/bfd-topo2/r4/bfdd.conf b/tests/topotests/bfd_topo2/r4/bfdd.conf
index 0173dc9be2..0173dc9be2 100644
--- a/tests/topotests/bfd-topo2/r4/bfdd.conf
+++ b/tests/topotests/bfd_topo2/r4/bfdd.conf
diff --git a/tests/topotests/bfd-topo2/r4/ipv4_routes.json b/tests/topotests/bfd_topo2/r4/ipv4_routes.json
index dc394aa891..dc394aa891 100644
--- a/tests/topotests/bfd-topo2/r4/ipv4_routes.json
+++ b/tests/topotests/bfd_topo2/r4/ipv4_routes.json
diff --git a/tests/topotests/bfd-topo2/r4/ipv6_routes.json b/tests/topotests/bfd_topo2/r4/ipv6_routes.json
index c828575c84..c828575c84 100644
--- a/tests/topotests/bfd-topo2/r4/ipv6_routes.json
+++ b/tests/topotests/bfd_topo2/r4/ipv6_routes.json
diff --git a/tests/topotests/bfd-topo2/r4/ospf6d.conf b/tests/topotests/bfd_topo2/r4/ospf6d.conf
index 57f7f6c079..57f7f6c079 100644
--- a/tests/topotests/bfd-topo2/r4/ospf6d.conf
+++ b/tests/topotests/bfd_topo2/r4/ospf6d.conf
diff --git a/tests/topotests/bfd-topo2/r4/peers.json b/tests/topotests/bfd_topo2/r4/peers.json
index dd26b9b580..dd26b9b580 100644
--- a/tests/topotests/bfd-topo2/r4/peers.json
+++ b/tests/topotests/bfd_topo2/r4/peers.json
diff --git a/tests/topotests/bfd-topo2/r4/zebra.conf b/tests/topotests/bfd_topo2/r4/zebra.conf
index e4f8fd8514..e4f8fd8514 100644
--- a/tests/topotests/bfd-topo2/r4/zebra.conf
+++ b/tests/topotests/bfd_topo2/r4/zebra.conf
diff --git a/tests/topotests/bfd-topo2/test_bfd_topo2.dot b/tests/topotests/bfd_topo2/test_bfd_topo2.dot
index 6b68fb398f..6b68fb398f 100644
--- a/tests/topotests/bfd-topo2/test_bfd_topo2.dot
+++ b/tests/topotests/bfd_topo2/test_bfd_topo2.dot
diff --git a/tests/topotests/bfd-topo2/test_bfd_topo2.jpg b/tests/topotests/bfd_topo2/test_bfd_topo2.jpg
index 35fe562a80..35fe562a80 100644
--- a/tests/topotests/bfd-topo2/test_bfd_topo2.jpg
+++ b/tests/topotests/bfd_topo2/test_bfd_topo2.jpg
Binary files differ
diff --git a/tests/topotests/bfd-topo2/test_bfd_topo2.py b/tests/topotests/bfd_topo2/test_bfd_topo2.py
index e85b2644dd..e85b2644dd 100644
--- a/tests/topotests/bfd-topo2/test_bfd_topo2.py
+++ b/tests/topotests/bfd_topo2/test_bfd_topo2.py
diff --git a/tests/topotests/bfd-topo3/__init__.py b/tests/topotests/bfd_topo3/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-topo3/__init__.py
+++ b/tests/topotests/bfd_topo3/__init__.py
diff --git a/tests/topotests/bfd-topo3/r1/bfd-peers.json b/tests/topotests/bfd_topo3/r1/bfd-peers.json
index f8a354fc20..f8a354fc20 100644
--- a/tests/topotests/bfd-topo3/r1/bfd-peers.json
+++ b/tests/topotests/bfd_topo3/r1/bfd-peers.json
diff --git a/tests/topotests/bfd-topo3/r1/bfdd.conf b/tests/topotests/bfd_topo3/r1/bfdd.conf
index 8e40b76d41..8e40b76d41 100644
--- a/tests/topotests/bfd-topo3/r1/bfdd.conf
+++ b/tests/topotests/bfd_topo3/r1/bfdd.conf
diff --git a/tests/topotests/bfd-topo3/r1/bgpd.conf b/tests/topotests/bfd_topo3/r1/bgpd.conf
index 4c75d669c5..4c75d669c5 100644
--- a/tests/topotests/bfd-topo3/r1/bgpd.conf
+++ b/tests/topotests/bfd_topo3/r1/bgpd.conf
diff --git a/tests/topotests/bfd-topo3/r1/zebra.conf b/tests/topotests/bfd_topo3/r1/zebra.conf
index 64aee48436..64aee48436 100644
--- a/tests/topotests/bfd-topo3/r1/zebra.conf
+++ b/tests/topotests/bfd_topo3/r1/zebra.conf
diff --git a/tests/topotests/bfd-topo3/r2/bfd-peers.json b/tests/topotests/bfd_topo3/r2/bfd-peers.json
index 786d66dbe3..786d66dbe3 100644
--- a/tests/topotests/bfd-topo3/r2/bfd-peers.json
+++ b/tests/topotests/bfd_topo3/r2/bfd-peers.json
diff --git a/tests/topotests/bfd-topo3/r2/bfdd.conf b/tests/topotests/bfd_topo3/r2/bfdd.conf
index 2a92e463e0..2a92e463e0 100644
--- a/tests/topotests/bfd-topo3/r2/bfdd.conf
+++ b/tests/topotests/bfd_topo3/r2/bfdd.conf
diff --git a/tests/topotests/bfd-topo3/r2/bgpd.conf b/tests/topotests/bfd_topo3/r2/bgpd.conf
index 75225765e1..75225765e1 100644
--- a/tests/topotests/bfd-topo3/r2/bgpd.conf
+++ b/tests/topotests/bfd_topo3/r2/bgpd.conf
diff --git a/tests/topotests/bfd-topo3/r2/zebra.conf b/tests/topotests/bfd_topo3/r2/zebra.conf
index c7e22d4804..c7e22d4804 100644
--- a/tests/topotests/bfd-topo3/r2/zebra.conf
+++ b/tests/topotests/bfd_topo3/r2/zebra.conf
diff --git a/tests/topotests/bfd-topo3/r3/bfd-peers.json b/tests/topotests/bfd_topo3/r3/bfd-peers.json
index 1f58663a4e..1f58663a4e 100644
--- a/tests/topotests/bfd-topo3/r3/bfd-peers.json
+++ b/tests/topotests/bfd_topo3/r3/bfd-peers.json
diff --git a/tests/topotests/bfd-topo3/r3/bfdd.conf b/tests/topotests/bfd_topo3/r3/bfdd.conf
index f7972c6ce5..f7972c6ce5 100644
--- a/tests/topotests/bfd-topo3/r3/bfdd.conf
+++ b/tests/topotests/bfd_topo3/r3/bfdd.conf
diff --git a/tests/topotests/bfd-topo3/r3/bgpd.conf b/tests/topotests/bfd_topo3/r3/bgpd.conf
index 82adf8be9e..82adf8be9e 100644
--- a/tests/topotests/bfd-topo3/r3/bgpd.conf
+++ b/tests/topotests/bfd_topo3/r3/bgpd.conf
diff --git a/tests/topotests/bfd-topo3/r3/zebra.conf b/tests/topotests/bfd_topo3/r3/zebra.conf
index 14248fb6f7..14248fb6f7 100644
--- a/tests/topotests/bfd-topo3/r3/zebra.conf
+++ b/tests/topotests/bfd_topo3/r3/zebra.conf
diff --git a/tests/topotests/bfd-topo3/r4/bfd-peers.json b/tests/topotests/bfd_topo3/r4/bfd-peers.json
index 5477f39120..5477f39120 100644
--- a/tests/topotests/bfd-topo3/r4/bfd-peers.json
+++ b/tests/topotests/bfd_topo3/r4/bfd-peers.json
diff --git a/tests/topotests/bfd-topo3/r4/bfdd.conf b/tests/topotests/bfd_topo3/r4/bfdd.conf
index f44abc0b8a..f44abc0b8a 100644
--- a/tests/topotests/bfd-topo3/r4/bfdd.conf
+++ b/tests/topotests/bfd_topo3/r4/bfdd.conf
diff --git a/tests/topotests/bfd-topo3/r4/bgpd.conf b/tests/topotests/bfd_topo3/r4/bgpd.conf
index 0aab6e3017..0aab6e3017 100644
--- a/tests/topotests/bfd-topo3/r4/bgpd.conf
+++ b/tests/topotests/bfd_topo3/r4/bgpd.conf
diff --git a/tests/topotests/bfd-topo3/r4/zebra.conf b/tests/topotests/bfd_topo3/r4/zebra.conf
index bf0cfcf42c..bf0cfcf42c 100644
--- a/tests/topotests/bfd-topo3/r4/zebra.conf
+++ b/tests/topotests/bfd_topo3/r4/zebra.conf
diff --git a/tests/topotests/bfd-topo3/test_bfd_topo3.dot b/tests/topotests/bfd_topo3/test_bfd_topo3.dot
index 502cea11f2..502cea11f2 100644
--- a/tests/topotests/bfd-topo3/test_bfd_topo3.dot
+++ b/tests/topotests/bfd_topo3/test_bfd_topo3.dot
diff --git a/tests/topotests/bfd-topo3/test_bfd_topo3.jpg b/tests/topotests/bfd_topo3/test_bfd_topo3.jpg
index 6b532560bf..6b532560bf 100644
--- a/tests/topotests/bfd-topo3/test_bfd_topo3.jpg
+++ b/tests/topotests/bfd_topo3/test_bfd_topo3.jpg
Binary files differ
diff --git a/tests/topotests/bfd-topo3/test_bfd_topo3.py b/tests/topotests/bfd_topo3/test_bfd_topo3.py
index 6bb223e203..6bb223e203 100644
--- a/tests/topotests/bfd-topo3/test_bfd_topo3.py
+++ b/tests/topotests/bfd_topo3/test_bfd_topo3.py
diff --git a/tests/topotests/bfd-vrf-topo1/__init__.py b/tests/topotests/bfd_vrf_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bfd-vrf-topo1/__init__.py
+++ b/tests/topotests/bfd_vrf_topo1/__init__.py
diff --git a/tests/topotests/bfd-vrf-topo1/r1/bfdd.conf b/tests/topotests/bfd_vrf_topo1/r1/bfdd.conf
index 5e736a7fcc..5e736a7fcc 100644
--- a/tests/topotests/bfd-vrf-topo1/r1/bfdd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r1/bfdd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r1/bgp_prefixes.json b/tests/topotests/bfd_vrf_topo1/r1/bgp_prefixes.json
index 1262f5e984..1262f5e984 100644
--- a/tests/topotests/bfd-vrf-topo1/r1/bgp_prefixes.json
+++ b/tests/topotests/bfd_vrf_topo1/r1/bgp_prefixes.json
diff --git a/tests/topotests/bfd-vrf-topo1/r1/bgp_summary.json b/tests/topotests/bfd_vrf_topo1/r1/bgp_summary.json
index fa07d60df9..fa07d60df9 100644
--- a/tests/topotests/bfd-vrf-topo1/r1/bgp_summary.json
+++ b/tests/topotests/bfd_vrf_topo1/r1/bgp_summary.json
diff --git a/tests/topotests/bfd-vrf-topo1/r1/bgpd.conf b/tests/topotests/bfd_vrf_topo1/r1/bgpd.conf
index 5bb45b9863..5bb45b9863 100644
--- a/tests/topotests/bfd-vrf-topo1/r1/bgpd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r1/bgpd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r1/peers.json b/tests/topotests/bfd_vrf_topo1/r1/peers.json
index f49768ff75..f49768ff75 100644
--- a/tests/topotests/bfd-vrf-topo1/r1/peers.json
+++ b/tests/topotests/bfd_vrf_topo1/r1/peers.json
diff --git a/tests/topotests/bfd-vrf-topo1/r1/zebra.conf b/tests/topotests/bfd_vrf_topo1/r1/zebra.conf
index fcd1e7db17..fcd1e7db17 100644
--- a/tests/topotests/bfd-vrf-topo1/r1/zebra.conf
+++ b/tests/topotests/bfd_vrf_topo1/r1/zebra.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r2/bfdd.conf b/tests/topotests/bfd_vrf_topo1/r2/bfdd.conf
index 94f502c7d9..94f502c7d9 100644
--- a/tests/topotests/bfd-vrf-topo1/r2/bfdd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r2/bfdd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r2/bgp_prefixes.json b/tests/topotests/bfd_vrf_topo1/r2/bgp_prefixes.json
index 0d47c0fc30..0d47c0fc30 100644
--- a/tests/topotests/bfd-vrf-topo1/r2/bgp_prefixes.json
+++ b/tests/topotests/bfd_vrf_topo1/r2/bgp_prefixes.json
diff --git a/tests/topotests/bfd-vrf-topo1/r2/bgp_summary.json b/tests/topotests/bfd_vrf_topo1/r2/bgp_summary.json
index c0ef11ac5f..c0ef11ac5f 100644
--- a/tests/topotests/bfd-vrf-topo1/r2/bgp_summary.json
+++ b/tests/topotests/bfd_vrf_topo1/r2/bgp_summary.json
diff --git a/tests/topotests/bfd-vrf-topo1/r2/bgpd.conf b/tests/topotests/bfd_vrf_topo1/r2/bgpd.conf
index b2aac74685..b2aac74685 100644
--- a/tests/topotests/bfd-vrf-topo1/r2/bgpd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r2/bgpd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r2/peers.json b/tests/topotests/bfd_vrf_topo1/r2/peers.json
index 267459c7a8..267459c7a8 100644
--- a/tests/topotests/bfd-vrf-topo1/r2/peers.json
+++ b/tests/topotests/bfd_vrf_topo1/r2/peers.json
diff --git a/tests/topotests/bfd-vrf-topo1/r2/zebra.conf b/tests/topotests/bfd_vrf_topo1/r2/zebra.conf
index daffd1912e..daffd1912e 100644
--- a/tests/topotests/bfd-vrf-topo1/r2/zebra.conf
+++ b/tests/topotests/bfd_vrf_topo1/r2/zebra.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r3/bfdd.conf b/tests/topotests/bfd_vrf_topo1/r3/bfdd.conf
index 76910ac927..76910ac927 100644
--- a/tests/topotests/bfd-vrf-topo1/r3/bfdd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r3/bfdd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r3/bgp_prefixes.json b/tests/topotests/bfd_vrf_topo1/r3/bgp_prefixes.json
index 36fca17bbf..36fca17bbf 100644
--- a/tests/topotests/bfd-vrf-topo1/r3/bgp_prefixes.json
+++ b/tests/topotests/bfd_vrf_topo1/r3/bgp_prefixes.json
diff --git a/tests/topotests/bfd-vrf-topo1/r3/bgp_summary.json b/tests/topotests/bfd_vrf_topo1/r3/bgp_summary.json
index d47833377b..d47833377b 100644
--- a/tests/topotests/bfd-vrf-topo1/r3/bgp_summary.json
+++ b/tests/topotests/bfd_vrf_topo1/r3/bgp_summary.json
diff --git a/tests/topotests/bfd-vrf-topo1/r3/bgpd.conf b/tests/topotests/bfd_vrf_topo1/r3/bgpd.conf
index 1d7c730395..1d7c730395 100644
--- a/tests/topotests/bfd-vrf-topo1/r3/bgpd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r3/bgpd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r3/peers.json b/tests/topotests/bfd_vrf_topo1/r3/peers.json
index ef38008643..ef38008643 100644
--- a/tests/topotests/bfd-vrf-topo1/r3/peers.json
+++ b/tests/topotests/bfd_vrf_topo1/r3/peers.json
diff --git a/tests/topotests/bfd-vrf-topo1/r3/zebra.conf b/tests/topotests/bfd_vrf_topo1/r3/zebra.conf
index f727c2d633..f727c2d633 100644
--- a/tests/topotests/bfd-vrf-topo1/r3/zebra.conf
+++ b/tests/topotests/bfd_vrf_topo1/r3/zebra.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r4/bfdd.conf b/tests/topotests/bfd_vrf_topo1/r4/bfdd.conf
index 63d0da7805..63d0da7805 100644
--- a/tests/topotests/bfd-vrf-topo1/r4/bfdd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r4/bfdd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r4/bgp_prefixes.json b/tests/topotests/bfd_vrf_topo1/r4/bgp_prefixes.json
index efe7d47b1a..efe7d47b1a 100644
--- a/tests/topotests/bfd-vrf-topo1/r4/bgp_prefixes.json
+++ b/tests/topotests/bfd_vrf_topo1/r4/bgp_prefixes.json
diff --git a/tests/topotests/bfd-vrf-topo1/r4/bgp_summary.json b/tests/topotests/bfd_vrf_topo1/r4/bgp_summary.json
index 7d81784b56..7d81784b56 100644
--- a/tests/topotests/bfd-vrf-topo1/r4/bgp_summary.json
+++ b/tests/topotests/bfd_vrf_topo1/r4/bgp_summary.json
diff --git a/tests/topotests/bfd-vrf-topo1/r4/bgpd.conf b/tests/topotests/bfd_vrf_topo1/r4/bgpd.conf
index f34035d460..f34035d460 100644
--- a/tests/topotests/bfd-vrf-topo1/r4/bgpd.conf
+++ b/tests/topotests/bfd_vrf_topo1/r4/bgpd.conf
diff --git a/tests/topotests/bfd-vrf-topo1/r4/peers.json b/tests/topotests/bfd_vrf_topo1/r4/peers.json
index 37140089e1..37140089e1 100644
--- a/tests/topotests/bfd-vrf-topo1/r4/peers.json
+++ b/tests/topotests/bfd_vrf_topo1/r4/peers.json
diff --git a/tests/topotests/bfd-vrf-topo1/r4/zebra.conf b/tests/topotests/bfd_vrf_topo1/r4/zebra.conf
index 69770dd2bf..69770dd2bf 100644
--- a/tests/topotests/bfd-vrf-topo1/r4/zebra.conf
+++ b/tests/topotests/bfd_vrf_topo1/r4/zebra.conf
diff --git a/tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.dot b/tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.dot
index c84ace2780..c84ace2780 100644
--- a/tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.dot
+++ b/tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.dot
diff --git a/tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.jpg b/tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.jpg
index 4d6d56e072..4d6d56e072 100644
--- a/tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.jpg
+++ b/tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.jpg
Binary files differ
diff --git a/tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.py b/tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.py
index 8a1ffe085d..8a1ffe085d 100644
--- a/tests/topotests/bfd-vrf-topo1/test_bfd_vrf_topo1.py
+++ b/tests/topotests/bfd_vrf_topo1/test_bfd_vrf_topo1.py
diff --git a/tests/topotests/bgp-aggregator-zero/__init__.py b/tests/topotests/bgp_aggregate_address_origin/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-aggregator-zero/__init__.py
+++ b/tests/topotests/bgp_aggregate_address_origin/__init__.py
diff --git a/tests/topotests/bgp_aggregate-address_origin/r1/bgpd.conf b/tests/topotests/bgp_aggregate_address_origin/r1/bgpd.conf
index 3486c64c55..3486c64c55 100644
--- a/tests/topotests/bgp_aggregate-address_origin/r1/bgpd.conf
+++ b/tests/topotests/bgp_aggregate_address_origin/r1/bgpd.conf
diff --git a/tests/topotests/bgp_aggregate-address_origin/r1/zebra.conf b/tests/topotests/bgp_aggregate_address_origin/r1/zebra.conf
index 0a283c06d5..0a283c06d5 100644
--- a/tests/topotests/bgp_aggregate-address_origin/r1/zebra.conf
+++ b/tests/topotests/bgp_aggregate_address_origin/r1/zebra.conf
diff --git a/tests/topotests/bgp_aggregate-address_origin/r2/bgpd.conf b/tests/topotests/bgp_aggregate_address_origin/r2/bgpd.conf
index b2d945583c..b2d945583c 100644
--- a/tests/topotests/bgp_aggregate-address_origin/r2/bgpd.conf
+++ b/tests/topotests/bgp_aggregate_address_origin/r2/bgpd.conf
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r2/zebra.conf b/tests/topotests/bgp_aggregate_address_origin/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r2/zebra.conf
+++ b/tests/topotests/bgp_aggregate_address_origin/r2/zebra.conf
diff --git a/tests/topotests/bgp_aggregate-address_origin/test_bgp_aggregate-address_origin.py b/tests/topotests/bgp_aggregate_address_origin/test_bgp_aggregate-address_origin.py
index be07fab87b..be07fab87b 100644
--- a/tests/topotests/bgp_aggregate-address_origin/test_bgp_aggregate-address_origin.py
+++ b/tests/topotests/bgp_aggregate_address_origin/test_bgp_aggregate-address_origin.py
diff --git a/tests/topotests/bgp-basic-functionality-topo1/__init__.py b/tests/topotests/bgp_aggregate_address_route_map/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-basic-functionality-topo1/__init__.py
+++ b/tests/topotests/bgp_aggregate_address_route_map/__init__.py
diff --git a/tests/topotests/bgp_aggregate-address_route-map/r1/bgpd.conf b/tests/topotests/bgp_aggregate_address_route_map/r1/bgpd.conf
index 7fb55cf001..7fb55cf001 100644
--- a/tests/topotests/bgp_aggregate-address_route-map/r1/bgpd.conf
+++ b/tests/topotests/bgp_aggregate_address_route_map/r1/bgpd.conf
diff --git a/tests/topotests/bgp_aggregate-address_route-map/r1/zebra.conf b/tests/topotests/bgp_aggregate_address_route_map/r1/zebra.conf
index 0a283c06d5..0a283c06d5 100644
--- a/tests/topotests/bgp_aggregate-address_route-map/r1/zebra.conf
+++ b/tests/topotests/bgp_aggregate_address_route_map/r1/zebra.conf
diff --git a/tests/topotests/bgp_aggregate-address_route-map/r2/bgpd.conf b/tests/topotests/bgp_aggregate_address_route_map/r2/bgpd.conf
index b2d945583c..b2d945583c 100644
--- a/tests/topotests/bgp_aggregate-address_route-map/r2/bgpd.conf
+++ b/tests/topotests/bgp_aggregate_address_route_map/r2/bgpd.conf
diff --git a/tests/topotests/bgp_aggregate-address_origin/r2/zebra.conf b/tests/topotests/bgp_aggregate_address_route_map/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_aggregate-address_origin/r2/zebra.conf
+++ b/tests/topotests/bgp_aggregate_address_route_map/r2/zebra.conf
diff --git a/tests/topotests/bgp_aggregate-address_route-map/test_bgp_aggregate-address_route-map.py b/tests/topotests/bgp_aggregate_address_route_map/test_bgp_aggregate-address_route-map.py
index 484f40251f..484f40251f 100644
--- a/tests/topotests/bgp_aggregate-address_route-map/test_bgp_aggregate-address_route-map.py
+++ b/tests/topotests/bgp_aggregate_address_route_map/test_bgp_aggregate-address_route-map.py
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/__init__.py b/tests/topotests/bgp_aggregator_zero/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/__init__.py
+++ b/tests/topotests/bgp_aggregator_zero/__init__.py
diff --git a/tests/topotests/bgp-aggregator-zero/exabgp.env b/tests/topotests/bgp_aggregator_zero/exabgp.env
index 28e642360a..28e642360a 100644
--- a/tests/topotests/bgp-aggregator-zero/exabgp.env
+++ b/tests/topotests/bgp_aggregator_zero/exabgp.env
diff --git a/tests/topotests/bgp-aggregator-zero/peer1/exabgp.cfg b/tests/topotests/bgp_aggregator_zero/peer1/exabgp.cfg
index b3f25272d2..b3f25272d2 100644
--- a/tests/topotests/bgp-aggregator-zero/peer1/exabgp.cfg
+++ b/tests/topotests/bgp_aggregator_zero/peer1/exabgp.cfg
diff --git a/tests/topotests/bgp-aggregator-zero/r1/bgpd.conf b/tests/topotests/bgp_aggregator_zero/r1/bgpd.conf
index 002a5c78c0..002a5c78c0 100644
--- a/tests/topotests/bgp-aggregator-zero/r1/bgpd.conf
+++ b/tests/topotests/bgp_aggregator_zero/r1/bgpd.conf
diff --git a/tests/topotests/bgp-aggregator-zero/r1/zebra.conf b/tests/topotests/bgp_aggregator_zero/r1/zebra.conf
index 22a26ac610..22a26ac610 100644
--- a/tests/topotests/bgp-aggregator-zero/r1/zebra.conf
+++ b/tests/topotests/bgp_aggregator_zero/r1/zebra.conf
diff --git a/tests/topotests/bgp-aggregator-zero/test_bgp_aggregator_zero.py b/tests/topotests/bgp_aggregator_zero/test_bgp_aggregator_zero.py
index c4bbdce2c3..c4bbdce2c3 100644
--- a/tests/topotests/bgp-aggregator-zero/test_bgp_aggregator_zero.py
+++ b/tests/topotests/bgp_aggregator_zero/test_bgp_aggregator_zero.py
diff --git a/tests/topotests/bgp-auth/R1/bgpd.conf b/tests/topotests/bgp_auth/R1/bgpd.conf
index 1cb26c6537..1cb26c6537 100644
--- a/tests/topotests/bgp-auth/R1/bgpd.conf
+++ b/tests/topotests/bgp_auth/R1/bgpd.conf
diff --git a/tests/topotests/bgp-auth/R1/bgpd_multi_vrf.conf b/tests/topotests/bgp_auth/R1/bgpd_multi_vrf.conf
index dde3c090b5..dde3c090b5 100644
--- a/tests/topotests/bgp-auth/R1/bgpd_multi_vrf.conf
+++ b/tests/topotests/bgp_auth/R1/bgpd_multi_vrf.conf
diff --git a/tests/topotests/bgp-auth/R1/bgpd_multi_vrf_prefix.conf b/tests/topotests/bgp_auth/R1/bgpd_multi_vrf_prefix.conf
index 7e15720c7e..7e15720c7e 100644
--- a/tests/topotests/bgp-auth/R1/bgpd_multi_vrf_prefix.conf
+++ b/tests/topotests/bgp_auth/R1/bgpd_multi_vrf_prefix.conf
diff --git a/tests/topotests/bgp-auth/R1/bgpd_prefix.conf b/tests/topotests/bgp_auth/R1/bgpd_prefix.conf
index 9200b0501d..9200b0501d 100644
--- a/tests/topotests/bgp-auth/R1/bgpd_prefix.conf
+++ b/tests/topotests/bgp_auth/R1/bgpd_prefix.conf
diff --git a/tests/topotests/bgp-auth/R1/bgpd_vrf.conf b/tests/topotests/bgp_auth/R1/bgpd_vrf.conf
index 781f906d3a..781f906d3a 100644
--- a/tests/topotests/bgp-auth/R1/bgpd_vrf.conf
+++ b/tests/topotests/bgp_auth/R1/bgpd_vrf.conf
diff --git a/tests/topotests/bgp-auth/R1/bgpd_vrf_prefix.conf b/tests/topotests/bgp_auth/R1/bgpd_vrf_prefix.conf
index d68951b406..d68951b406 100644
--- a/tests/topotests/bgp-auth/R1/bgpd_vrf_prefix.conf
+++ b/tests/topotests/bgp_auth/R1/bgpd_vrf_prefix.conf
diff --git a/tests/topotests/bgp-auth/R1/ospfd.conf b/tests/topotests/bgp_auth/R1/ospfd.conf
index 79eb0e33da..79eb0e33da 100644
--- a/tests/topotests/bgp-auth/R1/ospfd.conf
+++ b/tests/topotests/bgp_auth/R1/ospfd.conf
diff --git a/tests/topotests/bgp-auth/R1/ospfd_multi_vrf.conf b/tests/topotests/bgp_auth/R1/ospfd_multi_vrf.conf
index e2a28000b8..e2a28000b8 100644
--- a/tests/topotests/bgp-auth/R1/ospfd_multi_vrf.conf
+++ b/tests/topotests/bgp_auth/R1/ospfd_multi_vrf.conf
diff --git a/tests/topotests/bgp-auth/R1/ospfd_vrf.conf b/tests/topotests/bgp_auth/R1/ospfd_vrf.conf
index 0b7fbae8c4..0b7fbae8c4 100644
--- a/tests/topotests/bgp-auth/R1/ospfd_vrf.conf
+++ b/tests/topotests/bgp_auth/R1/ospfd_vrf.conf
diff --git a/tests/topotests/bgp-auth/R1/zebra.conf b/tests/topotests/bgp_auth/R1/zebra.conf
index a0b062c44c..a0b062c44c 100644
--- a/tests/topotests/bgp-auth/R1/zebra.conf
+++ b/tests/topotests/bgp_auth/R1/zebra.conf
diff --git a/tests/topotests/bgp-auth/R2/bgpd.conf b/tests/topotests/bgp_auth/R2/bgpd.conf
index fa2a570ef9..fa2a570ef9 100644
--- a/tests/topotests/bgp-auth/R2/bgpd.conf
+++ b/tests/topotests/bgp_auth/R2/bgpd.conf
diff --git a/tests/topotests/bgp-auth/R2/bgpd_multi_vrf.conf b/tests/topotests/bgp_auth/R2/bgpd_multi_vrf.conf
index d5f70edf68..d5f70edf68 100644
--- a/tests/topotests/bgp-auth/R2/bgpd_multi_vrf.conf
+++ b/tests/topotests/bgp_auth/R2/bgpd_multi_vrf.conf
diff --git a/tests/topotests/bgp-auth/R2/bgpd_multi_vrf_prefix.conf b/tests/topotests/bgp_auth/R2/bgpd_multi_vrf_prefix.conf
index d5f70edf68..d5f70edf68 100644
--- a/tests/topotests/bgp-auth/R2/bgpd_multi_vrf_prefix.conf
+++ b/tests/topotests/bgp_auth/R2/bgpd_multi_vrf_prefix.conf
diff --git a/tests/topotests/bgp-auth/R2/bgpd_prefix.conf b/tests/topotests/bgp_auth/R2/bgpd_prefix.conf
index fa2a570ef9..fa2a570ef9 100644
--- a/tests/topotests/bgp-auth/R2/bgpd_prefix.conf
+++ b/tests/topotests/bgp_auth/R2/bgpd_prefix.conf
diff --git a/tests/topotests/bgp-auth/R2/bgpd_vrf.conf b/tests/topotests/bgp_auth/R2/bgpd_vrf.conf
index d1f3847420..d1f3847420 100644
--- a/tests/topotests/bgp-auth/R2/bgpd_vrf.conf
+++ b/tests/topotests/bgp_auth/R2/bgpd_vrf.conf
diff --git a/tests/topotests/bgp-auth/R2/bgpd_vrf_prefix.conf b/tests/topotests/bgp_auth/R2/bgpd_vrf_prefix.conf
index d1f3847420..d1f3847420 100644
--- a/tests/topotests/bgp-auth/R2/bgpd_vrf_prefix.conf
+++ b/tests/topotests/bgp_auth/R2/bgpd_vrf_prefix.conf
diff --git a/tests/topotests/bgp-auth/R2/ospfd.conf b/tests/topotests/bgp_auth/R2/ospfd.conf
index 028b546a0c..028b546a0c 100644
--- a/tests/topotests/bgp-auth/R2/ospfd.conf
+++ b/tests/topotests/bgp_auth/R2/ospfd.conf
diff --git a/tests/topotests/bgp-auth/R2/ospfd_multi_vrf.conf b/tests/topotests/bgp_auth/R2/ospfd_multi_vrf.conf
index a05dfb8e41..a05dfb8e41 100644
--- a/tests/topotests/bgp-auth/R2/ospfd_multi_vrf.conf
+++ b/tests/topotests/bgp_auth/R2/ospfd_multi_vrf.conf
diff --git a/tests/topotests/bgp-auth/R2/ospfd_vrf.conf b/tests/topotests/bgp_auth/R2/ospfd_vrf.conf
index b198d352e2..b198d352e2 100644
--- a/tests/topotests/bgp-auth/R2/ospfd_vrf.conf
+++ b/tests/topotests/bgp_auth/R2/ospfd_vrf.conf
diff --git a/tests/topotests/bgp-auth/R2/zebra.conf b/tests/topotests/bgp_auth/R2/zebra.conf
index fed4c27c16..fed4c27c16 100644
--- a/tests/topotests/bgp-auth/R2/zebra.conf
+++ b/tests/topotests/bgp_auth/R2/zebra.conf
diff --git a/tests/topotests/bgp-auth/R3/bgpd.conf b/tests/topotests/bgp_auth/R3/bgpd.conf
index deccfd418b..deccfd418b 100644
--- a/tests/topotests/bgp-auth/R3/bgpd.conf
+++ b/tests/topotests/bgp_auth/R3/bgpd.conf
diff --git a/tests/topotests/bgp-auth/R3/bgpd_multi_vrf.conf b/tests/topotests/bgp_auth/R3/bgpd_multi_vrf.conf
index fe3e64d8d5..fe3e64d8d5 100644
--- a/tests/topotests/bgp-auth/R3/bgpd_multi_vrf.conf
+++ b/tests/topotests/bgp_auth/R3/bgpd_multi_vrf.conf
diff --git a/tests/topotests/bgp-auth/R3/bgpd_multi_vrf_prefix.conf b/tests/topotests/bgp_auth/R3/bgpd_multi_vrf_prefix.conf
index fe3e64d8d5..fe3e64d8d5 100644
--- a/tests/topotests/bgp-auth/R3/bgpd_multi_vrf_prefix.conf
+++ b/tests/topotests/bgp_auth/R3/bgpd_multi_vrf_prefix.conf
diff --git a/tests/topotests/bgp-auth/R3/bgpd_prefix.conf b/tests/topotests/bgp_auth/R3/bgpd_prefix.conf
index deccfd418b..deccfd418b 100644
--- a/tests/topotests/bgp-auth/R3/bgpd_prefix.conf
+++ b/tests/topotests/bgp_auth/R3/bgpd_prefix.conf
diff --git a/tests/topotests/bgp-auth/R3/bgpd_vrf.conf b/tests/topotests/bgp_auth/R3/bgpd_vrf.conf
index c109aa801b..c109aa801b 100644
--- a/tests/topotests/bgp-auth/R3/bgpd_vrf.conf
+++ b/tests/topotests/bgp_auth/R3/bgpd_vrf.conf
diff --git a/tests/topotests/bgp-auth/R3/bgpd_vrf_prefix.conf b/tests/topotests/bgp_auth/R3/bgpd_vrf_prefix.conf
index c109aa801b..c109aa801b 100644
--- a/tests/topotests/bgp-auth/R3/bgpd_vrf_prefix.conf
+++ b/tests/topotests/bgp_auth/R3/bgpd_vrf_prefix.conf
diff --git a/tests/topotests/bgp-auth/R3/ospfd.conf b/tests/topotests/bgp_auth/R3/ospfd.conf
index 0f0a2e926a..0f0a2e926a 100644
--- a/tests/topotests/bgp-auth/R3/ospfd.conf
+++ b/tests/topotests/bgp_auth/R3/ospfd.conf
diff --git a/tests/topotests/bgp-auth/R3/ospfd_multi_vrf.conf b/tests/topotests/bgp_auth/R3/ospfd_multi_vrf.conf
index f32d2a8423..f32d2a8423 100644
--- a/tests/topotests/bgp-auth/R3/ospfd_multi_vrf.conf
+++ b/tests/topotests/bgp_auth/R3/ospfd_multi_vrf.conf
diff --git a/tests/topotests/bgp-auth/R3/ospfd_vrf.conf b/tests/topotests/bgp_auth/R3/ospfd_vrf.conf
index 6465b635aa..6465b635aa 100644
--- a/tests/topotests/bgp-auth/R3/ospfd_vrf.conf
+++ b/tests/topotests/bgp_auth/R3/ospfd_vrf.conf
diff --git a/tests/topotests/bgp-auth/R3/zebra.conf b/tests/topotests/bgp_auth/R3/zebra.conf
index d49c98b168..d49c98b168 100644
--- a/tests/topotests/bgp-auth/R3/zebra.conf
+++ b/tests/topotests/bgp_auth/R3/zebra.conf
diff --git a/tests/topotests/bgp-auth/test_bgp_auth.py b/tests/topotests/bgp_auth/test_bgp_auth.py
index f01ce8844f..b2cdef1c93 100644
--- a/tests/topotests/bgp-auth/test_bgp_auth.py
+++ b/tests/topotests/bgp_auth/test_bgp_auth.py
@@ -299,35 +299,48 @@ def configure(conf_file):
raise InvalidCLIError("%s" % output)
-def clear_bgp(vrf=""):
- " clear bgp configuration for a vrf"
+def clear_bgp():
+ "clear bgp configuration for a vrf"
tgen = get_topogen()
r1 = tgen.gears["R1"]
r2 = tgen.gears["R2"]
r3 = tgen.gears["R3"]
- router_list = tgen.routers()
- if vrf == "":
- r1.vtysh_cmd("conf t\nno router bgp 65001")
- r2.vtysh_cmd("conf t\nno router bgp 65002")
- r2.vtysh_cmd("conf t\nno router bgp 65003")
- else:
- r1.vtysh_cmd("conf t\nno router bgp 65001 vrf {}".format(vrf))
- r2.vtysh_cmd("conf t\nno router bgp 65002 vrf {}".format(vrf))
- r3.vtysh_cmd("conf t\nno router bgp 65003 vrf {}".format(vrf))
+ r1.vtysh_cmd("conf t\nno router bgp 65001")
+ r2.vtysh_cmd("conf t\nno router bgp 65002")
+ r3.vtysh_cmd("conf t\nno router bgp 65003")
+ r1.vtysh_cmd("conf t\nno router bgp 65001 vrf blue")
+ r2.vtysh_cmd("conf t\nno router bgp 65002 vrf blue")
+ r3.vtysh_cmd("conf t\nno router bgp 65003 vrf blue")
+ r1.vtysh_cmd("conf t\nno router bgp 65001 vrf red")
+ r2.vtysh_cmd("conf t\nno router bgp 65002 vrf red")
+ r3.vtysh_cmd("conf t\nno router bgp 65003 vrf red")
+
+def configure_bgp(conf_file):
+ "configure bgp from file"
-def clear_ospf(vrf=""):
+ clear_bgp()
+ configure(conf_file)
+
+
+def clear_ospf():
"clear ospf configuration for a vrf"
tgen = get_topogen()
router_list = tgen.routers()
for rname, router in router_list.items():
- if vrf == "":
- router.vtysh_cmd("conf t\nno router ospf")
- else:
- router.vtysh_cmd("conf t\nno router ospf vrf {}".format(vrf))
+ router.vtysh_cmd("conf t\nno router ospf")
+ router.vtysh_cmd("conf t\nno router ospf vrf blue")
+ router.vtysh_cmd("conf t\nno router ospf vrf red")
+
+
+def configure_ospf(conf_file):
+ "configure bgp from file"
+
+ clear_ospf()
+ configure(conf_file)
def check_neigh_state(router, peer, state, vrf=""):
@@ -344,9 +357,10 @@ def check_neigh_state(router, peer, state, vrf=""):
"show bgp vrf {} neighbors {} json".format(vrf, peer)
)
neigh_output_json = json.loads(neigh_output)
- if neigh_output_json[peer]["bgpState"] == state:
- matched = True
- break
+ if peer in neigh_output_json.keys():
+ if neigh_output_json[peer]["bgpState"] == state:
+ matched = True
+ break
count += 1
sleep(1)
@@ -382,6 +396,8 @@ def check_vrf_peer_remove_passwords(vrf="", prefix="no"):
r2 = tgen.gears["R2"]
r3 = tgen.gears["R3"]
+ check_all_peers_established(vrf)
+
r1.vtysh_cmd(
"conf t\nrouter bgp 65001 {}\nno neighbor {} password".format(
vrf_str(vrf), peer_name("R2", prefix, vrf)
@@ -511,25 +527,26 @@ def check_vrf_peer_change_passwords(vrf="", prefix="no"):
def test_default_peer_established():
"default vrf 3 peers same password"
+ configure_bgp("bgpd.conf")
+ configure_ospf("ospfd.conf")
check_all_peers_established()
- clear_bgp()
# tgen.mininet_cli()
def test_default_peer_remove_passwords():
"selectively remove passwords checking state"
- configure("bgpd.conf")
+ configure_bgp("bgpd.conf")
+ configure_ospf("ospfd.conf")
check_vrf_peer_remove_passwords()
- clear_bgp()
def test_default_peer_change_passwords():
"selectively change passwords checking state"
- configure("bgpd.conf")
+ configure_bgp("bgpd.conf")
+ configure_ospf("ospfd.conf")
check_vrf_peer_change_passwords()
- clear_bgp()
def test_default_prefix_peer_established():
@@ -539,9 +556,9 @@ def test_default_prefix_peer_established():
if topotest.version_cmp(platform.release(), "5.3") < 0:
return
- configure("bgpd_prefix.conf")
+ configure_bgp("bgpd_prefix.conf")
+ configure_ospf("ospfd.conf")
check_all_peers_established()
- clear_bgp()
# tgen.mininet_cli()
@@ -551,9 +568,10 @@ def test_prefix_peer_remove_passwords():
# only supported in kernel > 5.3
if topotest.version_cmp(platform.release(), "5.3") < 0:
return
- configure("bgpd_prefix.conf")
+
+ configure_bgp("bgpd_prefix.conf")
+ configure_ospf("ospfd.conf")
check_vrf_peer_remove_passwords(prefix="yes")
- clear_bgp()
def test_prefix_peer_change_passwords():
@@ -562,38 +580,36 @@ def test_prefix_peer_change_passwords():
# only supported in kernel > 5.3
if topotest.version_cmp(platform.release(), "5.3") < 0:
return
- configure("bgpd_prefix.conf")
+
+ configure_bgp("bgpd_prefix.conf")
+ configure_ospf("ospfd.conf")
check_vrf_peer_change_passwords(prefix="yes")
- clear_bgp()
- clear_ospf()
def test_vrf_peer_established():
"default vrf 3 peers same password with VRF config"
# clean routers and load vrf config
- configure("bgpd_vrf.conf")
- configure("ospfd_vrf.conf")
-
+ configure_bgp("bgpd_vrf.conf")
+ configure_ospf("ospfd_vrf.conf")
check_all_peers_established("blue")
- clear_bgp("blue")
# tgen.mininet_cli()
def test_vrf_peer_remove_passwords():
"selectively remove passwords checking state with VRF config"
- configure("bgpd_vrf.conf")
+ configure_bgp("bgpd_vrf.conf")
+ configure_ospf("ospfd_vrf.conf")
check_vrf_peer_remove_passwords(vrf="blue")
- clear_bgp("blue")
def test_vrf_peer_change_passwords():
"selectively change passwords checking state with VRF config"
- configure("bgpd_vrf.conf")
+ configure_bgp("bgpd_vrf.conf")
+ configure_ospf("ospfd_vrf.conf")
check_vrf_peer_change_passwords(vrf="blue")
- clear_bgp("blue")
def test_vrf_prefix_peer_established():
@@ -601,12 +617,11 @@ def test_vrf_prefix_peer_established():
# only supported in kernel > 5.3
if topotest.version_cmp(platform.release(), "5.3") < 0:
- clear_bgp("blue")
return
- configure("bgpd_vrf_prefix.conf")
+ configure_bgp("bgpd_vrf_prefix.conf")
+ configure_ospf("ospfd_vrf.conf")
check_all_peers_established("blue")
- clear_bgp("blue")
def test_vrf_prefix_peer_remove_passwords():
@@ -616,65 +631,54 @@ def test_vrf_prefix_peer_remove_passwords():
if topotest.version_cmp(platform.release(), "5.3") < 0:
return
- configure("bgpd_vrf_prefix.conf")
+ configure_bgp("bgpd_vrf_prefix.conf")
+ configure_ospf("ospfd_vrf.conf")
check_vrf_peer_remove_passwords(vrf="blue", prefix="yes")
- clear_bgp("blue")
def test_vrf_prefix_peer_change_passwords():
"selectively change passwords checking state with VRF prefix config"
- tgen = get_topogen()
- r1 = tgen.gears["R1"]
- r2 = tgen.gears["R2"]
- r3 = tgen.gears["R3"]
-
# only supported in kernel > 5.3
if topotest.version_cmp(platform.release(), "5.3") < 0:
- clear_ospf("blue")
return
- configure("bgpd_vrf_prefix.conf")
+ configure_bgp("bgpd_vrf_prefix.conf")
+ configure_ospf("ospfd_vrf.conf")
check_vrf_peer_change_passwords(vrf="blue", prefix="yes")
- clear_bgp("blue")
- clear_ospf("blue")
def test_multiple_vrf_peer_established():
"default vrf 3 peers same password with multiple VRFs"
- configure("bgpd_multi_vrf.conf")
- configure("ospfd_multi_vrf.conf")
+ configure_bgp("bgpd_multi_vrf.conf")
+ configure_ospf("ospfd_multi_vrf.conf")
check_all_peers_established("blue")
check_all_peers_established("red")
- clear_bgp("blue")
- clear_bgp("red")
# tgen.mininet_cli()
def test_multiple_vrf_peer_remove_passwords():
"selectively remove passwords checking state with multiple VRFs"
- configure("bgpd_multi_vrf.conf")
+ configure_bgp("bgpd_multi_vrf.conf")
+ configure_ospf("ospfd_multi_vrf.conf")
check_vrf_peer_remove_passwords("blue")
check_all_peers_established("red")
check_vrf_peer_remove_passwords("red")
check_all_peers_established("blue")
- clear_bgp("blue")
- clear_bgp("red")
# tgen.mininet_cli()
def test_multiple_vrf_peer_change_passwords():
"selectively change passwords checking state with multiple VRFs"
- configure("bgpd_multi_vrf.conf")
+ configure_bgp("bgpd_multi_vrf.conf")
+ configure_ospf("ospfd_multi_vrf.conf")
check_vrf_peer_change_passwords("blue")
check_all_peers_established("red")
check_vrf_peer_change_passwords("red")
check_all_peers_established("blue")
- clear_bgp("blue")
- clear_bgp("red")
# tgen.mininet_cli()
@@ -685,12 +689,10 @@ def test_multiple_vrf_prefix_peer_established():
if topotest.version_cmp(platform.release(), "5.3") < 0:
return
- configure("bgpd_multi_vrf.conf")
- configure("ospfd_multi_vrf.conf")
+ configure_bgp("bgpd_multi_vrf_prefix.conf")
+ configure_ospf("ospfd_multi_vrf.conf")
check_all_peers_established("blue")
check_all_peers_established("red")
- clear_bgp("blue")
- clear_bgp("red")
# tgen.mininet_cli()
@@ -701,14 +703,12 @@ def test_multiple_vrf_prefix_peer_remove_passwords():
if topotest.version_cmp(platform.release(), "5.3") < 0:
return
- configure("bgpd_multi_vrf_prefix.conf")
- tgen = get_topogen()
+ configure_bgp("bgpd_multi_vrf_prefix.conf")
+ configure_ospf("ospfd_multi_vrf.conf")
check_vrf_peer_remove_passwords(vrf="blue", prefix="yes")
check_all_peers_established("red")
check_vrf_peer_remove_passwords(vrf="red", prefix="yes")
check_all_peers_established("blue")
- clear_bgp("blue")
- clear_bgp("red")
# tgen.mininet_cli()
@@ -717,21 +717,14 @@ def test_multiple_vrf_prefix_peer_change_passwords():
# only supported in kernel > 5.3
if topotest.version_cmp(platform.release(), "5.3") < 0:
- clear_bgp("blue")
- clear_bgp("red")
- clear_ospf("blue")
- clear_ospf("red")
return
- configure("bgpd_multi_vrf_prefix.conf")
+ configure_bgp("bgpd_multi_vrf_prefix.conf")
+ configure_ospf("ospfd_multi_vrf.conf")
check_vrf_peer_change_passwords(vrf="blue", prefix="yes")
check_all_peers_established("red")
check_vrf_peer_change_passwords(vrf="red", prefix="yes")
check_all_peers_established("blue")
- clear_bgp("blue")
- clear_bgp("red")
- clear_ospf("blue")
- clear_ospf("red")
# tgen.mininet_cli()
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/__init__.py b/tests/topotests/bgp_basic_functionality_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/__init__.py
+++ b/tests/topotests/bgp_basic_functionality_topo1/__init__.py
diff --git a/tests/topotests/bgp-basic-functionality-topo1/bgp_basic_functionality.json b/tests/topotests/bgp_basic_functionality_topo1/bgp_basic_functionality.json
index ee1f1b74c0..ee1f1b74c0 100644
--- a/tests/topotests/bgp-basic-functionality-topo1/bgp_basic_functionality.json
+++ b/tests/topotests/bgp_basic_functionality_topo1/bgp_basic_functionality.json
diff --git a/tests/topotests/bgp-basic-functionality-topo1/test_bgp_basic_functionality.py b/tests/topotests/bgp_basic_functionality_topo1/test_bgp_basic_functionality.py
index 374cce21f6..374cce21f6 100644
--- a/tests/topotests/bgp-basic-functionality-topo1/test_bgp_basic_functionality.py
+++ b/tests/topotests/bgp_basic_functionality_topo1/test_bgp_basic_functionality.py
diff --git a/tests/topotests/bgp-ecmp-topo1/__init__.py b/tests/topotests/bgp_comm_list_delete/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-ecmp-topo1/__init__.py
+++ b/tests/topotests/bgp_comm_list_delete/__init__.py
diff --git a/tests/topotests/bgp_comm-list_delete/r1/bgpd.conf b/tests/topotests/bgp_comm_list_delete/r1/bgpd.conf
index 12161d2fa2..12161d2fa2 100644
--- a/tests/topotests/bgp_comm-list_delete/r1/bgpd.conf
+++ b/tests/topotests/bgp_comm_list_delete/r1/bgpd.conf
diff --git a/tests/topotests/bgp_comm-list_delete/r1/zebra.conf b/tests/topotests/bgp_comm_list_delete/r1/zebra.conf
index 0a283c06d5..0a283c06d5 100644
--- a/tests/topotests/bgp_comm-list_delete/r1/zebra.conf
+++ b/tests/topotests/bgp_comm_list_delete/r1/zebra.conf
diff --git a/tests/topotests/bgp_comm-list_delete/r2/bgpd.conf b/tests/topotests/bgp_comm_list_delete/r2/bgpd.conf
index 33231b5274..33231b5274 100644
--- a/tests/topotests/bgp_comm-list_delete/r2/bgpd.conf
+++ b/tests/topotests/bgp_comm_list_delete/r2/bgpd.conf
diff --git a/tests/topotests/bgp_aggregate-address_route-map/r2/zebra.conf b/tests/topotests/bgp_comm_list_delete/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_aggregate-address_route-map/r2/zebra.conf
+++ b/tests/topotests/bgp_comm_list_delete/r2/zebra.conf
diff --git a/tests/topotests/bgp_comm-list_delete/test_bgp_comm-list_delete.py b/tests/topotests/bgp_comm_list_delete/test_bgp_comm-list_delete.py
index 81bf8da31a..81bf8da31a 100644
--- a/tests/topotests/bgp_comm-list_delete/test_bgp_comm-list_delete.py
+++ b/tests/topotests/bgp_comm_list_delete/test_bgp_comm-list_delete.py
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/__init__.py b/tests/topotests/bgp_community_alias/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/__init__.py
+++ b/tests/topotests/bgp_community_alias/__init__.py
diff --git a/tests/topotests/bgp_community_alias/r1/bgpd.conf b/tests/topotests/bgp_community_alias/r1/bgpd.conf
new file mode 100644
index 0000000000..2cf84d0b70
--- /dev/null
+++ b/tests/topotests/bgp_community_alias/r1/bgpd.conf
@@ -0,0 +1,9 @@
+!
+bgp community alias 65002:1 community-r2-1
+bgp community alias 65002:2 community-r2-2
+bgp community alias 65002:1:1 large-community-r2-1
+!
+router bgp 65001
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.2 remote-as external
+!
diff --git a/tests/topotests/bgp_community_alias/r1/zebra.conf b/tests/topotests/bgp_community_alias/r1/zebra.conf
new file mode 100644
index 0000000000..b29940f46a
--- /dev/null
+++ b/tests/topotests/bgp_community_alias/r1/zebra.conf
@@ -0,0 +1,4 @@
+!
+int r1-eth0
+ ip address 192.168.1.1/24
+!
diff --git a/tests/topotests/bgp_community_alias/r2/bgpd.conf b/tests/topotests/bgp_community_alias/r2/bgpd.conf
new file mode 100644
index 0000000000..517ef70f2a
--- /dev/null
+++ b/tests/topotests/bgp_community_alias/r2/bgpd.conf
@@ -0,0 +1,12 @@
+router bgp 65002
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.1 remote-as external
+ address-family ipv4 unicast
+ redistribute connected
+ neighbor 192.168.1.1 route-map r1 out
+ exit-address-family
+!
+route-map r1 permit 10
+ set community 65002:1 65002:2
+ set large-community 65002:1:1 65002:2:1
+!
diff --git a/tests/topotests/bgp_community_alias/r2/zebra.conf b/tests/topotests/bgp_community_alias/r2/zebra.conf
new file mode 100644
index 0000000000..cffe827363
--- /dev/null
+++ b/tests/topotests/bgp_community_alias/r2/zebra.conf
@@ -0,0 +1,4 @@
+!
+int r2-eth0
+ ip address 192.168.1.2/24
+!
diff --git a/tests/topotests/bgp_community_alias/test_bgp-community-alias.py b/tests/topotests/bgp_community_alias/test_bgp-community-alias.py
new file mode 100644
index 0000000000..a43e5f937e
--- /dev/null
+++ b/tests/topotests/bgp_community_alias/test_bgp-community-alias.py
@@ -0,0 +1,106 @@
+#!/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 BGP community alias is visible in CLI outputs
+"""
+
+import os
+import sys
+import json
+import time
+import pytest
+import functools
+
+pytestmark = pytest.mark.bgpd
+
+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
+
+
+class TemplateTopo(Topo):
+ def build(self, *_args, **_opts):
+ tgen = get_topogen(self)
+
+ for routern in range(1, 3):
+ tgen.add_router("r{}".format(routern))
+
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["r1"])
+ switch.add_link(tgen.gears["r2"])
+
+
+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_community_alias():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ router = tgen.gears["r1"]
+
+ def _bgp_converge(router):
+ output = json.loads(router.vtysh_cmd("show ip bgp 192.168.1.0/24 json"))
+ expected = {
+ "paths": [
+ {
+ "community": {"string": "community-r2-1 community-r2-2"},
+ "largeCommunity": {"string": "large-community-r2-1 65002:2:1"},
+ }
+ ]
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_converge, router)
+ success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+
+ assert result is None, 'Cannot see BGP community aliases "{}"'.format(router)
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp-path-attributes-topo1/__init__.py b/tests/topotests/bgp_default_ipv4_ipv6_unicast/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-path-attributes-topo1/__init__.py
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/__init__.py
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r1/bgpd.conf b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r1/bgpd.conf
index bf39152ea8..bf39152ea8 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r1/bgpd.conf
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r1/bgpd.conf
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r1/zebra.conf b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r1/zebra.conf
index 697765168d..697765168d 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r1/zebra.conf
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r1/zebra.conf
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r2/bgpd.conf b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r2/bgpd.conf
index abbd1b86fa..abbd1b86fa 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r2/bgpd.conf
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r2/bgpd.conf
diff --git a/tests/topotests/bgp_comm-list_delete/r2/zebra.conf b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_comm-list_delete/r2/zebra.conf
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r2/zebra.conf
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r3/bgpd.conf b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r3/bgpd.conf
index a405c047ca..a405c047ca 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r3/bgpd.conf
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r3/bgpd.conf
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r3/zebra.conf b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r3/zebra.conf
index e9fdfb70c5..e9fdfb70c5 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/r3/zebra.conf
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/r3/zebra.conf
diff --git a/tests/topotests/bgp-default-ipv4-ipv6-unicast/test_bgp-default-ipv4-ipv6-unicast.py b/tests/topotests/bgp_default_ipv4_ipv6_unicast/test_bgp-default-ipv4-ipv6-unicast.py
index f9aa94fd14..f9aa94fd14 100644
--- a/tests/topotests/bgp-default-ipv4-ipv6-unicast/test_bgp-default-ipv4-ipv6-unicast.py
+++ b/tests/topotests/bgp_default_ipv4_ipv6_unicast/test_bgp-default-ipv4-ipv6-unicast.py
diff --git a/tests/topotests/bgp-prefix-list-topo1/__init__.py b/tests/topotests/bgp_default_route/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-prefix-list-topo1/__init__.py
+++ b/tests/topotests/bgp_default_route/__init__.py
diff --git a/tests/topotests/bgp_default-route/r1/bgpd.conf b/tests/topotests/bgp_default_route/r1/bgpd.conf
index 8699d62ff2..8699d62ff2 100644
--- a/tests/topotests/bgp_default-route/r1/bgpd.conf
+++ b/tests/topotests/bgp_default_route/r1/bgpd.conf
diff --git a/tests/topotests/bgp_default-route/r1/zebra.conf b/tests/topotests/bgp_default_route/r1/zebra.conf
index 0a283c06d5..0a283c06d5 100644
--- a/tests/topotests/bgp_default-route/r1/zebra.conf
+++ b/tests/topotests/bgp_default_route/r1/zebra.conf
diff --git a/tests/topotests/bgp_default-route/r2/bgpd.conf b/tests/topotests/bgp_default_route/r2/bgpd.conf
index 00c96cc58b..00c96cc58b 100644
--- a/tests/topotests/bgp_default-route/r2/bgpd.conf
+++ b/tests/topotests/bgp_default_route/r2/bgpd.conf
diff --git a/tests/topotests/bgp_default-route/r2/zebra.conf b/tests/topotests/bgp_default_route/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_default-route/r2/zebra.conf
+++ b/tests/topotests/bgp_default_route/r2/zebra.conf
diff --git a/tests/topotests/bgp_default-route/test_bgp_default-originate.py b/tests/topotests/bgp_default_route/test_bgp_default-originate.py
index d8de0f0ac6..d8de0f0ac6 100644
--- a/tests/topotests/bgp_default-route/test_bgp_default-originate.py
+++ b/tests/topotests/bgp_default_route/test_bgp_default-originate.py
diff --git a/tests/topotests/bgp_aggregate-address_origin/__init__.py b/tests/topotests/bgp_default_route_route_map_match/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_aggregate-address_origin/__init__.py
+++ b/tests/topotests/bgp_default_route_route_map_match/__init__.py
diff --git a/tests/topotests/bgp_default-route_route-map_match/r1/bgpd.conf b/tests/topotests/bgp_default_route_route_map_match/r1/bgpd.conf
index 97b440f5ce..97b440f5ce 100644
--- a/tests/topotests/bgp_default-route_route-map_match/r1/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_match/r1/bgpd.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match/r1/zebra.conf b/tests/topotests/bgp_default_route_route_map_match/r1/zebra.conf
index 9e581a7be7..9e581a7be7 100644
--- a/tests/topotests/bgp_default-route_route-map_match/r1/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_match/r1/zebra.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match/r2/bgpd.conf b/tests/topotests/bgp_default_route_route_map_match/r2/bgpd.conf
index 00c96cc58b..00c96cc58b 100644
--- a/tests/topotests/bgp_default-route_route-map_match/r2/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_match/r2/bgpd.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match/r2/zebra.conf b/tests/topotests/bgp_default_route_route_map_match/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_default-route_route-map_match/r2/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_match/r2/zebra.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match/test_bgp_default-originate_route-map_match.py b/tests/topotests/bgp_default_route_route_map_match/test_bgp_default-originate_route-map_match.py
index 089c9a964e..089c9a964e 100644
--- a/tests/topotests/bgp_default-route_route-map_match/test_bgp_default-originate_route-map_match.py
+++ b/tests/topotests/bgp_default_route_route_map_match/test_bgp_default-originate_route-map_match.py
diff --git a/tests/topotests/bgp_aggregate-address_route-map/__init__.py b/tests/topotests/bgp_default_route_route_map_match_set/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_aggregate-address_route-map/__init__.py
+++ b/tests/topotests/bgp_default_route_route_map_match_set/__init__.py
diff --git a/tests/topotests/bgp_default-route_route-map_match_set/r1/bgpd.conf b/tests/topotests/bgp_default_route_route_map_match_set/r1/bgpd.conf
index 6ef8b1c0f4..6ef8b1c0f4 100644
--- a/tests/topotests/bgp_default-route_route-map_match_set/r1/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_match_set/r1/bgpd.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match_set/r1/zebra.conf b/tests/topotests/bgp_default_route_route_map_match_set/r1/zebra.conf
index 9e581a7be7..9e581a7be7 100644
--- a/tests/topotests/bgp_default-route_route-map_match_set/r1/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_match_set/r1/zebra.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match_set/r2/bgpd.conf b/tests/topotests/bgp_default_route_route_map_match_set/r2/bgpd.conf
index 00c96cc58b..00c96cc58b 100644
--- a/tests/topotests/bgp_default-route_route-map_match_set/r2/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_match_set/r2/bgpd.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match_set/r2/zebra.conf b/tests/topotests/bgp_default_route_route_map_match_set/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_default-route_route-map_match_set/r2/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_match_set/r2/zebra.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match_set/test_bgp_default-originate_route-map_match_set.py b/tests/topotests/bgp_default_route_route_map_match_set/test_bgp_default-originate_route-map_match_set.py
index d9ea5db278..d9ea5db278 100644
--- a/tests/topotests/bgp_default-route_route-map_match_set/test_bgp_default-originate_route-map_match_set.py
+++ b/tests/topotests/bgp_default_route_route_map_match_set/test_bgp_default-originate_route-map_match_set.py
diff --git a/tests/topotests/bgp_comm-list_delete/__init__.py b/tests/topotests/bgp_default_route_route_map_set/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_comm-list_delete/__init__.py
+++ b/tests/topotests/bgp_default_route_route_map_set/__init__.py
diff --git a/tests/topotests/bgp_default-route_route-map_set/r1/bgpd.conf b/tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf
index cb07ea9fdf..cb07ea9fdf 100644
--- a/tests/topotests/bgp_default-route_route-map_set/r1/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r1/bgpd.conf
diff --git a/tests/topotests/bgp_default-route_route-map_set/r1/zebra.conf b/tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf
index 0a283c06d5..0a283c06d5 100644
--- a/tests/topotests/bgp_default-route_route-map_set/r1/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r1/zebra.conf
diff --git a/tests/topotests/bgp_default-route_route-map_set/r2/bgpd.conf b/tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf
index 00c96cc58b..00c96cc58b 100644
--- a/tests/topotests/bgp_default-route_route-map_set/r2/bgpd.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r2/bgpd.conf
diff --git a/tests/topotests/bgp_default-route_route-map_set/r2/zebra.conf b/tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_default-route_route-map_set/r2/zebra.conf
+++ b/tests/topotests/bgp_default_route_route_map_set/r2/zebra.conf
diff --git a/tests/topotests/bgp_default-route_route-map_set/test_bgp_default-originate_route-map_set.py b/tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py
index 9a22c58b16..9a22c58b16 100644
--- a/tests/topotests/bgp_default-route_route-map_set/test_bgp_default-originate_route-map_set.py
+++ b/tests/topotests/bgp_default_route_route_map_set/test_bgp_default-originate_route-map_set.py
diff --git a/tests/topotests/bgp_default-route/__init__.py b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_default-route/__init__.py
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/__init__.py
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/bgpd.conf b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r1/bgpd.conf
index c320bb5d11..c320bb5d11 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/bgpd.conf
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r1/bgpd.conf
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/zebra.conf b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r1/zebra.conf
index 1782edc2a5..1782edc2a5 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r1/zebra.conf
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r1/zebra.conf
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/bgpd.conf b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r2/bgpd.conf
index cb712e9a8d..cb712e9a8d 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/bgpd.conf
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r2/bgpd.conf
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/zebra.conf b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r2/zebra.conf
index 968171e7b9..968171e7b9 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r2/zebra.conf
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r2/zebra.conf
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/bgpd.conf b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r3/bgpd.conf
index a6e3260d15..a6e3260d15 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/bgpd.conf
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r3/bgpd.conf
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/zebra.conf b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r3/zebra.conf
index ddcf862132..ddcf862132 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/r3/zebra.conf
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/r3/zebra.conf
diff --git a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py
index 3b99065fe0..3b99065fe0 100644
--- a/tests/topotests/bgp-ebgp-common-subnet-nexthop-unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py
+++ b/tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py
diff --git a/tests/topotests/bgp_default-route_route-map_match/__init__.py b/tests/topotests/bgp_ecmp_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_default-route_route-map_match/__init__.py
+++ b/tests/topotests/bgp_ecmp_topo1/__init__.py
diff --git a/tests/topotests/bgp-ecmp-topo1/bgp-ecmp-topo1.dot b/tests/topotests/bgp_ecmp_topo1/bgp-ecmp-topo1.dot
index 90295e199d..90295e199d 100644
--- a/tests/topotests/bgp-ecmp-topo1/bgp-ecmp-topo1.dot
+++ b/tests/topotests/bgp_ecmp_topo1/bgp-ecmp-topo1.dot
diff --git a/tests/topotests/bgp-ecmp-topo1/bgp-ecmp-topo1.pdf b/tests/topotests/bgp_ecmp_topo1/bgp-ecmp-topo1.pdf
index b4d4f6a5e5..b4d4f6a5e5 100644
--- a/tests/topotests/bgp-ecmp-topo1/bgp-ecmp-topo1.pdf
+++ b/tests/topotests/bgp_ecmp_topo1/bgp-ecmp-topo1.pdf
Binary files differ
diff --git a/tests/topotests/bgp-ecmp-topo1/exabgp.env b/tests/topotests/bgp_ecmp_topo1/exabgp.env
index a328e04962..a328e04962 100644
--- a/tests/topotests/bgp-ecmp-topo1/exabgp.env
+++ b/tests/topotests/bgp_ecmp_topo1/exabgp.env
diff --git a/tests/topotests/bgp-ecmp-topo1/peer1/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer1/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer1/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer1/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer1/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer1/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer1/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer1/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer1/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer1/exabgp.cfg
index 2d0ca89f0f..2d0ca89f0f 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer1/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer1/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer10/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer10/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer10/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer10/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer10/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer10/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer10/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer10/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer10/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer10/exabgp.cfg
index 0c842a0e7f..0c842a0e7f 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer10/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer10/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer11/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer11/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer11/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer11/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer11/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer11/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer11/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer11/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer11/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer11/exabgp.cfg
index 936dc572bd..936dc572bd 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer11/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer11/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer12/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer12/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer12/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer12/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer12/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer12/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer12/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer12/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer12/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer12/exabgp.cfg
index 56b33eae8e..56b33eae8e 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer12/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer12/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer13/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer13/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer13/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer13/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer13/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer13/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer13/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer13/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer13/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer13/exabgp.cfg
index b933ffb5cf..b933ffb5cf 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer13/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer13/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer14/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer14/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer14/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer14/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer14/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer14/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer14/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer14/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer14/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer14/exabgp.cfg
index bcfa41eb2e..bcfa41eb2e 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer14/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer14/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer15/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer15/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer15/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer15/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer15/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer15/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer15/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer15/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer15/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer15/exabgp.cfg
index 022e835798..022e835798 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer15/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer15/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer16/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer16/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer16/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer16/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer16/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer16/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer16/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer16/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer16/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer16/exabgp.cfg
index 0649202f1f..0649202f1f 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer16/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer16/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer17/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer17/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer17/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer17/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer17/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer17/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer17/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer17/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer17/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer17/exabgp.cfg
index 0aeeed9d95..0aeeed9d95 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer17/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer17/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer18/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer18/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer18/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer18/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer18/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer18/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer18/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer18/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer18/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer18/exabgp.cfg
index 352c030eda..352c030eda 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer18/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer18/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer19/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer19/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer19/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer19/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer19/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer19/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer19/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer19/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer19/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer19/exabgp.cfg
index 9913c226f6..9913c226f6 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer19/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer19/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer2/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer2/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer2/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer2/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer2/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer2/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer2/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer2/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer2/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer2/exabgp.cfg
index 46b436d2af..46b436d2af 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer2/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer2/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer20/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer20/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer20/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer20/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer20/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer20/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer20/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer20/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer20/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer20/exabgp.cfg
index 17fb816a75..17fb816a75 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer20/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer20/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer3/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer3/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer3/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer3/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer3/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer3/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer3/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer3/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer3/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer3/exabgp.cfg
index acd57756b9..acd57756b9 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer3/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer3/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer4/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer4/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer4/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer4/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer4/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer4/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer4/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer4/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer4/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer4/exabgp.cfg
index 4c9a989b5a..4c9a989b5a 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer4/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer4/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer5/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer5/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer5/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer5/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer5/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer5/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer5/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer5/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer5/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer5/exabgp.cfg
index eba2aae378..eba2aae378 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer5/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer5/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer6/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer6/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer6/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer6/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer6/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer6/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer6/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer6/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer6/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer6/exabgp.cfg
index 38b6af0e85..38b6af0e85 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer6/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer6/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer7/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer7/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer7/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer7/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer7/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer7/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer7/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer7/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer7/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer7/exabgp.cfg
index 7631e43750..7631e43750 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer7/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer7/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer8/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer8/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer8/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer8/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer8/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer8/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer8/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer8/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer8/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer8/exabgp.cfg
index 1cd1cd9024..1cd1cd9024 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer8/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer8/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/peer9/exa-receive.py b/tests/topotests/bgp_ecmp_topo1/peer9/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer9/exa-receive.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer9/exa-receive.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer9/exa-send.py b/tests/topotests/bgp_ecmp_topo1/peer9/exa-send.py
index d9ae3d1906..d9ae3d1906 100755
--- a/tests/topotests/bgp-ecmp-topo1/peer9/exa-send.py
+++ b/tests/topotests/bgp_ecmp_topo1/peer9/exa-send.py
diff --git a/tests/topotests/bgp-ecmp-topo1/peer9/exabgp.cfg b/tests/topotests/bgp_ecmp_topo1/peer9/exabgp.cfg
index 5771553962..5771553962 100644
--- a/tests/topotests/bgp-ecmp-topo1/peer9/exabgp.cfg
+++ b/tests/topotests/bgp_ecmp_topo1/peer9/exabgp.cfg
diff --git a/tests/topotests/bgp-ecmp-topo1/r1/bgpd.conf b/tests/topotests/bgp_ecmp_topo1/r1/bgpd.conf
index 49981ac589..49981ac589 100644
--- a/tests/topotests/bgp-ecmp-topo1/r1/bgpd.conf
+++ b/tests/topotests/bgp_ecmp_topo1/r1/bgpd.conf
diff --git a/tests/topotests/bgp-ecmp-topo1/r1/summary.txt b/tests/topotests/bgp_ecmp_topo1/r1/summary.txt
index f0929536d3..f0929536d3 100644
--- a/tests/topotests/bgp-ecmp-topo1/r1/summary.txt
+++ b/tests/topotests/bgp_ecmp_topo1/r1/summary.txt
diff --git a/tests/topotests/bgp-ecmp-topo1/r1/summary20.txt b/tests/topotests/bgp_ecmp_topo1/r1/summary20.txt
index 9015f485f8..9015f485f8 100644
--- a/tests/topotests/bgp-ecmp-topo1/r1/summary20.txt
+++ b/tests/topotests/bgp_ecmp_topo1/r1/summary20.txt
diff --git a/tests/topotests/bgp-ecmp-topo1/r1/zebra.conf b/tests/topotests/bgp_ecmp_topo1/r1/zebra.conf
index 77c76cd490..77c76cd490 100644
--- a/tests/topotests/bgp-ecmp-topo1/r1/zebra.conf
+++ b/tests/topotests/bgp_ecmp_topo1/r1/zebra.conf
diff --git a/tests/topotests/bgp-ecmp-topo1/test_bgp_ecmp_topo1.py b/tests/topotests/bgp_ecmp_topo1/test_bgp_ecmp_topo1.py
index 75506d1a51..75506d1a51 100644
--- a/tests/topotests/bgp-ecmp-topo1/test_bgp_ecmp_topo1.py
+++ b/tests/topotests/bgp_ecmp_topo1/test_bgp_ecmp_topo1.py
diff --git a/tests/topotests/bgp-ecmp-topo2/ebgp_ecmp_topo2.json b/tests/topotests/bgp_ecmp_topo2/ebgp_ecmp_topo2.json
index 34f11c0a29..34f11c0a29 100755
--- a/tests/topotests/bgp-ecmp-topo2/ebgp_ecmp_topo2.json
+++ b/tests/topotests/bgp_ecmp_topo2/ebgp_ecmp_topo2.json
diff --git a/tests/topotests/bgp-ecmp-topo2/ibgp_ecmp_topo2.json b/tests/topotests/bgp_ecmp_topo2/ibgp_ecmp_topo2.json
index 9eea9073c7..9eea9073c7 100755
--- a/tests/topotests/bgp-ecmp-topo2/ibgp_ecmp_topo2.json
+++ b/tests/topotests/bgp_ecmp_topo2/ibgp_ecmp_topo2.json
diff --git a/tests/topotests/bgp-ecmp-topo2/test_ebgp_ecmp_topo2.py b/tests/topotests/bgp_ecmp_topo2/test_ebgp_ecmp_topo2.py
index fffcbbd0ef..fffcbbd0ef 100644
--- a/tests/topotests/bgp-ecmp-topo2/test_ebgp_ecmp_topo2.py
+++ b/tests/topotests/bgp_ecmp_topo2/test_ebgp_ecmp_topo2.py
diff --git a/tests/topotests/bgp-ecmp-topo2/test_ibgp_ecmp_topo2.py b/tests/topotests/bgp_ecmp_topo2/test_ibgp_ecmp_topo2.py
index 342a0a4b2f..342a0a4b2f 100644
--- a/tests/topotests/bgp-ecmp-topo2/test_ibgp_ecmp_topo2.py
+++ b/tests/topotests/bgp_ecmp_topo2/test_ibgp_ecmp_topo2.py
diff --git a/tests/topotests/bgp-evpn-mh/evpn-mh-topo-tests.pdf b/tests/topotests/bgp_evpn_mh/evpn-mh-topo-tests.pdf
index 8858e21496..8858e21496 100644
--- a/tests/topotests/bgp-evpn-mh/evpn-mh-topo-tests.pdf
+++ b/tests/topotests/bgp_evpn_mh/evpn-mh-topo-tests.pdf
Binary files differ
diff --git a/tests/topotests/bgp-evpn-mh/hostd11/evpn.conf b/tests/topotests/bgp_evpn_mh/hostd11/evpn.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd11/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd11/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd11/pim.conf b/tests/topotests/bgp_evpn_mh/hostd11/pim.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd11/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd11/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd11/zebra.conf b/tests/topotests/bgp_evpn_mh/hostd11/zebra.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd11/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd11/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd12/evpn.conf b/tests/topotests/bgp_evpn_mh/hostd12/evpn.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd12/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd12/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd12/pim.conf b/tests/topotests/bgp_evpn_mh/hostd12/pim.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd12/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd12/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd12/zebra.conf b/tests/topotests/bgp_evpn_mh/hostd12/zebra.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd12/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd12/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd21/evpn.conf b/tests/topotests/bgp_evpn_mh/hostd21/evpn.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd21/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd21/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd21/pim.conf b/tests/topotests/bgp_evpn_mh/hostd21/pim.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd21/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd21/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd21/zebra.conf b/tests/topotests/bgp_evpn_mh/hostd21/zebra.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd21/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd21/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd22/evpn.conf b/tests/topotests/bgp_evpn_mh/hostd22/evpn.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd22/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd22/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd22/pim.conf b/tests/topotests/bgp_evpn_mh/hostd22/pim.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd22/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd22/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/hostd22/zebra.conf b/tests/topotests/bgp_evpn_mh/hostd22/zebra.conf
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp-evpn-mh/hostd22/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/hostd22/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/spine1/evpn.conf b/tests/topotests/bgp_evpn_mh/spine1/evpn.conf
index 2e26f60f44..2e26f60f44 100644
--- a/tests/topotests/bgp-evpn-mh/spine1/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/spine1/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/spine1/pim.conf b/tests/topotests/bgp_evpn_mh/spine1/pim.conf
index 68e686e8c7..68e686e8c7 100644
--- a/tests/topotests/bgp-evpn-mh/spine1/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/spine1/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/spine1/zebra.conf b/tests/topotests/bgp_evpn_mh/spine1/zebra.conf
index 80e9e5a263..80e9e5a263 100644
--- a/tests/topotests/bgp-evpn-mh/spine1/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/spine1/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/spine2/evpn.conf b/tests/topotests/bgp_evpn_mh/spine2/evpn.conf
index ec2e789276..ec2e789276 100644
--- a/tests/topotests/bgp-evpn-mh/spine2/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/spine2/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/spine2/pim.conf b/tests/topotests/bgp_evpn_mh/spine2/pim.conf
index c1566240e6..c1566240e6 100644
--- a/tests/topotests/bgp-evpn-mh/spine2/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/spine2/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/spine2/zebra.conf b/tests/topotests/bgp_evpn_mh/spine2/zebra.conf
index 1cd1df8c81..1cd1df8c81 100644
--- a/tests/topotests/bgp-evpn-mh/spine2/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/spine2/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/test_evpn_mh.py b/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
index f389632b1e..f389632b1e 100644
--- a/tests/topotests/bgp-evpn-mh/test_evpn_mh.py
+++ b/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
diff --git a/tests/topotests/bgp-evpn-mh/torm11/evpn.conf b/tests/topotests/bgp_evpn_mh/torm11/evpn.conf
index 01f4b65704..01f4b65704 100644
--- a/tests/topotests/bgp-evpn-mh/torm11/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm11/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm11/pim.conf b/tests/topotests/bgp_evpn_mh/torm11/pim.conf
index fbba735873..fbba735873 100644
--- a/tests/topotests/bgp-evpn-mh/torm11/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/torm11/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm11/zebra.conf b/tests/topotests/bgp_evpn_mh/torm11/zebra.conf
index 33e89c06ae..33e89c06ae 100644
--- a/tests/topotests/bgp-evpn-mh/torm11/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/torm11/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm12/evpn.conf b/tests/topotests/bgp_evpn_mh/torm12/evpn.conf
index 2c13024bbc..2c13024bbc 100644
--- a/tests/topotests/bgp-evpn-mh/torm12/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm12/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm12/pim.conf b/tests/topotests/bgp_evpn_mh/torm12/pim.conf
index 3dd63b44ca..3dd63b44ca 100644
--- a/tests/topotests/bgp-evpn-mh/torm12/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/torm12/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm12/zebra.conf b/tests/topotests/bgp_evpn_mh/torm12/zebra.conf
index 419f62b2ac..419f62b2ac 100644
--- a/tests/topotests/bgp-evpn-mh/torm12/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/torm12/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm21/evpn.conf b/tests/topotests/bgp_evpn_mh/torm21/evpn.conf
index 2a2ba061c6..2a2ba061c6 100644
--- a/tests/topotests/bgp-evpn-mh/torm21/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm21/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm21/pim.conf b/tests/topotests/bgp_evpn_mh/torm21/pim.conf
index 71aa91a06d..71aa91a06d 100644
--- a/tests/topotests/bgp-evpn-mh/torm21/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/torm21/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm21/zebra.conf b/tests/topotests/bgp_evpn_mh/torm21/zebra.conf
index 525f5eb099..525f5eb099 100644
--- a/tests/topotests/bgp-evpn-mh/torm21/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/torm21/zebra.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm22/evpn.conf b/tests/topotests/bgp_evpn_mh/torm22/evpn.conf
index 432135c94a..432135c94a 100644
--- a/tests/topotests/bgp-evpn-mh/torm22/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm22/evpn.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm22/pim.conf b/tests/topotests/bgp_evpn_mh/torm22/pim.conf
index 46f330f5cd..46f330f5cd 100644
--- a/tests/topotests/bgp-evpn-mh/torm22/pim.conf
+++ b/tests/topotests/bgp_evpn_mh/torm22/pim.conf
diff --git a/tests/topotests/bgp-evpn-mh/torm22/zebra.conf b/tests/topotests/bgp_evpn_mh/torm22/zebra.conf
index 398064df6c..398064df6c 100644
--- a/tests/topotests/bgp-evpn-mh/torm22/zebra.conf
+++ b/tests/topotests/bgp_evpn_mh/torm22/zebra.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/P1/bgpd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/P1/bgpd.conf
index cdf4cb4feb..cdf4cb4feb 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/P1/bgpd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/P1/bgpd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/P1/ospfd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/P1/ospfd.conf
index 2db7edb806..2db7edb806 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/P1/ospfd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/P1/ospfd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/P1/zebra.conf b/tests/topotests/bgp_evpn_vxlan_topo1/P1/zebra.conf
index 95b5da8402..95b5da8402 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/P1/zebra.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/P1/zebra.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/bgpd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/bgpd.conf
index 991a1e7e56..991a1e7e56 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/bgpd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/bgpd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/evpn.vni.json b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/evpn.vni.json
index e500a1d85c..e500a1d85c 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/evpn.vni.json
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/evpn.vni.json
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/ospfd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/ospfd.conf
index f1c2b42dc1..f1c2b42dc1 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/ospfd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/ospfd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/zebra.conf b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/zebra.conf
index e2699475c9..e2699475c9 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE1/zebra.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE1/zebra.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/bgpd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/bgpd.conf
index 52f8687bc1..52f8687bc1 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/bgpd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/bgpd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/evpn.vni.json b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/evpn.vni.json
index 0a56a235bd..0a56a235bd 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/evpn.vni.json
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/evpn.vni.json
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/ospfd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/ospfd.conf
index 065c993303..065c993303 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/ospfd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/ospfd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/zebra.conf b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/zebra.conf
index 9738916ab0..9738916ab0 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/PE2/zebra.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/PE2/zebra.conf
diff --git a/tests/topotests/bgp_default-route_route-map_match_set/__init__.py b/tests/topotests/bgp_evpn_vxlan_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_default-route_route-map_match_set/__init__.py
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/__init__.py
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/host1/bgpd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/host1/bgpd.conf
index cdf4cb4feb..cdf4cb4feb 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/host1/bgpd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/host1/bgpd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/host1/ospfd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/host1/ospfd.conf
index cdf4cb4feb..cdf4cb4feb 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/host1/ospfd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/host1/ospfd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/host1/zebra.conf b/tests/topotests/bgp_evpn_vxlan_topo1/host1/zebra.conf
index 91fae9eeba..91fae9eeba 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/host1/zebra.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/host1/zebra.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/host2/bgpd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/host2/bgpd.conf
index cdf4cb4feb..cdf4cb4feb 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/host2/bgpd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/host2/bgpd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/host2/ospfd.conf b/tests/topotests/bgp_evpn_vxlan_topo1/host2/ospfd.conf
index cdf4cb4feb..cdf4cb4feb 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/host2/ospfd.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/host2/ospfd.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/host2/zebra.conf b/tests/topotests/bgp_evpn_vxlan_topo1/host2/zebra.conf
index df9adeb3b5..df9adeb3b5 100644
--- a/tests/topotests/bgp-evpn-vxlan_topo1/host2/zebra.conf
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/host2/zebra.conf
diff --git a/tests/topotests/bgp-evpn-vxlan_topo1/test_bgp_evpn_vxlan.py b/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py
index 086bad6481..086bad6481 100755
--- a/tests/topotests/bgp-evpn-vxlan_topo1/test_bgp_evpn_vxlan.py
+++ b/tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py
diff --git a/tests/topotests/bgp_default-route_route-map_set/__init__.py b/tests/topotests/bgp_path_attributes_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_default-route_route-map_set/__init__.py
+++ b/tests/topotests/bgp_path_attributes_topo1/__init__.py
diff --git a/tests/topotests/bgp-path-attributes-topo1/bgp_path_attributes.json b/tests/topotests/bgp_path_attributes_topo1/bgp_path_attributes.json
index de2bffa33d..de2bffa33d 100644
--- a/tests/topotests/bgp-path-attributes-topo1/bgp_path_attributes.json
+++ b/tests/topotests/bgp_path_attributes_topo1/bgp_path_attributes.json
diff --git a/tests/topotests/bgp-path-attributes-topo1/test_bgp_path_attributes.py b/tests/topotests/bgp_path_attributes_topo1/test_bgp_path_attributes.py
index a9541a55c5..a9541a55c5 100644
--- a/tests/topotests/bgp-path-attributes-topo1/test_bgp_path_attributes.py
+++ b/tests/topotests/bgp_path_attributes_topo1/test_bgp_path_attributes.py
diff --git a/tests/topotests/bgp_peer-group/__init__.py b/tests/topotests/bgp_peer_group/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_peer-group/__init__.py
+++ b/tests/topotests/bgp_peer_group/__init__.py
diff --git a/tests/topotests/bgp_peer-group/r1/bgpd.conf b/tests/topotests/bgp_peer_group/r1/bgpd.conf
index 19b490a359..19b490a359 100644
--- a/tests/topotests/bgp_peer-group/r1/bgpd.conf
+++ b/tests/topotests/bgp_peer_group/r1/bgpd.conf
diff --git a/tests/topotests/bgp_peer-group/r1/zebra.conf b/tests/topotests/bgp_peer_group/r1/zebra.conf
index e2c399e536..e2c399e536 100644
--- a/tests/topotests/bgp_peer-group/r1/zebra.conf
+++ b/tests/topotests/bgp_peer_group/r1/zebra.conf
diff --git a/tests/topotests/bgp_peer-group/r2/bgpd.conf b/tests/topotests/bgp_peer_group/r2/bgpd.conf
index 0880ee9fae..0880ee9fae 100644
--- a/tests/topotests/bgp_peer-group/r2/bgpd.conf
+++ b/tests/topotests/bgp_peer_group/r2/bgpd.conf
diff --git a/tests/topotests/bgp_peer-group/r2/zebra.conf b/tests/topotests/bgp_peer_group/r2/zebra.conf
index 606c17bec9..606c17bec9 100644
--- a/tests/topotests/bgp_peer-group/r2/zebra.conf
+++ b/tests/topotests/bgp_peer_group/r2/zebra.conf
diff --git a/tests/topotests/bgp_peer-group/r3/bgpd.conf b/tests/topotests/bgp_peer_group/r3/bgpd.conf
index eb2fca15fb..eb2fca15fb 100644
--- a/tests/topotests/bgp_peer-group/r3/bgpd.conf
+++ b/tests/topotests/bgp_peer_group/r3/bgpd.conf
diff --git a/tests/topotests/bgp_peer-group/r3/zebra.conf b/tests/topotests/bgp_peer_group/r3/zebra.conf
index e9fdfb70c5..e9fdfb70c5 100644
--- a/tests/topotests/bgp_peer-group/r3/zebra.conf
+++ b/tests/topotests/bgp_peer_group/r3/zebra.conf
diff --git a/tests/topotests/bgp_peer-group/test_bgp_peer-group.py b/tests/topotests/bgp_peer_group/test_bgp_peer-group.py
index 21dc725793..21dc725793 100644
--- a/tests/topotests/bgp_peer-group/test_bgp_peer-group.py
+++ b/tests/topotests/bgp_peer_group/test_bgp_peer-group.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/exabgp.env b/tests/topotests/bgp_peer_type_multipath_relax/exabgp.env
index 6c554f5fa8..6c554f5fa8 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/exabgp.env
+++ b/tests/topotests/bgp_peer_type_multipath_relax/exabgp.env
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer1/exa-receive.py b/tests/topotests/bgp_peer_type_multipath_relax/peer1/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer1/exa-receive.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer1/exa-receive.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer1/exa_readpipe.py b/tests/topotests/bgp_peer_type_multipath_relax/peer1/exa_readpipe.py
index 9e689a27e3..9e689a27e3 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer1/exa_readpipe.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer1/exa_readpipe.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer1/exabgp.cfg b/tests/topotests/bgp_peer_type_multipath_relax/peer1/exabgp.cfg
index 4a7dc48126..4a7dc48126 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer1/exabgp.cfg
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer1/exabgp.cfg
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer2/exa-receive.py b/tests/topotests/bgp_peer_type_multipath_relax/peer2/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer2/exa-receive.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer2/exa-receive.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer2/exa_readpipe.py b/tests/topotests/bgp_peer_type_multipath_relax/peer2/exa_readpipe.py
index 9e689a27e3..9e689a27e3 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer2/exa_readpipe.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer2/exa_readpipe.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer2/exabgp.cfg b/tests/topotests/bgp_peer_type_multipath_relax/peer2/exabgp.cfg
index b53b054550..b53b054550 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer2/exabgp.cfg
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer2/exabgp.cfg
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer3/exa-receive.py b/tests/topotests/bgp_peer_type_multipath_relax/peer3/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer3/exa-receive.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer3/exa-receive.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer3/exa_readpipe.py b/tests/topotests/bgp_peer_type_multipath_relax/peer3/exa_readpipe.py
index 9e689a27e3..9e689a27e3 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer3/exa_readpipe.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer3/exa_readpipe.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer3/exabgp.cfg b/tests/topotests/bgp_peer_type_multipath_relax/peer3/exabgp.cfg
index 6a1cc2fb3f..6a1cc2fb3f 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer3/exabgp.cfg
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer3/exabgp.cfg
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer4/exa-receive.py b/tests/topotests/bgp_peer_type_multipath_relax/peer4/exa-receive.py
index 031ff455ca..031ff455ca 100755
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer4/exa-receive.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer4/exa-receive.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer4/exa_readpipe.py b/tests/topotests/bgp_peer_type_multipath_relax/peer4/exa_readpipe.py
index 9e689a27e3..9e689a27e3 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer4/exa_readpipe.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer4/exa_readpipe.py
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/peer4/exabgp.cfg b/tests/topotests/bgp_peer_type_multipath_relax/peer4/exabgp.cfg
index 2cc26cb80f..2cc26cb80f 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/peer4/exabgp.cfg
+++ b/tests/topotests/bgp_peer_type_multipath_relax/peer4/exabgp.cfg
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/bgpd.conf b/tests/topotests/bgp_peer_type_multipath_relax/r1/bgpd.conf
index 038f108aa8..038f108aa8 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/bgpd.conf
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/bgpd.conf
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/multipath.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/multipath.json
index 11dad786f2..11dad786f2 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/multipath.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/multipath.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/not-multipath.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/not-multipath.json
index c621832157..c621832157 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/not-multipath.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/not-multipath.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-eBGP-confed.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json
index 22ec2c298b..22ec2c298b 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-eBGP-confed.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-confed.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-eBGP-iBGP.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json
index facddcda46..facddcda46 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-eBGP-iBGP.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-eBGP-iBGP.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-no-recursive.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-no-recursive.json
index 5399ceefcc..5399ceefcc 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-no-recursive.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-no-recursive.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-recursive.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-recursive.json
index 7da95aed1c..7da95aed1c 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1-recursive.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1-recursive.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1.json
index a90669a474..a90669a474 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix1.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix1.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-ip-route.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-ip-route.json
index 1bf38efcc5..1bf38efcc5 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-ip-route.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-ip-route.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-no-recursive.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-no-recursive.json
index 33d0f2d1ce..33d0f2d1ce 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-no-recursive.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-no-recursive.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-recursive.json b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-recursive.json
index 6ac2512a60..6ac2512a60 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/prefix3-recursive.json
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/prefix3-recursive.json
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r1/zebra.conf b/tests/topotests/bgp_peer_type_multipath_relax/r1/zebra.conf
index 911aa1c39d..911aa1c39d 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r1/zebra.conf
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r1/zebra.conf
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r2/bgpd.conf b/tests/topotests/bgp_peer_type_multipath_relax/r2/bgpd.conf
index 2362a19f26..2362a19f26 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r2/bgpd.conf
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r2/bgpd.conf
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r2/staticd.conf b/tests/topotests/bgp_peer_type_multipath_relax/r2/staticd.conf
index 35ebe0dc66..35ebe0dc66 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r2/staticd.conf
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r2/staticd.conf
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/r2/zebra.conf b/tests/topotests/bgp_peer_type_multipath_relax/r2/zebra.conf
index 900e7d4fbc..900e7d4fbc 100644
--- a/tests/topotests/bgp_peer-type_multipath-relax/r2/zebra.conf
+++ b/tests/topotests/bgp_peer_type_multipath_relax/r2/zebra.conf
diff --git a/tests/topotests/bgp_peer-type_multipath-relax/test_bgp_peer-type_multipath-relax.py b/tests/topotests/bgp_peer_type_multipath_relax/test_bgp_peer-type_multipath-relax.py
index 39a0beeb11..39a0beeb11 100755
--- a/tests/topotests/bgp_peer-type_multipath-relax/test_bgp_peer-type_multipath-relax.py
+++ b/tests/topotests/bgp_peer_type_multipath_relax/test_bgp_peer-type_multipath-relax.py
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/__init__.py b/tests/topotests/bgp_prefix_list_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/__init__.py
+++ b/tests/topotests/bgp_prefix_list_topo1/__init__.py
diff --git a/tests/topotests/bgp-prefix-list-topo1/prefix_lists.json b/tests/topotests/bgp_prefix_list_topo1/prefix_lists.json
index 3bb07ad994..3bb07ad994 100644
--- a/tests/topotests/bgp-prefix-list-topo1/prefix_lists.json
+++ b/tests/topotests/bgp_prefix_list_topo1/prefix_lists.json
diff --git a/tests/topotests/bgp-prefix-list-topo1/test_prefix_lists.py b/tests/topotests/bgp_prefix_list_topo1/test_prefix_lists.py
index 22952f645c..22952f645c 100644
--- a/tests/topotests/bgp-prefix-list-topo1/test_prefix_lists.py
+++ b/tests/topotests/bgp_prefix_list_topo1/test_prefix_lists.py
diff --git a/tests/topotests/bgp_recursive_route_ebgp_multi_hop/test_bgp_recursive_route_ebgp_multi_hop.py b/tests/topotests/bgp_recursive_route_ebgp_multi_hop/test_bgp_recursive_route_ebgp_multi_hop.py
index c758c31dc1..e7d70f6d8e 100644
--- a/tests/topotests/bgp_recursive_route_ebgp_multi_hop/test_bgp_recursive_route_ebgp_multi_hop.py
+++ b/tests/topotests/bgp_recursive_route_ebgp_multi_hop/test_bgp_recursive_route_ebgp_multi_hop.py
@@ -287,7 +287,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
input_dict_4,
next_hop=topo["routers"]["r3"]["links"]["r1"][addr_type].split("/")[0],
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -322,7 +322,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
}
}
result = create_static_routes(tgen, input_dict_3)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -335,7 +335,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
next_hop=topo["routers"]["r3"]["links"]["r1"][addr_type].split("/")[0],
protocol="bgp",
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -354,7 +354,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
}
}
result = create_static_routes(tgen, input_dict_3)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -388,7 +388,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
}
}
result = create_static_routes(tgen, input_dict_3)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -401,7 +401,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
next_hop=topo["routers"]["r3"]["links"]["r1"][addr_type].split("/")[0],
protocol="bgp",
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -427,7 +427,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
}
}
result = create_static_routes(tgen, input_dict_4)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -474,7 +474,7 @@ def test_recursive_routes_iBGP_peer_p1(request):
}
}
result = create_static_routes(tgen, input_dict_4)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -639,7 +639,7 @@ def test_next_hop_as_self_ip_p1(request):
input_dict_4,
next_hop=topo["routers"]["r2"]["links"]["r4"][addr_type].split("/")[0],
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -671,7 +671,7 @@ def test_next_hop_as_self_ip_p1(request):
input_dict_4,
next_hop=topo["routers"]["r2"]["links"]["r4"][addr_type].split("/")[0],
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
result = verify_rib(
@@ -1277,7 +1277,7 @@ def test_BGP_path_attributes_default_values_p1(request):
topo["routers"]["r3"]["links"]["r4"][addr_type].split("/")[0],
],
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -1298,7 +1298,7 @@ def test_BGP_path_attributes_default_values_p1(request):
rmap_name="rmap_pf",
input_dict=input_dict_4,
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -1402,7 +1402,7 @@ def test_BGP_path_attributes_default_values_p1(request):
rmap_name="rmap_pf",
input_dict=input_dict_4,
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -1478,7 +1478,7 @@ def test_BGP_path_attributes_default_values_p1(request):
input_dict=input_dict_4,
nexthop=None,
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
@@ -1859,7 +1859,7 @@ def test_BGP_active_standby_preemption_and_ecmp_p1(request):
topo["routers"]["r3"]["links"]["r4"][addr_type].split("/")[0],
],
)
- assert result is True, "Testcase : Failed \n Error : {}".format(
+ assert result is True, "Testcase {}: Failed \n Error : {}".format(
tc_name, result
)
diff --git a/tests/topotests/bgp-route-map/bgp_route_map_topo1.json b/tests/topotests/bgp_route_map/bgp_route_map_topo1.json
index e89263961d..e89263961d 100644
--- a/tests/topotests/bgp-route-map/bgp_route_map_topo1.json
+++ b/tests/topotests/bgp_route_map/bgp_route_map_topo1.json
diff --git a/tests/topotests/bgp-route-map/bgp_route_map_topo2.json b/tests/topotests/bgp_route_map/bgp_route_map_topo2.json
index c22a4c3ea7..c22a4c3ea7 100755
--- a/tests/topotests/bgp-route-map/bgp_route_map_topo2.json
+++ b/tests/topotests/bgp_route_map/bgp_route_map_topo2.json
diff --git a/tests/topotests/bgp-route-map/test_route_map_topo1.py b/tests/topotests/bgp_route_map/test_route_map_topo1.py
index 0158e24d31..0158e24d31 100644
--- a/tests/topotests/bgp-route-map/test_route_map_topo1.py
+++ b/tests/topotests/bgp_route_map/test_route_map_topo1.py
diff --git a/tests/topotests/bgp-route-map/test_route_map_topo2.py b/tests/topotests/bgp_route_map/test_route_map_topo2.py
index 958eceba62..958eceba62 100644
--- a/tests/topotests/bgp-route-map/test_route_map_topo2.py
+++ b/tests/topotests/bgp_route_map/test_route_map_topo2.py
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/__init__.py b/tests/topotests/bgp_sender_as_path_loop_detection/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/__init__.py
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/__init__.py
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/r1/bgpd.conf b/tests/topotests/bgp_sender_as_path_loop_detection/r1/bgpd.conf
index 719d76392d..719d76392d 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/r1/bgpd.conf
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/r1/bgpd.conf
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/r1/zebra.conf b/tests/topotests/bgp_sender_as_path_loop_detection/r1/zebra.conf
index 9904bb4e16..9904bb4e16 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/r1/zebra.conf
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/r1/zebra.conf
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/r2/bgpd.conf b/tests/topotests/bgp_sender_as_path_loop_detection/r2/bgpd.conf
index a4a654d7b5..a4a654d7b5 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/r2/bgpd.conf
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/r2/bgpd.conf
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/r2/zebra.conf b/tests/topotests/bgp_sender_as_path_loop_detection/r2/zebra.conf
index f0d357c5ff..f0d357c5ff 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/r2/zebra.conf
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/r2/zebra.conf
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/r3/bgpd.conf b/tests/topotests/bgp_sender_as_path_loop_detection/r3/bgpd.conf
index 2e24de0b2d..2e24de0b2d 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/r3/bgpd.conf
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/r3/bgpd.conf
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/r3/zebra.conf b/tests/topotests/bgp_sender_as_path_loop_detection/r3/zebra.conf
index a10fe3a3c7..a10fe3a3c7 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/r3/zebra.conf
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/r3/zebra.conf
diff --git a/tests/topotests/bgp_sender-as-path-loop-detection/test_bgp_sender-as-path-loop-detection.py b/tests/topotests/bgp_sender_as_path_loop_detection/test_bgp_sender-as-path-loop-detection.py
index dffe24f3a0..dffe24f3a0 100644
--- a/tests/topotests/bgp_sender-as-path-loop-detection/test_bgp_sender-as-path-loop-detection.py
+++ b/tests/topotests/bgp_sender_as_path_loop_detection/test_bgp_sender-as-path-loop-detection.py
diff --git a/tests/topotests/example-test/__init__.py b/tests/topotests/bgp_set_local_preference_add_subtract/__init__.py
index e69de29bb2..e69de29bb2 100755..100644
--- a/tests/topotests/example-test/__init__.py
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/__init__.py
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/r1/bgpd.conf b/tests/topotests/bgp_set_local_preference_add_subtract/r1/bgpd.conf
index 57e2f5818a..57e2f5818a 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/r1/bgpd.conf
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/r1/bgpd.conf
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/r1/zebra.conf b/tests/topotests/bgp_set_local_preference_add_subtract/r1/zebra.conf
index 6e9b0b4a7e..6e9b0b4a7e 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/r1/zebra.conf
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/r1/zebra.conf
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/r2/bgpd.conf b/tests/topotests/bgp_set_local_preference_add_subtract/r2/bgpd.conf
index 82a01d4570..82a01d4570 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/r2/bgpd.conf
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/r2/bgpd.conf
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/r2/zebra.conf b/tests/topotests/bgp_set_local_preference_add_subtract/r2/zebra.conf
index 93e3590448..93e3590448 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/r2/zebra.conf
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/r2/zebra.conf
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/r3/bgpd.conf b/tests/topotests/bgp_set_local_preference_add_subtract/r3/bgpd.conf
index 65e092b0f2..65e092b0f2 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/r3/bgpd.conf
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/r3/bgpd.conf
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/r3/zebra.conf b/tests/topotests/bgp_set_local_preference_add_subtract/r3/zebra.conf
index b5e060c3d6..b5e060c3d6 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/r3/zebra.conf
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/r3/zebra.conf
diff --git a/tests/topotests/bgp_set_local-preference_add_subtract/test_bgp_set_local-preference_add_subtract.py b/tests/topotests/bgp_set_local_preference_add_subtract/test_bgp_set_local-preference_add_subtract.py
index af64648951..af64648951 100644
--- a/tests/topotests/bgp_set_local-preference_add_subtract/test_bgp_set_local-preference_add_subtract.py
+++ b/tests/topotests/bgp_set_local_preference_add_subtract/test_bgp_set_local-preference_add_subtract.py
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce1/bgpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce1/bgpd.conf
index b598666dfb..b598666dfb 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce1/bgpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce1/bgpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce1/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce1/snmpd.conf
index 36218d3538..36218d3538 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce1/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce1/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce1/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce1/zebra.conf
index 8ad2ddc48c..8ad2ddc48c 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce1/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce1/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce2/bgpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce2/bgpd.conf
index e388ccba8a..e388ccba8a 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce2/bgpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce2/bgpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce2/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce2/snmpd.conf
index 714585cb9b..714585cb9b 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce2/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce2/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce2/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce2/zebra.conf
index fa2e968e55..fa2e968e55 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce2/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce2/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce3/bgpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce3/bgpd.conf
index e388ccba8a..e388ccba8a 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce3/bgpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce3/bgpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce3/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce3/snmpd.conf
index 36218d3538..36218d3538 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce3/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce3/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce3/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce3/zebra.conf
index ea91e21bad..ea91e21bad 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce3/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce3/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce4/bgpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce4/bgpd.conf
index e388ccba8a..e388ccba8a 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce4/bgpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce4/bgpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce4/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce4/snmpd.conf
index 36218d3538..36218d3538 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce4/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce4/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/ce4/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/ce4/zebra.conf
index 0866fa9759..0866fa9759 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/ce4/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/ce4/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r1/bgpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r1/bgpd.conf
index 098e55d0ed..098e55d0ed 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r1/bgpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r1/bgpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r1/isisd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r1/isisd.conf
index b5ca993da3..b5ca993da3 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r1/isisd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r1/isisd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r1/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r1/snmpd.conf
index c903c1ad2e..c903c1ad2e 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r1/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r1/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r1/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r1/zebra.conf
index 7228ae6bd2..7228ae6bd2 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r1/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r1/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r2/isisd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r2/isisd.conf
index 3dfa43831a..3dfa43831a 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r2/isisd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r2/isisd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r2/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r2/snmpd.conf
index 0cfebc7238..0cfebc7238 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r2/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r2/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r2/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r2/zebra.conf
index 9bc4331bae..9bc4331bae 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r2/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r2/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r3/isisd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r3/isisd.conf
index 578ebafad6..578ebafad6 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r3/isisd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r3/isisd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r3/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r3/snmpd.conf
index b9eb00ea52..b9eb00ea52 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r3/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r3/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r3/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r3/zebra.conf
index 4d2007e787..4d2007e787 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r3/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r3/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r4/bgpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r4/bgpd.conf
index 2a834c799e..2a834c799e 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r4/bgpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r4/bgpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r4/isisd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r4/isisd.conf
index 3e9e9af45f..3e9e9af45f 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r4/isisd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r4/isisd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r4/snmpd.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r4/snmpd.conf
index ec35f9f9c9..ec35f9f9c9 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r4/snmpd.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r4/snmpd.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/r4/zebra.conf b/tests/topotests/bgp_snmp_mplsl3vpn/r4/zebra.conf
index c48407c108..c48407c108 100644
--- a/tests/topotests/bgp-snmp-mplsl3vpn/r4/zebra.conf
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/r4/zebra.conf
diff --git a/tests/topotests/bgp-snmp-mplsl3vpn/test_bgp_snmp_mplsvpn.py b/tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py
index b830e16b9a..b830e16b9a 100755
--- a/tests/topotests/bgp-snmp-mplsl3vpn/test_bgp_snmp_mplsvpn.py
+++ b/tests/topotests/bgp_snmp_mplsl3vpn/test_bgp_snmp_mplsvpn.py
diff --git a/tests/topotests/example-topojson-test/__init__.py b/tests/topotests/bgp_tcp_mss/__init__.py
index e69de29bb2..e69de29bb2 100755..100644
--- a/tests/topotests/example-topojson-test/__init__.py
+++ b/tests/topotests/bgp_tcp_mss/__init__.py
diff --git a/tests/topotests/bgp_tcp_mss/r1/bgpd.conf b/tests/topotests/bgp_tcp_mss/r1/bgpd.conf
new file mode 100644
index 0000000000..07cfe2e2f1
--- /dev/null
+++ b/tests/topotests/bgp_tcp_mss/r1/bgpd.conf
@@ -0,0 +1,6 @@
+router bgp 65000
+ no bgp ebgp-requires-policy
+ neighbor 192.168.255.2 remote-as 65001
+ neighbor 192.168.255.2 timers 3 10
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_tcp_mss/r1/zebra.conf b/tests/topotests/bgp_tcp_mss/r1/zebra.conf
new file mode 100644
index 0000000000..6e9b0b4a7e
--- /dev/null
+++ b/tests/topotests/bgp_tcp_mss/r1/zebra.conf
@@ -0,0 +1,6 @@
+!
+interface r1-eth0
+ ip address 192.168.255.1/24
+!
+ip forwarding
+!
diff --git a/tests/topotests/bgp_tcp_mss/r2/bgpd.conf b/tests/topotests/bgp_tcp_mss/r2/bgpd.conf
new file mode 100644
index 0000000000..b2d945583c
--- /dev/null
+++ b/tests/topotests/bgp_tcp_mss/r2/bgpd.conf
@@ -0,0 +1,6 @@
+router bgp 65001
+ no bgp ebgp-requires-policy
+ neighbor 192.168.255.1 remote-as 65000
+ neighbor 192.168.255.1 timers 3 10
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_tcp_mss/r2/zebra.conf b/tests/topotests/bgp_tcp_mss/r2/zebra.conf
new file mode 100644
index 0000000000..6c14de583b
--- /dev/null
+++ b/tests/topotests/bgp_tcp_mss/r2/zebra.conf
@@ -0,0 +1,6 @@
+!
+interface r2-eth0
+ ip address 192.168.255.2/24
+!
+ip forwarding
+!
diff --git a/tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py b/tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
new file mode 100644
index 0000000000..7500c3b3ad
--- /dev/null
+++ b/tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+
+#
+# bgp_tcp_mss.py
+# Part of NetDEF Topology Tests
+#
+# Copyright (c) 2021 by
+# Abhinay Ramesh <rabhinay@vmware.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.
+#
+
+"""
+bgp_tcp_mss.py:
+
+Test if works the following commands:
+router bgp 65000
+ neighbor 192.168.255.2 tcp-mss 500
+
+Need to verify if the tcp-mss value is reflected in the TCP session.
+"""
+
+import os
+import sys
+import json
+import time
+import pytest
+import functools
+
+# add after imports, before defining classes or functions:
+pytestmark = [pytest.mark.bgpd]
+
+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
+
+
+class TemplateTopo(Topo):
+ def build(self, *_args, **_opts):
+ tgen = get_topogen(self)
+
+ for routern in range(1, 3):
+ tgen.add_router("r{}".format(routern))
+
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["r1"])
+ switch.add_link(tgen.gears["r2"])
+
+
+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_tcp_mss():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ router1 = tgen.gears["r1"]
+ router2 = tgen.gears["r2"]
+
+ def _bgp_converge(router):
+ output = json.loads(router.vtysh_cmd("show ip bgp neighbor 192.168.255.2 json"))
+ expected = {
+ "192.168.255.2": {
+ "bgpState": "Established",
+ "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 0}},
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ def _bgp_conf_tcp_mss(router, as_num, neigh):
+ router.vtysh_cmd(
+ """configure terminal
+ router bgp {0}
+ neighbor {1} tcp-mss 500""".format(
+ as_num, neigh
+ )
+ )
+
+ def _bgp_clear_session(router):
+ router.vtysh_cmd("clear bgp *")
+
+ def _bgp_check_neighbor_tcp_mss(router, neigh):
+ output = json.loads(router.vtysh_cmd("show bgp neighbor {} json".format(neigh)))
+ expected = {
+ "{}".format(neigh): {"bgpTcpMssConfigured": 500, "bgpTcpMssSynced": 488}
+ }
+ return topotest.json_cmp(output, expected)
+
+ logger.info("Check if neighbor sessions are up in {}".format(router1.name))
+ test_func = functools.partial(_bgp_converge, router1)
+ success, result = topotest.run_and_expect(test_func, None, count=15, wait=0.5)
+ assert result is None, 'Failed to see BGP convergence in "{}"'.format(router1.name)
+
+ logger.info("BGP neighbor session is up in {}".format(router1.name))
+
+ logger.info(
+ "Configure tcp-mss 500 on {} and reset the session".format(router1.name)
+ )
+ _bgp_conf_tcp_mss(router1, "65000", "192.168.255.2")
+ _bgp_clear_session(router1)
+
+ logger.info(
+ "Configure tcp-mss 500 on {} and reset the session".format(router2.name)
+ )
+ _bgp_conf_tcp_mss(router2, "65001", "192.168.255.1")
+ _bgp_clear_session(router2)
+
+ logger.info(
+ "Check if neighbor session is up after reset in {}".format(router1.name)
+ )
+ test_func = functools.partial(_bgp_converge, router1)
+ success, result = topotest.run_and_expect(test_func, None, count=15, wait=0.5)
+ assert result is None, 'Failed to see BGP convergence after reset in "{}"'.format(
+ router1.name
+ )
+
+ logger.info(
+ "Verify if TCP MSS value is synced with neighbor in {}".format(router1.name)
+ )
+ test_func = functools.partial(_bgp_check_neighbor_tcp_mss, router1, "192.168.255.2")
+ success, result = topotest.run_and_expect(test_func, None, count=3, wait=0.5)
+ assert (
+ result is None
+ ), 'Failed to sync TCP MSS value over BGP session in "{}"'.format(router1.name)
+ logger.info("TCP MSS value is synced with neighbor in {}".format(router1.name))
+
+ logger.info(
+ "Verify if TCP MSS value is synced with neighbor in {}".format(router2.name)
+ )
+ test_func = functools.partial(_bgp_check_neighbor_tcp_mss, router2, "192.168.255.1")
+ success, result = topotest.run_and_expect(test_func, None, count=3, wait=0.5)
+ assert (
+ result is None
+ ), 'Failed to sync TCP MSS value over BGP session in "{}"'.format(router2.name)
+ logger.info("TCP MSS value is synced with neighbor in {}".format(router2.name))
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp-vrf-route-leak-basic/r1/bgpd.conf b/tests/topotests/bgp_vrf_route_leak_basic/r1/bgpd.conf
index 03dfbf9322..03dfbf9322 100644
--- a/tests/topotests/bgp-vrf-route-leak-basic/r1/bgpd.conf
+++ b/tests/topotests/bgp_vrf_route_leak_basic/r1/bgpd.conf
diff --git a/tests/topotests/bgp-vrf-route-leak-basic/r1/zebra.conf b/tests/topotests/bgp_vrf_route_leak_basic/r1/zebra.conf
index 35038557df..35038557df 100644
--- a/tests/topotests/bgp-vrf-route-leak-basic/r1/zebra.conf
+++ b/tests/topotests/bgp_vrf_route_leak_basic/r1/zebra.conf
diff --git a/tests/topotests/bgp-vrf-route-leak-basic/setup_vrfs b/tests/topotests/bgp_vrf_route_leak_basic/setup_vrfs
index fb67953fe3..fb67953fe3 100644
--- a/tests/topotests/bgp-vrf-route-leak-basic/setup_vrfs
+++ b/tests/topotests/bgp_vrf_route_leak_basic/setup_vrfs
diff --git a/tests/topotests/bgp-vrf-route-leak-basic/test_bgp-vrf-route-leak-basic.py b/tests/topotests/bgp_vrf_route_leak_basic/test_bgp-vrf-route-leak-basic.py
index 71f64e9b70..71f64e9b70 100644
--- a/tests/topotests/bgp-vrf-route-leak-basic/test_bgp-vrf-route-leak-basic.py
+++ b/tests/topotests/bgp_vrf_route_leak_basic/test_bgp-vrf-route-leak-basic.py
diff --git a/tests/topotests/eigrp-topo1/r1/eigrpd.conf b/tests/topotests/eigrp_topo1/r1/eigrpd.conf
index 6c800abd9b..6c800abd9b 100644
--- a/tests/topotests/eigrp-topo1/r1/eigrpd.conf
+++ b/tests/topotests/eigrp_topo1/r1/eigrpd.conf
diff --git a/tests/topotests/eigrp-topo1/r1/show_ip_eigrp.json b/tests/topotests/eigrp_topo1/r1/show_ip_eigrp.json
index be0fdcfed9..be0fdcfed9 100644
--- a/tests/topotests/eigrp-topo1/r1/show_ip_eigrp.json
+++ b/tests/topotests/eigrp_topo1/r1/show_ip_eigrp.json
diff --git a/tests/topotests/eigrp-topo1/r1/show_ip_eigrp.ref b/tests/topotests/eigrp_topo1/r1/show_ip_eigrp.ref
index a2d7b3307d..a2d7b3307d 100644
--- a/tests/topotests/eigrp-topo1/r1/show_ip_eigrp.ref
+++ b/tests/topotests/eigrp_topo1/r1/show_ip_eigrp.ref
diff --git a/tests/topotests/eigrp-topo1/r1/show_ip_route.json_ref b/tests/topotests/eigrp_topo1/r1/show_ip_route.json_ref
index 26fa7ca415..26fa7ca415 100644
--- a/tests/topotests/eigrp-topo1/r1/show_ip_route.json_ref
+++ b/tests/topotests/eigrp_topo1/r1/show_ip_route.json_ref
diff --git a/tests/topotests/eigrp-topo1/r1/zebra.conf b/tests/topotests/eigrp_topo1/r1/zebra.conf
index 56ae4a66f4..56ae4a66f4 100644
--- a/tests/topotests/eigrp-topo1/r1/zebra.conf
+++ b/tests/topotests/eigrp_topo1/r1/zebra.conf
diff --git a/tests/topotests/eigrp-topo1/r2/eigrpd.conf b/tests/topotests/eigrp_topo1/r2/eigrpd.conf
index 56c747d97c..56c747d97c 100644
--- a/tests/topotests/eigrp-topo1/r2/eigrpd.conf
+++ b/tests/topotests/eigrp_topo1/r2/eigrpd.conf
diff --git a/tests/topotests/eigrp-topo1/r2/show_ip_eigrp.json b/tests/topotests/eigrp_topo1/r2/show_ip_eigrp.json
index ae9f441a38..ae9f441a38 100644
--- a/tests/topotests/eigrp-topo1/r2/show_ip_eigrp.json
+++ b/tests/topotests/eigrp_topo1/r2/show_ip_eigrp.json
diff --git a/tests/topotests/eigrp-topo1/r2/show_ip_eigrp.ref b/tests/topotests/eigrp_topo1/r2/show_ip_eigrp.ref
index cce49cda07..cce49cda07 100644
--- a/tests/topotests/eigrp-topo1/r2/show_ip_eigrp.ref
+++ b/tests/topotests/eigrp_topo1/r2/show_ip_eigrp.ref
diff --git a/tests/topotests/eigrp-topo1/r2/show_ip_route.json_ref b/tests/topotests/eigrp_topo1/r2/show_ip_route.json_ref
index 71c931b17a..71c931b17a 100644
--- a/tests/topotests/eigrp-topo1/r2/show_ip_route.json_ref
+++ b/tests/topotests/eigrp_topo1/r2/show_ip_route.json_ref
diff --git a/tests/topotests/eigrp-topo1/r2/zebra.conf b/tests/topotests/eigrp_topo1/r2/zebra.conf
index c440f3a350..c440f3a350 100644
--- a/tests/topotests/eigrp-topo1/r2/zebra.conf
+++ b/tests/topotests/eigrp_topo1/r2/zebra.conf
diff --git a/tests/topotests/eigrp-topo1/r3/eigrpd.conf b/tests/topotests/eigrp_topo1/r3/eigrpd.conf
index 53ad1bb6a1..53ad1bb6a1 100644
--- a/tests/topotests/eigrp-topo1/r3/eigrpd.conf
+++ b/tests/topotests/eigrp_topo1/r3/eigrpd.conf
diff --git a/tests/topotests/eigrp-topo1/r3/show_ip_eigrp.json b/tests/topotests/eigrp_topo1/r3/show_ip_eigrp.json
index 83db66c8c8..83db66c8c8 100644
--- a/tests/topotests/eigrp-topo1/r3/show_ip_eigrp.json
+++ b/tests/topotests/eigrp_topo1/r3/show_ip_eigrp.json
diff --git a/tests/topotests/eigrp-topo1/r3/show_ip_eigrp.ref b/tests/topotests/eigrp_topo1/r3/show_ip_eigrp.ref
index 70f3d3f98b..70f3d3f98b 100644
--- a/tests/topotests/eigrp-topo1/r3/show_ip_eigrp.ref
+++ b/tests/topotests/eigrp_topo1/r3/show_ip_eigrp.ref
diff --git a/tests/topotests/eigrp-topo1/r3/show_ip_route.json_ref b/tests/topotests/eigrp_topo1/r3/show_ip_route.json_ref
index 5e0b79d811..5e0b79d811 100644
--- a/tests/topotests/eigrp-topo1/r3/show_ip_route.json_ref
+++ b/tests/topotests/eigrp_topo1/r3/show_ip_route.json_ref
diff --git a/tests/topotests/eigrp-topo1/r3/zebra.conf b/tests/topotests/eigrp_topo1/r3/zebra.conf
index 7f145b4583..7f145b4583 100644
--- a/tests/topotests/eigrp-topo1/r3/zebra.conf
+++ b/tests/topotests/eigrp_topo1/r3/zebra.conf
diff --git a/tests/topotests/eigrp-topo1/test_eigrp_topo1.dot b/tests/topotests/eigrp_topo1/test_eigrp_topo1.dot
index ca3a0fe5b9..ca3a0fe5b9 100644
--- a/tests/topotests/eigrp-topo1/test_eigrp_topo1.dot
+++ b/tests/topotests/eigrp_topo1/test_eigrp_topo1.dot
diff --git a/tests/topotests/eigrp-topo1/test_eigrp_topo1.py b/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
index 6993bc53e7..6993bc53e7 100644
--- a/tests/topotests/eigrp-topo1/test_eigrp_topo1.py
+++ b/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
diff --git a/tests/topotests/evpn-pim-1/host1/bgpd.conf b/tests/topotests/evpn_pim_1/host1/bgpd.conf
index cdf4cb4feb..cdf4cb4feb 100644
--- a/tests/topotests/evpn-pim-1/host1/bgpd.conf
+++ b/tests/topotests/evpn_pim_1/host1/bgpd.conf
diff --git a/tests/topotests/evpn-pim-1/host1/pimd.conf b/tests/topotests/evpn_pim_1/host1/pimd.conf
index 63a44c1333..63a44c1333 100644
--- a/tests/topotests/evpn-pim-1/host1/pimd.conf
+++ b/tests/topotests/evpn_pim_1/host1/pimd.conf
diff --git a/tests/topotests/evpn-pim-1/host1/zebra.conf b/tests/topotests/evpn_pim_1/host1/zebra.conf
index 45ad031017..45ad031017 100644
--- a/tests/topotests/evpn-pim-1/host1/zebra.conf
+++ b/tests/topotests/evpn_pim_1/host1/zebra.conf
diff --git a/tests/topotests/evpn-pim-1/host2/bgpd.conf b/tests/topotests/evpn_pim_1/host2/bgpd.conf
index cdf4cb4feb..cdf4cb4feb 100644
--- a/tests/topotests/evpn-pim-1/host2/bgpd.conf
+++ b/tests/topotests/evpn_pim_1/host2/bgpd.conf
diff --git a/tests/topotests/evpn-pim-1/host2/pimd.conf b/tests/topotests/evpn_pim_1/host2/pimd.conf
index 63a44c1333..63a44c1333 100644
--- a/tests/topotests/evpn-pim-1/host2/pimd.conf
+++ b/tests/topotests/evpn_pim_1/host2/pimd.conf
diff --git a/tests/topotests/evpn-pim-1/host2/zebra.conf b/tests/topotests/evpn_pim_1/host2/zebra.conf
index bfae53017f..bfae53017f 100644
--- a/tests/topotests/evpn-pim-1/host2/zebra.conf
+++ b/tests/topotests/evpn_pim_1/host2/zebra.conf
diff --git a/tests/topotests/evpn-pim-1/leaf1/bgpd.conf b/tests/topotests/evpn_pim_1/leaf1/bgpd.conf
index 97fd8662f4..97fd8662f4 100644
--- a/tests/topotests/evpn-pim-1/leaf1/bgpd.conf
+++ b/tests/topotests/evpn_pim_1/leaf1/bgpd.conf
diff --git a/tests/topotests/evpn-pim-1/leaf1/pimd.conf b/tests/topotests/evpn_pim_1/leaf1/pimd.conf
index 293e252086..293e252086 100644
--- a/tests/topotests/evpn-pim-1/leaf1/pimd.conf
+++ b/tests/topotests/evpn_pim_1/leaf1/pimd.conf
diff --git a/tests/topotests/evpn-pim-1/leaf1/zebra.conf b/tests/topotests/evpn_pim_1/leaf1/zebra.conf
index 581cc6e7be..581cc6e7be 100644
--- a/tests/topotests/evpn-pim-1/leaf1/zebra.conf
+++ b/tests/topotests/evpn_pim_1/leaf1/zebra.conf
diff --git a/tests/topotests/evpn-pim-1/leaf2/bgpd.conf b/tests/topotests/evpn_pim_1/leaf2/bgpd.conf
index 91d9bd8c8b..91d9bd8c8b 100644
--- a/tests/topotests/evpn-pim-1/leaf2/bgpd.conf
+++ b/tests/topotests/evpn_pim_1/leaf2/bgpd.conf
diff --git a/tests/topotests/evpn-pim-1/leaf2/pimd.conf b/tests/topotests/evpn_pim_1/leaf2/pimd.conf
index 08d5a19a2a..08d5a19a2a 100644
--- a/tests/topotests/evpn-pim-1/leaf2/pimd.conf
+++ b/tests/topotests/evpn_pim_1/leaf2/pimd.conf
diff --git a/tests/topotests/evpn-pim-1/leaf2/zebra.conf b/tests/topotests/evpn_pim_1/leaf2/zebra.conf
index 1bcf8e1ded..1bcf8e1ded 100644
--- a/tests/topotests/evpn-pim-1/leaf2/zebra.conf
+++ b/tests/topotests/evpn_pim_1/leaf2/zebra.conf
diff --git a/tests/topotests/evpn-pim-1/spine/bgp.summ.json b/tests/topotests/evpn_pim_1/spine/bgp.summ.json
index 5ff4b096fd..5ff4b096fd 100644
--- a/tests/topotests/evpn-pim-1/spine/bgp.summ.json
+++ b/tests/topotests/evpn_pim_1/spine/bgp.summ.json
diff --git a/tests/topotests/evpn-pim-1/spine/bgpd.conf b/tests/topotests/evpn_pim_1/spine/bgpd.conf
index 81ab802f35..81ab802f35 100644
--- a/tests/topotests/evpn-pim-1/spine/bgpd.conf
+++ b/tests/topotests/evpn_pim_1/spine/bgpd.conf
diff --git a/tests/topotests/evpn-pim-1/spine/join-info.json b/tests/topotests/evpn_pim_1/spine/join-info.json
index 3d135fb964..3d135fb964 100644
--- a/tests/topotests/evpn-pim-1/spine/join-info.json
+++ b/tests/topotests/evpn_pim_1/spine/join-info.json
diff --git a/tests/topotests/evpn-pim-1/spine/pimd.conf b/tests/topotests/evpn_pim_1/spine/pimd.conf
index 56adda5cc4..56adda5cc4 100644
--- a/tests/topotests/evpn-pim-1/spine/pimd.conf
+++ b/tests/topotests/evpn_pim_1/spine/pimd.conf
diff --git a/tests/topotests/evpn-pim-1/spine/zebra.conf b/tests/topotests/evpn_pim_1/spine/zebra.conf
index 2cb719486e..2cb719486e 100644
--- a/tests/topotests/evpn-pim-1/spine/zebra.conf
+++ b/tests/topotests/evpn_pim_1/spine/zebra.conf
diff --git a/tests/topotests/evpn-pim-1/test_evpn_pim_topo1.py b/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
index 260a197aca..260a197aca 100644
--- a/tests/topotests/evpn-pim-1/test_evpn_pim_topo1.py
+++ b/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
diff --git a/tests/topotests/example-topojson-test/test_topo_json_multiple_links/__init__.py b/tests/topotests/example_test/__init__.py
index e69de29bb2..e69de29bb2 100755
--- a/tests/topotests/example-topojson-test/test_topo_json_multiple_links/__init__.py
+++ b/tests/topotests/example_test/__init__.py
diff --git a/tests/topotests/example-test/test_example.py b/tests/topotests/example_test/test_example.py
index 72eceee612..72eceee612 100755
--- a/tests/topotests/example-test/test_example.py
+++ b/tests/topotests/example_test/test_example.py
diff --git a/tests/topotests/example-test/test_template.dot b/tests/topotests/example_test/test_template.dot
index b5e12020ce..b5e12020ce 100644
--- a/tests/topotests/example-test/test_template.dot
+++ b/tests/topotests/example_test/test_template.dot
diff --git a/tests/topotests/example-test/test_template.jpg b/tests/topotests/example_test/test_template.jpg
index b01ef73f5a..b01ef73f5a 100644
--- a/tests/topotests/example-test/test_template.jpg
+++ b/tests/topotests/example_test/test_template.jpg
Binary files differ
diff --git a/tests/topotests/example-test/test_template.py b/tests/topotests/example_test/test_template.py
index 0265dbe796..0265dbe796 100644
--- a/tests/topotests/example-test/test_template.py
+++ b/tests/topotests/example_test/test_template.py
diff --git a/tests/topotests/example-topojson-test/test_topo_json_single_link/__init__.py b/tests/topotests/example_topojson_test/__init__.py
index e69de29bb2..e69de29bb2 100755
--- a/tests/topotests/example-topojson-test/test_topo_json_single_link/__init__.py
+++ b/tests/topotests/example_topojson_test/__init__.py
diff --git a/tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/__init__.py b/tests/topotests/example_topojson_test/test_topo_json_multiple_links/__init__.py
index e69de29bb2..e69de29bb2 100755
--- a/tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/__init__.py
+++ b/tests/topotests/example_topojson_test/test_topo_json_multiple_links/__init__.py
diff --git a/tests/topotests/example-topojson-test/test_topo_json_multiple_links/example_topojson_multiple_links.json b/tests/topotests/example_topojson_test/test_topo_json_multiple_links/example_topojson_multiple_links.json
index 3968348b1f..3968348b1f 100644
--- a/tests/topotests/example-topojson-test/test_topo_json_multiple_links/example_topojson_multiple_links.json
+++ b/tests/topotests/example_topojson_test/test_topo_json_multiple_links/example_topojson_multiple_links.json
diff --git a/tests/topotests/example-topojson-test/test_topo_json_multiple_links/test_example_topojson_multiple_links.py b/tests/topotests/example_topojson_test/test_topo_json_multiple_links/test_example_topojson_multiple_links.py
index 09ac9f2fa4..09ac9f2fa4 100755
--- a/tests/topotests/example-topojson-test/test_topo_json_multiple_links/test_example_topojson_multiple_links.py
+++ b/tests/topotests/example_topojson_test/test_topo_json_multiple_links/test_example_topojson_multiple_links.py
diff --git a/tests/topotests/isis-lfa-topo1/__init__.py b/tests/topotests/example_topojson_test/test_topo_json_single_link/__init__.py
index e69de29bb2..e69de29bb2 100644..100755
--- a/tests/topotests/isis-lfa-topo1/__init__.py
+++ b/tests/topotests/example_topojson_test/test_topo_json_single_link/__init__.py
diff --git a/tests/topotests/example-topojson-test/test_topo_json_single_link/example_topojson.json b/tests/topotests/example_topojson_test/test_topo_json_single_link/example_topojson.json
index 629d2d6d78..629d2d6d78 100644
--- a/tests/topotests/example-topojson-test/test_topo_json_single_link/example_topojson.json
+++ b/tests/topotests/example_topojson_test/test_topo_json_single_link/example_topojson.json
diff --git a/tests/topotests/example-topojson-test/test_topo_json_single_link/test_example_topojson.py b/tests/topotests/example_topojson_test/test_topo_json_single_link/test_example_topojson.py
index 26336d5de1..26336d5de1 100755
--- a/tests/topotests/example-topojson-test/test_topo_json_single_link/test_example_topojson.py
+++ b/tests/topotests/example_topojson_test/test_topo_json_single_link/test_example_topojson.py
diff --git a/tests/topotests/isis-lsp-bits-topo1/__init__.py b/tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/__init__.py
index e69de29bb2..e69de29bb2 100644..100755
--- a/tests/topotests/isis-lsp-bits-topo1/__init__.py
+++ b/tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/__init__.py
diff --git a/tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/example_topojson.json b/tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/example_topojson.json
index c76c6264be..c76c6264be 100644
--- a/tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/example_topojson.json
+++ b/tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/example_topojson.json
diff --git a/tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/test_example_topojson.py b/tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/test_example_topojson.py
index 012b05d376..012b05d376 100755
--- a/tests/topotests/example-topojson-test/test_topo_json_single_link_loopback/test_example_topojson.py
+++ b/tests/topotests/example_topojson_test/test_topo_json_single_link_loopback/test_example_topojson.py
diff --git a/tests/topotests/isis-topo1/r5/r5_topology.json b/tests/topotests/isis-topo1/r5/r5_topology.json
deleted file mode 100644
index 0224661411..0000000000
--- a/tests/topotests/isis-topo1/r5/r5_topology.json
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "1": {
- "level-1": {
- "ipv4": [
- {
- "vertex": "r5"
- },
- {
- "metric": "internal",
- "parent": "0",
- "type": "IP",
- "vertex": "10.0.10.0/24"
- },
- {
- "metric": "internal",
- "parent": "0",
- "type": "IP",
- "vertex": "10.0.11.0/24"
- },
- {
- "interface": "r5-eth0",
- "metric": "10",
- "next-hop": "r3",
- "parent": "r5(4)",
- "type": "TE-IS",
- "vertex": "r3"
- },
- {
- "interface": "r5-eth1",
- "metric": "10",
- "next-hop": "r4",
- "parent": "r5(4)",
- "type": "TE-IS",
- "vertex": "r4"
- },
- {
- "interface": "r3",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r5-eth0",
- "type": "IP",
- "vertex": "10.0.10.0/24"
- },
- {
- "interface": "r3",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r5-eth0",
- "type": "IP",
- "vertex": "10.0.20.0/24"
- },
- {
- "interface": "r3",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r5-eth0",
- "type": "IP",
- "vertex": "10.254.0.3/32"
- },
- {
- "interface": "r4",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r5-eth1",
- "type": "IP",
- "vertex": "10.0.11.0/24"
- },
- {
- "interface": "r4",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r5-eth1",
- "type": "IP",
- "vertex": "10.0.21.0/24"
- },
- {
- "interface": "r4",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r5-eth1",
- "type": "IP",
- "vertex": "10.254.0.4/32"
- }
- ],
- "ipv6": [
- {
- "vertex": "r5"
- },
- {
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
- "vertex": "2001:db8:2:1::/64"
- },
- {
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
- "vertex": "2001:db8:2:2::/64"
- },
- {
- "interface": "r5-eth0",
- "metric": "10",
- "next-hop": "r3",
- "parent": "r5(4)",
- "type": "TE-IS",
- "vertex": "r3"
- },
- {
- "interface": "r5-eth1",
- "metric": "10",
- "next-hop": "r4",
- "parent": "r5(4)",
- "type": "TE-IS",
- "vertex": "r4"
- },
- {
- "interface": "r3",
- "next-hop": "10",
- "parent": "r5-eth0",
- "type": "IP6",
- "vertex": "2001:db8:1:1::/64"
- },
- {
- "interface": "r3",
- "next-hop": "10",
- "parent": "r5-eth0",
- "type": "IP6",
- "vertex": "2001:db8:f::3/128"
- },
- {
- "interface": "r4",
- "next-hop": "10",
- "parent": "r5-eth1",
- "type": "IP6",
- "vertex": "2001:db8:1:2::/64"
- },
- {
- "interface": "r4",
- "next-hop": "10",
- "parent": "r5-eth1",
- "type": "IP6",
- "vertex": "2001:db8:f::4/128"
- }
- ]
- },
- "level-2": {
- "ipv4": [],
- "ipv6": []
- }
- }
-}
diff --git a/tests/topotests/isis-rlfa-topo1/__init__.py b/tests/topotests/isis_lfa_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-rlfa-topo1/__init__.py
+++ b/tests/topotests/isis_lfa_topo1/__init__.py
diff --git a/tests/topotests/isis-lfa-topo1/rt1/isisd.conf b/tests/topotests/isis_lfa_topo1/rt1/isisd.conf
index 2ad8c12538..2ad8c12538 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/isisd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt1/isisd.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/isis_lfa_topo1/rt1/step1/show_ipv6_route.ref
index 10c61d53e3..10c61d53e3 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lfa_topo1/rt1/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
index d8a7c5a9c4..d8a7c5a9c4 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step10/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step10/show_ipv6_route.ref.diff
index d626cdca02..d626cdca02 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step10/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step10/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step11/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step11/show_ipv6_route.ref.diff
index f7f99c276e..f7f99c276e 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step11/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step11/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step12/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step12/show_ipv6_route.ref.diff
index 3b767f1bf6..3b767f1bf6 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step12/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step12/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step13/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step13/show_ipv6_route.ref.diff
index 504af5ac58..504af5ac58 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step13/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step13/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step2/show_ipv6_route.ref.diff
index efc56d9835..efc56d9835 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step3/show_ipv6_route.ref.diff
index cafbe490b5..cafbe490b5 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step4/show_ipv6_route.ref.diff
index 47d8334a05..47d8334a05 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step5/show_ipv6_route.ref.diff
index b6a342df88..b6a342df88 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step6/show_ipv6_route.ref.diff
index fafa2999d1..fafa2999d1 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step7/show_ipv6_route.ref.diff
index 1803e2cf5c..1803e2cf5c 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step8/show_ipv6_route.ref.diff
index 306f725340..306f725340 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_lfa_topo1/rt1/step9/show_ipv6_route.ref.diff
index 3ffab46eeb..3ffab46eeb 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_lfa_topo1/rt1/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-lfa-topo1/rt1/zebra.conf b/tests/topotests/isis_lfa_topo1/rt1/zebra.conf
index 317f1031df..317f1031df 100644
--- a/tests/topotests/isis-lfa-topo1/rt1/zebra.conf
+++ b/tests/topotests/isis_lfa_topo1/rt1/zebra.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt2/isisd.conf b/tests/topotests/isis_lfa_topo1/rt2/isisd.conf
index 39ff2570d4..39ff2570d4 100644
--- a/tests/topotests/isis-lfa-topo1/rt2/isisd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt2/isisd.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt2/step1/show_ipv6_route.ref b/tests/topotests/isis_lfa_topo1/rt2/step1/show_ipv6_route.ref
index 036bfe1f4f..036bfe1f4f 100644
--- a/tests/topotests/isis-lfa-topo1/rt2/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lfa_topo1/rt2/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lfa_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
index 681c5222ad..681c5222ad 100644
--- a/tests/topotests/isis-lfa-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lfa_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt2/zebra.conf b/tests/topotests/isis_lfa_topo1/rt2/zebra.conf
index 9feaada791..9feaada791 100644
--- a/tests/topotests/isis-lfa-topo1/rt2/zebra.conf
+++ b/tests/topotests/isis_lfa_topo1/rt2/zebra.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt3/isisd.conf b/tests/topotests/isis_lfa_topo1/rt3/isisd.conf
index 8b0c7bd0dc..8b0c7bd0dc 100644
--- a/tests/topotests/isis-lfa-topo1/rt3/isisd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt3/isisd.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt3/step1/show_ipv6_route.ref b/tests/topotests/isis_lfa_topo1/rt3/step1/show_ipv6_route.ref
index a1aab400e4..a1aab400e4 100644
--- a/tests/topotests/isis-lfa-topo1/rt3/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lfa_topo1/rt3/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
index 1495e32284..1495e32284 100644
--- a/tests/topotests/isis-lfa-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt3/zebra.conf b/tests/topotests/isis_lfa_topo1/rt3/zebra.conf
index 48d732e72a..48d732e72a 100644
--- a/tests/topotests/isis-lfa-topo1/rt3/zebra.conf
+++ b/tests/topotests/isis_lfa_topo1/rt3/zebra.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt4/isisd.conf b/tests/topotests/isis_lfa_topo1/rt4/isisd.conf
index 86edee6ab1..86edee6ab1 100644
--- a/tests/topotests/isis-lfa-topo1/rt4/isisd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt4/isisd.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt4/step1/show_ipv6_route.ref b/tests/topotests/isis_lfa_topo1/rt4/step1/show_ipv6_route.ref
index 6878e2fac0..6878e2fac0 100644
--- a/tests/topotests/isis-lfa-topo1/rt4/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lfa_topo1/rt4/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lfa_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
index d8cd565b5b..d8cd565b5b 100644
--- a/tests/topotests/isis-lfa-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lfa_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt4/zebra.conf b/tests/topotests/isis_lfa_topo1/rt4/zebra.conf
index bff10860cc..bff10860cc 100644
--- a/tests/topotests/isis-lfa-topo1/rt4/zebra.conf
+++ b/tests/topotests/isis_lfa_topo1/rt4/zebra.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt5/isisd.conf b/tests/topotests/isis_lfa_topo1/rt5/isisd.conf
index 7a7cfe557d..7a7cfe557d 100644
--- a/tests/topotests/isis-lfa-topo1/rt5/isisd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt5/isisd.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt5/step1/show_ipv6_route.ref b/tests/topotests/isis_lfa_topo1/rt5/step1/show_ipv6_route.ref
index f8181c7769..f8181c7769 100644
--- a/tests/topotests/isis-lfa-topo1/rt5/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lfa_topo1/rt5/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lfa_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
index d8cd565b5b..d8cd565b5b 100644
--- a/tests/topotests/isis-lfa-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lfa_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt5/zebra.conf b/tests/topotests/isis_lfa_topo1/rt5/zebra.conf
index ee1e46c966..ee1e46c966 100644
--- a/tests/topotests/isis-lfa-topo1/rt5/zebra.conf
+++ b/tests/topotests/isis_lfa_topo1/rt5/zebra.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt6/isisd.conf b/tests/topotests/isis_lfa_topo1/rt6/isisd.conf
index 20cb7769a4..20cb7769a4 100644
--- a/tests/topotests/isis-lfa-topo1/rt6/isisd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt6/isisd.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt6/step1/show_ipv6_route.ref b/tests/topotests/isis_lfa_topo1/rt6/step1/show_ipv6_route.ref
index e5f3c77ac5..e5f3c77ac5 100644
--- a/tests/topotests/isis-lfa-topo1/rt6/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lfa_topo1/rt6/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lfa_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
index d8cd565b5b..d8cd565b5b 100644
--- a/tests/topotests/isis-lfa-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lfa_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt6/zebra.conf b/tests/topotests/isis_lfa_topo1/rt6/zebra.conf
index 4108078896..4108078896 100644
--- a/tests/topotests/isis-lfa-topo1/rt6/zebra.conf
+++ b/tests/topotests/isis_lfa_topo1/rt6/zebra.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt7/isisd.conf b/tests/topotests/isis_lfa_topo1/rt7/isisd.conf
index 713e6d39f4..713e6d39f4 100644
--- a/tests/topotests/isis-lfa-topo1/rt7/isisd.conf
+++ b/tests/topotests/isis_lfa_topo1/rt7/isisd.conf
diff --git a/tests/topotests/isis-lfa-topo1/rt7/step1/show_ipv6_route.ref b/tests/topotests/isis_lfa_topo1/rt7/step1/show_ipv6_route.ref
index 0dff15e3fd..0dff15e3fd 100644
--- a/tests/topotests/isis-lfa-topo1/rt7/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lfa_topo1/rt7/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt7/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lfa_topo1/rt7/step1/show_yang_interface_isis_adjacencies.ref
index d8a7c5a9c4..d8a7c5a9c4 100644
--- a/tests/topotests/isis-lfa-topo1/rt7/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lfa_topo1/rt7/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lfa-topo1/rt7/zebra.conf b/tests/topotests/isis_lfa_topo1/rt7/zebra.conf
index 353c9efa93..353c9efa93 100644
--- a/tests/topotests/isis-lfa-topo1/rt7/zebra.conf
+++ b/tests/topotests/isis_lfa_topo1/rt7/zebra.conf
diff --git a/tests/topotests/isis-lfa-topo1/test_isis_lfa_topo1.py b/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
index dcfcd11435..dcfcd11435 100755
--- a/tests/topotests/isis-lfa-topo1/test_isis_lfa_topo1.py
+++ b/tests/topotests/isis_lfa_topo1/test_isis_lfa_topo1.py
diff --git a/tests/topotests/isis-sr-topo1/__init__.py b/tests/topotests/isis_lsp_bits_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-sr-topo1/__init__.py
+++ b/tests/topotests/isis_lsp_bits_topo1/__init__.py
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/isisd.conf b/tests/topotests/isis_lsp_bits_topo1/rt1/isisd.conf
index 90764a0d0f..90764a0d0f 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/isisd.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/isisd.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_ip_route.ref
index 8557f4b010..8557f4b010 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_ipv6_route.ref
index fa76533756..fa76533756 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
index 26f0dffa7a..26f0dffa7a 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step2/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step2/show_ip_route.ref
index c826efdcfe..c826efdcfe 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step2/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step2/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step2/show_ipv6_route.ref
index a386b45dad..a386b45dad 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step3/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step3/show_ip_route.ref
index 2b281b74fb..2b281b74fb 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step3/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step3/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step3/show_ipv6_route.ref
index 4b920eda01..4b920eda01 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step4/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step4/show_ip_route.ref
index 8557f4b010..8557f4b010 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step4/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/step4/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt1/step4/show_ipv6_route.ref
index fa76533756..fa76533756 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt1/zebra.conf b/tests/topotests/isis_lsp_bits_topo1/rt1/zebra.conf
index 9d71d3005f..9d71d3005f 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt1/zebra.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt1/zebra.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt2/isisd.conf b/tests/topotests/isis_lsp_bits_topo1/rt2/isisd.conf
index 2bc4c4ad97..2bc4c4ad97 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt2/isisd.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt2/isisd.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_ip_route.ref
index d7e886ce86..d7e886ce86 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_ipv6_route.ref
index a92272f6d0..a92272f6d0 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
index c70b44e1c9..c70b44e1c9 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt2/zebra.conf b/tests/topotests/isis_lsp_bits_topo1/rt2/zebra.conf
index 234e10efa9..234e10efa9 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt2/zebra.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt2/zebra.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt3/isisd.conf b/tests/topotests/isis_lsp_bits_topo1/rt3/isisd.conf
index 9ad97109b5..9ad97109b5 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt3/isisd.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt3/isisd.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_ip_route.ref
index 55f0aedef5..55f0aedef5 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_ipv6_route.ref
index 5d6dfca76a..5d6dfca76a 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
index 6950086b1e..6950086b1e 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt3/zebra.conf b/tests/topotests/isis_lsp_bits_topo1/rt3/zebra.conf
index 9a0defd62b..9a0defd62b 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt3/zebra.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt3/zebra.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt4/isisd.conf b/tests/topotests/isis_lsp_bits_topo1/rt4/isisd.conf
index e85412a71d..e85412a71d 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt4/isisd.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt4/isisd.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_ip_route.ref
index 2cf5c40635..2cf5c40635 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_ipv6_route.ref
index cde7287943..cde7287943 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
index 233180ceb8..233180ceb8 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt4/zebra.conf b/tests/topotests/isis_lsp_bits_topo1/rt4/zebra.conf
index adcf433249..adcf433249 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt4/zebra.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt4/zebra.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt5/isisd.conf b/tests/topotests/isis_lsp_bits_topo1/rt5/isisd.conf
index 2cab0c88fc..2cab0c88fc 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt5/isisd.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt5/isisd.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_ip_route.ref
index 358d0a230c..358d0a230c 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_ipv6_route.ref
index 7586c73852..7586c73852 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
index f939a6abff..f939a6abff 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt5/zebra.conf b/tests/topotests/isis_lsp_bits_topo1/rt5/zebra.conf
index 0f10ce921f..0f10ce921f 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt5/zebra.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt5/zebra.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/isisd.conf b/tests/topotests/isis_lsp_bits_topo1/rt6/isisd.conf
index 249f945e0c..249f945e0c 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/isisd.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/isisd.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_ip_route.ref
index 40375792a4..40375792a4 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_ipv6_route.ref
index 278129f481..278129f481 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
index b4e8c23189..b4e8c23189 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step2/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step2/show_ip_route.ref
index 8083be4cfb..8083be4cfb 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step2/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step2/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step2/show_ipv6_route.ref
index 2e982e0c37..2e982e0c37 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step3/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step3/show_ip_route.ref
index 1ba8c8cda8..1ba8c8cda8 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step3/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step3/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step3/show_ipv6_route.ref
index 9b53a1d760..9b53a1d760 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step4/show_ip_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step4/show_ip_route.ref
index 40375792a4..40375792a4 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step4/show_ip_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/step4/show_ipv6_route.ref b/tests/topotests/isis_lsp_bits_topo1/rt6/step4/show_ipv6_route.ref
index 278129f481..278129f481 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-lsp-bits-topo1/rt6/zebra.conf b/tests/topotests/isis_lsp_bits_topo1/rt6/zebra.conf
index 6084010a93..6084010a93 100644
--- a/tests/topotests/isis-lsp-bits-topo1/rt6/zebra.conf
+++ b/tests/topotests/isis_lsp_bits_topo1/rt6/zebra.conf
diff --git a/tests/topotests/isis-lsp-bits-topo1/test_isis_lsp_bits_topo1.py b/tests/topotests/isis_lsp_bits_topo1/test_isis_lsp_bits_topo1.py
index 27dc1073c6..27dc1073c6 100755
--- a/tests/topotests/isis-lsp-bits-topo1/test_isis_lsp_bits_topo1.py
+++ b/tests/topotests/isis_lsp_bits_topo1/test_isis_lsp_bits_topo1.py
diff --git a/tests/topotests/isis-tilfa-topo1/__init__.py b/tests/topotests/isis_rlfa_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/__init__.py
+++ b/tests/topotests/isis_rlfa_topo1/__init__.py
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt1/isisd.conf
index a80f30dc7b..a80f30dc7b 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt1/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt1/ldpd.conf
index f60fdb9742..f60fdb9742 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt1/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/isis_rlfa_topo1/rt1/step1/show_ip_route.ref
index 680b31eb8d..680b31eb8d 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/isis_rlfa_topo1/rt1/step1/show_ipv6_route.ref
index c487d2740d..c487d2740d 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_rlfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
index 3fe2b798a0..3fe2b798a0 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step10/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step10/show_ip_route.ref.diff
index ef5707f14a..ef5707f14a 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step10/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step10/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step10/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step10/show_ipv6_route.ref.diff
index acd2ce003a..acd2ce003a 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step10/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step10/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step2/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step2/show_ip_route.ref.diff
index f7f31ac021..f7f31ac021 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step2/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step2/show_ipv6_route.ref.diff
index e980031ad7..e980031ad7 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step3/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step3/show_ip_route.ref.diff
index f3ed764f0b..f3ed764f0b 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step3/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step3/show_ipv6_route.ref.diff
index 57b0b1de1a..57b0b1de1a 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step4/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step4/show_ip_route.ref.diff
index 107a0ba2f7..107a0ba2f7 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step4/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step4/show_ipv6_route.ref.diff
index 9cf24082e1..9cf24082e1 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step5/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step5/show_ip_route.ref.diff
index 09469501f5..09469501f5 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step5/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step5/show_ipv6_route.ref.diff
index 70fb1a65c7..70fb1a65c7 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step6/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step6/show_ip_route.ref.diff
index 4e4a5692a4..4e4a5692a4 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step6/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step6/show_ipv6_route.ref.diff
index c9ebb1e3f5..c9ebb1e3f5 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step7/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step7/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step7/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step7/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step8/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step8/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step8/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step8/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step9/show_ip_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step9/show_ip_route.ref.diff
index 33eb6577bd..33eb6577bd 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step9/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_rlfa_topo1/rt1/step9/show_ipv6_route.ref.diff
index 7aaca3354e..7aaca3354e 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_rlfa_topo1/rt1/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-rlfa-topo1/rt1/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt1/zebra.conf
index 741fc2d02b..741fc2d02b 100644
--- a/tests/topotests/isis-rlfa-topo1/rt1/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt1/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt2/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt2/isisd.conf
index 7b4c6c50b9..7b4c6c50b9 100644
--- a/tests/topotests/isis-rlfa-topo1/rt2/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt2/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt2/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt2/ldpd.conf
index 0a815ef004..0a815ef004 100644
--- a/tests/topotests/isis-rlfa-topo1/rt2/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt2/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt2/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt2/zebra.conf
index 657c69bf28..657c69bf28 100644
--- a/tests/topotests/isis-rlfa-topo1/rt2/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt2/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt3/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt3/isisd.conf
index 17d58a9d15..17d58a9d15 100644
--- a/tests/topotests/isis-rlfa-topo1/rt3/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt3/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt3/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt3/ldpd.conf
index 40f1f5587a..40f1f5587a 100644
--- a/tests/topotests/isis-rlfa-topo1/rt3/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt3/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt3/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt3/zebra.conf
index 86f5d2871a..86f5d2871a 100644
--- a/tests/topotests/isis-rlfa-topo1/rt3/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt3/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt4/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt4/isisd.conf
index 1519fd4c16..1519fd4c16 100644
--- a/tests/topotests/isis-rlfa-topo1/rt4/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt4/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt4/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt4/ldpd.conf
index 569ecf733e..569ecf733e 100644
--- a/tests/topotests/isis-rlfa-topo1/rt4/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt4/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt4/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt4/zebra.conf
index 1dd09bf83b..1dd09bf83b 100644
--- a/tests/topotests/isis-rlfa-topo1/rt4/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt4/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt5/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt5/isisd.conf
index caf7477073..caf7477073 100644
--- a/tests/topotests/isis-rlfa-topo1/rt5/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt5/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt5/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt5/ldpd.conf
index 519c3d3628..519c3d3628 100644
--- a/tests/topotests/isis-rlfa-topo1/rt5/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt5/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt5/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt5/zebra.conf
index 7117a2a2e3..7117a2a2e3 100644
--- a/tests/topotests/isis-rlfa-topo1/rt5/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt5/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt6/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt6/isisd.conf
index cdf6267236..cdf6267236 100644
--- a/tests/topotests/isis-rlfa-topo1/rt6/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt6/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt6/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt6/ldpd.conf
index a5b7062bec..a5b7062bec 100644
--- a/tests/topotests/isis-rlfa-topo1/rt6/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt6/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt6/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt6/zebra.conf
index c6344870b7..c6344870b7 100644
--- a/tests/topotests/isis-rlfa-topo1/rt6/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt6/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt7/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt7/isisd.conf
index 8ab8fcb232..8ab8fcb232 100644
--- a/tests/topotests/isis-rlfa-topo1/rt7/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt7/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt7/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt7/ldpd.conf
index 26d428c4c6..26d428c4c6 100644
--- a/tests/topotests/isis-rlfa-topo1/rt7/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt7/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt7/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt7/zebra.conf
index 4c5e0f1126..4c5e0f1126 100644
--- a/tests/topotests/isis-rlfa-topo1/rt7/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt7/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt8/isisd.conf b/tests/topotests/isis_rlfa_topo1/rt8/isisd.conf
index abdc6a53a5..abdc6a53a5 100644
--- a/tests/topotests/isis-rlfa-topo1/rt8/isisd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt8/isisd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt8/ldpd.conf b/tests/topotests/isis_rlfa_topo1/rt8/ldpd.conf
index 1629f82de1..1629f82de1 100644
--- a/tests/topotests/isis-rlfa-topo1/rt8/ldpd.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt8/ldpd.conf
diff --git a/tests/topotests/isis-rlfa-topo1/rt8/zebra.conf b/tests/topotests/isis_rlfa_topo1/rt8/zebra.conf
index f3f10f649a..f3f10f649a 100644
--- a/tests/topotests/isis-rlfa-topo1/rt8/zebra.conf
+++ b/tests/topotests/isis_rlfa_topo1/rt8/zebra.conf
diff --git a/tests/topotests/isis-rlfa-topo1/test_isis_rlfa_topo1.py b/tests/topotests/isis_rlfa_topo1/test_isis_rlfa_topo1.py
index 9ad41c5934..9ad41c5934 100755
--- a/tests/topotests/isis-rlfa-topo1/test_isis_rlfa_topo1.py
+++ b/tests/topotests/isis_rlfa_topo1/test_isis_rlfa_topo1.py
diff --git a/tests/topotests/isis-snmp/ce3/zebra.conf b/tests/topotests/isis_snmp/ce3/zebra.conf
index c6a5824d15..c6a5824d15 100644
--- a/tests/topotests/isis-snmp/ce3/zebra.conf
+++ b/tests/topotests/isis_snmp/ce3/zebra.conf
diff --git a/tests/topotests/isis-snmp/r1/isisd.conf b/tests/topotests/isis_snmp/r1/isisd.conf
index dd32d3b8a5..dd32d3b8a5 100644
--- a/tests/topotests/isis-snmp/r1/isisd.conf
+++ b/tests/topotests/isis_snmp/r1/isisd.conf
diff --git a/tests/topotests/isis-snmp/r1/ldpd.conf b/tests/topotests/isis_snmp/r1/ldpd.conf
index 4ec296ca5a..4ec296ca5a 100644
--- a/tests/topotests/isis-snmp/r1/ldpd.conf
+++ b/tests/topotests/isis_snmp/r1/ldpd.conf
diff --git a/tests/topotests/isis-snmp/r1/show_ip_route.ref b/tests/topotests/isis_snmp/r1/show_ip_route.ref
index dc8f19dad0..dc8f19dad0 100644
--- a/tests/topotests/isis-snmp/r1/show_ip_route.ref
+++ b/tests/topotests/isis_snmp/r1/show_ip_route.ref
diff --git a/tests/topotests/isis-snmp/r1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_snmp/r1/show_yang_interface_isis_adjacencies.ref
index 390fda749e..390fda749e 100644
--- a/tests/topotests/isis-snmp/r1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_snmp/r1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-snmp/r1/snmpd.conf b/tests/topotests/isis_snmp/r1/snmpd.conf
index b37911da36..b37911da36 100644
--- a/tests/topotests/isis-snmp/r1/snmpd.conf
+++ b/tests/topotests/isis_snmp/r1/snmpd.conf
diff --git a/tests/topotests/isis-snmp/r1/zebra.conf b/tests/topotests/isis_snmp/r1/zebra.conf
index 6ac341e431..6ac341e431 100644
--- a/tests/topotests/isis-snmp/r1/zebra.conf
+++ b/tests/topotests/isis_snmp/r1/zebra.conf
diff --git a/tests/topotests/isis-snmp/r2/isisd.conf b/tests/topotests/isis_snmp/r2/isisd.conf
index 4403d8913b..4403d8913b 100644
--- a/tests/topotests/isis-snmp/r2/isisd.conf
+++ b/tests/topotests/isis_snmp/r2/isisd.conf
diff --git a/tests/topotests/isis-snmp/r2/ldpd.conf b/tests/topotests/isis_snmp/r2/ldpd.conf
index eb963fe41c..eb963fe41c 100644
--- a/tests/topotests/isis-snmp/r2/ldpd.conf
+++ b/tests/topotests/isis_snmp/r2/ldpd.conf
diff --git a/tests/topotests/isis-snmp/r2/show_ip_route.ref b/tests/topotests/isis_snmp/r2/show_ip_route.ref
index 2bcee96064..2bcee96064 100644
--- a/tests/topotests/isis-snmp/r2/show_ip_route.ref
+++ b/tests/topotests/isis_snmp/r2/show_ip_route.ref
diff --git a/tests/topotests/isis-snmp/r2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_snmp/r2/show_yang_interface_isis_adjacencies.ref
index 52550daf14..52550daf14 100644
--- a/tests/topotests/isis-snmp/r2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_snmp/r2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-snmp/r2/snmpd.conf b/tests/topotests/isis_snmp/r2/snmpd.conf
index 0f779b8b91..0f779b8b91 100644
--- a/tests/topotests/isis-snmp/r2/snmpd.conf
+++ b/tests/topotests/isis_snmp/r2/snmpd.conf
diff --git a/tests/topotests/isis-snmp/r2/zebra.conf b/tests/topotests/isis_snmp/r2/zebra.conf
index 4aa7440c33..4aa7440c33 100644
--- a/tests/topotests/isis-snmp/r2/zebra.conf
+++ b/tests/topotests/isis_snmp/r2/zebra.conf
diff --git a/tests/topotests/isis-snmp/r3/isisd.conf b/tests/topotests/isis_snmp/r3/isisd.conf
index e06fe8c1f9..e06fe8c1f9 100644
--- a/tests/topotests/isis-snmp/r3/isisd.conf
+++ b/tests/topotests/isis_snmp/r3/isisd.conf
diff --git a/tests/topotests/isis-snmp/r3/ldpd.conf b/tests/topotests/isis_snmp/r3/ldpd.conf
index 2935caf13b..2935caf13b 100644
--- a/tests/topotests/isis-snmp/r3/ldpd.conf
+++ b/tests/topotests/isis_snmp/r3/ldpd.conf
diff --git a/tests/topotests/isis-snmp/r3/show_ip_route.ref b/tests/topotests/isis_snmp/r3/show_ip_route.ref
index da46f1dfe2..da46f1dfe2 100644
--- a/tests/topotests/isis-snmp/r3/show_ip_route.ref
+++ b/tests/topotests/isis_snmp/r3/show_ip_route.ref
diff --git a/tests/topotests/isis-snmp/r3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_snmp/r3/show_yang_interface_isis_adjacencies.ref
index 3aafab4e2e..3aafab4e2e 100644
--- a/tests/topotests/isis-snmp/r3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_snmp/r3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-snmp/r3/snmpd.conf b/tests/topotests/isis_snmp/r3/snmpd.conf
index 3f3501a6fd..3f3501a6fd 100644
--- a/tests/topotests/isis-snmp/r3/snmpd.conf
+++ b/tests/topotests/isis_snmp/r3/snmpd.conf
diff --git a/tests/topotests/isis-snmp/r3/zebra.conf b/tests/topotests/isis_snmp/r3/zebra.conf
index 6b76114d4d..6b76114d4d 100644
--- a/tests/topotests/isis-snmp/r3/zebra.conf
+++ b/tests/topotests/isis_snmp/r3/zebra.conf
diff --git a/tests/topotests/isis-snmp/r4/isisd.conf b/tests/topotests/isis_snmp/r4/isisd.conf
index 1256141da9..1256141da9 100644
--- a/tests/topotests/isis-snmp/r4/isisd.conf
+++ b/tests/topotests/isis_snmp/r4/isisd.conf
diff --git a/tests/topotests/isis-snmp/r4/ldpd.conf b/tests/topotests/isis_snmp/r4/ldpd.conf
index b27952514b..b27952514b 100644
--- a/tests/topotests/isis-snmp/r4/ldpd.conf
+++ b/tests/topotests/isis_snmp/r4/ldpd.conf
diff --git a/tests/topotests/isis-snmp/r4/show_ip_route.ref b/tests/topotests/isis_snmp/r4/show_ip_route.ref
index da46f1dfe2..da46f1dfe2 100644
--- a/tests/topotests/isis-snmp/r4/show_ip_route.ref
+++ b/tests/topotests/isis_snmp/r4/show_ip_route.ref
diff --git a/tests/topotests/isis-snmp/r4/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_snmp/r4/show_yang_interface_isis_adjacencies.ref
index 86fcfea1a6..86fcfea1a6 100644
--- a/tests/topotests/isis-snmp/r4/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_snmp/r4/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-snmp/r4/snmpd.conf b/tests/topotests/isis_snmp/r4/snmpd.conf
index e5e336d888..e5e336d888 100644
--- a/tests/topotests/isis-snmp/r4/snmpd.conf
+++ b/tests/topotests/isis_snmp/r4/snmpd.conf
diff --git a/tests/topotests/isis-snmp/r4/zebra.conf b/tests/topotests/isis_snmp/r4/zebra.conf
index fa13601164..fa13601164 100644
--- a/tests/topotests/isis-snmp/r4/zebra.conf
+++ b/tests/topotests/isis_snmp/r4/zebra.conf
diff --git a/tests/topotests/isis-snmp/r5/isisd.conf b/tests/topotests/isis_snmp/r5/isisd.conf
index 58859041a9..58859041a9 100644
--- a/tests/topotests/isis-snmp/r5/isisd.conf
+++ b/tests/topotests/isis_snmp/r5/isisd.conf
diff --git a/tests/topotests/isis-snmp/r5/ldpd.conf b/tests/topotests/isis_snmp/r5/ldpd.conf
index f3ba867a9f..f3ba867a9f 100644
--- a/tests/topotests/isis-snmp/r5/ldpd.conf
+++ b/tests/topotests/isis_snmp/r5/ldpd.conf
diff --git a/tests/topotests/isis-snmp/r5/ldpdconf b/tests/topotests/isis_snmp/r5/ldpdconf
index fc700608b5..fc700608b5 100644
--- a/tests/topotests/isis-snmp/r5/ldpdconf
+++ b/tests/topotests/isis_snmp/r5/ldpdconf
diff --git a/tests/topotests/isis-snmp/r5/show_ip_route.ref b/tests/topotests/isis_snmp/r5/show_ip_route.ref
index da46f1dfe2..da46f1dfe2 100644
--- a/tests/topotests/isis-snmp/r5/show_ip_route.ref
+++ b/tests/topotests/isis_snmp/r5/show_ip_route.ref
diff --git a/tests/topotests/isis-snmp/r5/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_snmp/r5/show_yang_interface_isis_adjacencies.ref
index 994e8166ce..994e8166ce 100644
--- a/tests/topotests/isis-snmp/r5/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_snmp/r5/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-snmp/r5/snmpd.conf b/tests/topotests/isis_snmp/r5/snmpd.conf
index 5bebbdebd4..5bebbdebd4 100644
--- a/tests/topotests/isis-snmp/r5/snmpd.conf
+++ b/tests/topotests/isis_snmp/r5/snmpd.conf
diff --git a/tests/topotests/isis-snmp/r5/zebra.conf b/tests/topotests/isis_snmp/r5/zebra.conf
index 7230129f22..7230129f22 100644
--- a/tests/topotests/isis-snmp/r5/zebra.conf
+++ b/tests/topotests/isis_snmp/r5/zebra.conf
diff --git a/tests/topotests/isis-snmp/test_isis_snmp.dot b/tests/topotests/isis_snmp/test_isis_snmp.dot
index 6d8c893712..6d8c893712 100644
--- a/tests/topotests/isis-snmp/test_isis_snmp.dot
+++ b/tests/topotests/isis_snmp/test_isis_snmp.dot
diff --git a/tests/topotests/isis-snmp/test_isis_snmp.py b/tests/topotests/isis_snmp/test_isis_snmp.py
index 04e043847d..04e043847d 100755
--- a/tests/topotests/isis-snmp/test_isis_snmp.py
+++ b/tests/topotests/isis_snmp/test_isis_snmp.py
diff --git a/tests/topotests/isis-sr-te-topo1/dst/zebra.conf b/tests/topotests/isis_sr_te_topo1/dst/zebra.conf
index e873ac8a5c..e873ac8a5c 100644
--- a/tests/topotests/isis-sr-te-topo1/dst/zebra.conf
+++ b/tests/topotests/isis_sr_te_topo1/dst/zebra.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/bgpd.conf b/tests/topotests/isis_sr_te_topo1/rt1/bgpd.conf
index efc03701b5..efc03701b5 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/bgpd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt1/bgpd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/isisd.conf b/tests/topotests/isis_sr_te_topo1/rt1/isisd.conf
index 70ae1b07f5..70ae1b07f5 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/isisd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt1/isisd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/pathd.conf b/tests/topotests/isis_sr_te_topo1/rt1/pathd.conf
index 911971496e..911971496e 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/pathd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt1/pathd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step1/show_mpls_table_with_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt1/step1/show_mpls_table_with_candidate.ref
index d4b27d157d..d4b27d157d 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step1/show_mpls_table_with_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step1/show_mpls_table_with_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step1/show_mpls_table_without_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt1/step1/show_mpls_table_without_candidate.ref
index 5fe58d0824..5fe58d0824 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step1/show_mpls_table_without_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step1/show_mpls_table_without_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step2/show_operational_data.ref b/tests/topotests/isis_sr_te_topo1/rt1/step2/show_operational_data.ref
index 4ef8d946f2..4ef8d946f2 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step2/show_operational_data.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step2/show_operational_data.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step2/show_operational_data_with_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt1/step2/show_operational_data_with_candidate.ref
index 9b28f6a42b..9b28f6a42b 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step2/show_operational_data_with_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step2/show_operational_data_with_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step3/show_operational_data_with_single_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt1/step3/show_operational_data_with_single_candidate.ref
index 9b28f6a42b..9b28f6a42b 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step3/show_operational_data_with_single_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step3/show_operational_data_with_single_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step3/show_operational_data_with_two_candidates.ref b/tests/topotests/isis_sr_te_topo1/rt1/step3/show_operational_data_with_two_candidates.ref
index 249117198a..249117198a 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step3/show_operational_data_with_two_candidates.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step3/show_operational_data_with_two_candidates.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table.ref b/tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table.ref
index 21f71f1254..21f71f1254 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table_add_segment.ref b/tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table_add_segment.ref
index 3635c89efb..3635c89efb 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table_add_segment.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table_add_segment.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table_change_segment.ref b/tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table_change_segment.ref
index 5712d210d4..5712d210d4 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step4/show_mpls_table_change_segment.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step4/show_mpls_table_change_segment.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_ip_route_bgp_active_srte.ref b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_ip_route_bgp_active_srte.ref
index 5a76246e50..5a76246e50 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_ip_route_bgp_active_srte.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_ip_route_bgp_active_srte.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_ip_route_bgp_inactive_srte.ref b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_ip_route_bgp_inactive_srte.ref
index 09d5958305..09d5958305 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_ip_route_bgp_inactive_srte.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_ip_route_bgp_inactive_srte.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_operational_data_active.ref b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_operational_data_active.ref
index e26039b835..e26039b835 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_operational_data_active.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_operational_data_active.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_operational_data_inactive.ref b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_operational_data_inactive.ref
index 01505c0318..01505c0318 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/step5/show_operational_data_inactive.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt1/step5/show_operational_data_inactive.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt1/zebra.conf b/tests/topotests/isis_sr_te_topo1/rt1/zebra.conf
index 9d71d3005f..9d71d3005f 100644
--- a/tests/topotests/isis-sr-te-topo1/rt1/zebra.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt1/zebra.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt2/isisd.conf b/tests/topotests/isis_sr_te_topo1/rt2/isisd.conf
index 733f26bc62..733f26bc62 100644
--- a/tests/topotests/isis-sr-te-topo1/rt2/isisd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt2/isisd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt2/zebra.conf b/tests/topotests/isis_sr_te_topo1/rt2/zebra.conf
index dcb0686dc2..dcb0686dc2 100644
--- a/tests/topotests/isis-sr-te-topo1/rt2/zebra.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt2/zebra.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt3/isisd.conf b/tests/topotests/isis_sr_te_topo1/rt3/isisd.conf
index 2395906cbf..2395906cbf 100644
--- a/tests/topotests/isis-sr-te-topo1/rt3/isisd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt3/isisd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt3/zebra.conf b/tests/topotests/isis_sr_te_topo1/rt3/zebra.conf
index 3254529386..3254529386 100644
--- a/tests/topotests/isis-sr-te-topo1/rt3/zebra.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt3/zebra.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt4/isisd.conf b/tests/topotests/isis_sr_te_topo1/rt4/isisd.conf
index 07a7867cbb..07a7867cbb 100644
--- a/tests/topotests/isis-sr-te-topo1/rt4/isisd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt4/isisd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt4/zebra.conf b/tests/topotests/isis_sr_te_topo1/rt4/zebra.conf
index 4945897e9d..4945897e9d 100644
--- a/tests/topotests/isis-sr-te-topo1/rt4/zebra.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt4/zebra.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt5/isisd.conf b/tests/topotests/isis_sr_te_topo1/rt5/isisd.conf
index b0fcdede07..b0fcdede07 100644
--- a/tests/topotests/isis-sr-te-topo1/rt5/isisd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt5/isisd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt5/zebra.conf b/tests/topotests/isis_sr_te_topo1/rt5/zebra.conf
index 4cfea1a59f..4cfea1a59f 100644
--- a/tests/topotests/isis-sr-te-topo1/rt5/zebra.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt5/zebra.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/bgpd.conf b/tests/topotests/isis_sr_te_topo1/rt6/bgpd.conf
index e72ee52fce..e72ee52fce 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/bgpd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt6/bgpd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/isisd.conf b/tests/topotests/isis_sr_te_topo1/rt6/isisd.conf
index 3be24ad24c..3be24ad24c 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/isisd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt6/isisd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/pathd.conf b/tests/topotests/isis_sr_te_topo1/rt6/pathd.conf
index 3bada7147c..3bada7147c 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/pathd.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt6/pathd.conf
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/step1/show_mpls_table_with_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt6/step1/show_mpls_table_with_candidate.ref
index 2bb000346f..2bb000346f 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/step1/show_mpls_table_with_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt6/step1/show_mpls_table_with_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/step1/show_mpls_table_without_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt6/step1/show_mpls_table_without_candidate.ref
index 348f7761eb..348f7761eb 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/step1/show_mpls_table_without_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt6/step1/show_mpls_table_without_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/step2/show_operational_data.ref b/tests/topotests/isis_sr_te_topo1/rt6/step2/show_operational_data.ref
index 241c80bdd7..241c80bdd7 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/step2/show_operational_data.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt6/step2/show_operational_data.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/step2/show_operational_data_with_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt6/step2/show_operational_data_with_candidate.ref
index 20ea69e386..20ea69e386 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/step2/show_operational_data_with_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt6/step2/show_operational_data_with_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/step3/show_operational_data_with_single_candidate.ref b/tests/topotests/isis_sr_te_topo1/rt6/step3/show_operational_data_with_single_candidate.ref
index 20ea69e386..20ea69e386 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/step3/show_operational_data_with_single_candidate.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt6/step3/show_operational_data_with_single_candidate.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/step3/show_operational_data_with_two_candidates.ref b/tests/topotests/isis_sr_te_topo1/rt6/step3/show_operational_data_with_two_candidates.ref
index 10cafe9091..10cafe9091 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/step3/show_operational_data_with_two_candidates.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt6/step3/show_operational_data_with_two_candidates.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/step4/show_mpls_table.ref b/tests/topotests/isis_sr_te_topo1/rt6/step4/show_mpls_table.ref
index 95bf995e2e..95bf995e2e 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_te_topo1/rt6/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-te-topo1/rt6/zebra.conf b/tests/topotests/isis_sr_te_topo1/rt6/zebra.conf
index 32c6e6c4e0..32c6e6c4e0 100644
--- a/tests/topotests/isis-sr-te-topo1/rt6/zebra.conf
+++ b/tests/topotests/isis_sr_te_topo1/rt6/zebra.conf
diff --git a/tests/topotests/isis-sr-te-topo1/test_isis_sr_te_topo1.py b/tests/topotests/isis_sr_te_topo1/test_isis_sr_te_topo1.py
index 6bbb570267..6bbb570267 100755
--- a/tests/topotests/isis-sr-te-topo1/test_isis_sr_te_topo1.py
+++ b/tests/topotests/isis_sr_te_topo1/test_isis_sr_te_topo1.py
diff --git a/tests/topotests/isis-topo1-vrf/__init__.py b/tests/topotests/isis_sr_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-topo1-vrf/__init__.py
+++ b/tests/topotests/isis_sr_topo1/__init__.py
diff --git a/tests/topotests/isis-sr-topo1/rt1/isisd.conf b/tests/topotests/isis_sr_topo1/rt1/isisd.conf
index f441527597..f441527597 100644
--- a/tests/topotests/isis-sr-topo1/rt1/isisd.conf
+++ b/tests/topotests/isis_sr_topo1/rt1/isisd.conf
diff --git a/tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step1/show_ip_route.ref
index 53bf8cb445..53bf8cb445 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step1/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step1/show_mpls_table.ref
index 5b1950d8cb..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
index 26f0dffa7a..26f0dffa7a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step10/show_ip_route.ref
index c712538c00..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step10/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step10/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step10/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step10/show_mpls_table.ref
index 7e6c72627a..7e6c72627a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step10/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step10/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step10/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step10/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step10/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step2/show_ip_route.ref
index c712538c00..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step2/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step2/show_mpls_table.ref
index 5b1950d8cb..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step2/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step2/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step3/show_ip_route.ref
index 71f9ebddfb..71f9ebddfb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step3/show_ipv6_route.ref
index 304c0a475b..304c0a475b 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step3/show_mpls_table.ref
index 94b3cb6d1a..94b3cb6d1a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step3/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step3/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step4/show_ip_route.ref
index c712538c00..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step4/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step4/show_mpls_table.ref
index 6500a47fbf..6500a47fbf 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step4/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step4/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step4/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step4/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step5/show_ip_route.ref
index 16d9358468..16d9358468 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step5/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step5/show_ipv6_route.ref
index f2093a3fc0..f2093a3fc0 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step5/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step5/show_mpls_table.ref
index 94b3cb6d1a..94b3cb6d1a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step5/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step5/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step5/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step5/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step5/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step6/show_ip_route.ref
index c712538c00..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step6/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step6/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step6/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step6/show_mpls_table.ref
index 5b1950d8cb..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step6/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step6/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step6/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step6/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step6/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step7/show_ip_route.ref
index c712538c00..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step7/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step7/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step7/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step7/show_mpls_table.ref
index 5b1950d8cb..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step7/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step7/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step7/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step7/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step7/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step8/show_ip_route.ref
index c712538c00..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step8/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step8/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step8/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step8/show_mpls_table.ref
index 5b1950d8cb..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step8/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step8/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step8/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step8/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step8/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt1/step9/show_ip_route.ref
index c712538c00..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step9/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt1/step9/show_ipv6_route.ref
index 0b39584717..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step9/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt1/step9/show_mpls_table.ref
index 7e6c72627a..7e6c72627a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step9/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/step9/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt1/step9/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt1/step9/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt1/step9/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt1/zebra.conf b/tests/topotests/isis_sr_topo1/rt1/zebra.conf
index 9d71d3005f..9d71d3005f 100644
--- a/tests/topotests/isis-sr-topo1/rt1/zebra.conf
+++ b/tests/topotests/isis_sr_topo1/rt1/zebra.conf
diff --git a/tests/topotests/isis-sr-topo1/rt2/isisd.conf b/tests/topotests/isis_sr_topo1/rt2/isisd.conf
index 796b6ed32c..796b6ed32c 100644
--- a/tests/topotests/isis-sr-topo1/rt2/isisd.conf
+++ b/tests/topotests/isis_sr_topo1/rt2/isisd.conf
diff --git a/tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step1/show_ip_route.ref
index 109b94f7a1..109b94f7a1 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step1/show_ipv6_route.ref
index eae700ee47..eae700ee47 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step1/show_mpls_table.ref
index a32cd1d1bf..a32cd1d1bf 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
index 07f43e5999..07f43e5999 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step10/show_ip_route.ref
index b7d52cecca..b7d52cecca 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step10/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step10/show_ipv6_route.ref
index 355436cbfc..355436cbfc 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step10/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step10/show_mpls_table.ref
index 4cbdb9fda9..4cbdb9fda9 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step10/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step10/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step10/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step10/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step10/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step2/show_ip_route.ref
index 159392f7f7..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step2/show_ipv6_route.ref
index e9f63849d8..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step2/show_mpls_table.ref
index 0692553808..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step2/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step2/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step3/show_ip_route.ref
index 16f49ffe46..16f49ffe46 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step3/show_ipv6_route.ref
index bde83c30d0..bde83c30d0 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step3/show_mpls_table.ref
index cbb0d5c695..cbb0d5c695 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step3/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step3/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step4/show_ip_route.ref
index 159392f7f7..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step4/show_ipv6_route.ref
index e9f63849d8..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step4/show_mpls_table.ref
index 0692553808..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step4/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step4/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step4/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step4/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step5/show_ip_route.ref
index fbfcce10aa..fbfcce10aa 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step5/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step5/show_ipv6_route.ref
index f747a96518..f747a96518 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step5/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step5/show_mpls_table.ref
index cbb0d5c695..cbb0d5c695 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step5/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step5/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step5/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step5/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step5/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step6/show_ip_route.ref
index 159392f7f7..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step6/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step6/show_ipv6_route.ref
index e9f63849d8..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step6/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step6/show_mpls_table.ref
index 0692553808..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step6/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step6/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step6/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step6/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step6/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step7/show_ip_route.ref
index 09ab6d4f8a..09ab6d4f8a 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step7/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step7/show_ipv6_route.ref
index 851275fbf7..851275fbf7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step7/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step7/show_mpls_table.ref
index 87946aa7b9..87946aa7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step7/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step7/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step7/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step7/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step7/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step8/show_ip_route.ref
index 159392f7f7..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step8/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step8/show_ipv6_route.ref
index e9f63849d8..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step8/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step8/show_mpls_table.ref
index 0692553808..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step8/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step8/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step8/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step8/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step8/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt2/step9/show_ip_route.ref
index fc82ada7e3..fc82ada7e3 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step9/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt2/step9/show_ipv6_route.ref
index 355436cbfc..355436cbfc 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step9/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt2/step9/show_mpls_table.ref
index 05201724f4..05201724f4 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step9/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/step9/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt2/step9/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt2/step9/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt2/step9/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt2/zebra.conf b/tests/topotests/isis_sr_topo1/rt2/zebra.conf
index dcb0686dc2..dcb0686dc2 100644
--- a/tests/topotests/isis-sr-topo1/rt2/zebra.conf
+++ b/tests/topotests/isis_sr_topo1/rt2/zebra.conf
diff --git a/tests/topotests/isis-sr-topo1/rt3/isisd.conf b/tests/topotests/isis_sr_topo1/rt3/isisd.conf
index cc2aa1782b..cc2aa1782b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/isisd.conf
+++ b/tests/topotests/isis_sr_topo1/rt3/isisd.conf
diff --git a/tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step1/show_ip_route.ref
index 241f768859..241f768859 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step1/show_ipv6_route.ref
index dd78c7d318..dd78c7d318 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step1/show_mpls_table.ref
index 8c6fca7b57..8c6fca7b57 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
index 7fa6f5cf47..7fa6f5cf47 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step10/show_ip_route.ref
index 40a98ab7c6..40a98ab7c6 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step10/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step10/show_ipv6_route.ref
index 1fb50407bd..1fb50407bd 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step10/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step10/show_mpls_table.ref
index 44ddc4bc14..44ddc4bc14 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step10/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step10/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step10/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step10/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step10/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step2/show_ip_route.ref
index 55d8213c4e..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step2/show_ipv6_route.ref
index 4f6441e7b9..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step2/show_mpls_table.ref
index db8253f83d..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step2/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step2/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step3/show_ip_route.ref
index ed5cef8a5b..ed5cef8a5b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step3/show_ipv6_route.ref
index b33058c3bd..b33058c3bd 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step3/show_mpls_table.ref
index 70cccc0f0b..70cccc0f0b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step3/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step3/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step4/show_ip_route.ref
index 55d8213c4e..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step4/show_ipv6_route.ref
index 4f6441e7b9..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step4/show_mpls_table.ref
index db8253f83d..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step4/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step4/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step4/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step4/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step5/show_ip_route.ref
index 3adcdce58c..3adcdce58c 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step5/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step5/show_ipv6_route.ref
index 863e26c30e..863e26c30e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step5/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step5/show_mpls_table.ref
index 70cccc0f0b..70cccc0f0b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step5/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step5/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step5/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step5/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step5/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step6/show_ip_route.ref
index 55d8213c4e..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step6/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step6/show_ipv6_route.ref
index 4f6441e7b9..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step6/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step6/show_mpls_table.ref
index db8253f83d..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step6/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step6/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step6/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step6/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step6/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step7/show_ip_route.ref
index 7f6e05f08b..7f6e05f08b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step7/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step7/show_ipv6_route.ref
index f4770e2ac9..f4770e2ac9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step7/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step7/show_mpls_table.ref
index cb49505f55..cb49505f55 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step7/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step7/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step7/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step7/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step7/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step8/show_ip_route.ref
index 55d8213c4e..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step8/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step8/show_ipv6_route.ref
index 4f6441e7b9..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step8/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step8/show_mpls_table.ref
index db8253f83d..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step8/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step8/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step8/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step8/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step8/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt3/step9/show_ip_route.ref
index 40a98ab7c6..40a98ab7c6 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step9/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt3/step9/show_ipv6_route.ref
index 1fb50407bd..1fb50407bd 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step9/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt3/step9/show_mpls_table.ref
index 44ddc4bc14..44ddc4bc14 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step9/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/step9/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt3/step9/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt3/step9/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt3/step9/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt3/zebra.conf b/tests/topotests/isis_sr_topo1/rt3/zebra.conf
index 3254529386..3254529386 100644
--- a/tests/topotests/isis-sr-topo1/rt3/zebra.conf
+++ b/tests/topotests/isis_sr_topo1/rt3/zebra.conf
diff --git a/tests/topotests/isis-sr-topo1/rt4/isisd.conf b/tests/topotests/isis_sr_topo1/rt4/isisd.conf
index 3852b1962b..3852b1962b 100644
--- a/tests/topotests/isis-sr-topo1/rt4/isisd.conf
+++ b/tests/topotests/isis_sr_topo1/rt4/isisd.conf
diff --git a/tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step1/show_ip_route.ref
index 493f3ab60d..493f3ab60d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step1/show_ipv6_route.ref
index 217a4a5379..217a4a5379 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step1/show_mpls_table.ref
index 307403964a..307403964a 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
index 2eb64b6fc9..2eb64b6fc9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step10/show_ip_route.ref
index 11bc948319..11bc948319 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step10/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step10/show_ipv6_route.ref
index 844f6becf9..844f6becf9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step10/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step10/show_mpls_table.ref
index f275056070..f275056070 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step10/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step10/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step10/show_yang_interface_isis_adjacencies.ref
index 761cb2fd2f..761cb2fd2f 120000
--- a/tests/topotests/isis-sr-topo1/rt4/step10/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step10/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step2/show_ip_route.ref
index c2fbdeb30e..c2fbdeb30e 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step2/show_ipv6_route.ref
index 7f823b6896..7f823b6896 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step2/show_mpls_table.ref
index 8dd37880d0..8dd37880d0 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step2/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step2/show_yang_interface_isis_adjacencies.ref
index be1e00b8a2..be1e00b8a2 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step3/show_ip_route.ref
index f2a54bf958..f2a54bf958 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step3/show_ipv6_route.ref
index 34afda1966..34afda1966 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step3/show_mpls_table.ref
index 65336d88d1..65336d88d1 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step3/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step3/show_yang_interface_isis_adjacencies.ref
index bcade1ca90..bcade1ca90 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step4/show_ip_route.ref
index e930657f8d..e930657f8d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step4/show_ipv6_route.ref
index ca61c6e81f..ca61c6e81f 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step4/show_mpls_table.ref
index eb95fa94c9..eb95fa94c9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step4/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step4/show_yang_interface_isis_adjacencies.ref
index 761cb2fd2f..761cb2fd2f 120000
--- a/tests/topotests/isis-sr-topo1/rt4/step4/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step4/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step5/show_ip_route.ref
index 8b0ddd4ee5..8b0ddd4ee5 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step5/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step5/show_ipv6_route.ref
index 94e1fac450..94e1fac450 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step5/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step5/show_mpls_table.ref
index cd47cfa3a7..cd47cfa3a7 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step5/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step5/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step5/show_yang_interface_isis_adjacencies.ref
index 761cb2fd2f..761cb2fd2f 120000
--- a/tests/topotests/isis-sr-topo1/rt4/step5/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step5/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step6/show_ip_route.ref
index e930657f8d..e930657f8d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step6/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step6/show_ipv6_route.ref
index ca61c6e81f..ca61c6e81f 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step6/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step6/show_mpls_table.ref
index eb95fa94c9..eb95fa94c9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step6/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step6/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step6/show_yang_interface_isis_adjacencies.ref
index 761cb2fd2f..761cb2fd2f 120000
--- a/tests/topotests/isis-sr-topo1/rt4/step6/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step6/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step7/show_ip_route.ref
index f5ac45504e..f5ac45504e 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step7/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step7/show_ipv6_route.ref
index 1599c88122..1599c88122 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step7/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step7/show_mpls_table.ref
index 19b0beb164..19b0beb164 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step7/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step7/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step7/show_yang_interface_isis_adjacencies.ref
index 761cb2fd2f..761cb2fd2f 120000
--- a/tests/topotests/isis-sr-topo1/rt4/step7/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step7/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step8/show_ip_route.ref
index e930657f8d..e930657f8d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step8/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step8/show_ipv6_route.ref
index ca61c6e81f..ca61c6e81f 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step8/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step8/show_mpls_table.ref
index eb95fa94c9..eb95fa94c9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step8/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step8/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step8/show_yang_interface_isis_adjacencies.ref
index 761cb2fd2f..761cb2fd2f 120000
--- a/tests/topotests/isis-sr-topo1/rt4/step8/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step8/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt4/step9/show_ip_route.ref
index a2b939a418..a2b939a418 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step9/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt4/step9/show_ipv6_route.ref
index 844f6becf9..844f6becf9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step9/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt4/step9/show_mpls_table.ref
index 5805bf3556..5805bf3556 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step9/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/step9/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt4/step9/show_yang_interface_isis_adjacencies.ref
index 761cb2fd2f..761cb2fd2f 120000
--- a/tests/topotests/isis-sr-topo1/rt4/step9/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt4/step9/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt4/zebra.conf b/tests/topotests/isis_sr_topo1/rt4/zebra.conf
index 5889901c56..5889901c56 100644
--- a/tests/topotests/isis-sr-topo1/rt4/zebra.conf
+++ b/tests/topotests/isis_sr_topo1/rt4/zebra.conf
diff --git a/tests/topotests/isis-sr-topo1/rt5/isisd.conf b/tests/topotests/isis_sr_topo1/rt5/isisd.conf
index f7beea796c..f7beea796c 100644
--- a/tests/topotests/isis-sr-topo1/rt5/isisd.conf
+++ b/tests/topotests/isis_sr_topo1/rt5/isisd.conf
diff --git a/tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step1/show_ip_route.ref
index 0497bd8399..0497bd8399 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step1/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step1/show_ipv6_route.ref
index 294567edc8..294567edc8 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step1/show_mpls_table.ref
index 99d1f773b7..99d1f773b7 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
index 1ff8c2cd4e..1ff8c2cd4e 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step10/show_ip_route.ref
index 29f4782482..29f4782482 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step10/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step10/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step10/show_ipv6_route.ref
index c02d3cfaea..c02d3cfaea 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step10/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step10/show_mpls_table.ref
index 7cfea2a329..7cfea2a329 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step10/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step10/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step10/show_yang_interface_isis_adjacencies.ref
index 7cdaabf53f..7cdaabf53f 120000
--- a/tests/topotests/isis-sr-topo1/rt5/step10/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step10/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step2/show_ip_route.ref
index dc61b86410..dc61b86410 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step2/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step2/show_ipv6_route.ref
index fa426317ba..fa426317ba 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step2/show_mpls_table.ref
index 08f1635a39..08f1635a39 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step2/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step2/show_yang_interface_isis_adjacencies.ref
index d9ac0a8d00..d9ac0a8d00 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step3/show_ip_route.ref
index 2d983c43b6..2d983c43b6 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step3/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step3/show_ipv6_route.ref
index a3e705f384..a3e705f384 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step3/show_mpls_table.ref
index 9980058b12..9980058b12 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step3/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step3/show_yang_interface_isis_adjacencies.ref
index 0b8e6ba5b9..0b8e6ba5b9 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step4/show_ip_route.ref
index 0a64db60f6..0a64db60f6 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step4/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step4/show_ipv6_route.ref
index e9f8fe227c..e9f8fe227c 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step4/show_mpls_table.ref
index a84ed90b25..a84ed90b25 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step4/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step4/show_yang_interface_isis_adjacencies.ref
index d9ac0a8d00..d9ac0a8d00 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step4/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step4/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step5/show_ip_route.ref
index 88485477e3..88485477e3 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step5/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step5/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step5/show_ipv6_route.ref
index 60c645092e..60c645092e 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step5/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step5/show_mpls_table.ref
index 36c21b041f..36c21b041f 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step5/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step5/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step5/show_yang_interface_isis_adjacencies.ref
index 7cdaabf53f..7cdaabf53f 120000
--- a/tests/topotests/isis-sr-topo1/rt5/step5/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step5/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step6/show_ip_route.ref
index 0a64db60f6..0a64db60f6 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step6/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step6/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step6/show_ipv6_route.ref
index e9f8fe227c..e9f8fe227c 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step6/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step6/show_mpls_table.ref
index a84ed90b25..a84ed90b25 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step6/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step6/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step6/show_yang_interface_isis_adjacencies.ref
index 7cdaabf53f..7cdaabf53f 120000
--- a/tests/topotests/isis-sr-topo1/rt5/step6/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step6/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step7/show_ip_route.ref
index 769bc4d31e..769bc4d31e 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step7/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step7/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step7/show_ipv6_route.ref
index e05cc1e282..e05cc1e282 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step7/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step7/show_mpls_table.ref
index c98da7effd..c98da7effd 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step7/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step7/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step7/show_yang_interface_isis_adjacencies.ref
index 7cdaabf53f..7cdaabf53f 120000
--- a/tests/topotests/isis-sr-topo1/rt5/step7/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step7/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step8/show_ip_route.ref
index 0a64db60f6..0a64db60f6 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step8/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step8/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step8/show_ipv6_route.ref
index e9f8fe227c..e9f8fe227c 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step8/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step8/show_mpls_table.ref
index a84ed90b25..a84ed90b25 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step8/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step8/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step8/show_yang_interface_isis_adjacencies.ref
index 7cdaabf53f..7cdaabf53f 120000
--- a/tests/topotests/isis-sr-topo1/rt5/step8/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step8/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt5/step9/show_ip_route.ref
index 34cbf68b21..34cbf68b21 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step9/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step9/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt5/step9/show_ipv6_route.ref
index c02d3cfaea..c02d3cfaea 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step9/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt5/step9/show_mpls_table.ref
index 7cfea2a329..7cfea2a329 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step9/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/step9/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt5/step9/show_yang_interface_isis_adjacencies.ref
index 7cdaabf53f..7cdaabf53f 120000
--- a/tests/topotests/isis-sr-topo1/rt5/step9/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt5/step9/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt5/zebra.conf b/tests/topotests/isis_sr_topo1/rt5/zebra.conf
index a0c8f2cd7e..a0c8f2cd7e 100644
--- a/tests/topotests/isis-sr-topo1/rt5/zebra.conf
+++ b/tests/topotests/isis_sr_topo1/rt5/zebra.conf
diff --git a/tests/topotests/isis-sr-topo1/rt6/isisd.conf b/tests/topotests/isis_sr_topo1/rt6/isisd.conf
index a29b78f0a4..a29b78f0a4 100644
--- a/tests/topotests/isis-sr-topo1/rt6/isisd.conf
+++ b/tests/topotests/isis_sr_topo1/rt6/isisd.conf
diff --git a/tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step1/show_ip_route.ref
index 7b62b0a9c6..7b62b0a9c6 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step1/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step1/show_mpls_table.ref
index 2c526e74f0..2c526e74f0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
index 734832358f..734832358f 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step10/show_ip_route.ref
index d430ef5a33..d430ef5a33 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step10/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step10/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step10/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step10/show_mpls_table.ref
index be87ed90a0..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step10/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step10/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step10/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step10/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step10/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step2/show_ip_route.ref
index 4b204dbc4c..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step2/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step2/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step2/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step2/show_mpls_table.ref
index 2c526e74f0..2c526e74f0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step2/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step2/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step3/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step3/show_ip_route.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step3/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step3/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step3/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step3/show_ipv6_route.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step3/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step3/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step3/show_mpls_table.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step3/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step3/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step3/show_yang_interface_isis_adjacencies.ref
index 0db3279e44..0db3279e44 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step4/show_ip_route.ref
index 4b204dbc4c..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step4/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step4/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step4/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step4/show_mpls_table.ref
index be87ed90a0..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step4/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step4/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step4/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step4/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step4/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step5/show_ip_route.ref
index 4b204dbc4c..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step5/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step5/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step5/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step5/show_mpls_table.ref
index be87ed90a0..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step5/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step5/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step5/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step5/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step5/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step6/show_ip_route.ref
index 4b204dbc4c..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step6/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step6/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step6/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step6/show_mpls_table.ref
index be87ed90a0..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step6/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step6/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step6/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step6/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step6/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step7/show_ip_route.ref
index 1787988207..1787988207 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step7/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step7/show_ipv6_route.ref
index 367d0ed173..367d0ed173 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step7/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step7/show_mpls_table.ref
index b44dda298e..b44dda298e 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step7/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step7/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step7/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step7/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step7/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step8/show_ip_route.ref
index 4b204dbc4c..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step8/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step8/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step8/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step8/show_mpls_table.ref
index be87ed90a0..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step8/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step8/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step8/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step8/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step8/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref b/tests/topotests/isis_sr_topo1/rt6/step9/show_ip_route.ref
index 4b204dbc4c..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step9/show_ip_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref b/tests/topotests/isis_sr_topo1/rt6/step9/show_ipv6_route.ref
index 834cdfe6ca..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step9/show_ipv6_route.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref b/tests/topotests/isis_sr_topo1/rt6/step9/show_mpls_table.ref
index be87ed90a0..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step9/show_mpls_table.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/step9/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_sr_topo1/rt6/step9/show_yang_interface_isis_adjacencies.ref
index 0879b84d23..0879b84d23 120000
--- a/tests/topotests/isis-sr-topo1/rt6/step9/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_sr_topo1/rt6/step9/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-sr-topo1/rt6/zebra.conf b/tests/topotests/isis_sr_topo1/rt6/zebra.conf
index 6084010a93..6084010a93 100644
--- a/tests/topotests/isis-sr-topo1/rt6/zebra.conf
+++ b/tests/topotests/isis_sr_topo1/rt6/zebra.conf
diff --git a/tests/topotests/isis-sr-topo1/test_isis_sr_topo1.py b/tests/topotests/isis_sr_topo1/test_isis_sr_topo1.py
index c22bd65d2d..c22bd65d2d 100644
--- a/tests/topotests/isis-sr-topo1/test_isis_sr_topo1.py
+++ b/tests/topotests/isis_sr_topo1/test_isis_sr_topo1.py
diff --git a/tests/topotests/isis-topo1/__init__.py b/tests/topotests/isis_tilfa_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-topo1/__init__.py
+++ b/tests/topotests/isis_tilfa_topo1/__init__.py
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/isisd.conf b/tests/topotests/isis_tilfa_topo1/rt1/isisd.conf
index a447a2aa5a..a447a2aa5a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/isisd.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt1/isisd.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_ip_route.ref
index 92b7437324..92b7437324 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_ipv6_route.ref
index 3232121a0f..3232121a0f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_mpls_table.ref
index aa0357d750..aa0357d750 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
index 26f0dffa7a..26f0dffa7a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step2/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step2/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step3/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step3/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref.diff
index 10b336f5b8..10b336f5b8 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref.diff
index 904aaa1ce2..904aaa1ce2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref.diff
index d7d8753131..d7d8753131 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref.diff
index b583fa97bd..b583fa97bd 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref.diff
index d608abec98..d608abec98 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref.diff
index b5161fcd55..b5161fcd55 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step6/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step6/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref.diff
index 726aed514f..726aed514f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref.diff
index 2049f6fa19..2049f6fa19 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref.diff
index 22301ba1ff..22301ba1ff 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref.diff
index 4a1d4805a4..4a1d4805a4 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref.diff
index eaece74e48..eaece74e48 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref.diff
index 46c17de019..46c17de019 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref.diff
index 06efdc96ce..06efdc96ce 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref.diff
index a58f2d447c..a58f2d447c 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref.diff
index c0a1ac592b..c0a1ac592b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/zebra.conf b/tests/topotests/isis_tilfa_topo1/rt1/zebra.conf
index 9d71d3005f..9d71d3005f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/zebra.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt1/zebra.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/isisd.conf b/tests/topotests/isis_tilfa_topo1/rt2/isisd.conf
index 1a756e2c72..1a756e2c72 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/isisd.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt2/isisd.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_ip_route.ref
index 7e1ccd10a2..7e1ccd10a2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_ipv6_route.ref
index 6d31f6f26b..6d31f6f26b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_mpls_table.ref
index b9b906a31d..b9b906a31d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
index 1ea72a528b..1ea72a528b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref.diff
index 90e0895639..90e0895639 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref.diff
index 2d19f20f63..2d19f20f63 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref.diff
index 01fc74a60b..01fc74a60b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref.diff
index d93f036229..d93f036229 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref.diff
index 68b618e91d..68b618e91d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref.diff
index 966e153a6b..966e153a6b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref.diff
index dd75d76b9b..dd75d76b9b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref.diff
index 63731237ec..63731237ec 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref.diff
index 3872ce4980..3872ce4980 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref.diff
index 4d5636436c..4d5636436c 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref.diff
index f9e0276f85..f9e0276f85 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref.diff
index 6aebbd6c82..6aebbd6c82 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step6/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step6/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref.diff
index 5e73b97844..5e73b97844 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref.diff
index 5dc4e59151..5dc4e59151 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref.diff
index 6c0d7392f0..6c0d7392f0 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref.diff
index f5df607613..f5df607613 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref.diff
index 125f36b1b4..125f36b1b4 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref.diff
index a1d5d795c5..a1d5d795c5 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref.diff
index 2475c639c1..2475c639c1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref.diff
index 2d21fbcde2..2d21fbcde2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref.diff
index bc0ec3157e..bc0ec3157e 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/zebra.conf b/tests/topotests/isis_tilfa_topo1/rt2/zebra.conf
index dcb0686dc2..dcb0686dc2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/zebra.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt2/zebra.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/isisd.conf b/tests/topotests/isis_tilfa_topo1/rt3/isisd.conf
index 986bf2804a..986bf2804a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/isisd.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt3/isisd.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_ip_route.ref
index d70e9fe882..d70e9fe882 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ip_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_ipv6_route.ref
index 058d33609b..058d33609b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_mpls_table.ref
index 1912df3f05..1912df3f05 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
index d174b4a475..d174b4a475 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step2/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step2/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step3/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step3/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref.diff
index 9ba73b057a..9ba73b057a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref.diff
index 04f61c4eb4..04f61c4eb4 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref.diff
index b3588ca791..b3588ca791 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref.diff
index 1af024fc2e..1af024fc2e 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref.diff
index 7cc79d0e58..7cc79d0e58 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref.diff
index 75a0f01f55..75a0f01f55 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref.diff
index c814a2876b..c814a2876b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref.diff
index 6f9405f20c..6f9405f20c 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref.diff
index d8c39685de..d8c39685de 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref.diff
index c928fcdb4b..c928fcdb4b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref.diff
index 0170971781..0170971781 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref.diff
index d7a3ed978f..d7a3ed978f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref.diff
index 41a7ff3255..41a7ff3255 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref.diff
index bd49f8606b..bd49f8606b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref.diff
index 4cc69b66f2..4cc69b66f2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref.diff
index cc0a482eee..cc0a482eee 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref.diff
index 650b982f0b..650b982f0b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref.diff
index 8ce4f1d266..8ce4f1d266 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/zebra.conf b/tests/topotests/isis_tilfa_topo1/rt3/zebra.conf
index 3254529386..3254529386 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/zebra.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt3/zebra.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/isisd.conf b/tests/topotests/isis_tilfa_topo1/rt4/isisd.conf
index 7d411069d1..7d411069d1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/isisd.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt4/isisd.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_ip_route.ref
index 0ef5d1bc3f..0ef5d1bc3f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_ipv6_route.ref
index b640df30c1..b640df30c1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_mpls_table.ref
index f60937ccbc..f60937ccbc 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
index 2eb64b6fc9..2eb64b6fc9 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step2/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step2/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step3/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step3/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref.diff
index 8b115c2058..8b115c2058 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref.diff
index 7f39285089..7f39285089 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref.diff
index 3dcd36c176..3dcd36c176 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref.diff
index 484a3147dc..484a3147dc 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref.diff
index 3ad0085120..3ad0085120 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref.diff
index 20e363375b..20e363375b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref.diff
index 9070414730..9070414730 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref.diff
index 57a57647a1..57a57647a1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref.diff
index 94f87854d1..94f87854d1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref.diff
index e54873d5ab..e54873d5ab 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref.diff
index 92e08f99a0..92e08f99a0 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref.diff
index fb614ebf6a..fb614ebf6a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref.diff
index 252da6e764..252da6e764 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref.diff
index 7057d2166a..7057d2166a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref.diff
index 3dc4303b9b..3dc4303b9b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref.diff
index 56f9cc534f..56f9cc534f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref.diff
index 41e552177a..41e552177a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref.diff
index 627e292518..627e292518 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/zebra.conf b/tests/topotests/isis_tilfa_topo1/rt4/zebra.conf
index 4945897e9d..4945897e9d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/zebra.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt4/zebra.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/isisd.conf b/tests/topotests/isis_tilfa_topo1/rt5/isisd.conf
index be52eb0322..be52eb0322 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/isisd.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt5/isisd.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_ip_route.ref
index 93740e22e0..93740e22e0 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_ipv6_route.ref
index 6dafa69adb..6dafa69adb 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_mpls_table.ref
index 0c5861b5e8..0c5861b5e8 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
index 1ff8c2cd4e..1ff8c2cd4e 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step2/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step2/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step3/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step3/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref.diff
index 7545a31b9b..7545a31b9b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref.diff
index 1de62bb58e..1de62bb58e 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref.diff
index b3d5252430..b3d5252430 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref.diff
index be5d83f463..be5d83f463 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref.diff
index a856019622..a856019622 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref.diff
index 74caa8620e..74caa8620e 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref.diff
index 2883c046fd..2883c046fd 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step7/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step7/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step8/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step8/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step9/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step9/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/zebra.conf b/tests/topotests/isis_tilfa_topo1/rt5/zebra.conf
index 4cfea1a59f..4cfea1a59f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/zebra.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt5/zebra.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/isisd.conf b/tests/topotests/isis_tilfa_topo1/rt6/isisd.conf
index db47622a10..db47622a10 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/isisd.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt6/isisd.conf
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_ip_route.ref
index b9b43c4139..b9b43c4139 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_ip_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_ipv6_route.ref
index 1b1942939d..1b1942939d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_ipv6_route.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_mpls_table.ref
index 5b52a16f48..5b52a16f48 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_mpls_table.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_mpls_table.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
index 734832358f..734832358f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step2/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step2/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step2/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step3/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step3/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step3/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref.diff
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref.diff
index 7c2f00419a..7c2f00419a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref.diff
index 70f872e9de..70f872e9de 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref.diff
index c191763a73..c191763a73 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref.diff
index 9f017d2492..9f017d2492 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref.diff
index 1209504e94..1209504e94 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref.diff
index abf7c2a32d..abf7c2a32d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref.diff
index f318f95e21..f318f95e21 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref.diff
index 9208491fc8..9208491fc8 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref.diff
index aee8969ded..aee8969ded 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref.diff
index 0e6c3ff5cd..0e6c3ff5cd 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref.diff
index 2fe46c8265..2fe46c8265 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref.diff
index 179a4f460b..179a4f460b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref.diff
index 9d5c440a22..9d5c440a22 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref.diff
index 21cab20a47..21cab20a47 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref.diff
index 760c5542cb..760c5542cb 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref.diff
index ee296470c0..ee296470c0 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref.diff
index bebca4dcf1..bebca4dcf1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref.diff
index 57347d15be..57347d15be 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref.diff
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/zebra.conf b/tests/topotests/isis_tilfa_topo1/rt6/zebra.conf
index 6084010a93..6084010a93 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/zebra.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt6/zebra.conf
diff --git a/tests/topotests/isis-tilfa-topo1/test_isis_tilfa_topo1.py b/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
index 00cb623999..00cb623999 100755
--- a/tests/topotests/isis-tilfa-topo1/test_isis_tilfa_topo1.py
+++ b/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
diff --git a/tests/topotests/ldp-vpls-topo1/__init__.py b/tests/topotests/isis_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/ldp-vpls-topo1/__init__.py
+++ b/tests/topotests/isis_topo1/__init__.py
diff --git a/tests/topotests/isis-topo1/r1/isisd.conf b/tests/topotests/isis_topo1/r1/isisd.conf
index 4e3761e5a1..4e3761e5a1 100644
--- a/tests/topotests/isis-topo1/r1/isisd.conf
+++ b/tests/topotests/isis_topo1/r1/isisd.conf
diff --git a/tests/topotests/isis-topo1/r1/r1_route.json b/tests/topotests/isis_topo1/r1/r1_route.json
index f94233a80f..f94233a80f 100644
--- a/tests/topotests/isis-topo1/r1/r1_route.json
+++ b/tests/topotests/isis_topo1/r1/r1_route.json
diff --git a/tests/topotests/isis-topo1/r1/r1_route6.json b/tests/topotests/isis_topo1/r1/r1_route6.json
index bd09839fea..bd09839fea 100644
--- a/tests/topotests/isis-topo1/r1/r1_route6.json
+++ b/tests/topotests/isis_topo1/r1/r1_route6.json
diff --git a/tests/topotests/isis-topo1/r1/r1_route6_linux.json b/tests/topotests/isis_topo1/r1/r1_route6_linux.json
index 139747c1cd..139747c1cd 100644
--- a/tests/topotests/isis-topo1/r1/r1_route6_linux.json
+++ b/tests/topotests/isis_topo1/r1/r1_route6_linux.json
diff --git a/tests/topotests/isis-topo1/r1/r1_route_linux.json b/tests/topotests/isis_topo1/r1/r1_route_linux.json
index 6420dec5d7..6420dec5d7 100644
--- a/tests/topotests/isis-topo1/r1/r1_route_linux.json
+++ b/tests/topotests/isis_topo1/r1/r1_route_linux.json
diff --git a/tests/topotests/isis-topo1/r1/r1_topology.json b/tests/topotests/isis_topo1/r1/r1_topology.json
index 6d2bbb80c9..337d6bf5ef 100644
--- a/tests/topotests/isis-topo1/r1/r1_topology.json
+++ b/tests/topotests/isis_topo1/r1/r1_topology.json
@@ -18,9 +18,9 @@
"vertex": "r1"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP",
+ "metric": "0",
+ "parent": "r1(4)",
+ "type": "IP internal",
"vertex": "10.0.20.0/24"
},
{
@@ -32,27 +32,27 @@
"vertex": "r3"
},
{
- "interface": "r3",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r1-eth0",
- "type": "IP",
+ "interface": "r1-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP TE",
"vertex": "10.0.10.0/24"
},
{
- "interface": "r3",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r1-eth0",
- "type": "IP",
+ "interface": "r1-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP TE",
"vertex": "10.0.20.0/24"
},
{
- "interface": "r3",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r1-eth0",
- "type": "IP",
+ "interface": "r1-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP TE",
"vertex": "10.254.0.3/32"
}
],
@@ -61,9 +61,9 @@
"vertex": "r1"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
+ "metric": "0",
+ "parent": "r1(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:1:1::/64"
},
{
@@ -75,17 +75,19 @@
"vertex": "r3"
},
{
- "interface": "r3",
- "next-hop": "10",
- "parent": "r1-eth0",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r1-eth0",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:2:1::/64"
},
{
- "interface": "r3",
- "next-hop": "10",
- "parent": "r1-eth0",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r1-eth0",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::3/128"
}
]
diff --git a/tests/topotests/isis-topo1/r1/zebra.conf b/tests/topotests/isis_topo1/r1/zebra.conf
index 23cf6252a6..23cf6252a6 100644
--- a/tests/topotests/isis-topo1/r1/zebra.conf
+++ b/tests/topotests/isis_topo1/r1/zebra.conf
diff --git a/tests/topotests/isis-topo1/r2/isisd.conf b/tests/topotests/isis_topo1/r2/isisd.conf
index 14db0940ec..14db0940ec 100644
--- a/tests/topotests/isis-topo1/r2/isisd.conf
+++ b/tests/topotests/isis_topo1/r2/isisd.conf
diff --git a/tests/topotests/isis-topo1/r2/r2_route.json b/tests/topotests/isis_topo1/r2/r2_route.json
index aab651eff0..aab651eff0 100644
--- a/tests/topotests/isis-topo1/r2/r2_route.json
+++ b/tests/topotests/isis_topo1/r2/r2_route.json
diff --git a/tests/topotests/isis-topo1/r2/r2_route6.json b/tests/topotests/isis_topo1/r2/r2_route6.json
index 78c31b3cc5..78c31b3cc5 100644
--- a/tests/topotests/isis-topo1/r2/r2_route6.json
+++ b/tests/topotests/isis_topo1/r2/r2_route6.json
diff --git a/tests/topotests/isis-topo1/r2/r2_route6_linux.json b/tests/topotests/isis_topo1/r2/r2_route6_linux.json
index 50688615a7..50688615a7 100644
--- a/tests/topotests/isis-topo1/r2/r2_route6_linux.json
+++ b/tests/topotests/isis_topo1/r2/r2_route6_linux.json
diff --git a/tests/topotests/isis-topo1/r2/r2_route_linux.json b/tests/topotests/isis_topo1/r2/r2_route_linux.json
index dd3035a1ac..dd3035a1ac 100644
--- a/tests/topotests/isis-topo1/r2/r2_route_linux.json
+++ b/tests/topotests/isis_topo1/r2/r2_route_linux.json
diff --git a/tests/topotests/isis-topo1/r2/r2_topology.json b/tests/topotests/isis_topo1/r2/r2_topology.json
index 396c618caa..de90fb5a32 100644
--- a/tests/topotests/isis-topo1/r2/r2_topology.json
+++ b/tests/topotests/isis_topo1/r2/r2_topology.json
@@ -18,9 +18,9 @@
"vertex": "r2"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP",
+ "metric": "0",
+ "parent": "r2(4)",
+ "type": "IP internal",
"vertex": "10.0.21.0/24"
},
{
@@ -32,27 +32,27 @@
"vertex": "r4"
},
{
- "interface": "r4",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r2-eth0",
- "type": "IP",
+ "interface": "r2-eth0",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP TE",
"vertex": "10.0.11.0/24"
},
{
- "interface": "r4",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r2-eth0",
- "type": "IP",
+ "interface": "r2-eth0",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP TE",
"vertex": "10.0.21.0/24"
},
{
- "interface": "r4",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r2-eth0",
- "type": "IP",
+ "interface": "r2-eth0",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP TE",
"vertex": "10.254.0.4/32"
}
],
@@ -61,9 +61,9 @@
"vertex": "r2"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
+ "metric": "0",
+ "parent": "r2(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:1:2::/64"
},
{
@@ -75,17 +75,19 @@
"vertex": "r4"
},
{
- "interface": "r4",
- "next-hop": "10",
- "parent": "r2-eth0",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r2-eth0",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:2:2::/64"
},
{
- "interface": "r4",
- "next-hop": "10",
- "parent": "r2-eth0",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r2-eth0",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::4/128"
}
]
diff --git a/tests/topotests/isis-topo1/r2/zebra.conf b/tests/topotests/isis_topo1/r2/zebra.conf
index cf6f8f67d4..cf6f8f67d4 100644
--- a/tests/topotests/isis-topo1/r2/zebra.conf
+++ b/tests/topotests/isis_topo1/r2/zebra.conf
diff --git a/tests/topotests/isis-topo1/r3/isisd.conf b/tests/topotests/isis_topo1/r3/isisd.conf
index 6f36c0fa36..6f36c0fa36 100644
--- a/tests/topotests/isis-topo1/r3/isisd.conf
+++ b/tests/topotests/isis_topo1/r3/isisd.conf
diff --git a/tests/topotests/isis-topo1/r3/r3_route.json b/tests/topotests/isis_topo1/r3/r3_route.json
index 61d05e80bb..61d05e80bb 100644
--- a/tests/topotests/isis-topo1/r3/r3_route.json
+++ b/tests/topotests/isis_topo1/r3/r3_route.json
diff --git a/tests/topotests/isis-topo1/r3/r3_route6.json b/tests/topotests/isis_topo1/r3/r3_route6.json
index 41040240ea..41040240ea 100644
--- a/tests/topotests/isis-topo1/r3/r3_route6.json
+++ b/tests/topotests/isis_topo1/r3/r3_route6.json
diff --git a/tests/topotests/isis-topo1/r3/r3_route6_linux.json b/tests/topotests/isis_topo1/r3/r3_route6_linux.json
index 78993ff420..78993ff420 100644
--- a/tests/topotests/isis-topo1/r3/r3_route6_linux.json
+++ b/tests/topotests/isis_topo1/r3/r3_route6_linux.json
diff --git a/tests/topotests/isis-topo1/r3/r3_route_linux.json b/tests/topotests/isis_topo1/r3/r3_route_linux.json
index 04a2418d00..04a2418d00 100644
--- a/tests/topotests/isis-topo1/r3/r3_route_linux.json
+++ b/tests/topotests/isis_topo1/r3/r3_route_linux.json
diff --git a/tests/topotests/isis-topo1/r3/r3_topology.json b/tests/topotests/isis_topo1/r3/r3_topology.json
index 5ab58c41a6..2d36f9b427 100644
--- a/tests/topotests/isis-topo1/r3/r3_topology.json
+++ b/tests/topotests/isis_topo1/r3/r3_topology.json
@@ -6,9 +6,9 @@
"vertex": "r3"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP",
+ "metric": "0",
+ "parent": "r3(4)",
+ "type": "IP internal",
"vertex": "10.0.10.0/24"
},
{
@@ -20,27 +20,27 @@
"vertex": "r5"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r3-eth1",
- "type": "IP",
+ "interface": "r3-eth1",
+ "metric": "10",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP TE",
"vertex": "10.0.10.0/24"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r3-eth1",
- "type": "IP",
+ "interface": "r3-eth1",
+ "metric": "10",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP TE",
"vertex": "10.0.11.0/24"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r3-eth1",
- "type": "IP",
+ "interface": "r3-eth1",
+ "metric": "10",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP TE",
"vertex": "10.254.0.5/32"
},
{
@@ -51,19 +51,19 @@
"vertex": "r4"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "20",
- "parent": "r3-eth1",
- "type": "IP",
+ "interface": "r3-eth1",
+ "metric": "20",
+ "next-hop": "r5",
+ "parent": "r4(4)",
+ "type": "IP TE",
"vertex": "10.0.21.0/24"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "20",
- "parent": "r3-eth1",
- "type": "IP",
+ "interface": "r3-eth1",
+ "metric": "20",
+ "next-hop": "r5",
+ "parent": "r4(4)",
+ "type": "IP TE",
"vertex": "10.254.0.4/32"
}
],
@@ -72,9 +72,9 @@
"vertex": "r3"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
+ "metric": "0",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:2:1::/64"
},
{
@@ -86,17 +86,19 @@
"vertex": "r5"
},
{
- "interface": "r5",
- "next-hop": "10",
- "parent": "r3-eth1",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r3-eth1",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:2:2::/64"
},
{
- "interface": "r5",
- "next-hop": "10",
- "parent": "r3-eth1",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r3-eth1",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::5/128"
},
{
@@ -107,17 +109,19 @@
"vertex": "r4"
},
{
- "interface": "r5",
- "next-hop": "20",
- "parent": "r3-eth1",
- "type": "IP6",
+ "metric": "20",
+ "interface": "r3-eth1",
+ "next-hop": "r5",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:1:2::/64"
},
{
- "interface": "r5",
- "next-hop": "20",
- "parent": "r3-eth1",
- "type": "IP6",
+ "metric": "20",
+ "interface": "r3-eth1",
+ "next-hop": "r5",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::4/128"
}
]
@@ -128,9 +132,9 @@
"vertex": "r3"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP",
+ "metric": "0",
+ "parent": "r3(4)",
+ "type": "IP internal",
"vertex": "10.0.20.0/24"
},
{
@@ -142,19 +146,19 @@
"vertex": "r1"
},
{
- "interface": "r1",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r3-eth0",
- "type": "IP",
+ "interface": "r3-eth0",
+ "metric": "10",
+ "next-hop": "r1",
+ "parent": "r1(4)",
+ "type": "IP TE",
"vertex": "10.0.20.0/24"
},
{
- "interface": "r1",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r3-eth0",
- "type": "IP",
+ "interface": "r3-eth0",
+ "metric": "10",
+ "next-hop": "r1",
+ "parent": "r1(4)",
+ "type": "IP TE",
"vertex": "10.254.0.1/32"
}
],
@@ -163,9 +167,9 @@
"vertex": "r3"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
+ "metric": "0",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:1:1::/64"
},
{
@@ -177,10 +181,11 @@
"vertex": "r1"
},
{
- "interface": "r1",
- "next-hop": "10",
- "parent": "r3-eth0",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r3-eth0",
+ "next-hop": "r1",
+ "parent": "r1(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::1/128"
}
]
diff --git a/tests/topotests/isis-topo1/r3/zebra.conf b/tests/topotests/isis_topo1/r3/zebra.conf
index 1e4c0d752e..1e4c0d752e 100644
--- a/tests/topotests/isis-topo1/r3/zebra.conf
+++ b/tests/topotests/isis_topo1/r3/zebra.conf
diff --git a/tests/topotests/isis-topo1/r4/isisd.conf b/tests/topotests/isis_topo1/r4/isisd.conf
index 502e035f50..502e035f50 100644
--- a/tests/topotests/isis-topo1/r4/isisd.conf
+++ b/tests/topotests/isis_topo1/r4/isisd.conf
diff --git a/tests/topotests/isis-topo1/r4/r4_route.json b/tests/topotests/isis_topo1/r4/r4_route.json
index 79361af4b5..79361af4b5 100644
--- a/tests/topotests/isis-topo1/r4/r4_route.json
+++ b/tests/topotests/isis_topo1/r4/r4_route.json
diff --git a/tests/topotests/isis-topo1/r4/r4_route6.json b/tests/topotests/isis_topo1/r4/r4_route6.json
index c0ace9a193..c0ace9a193 100644
--- a/tests/topotests/isis-topo1/r4/r4_route6.json
+++ b/tests/topotests/isis_topo1/r4/r4_route6.json
diff --git a/tests/topotests/isis-topo1/r4/r4_route6_linux.json b/tests/topotests/isis_topo1/r4/r4_route6_linux.json
index 32ea366396..32ea366396 100644
--- a/tests/topotests/isis-topo1/r4/r4_route6_linux.json
+++ b/tests/topotests/isis_topo1/r4/r4_route6_linux.json
diff --git a/tests/topotests/isis-topo1/r4/r4_route_linux.json b/tests/topotests/isis_topo1/r4/r4_route_linux.json
index 5d6553f70d..5d6553f70d 100644
--- a/tests/topotests/isis-topo1/r4/r4_route_linux.json
+++ b/tests/topotests/isis_topo1/r4/r4_route_linux.json
diff --git a/tests/topotests/isis-topo1/r4/r4_topology.json b/tests/topotests/isis_topo1/r4/r4_topology.json
index ae74a60948..e7d7841912 100644
--- a/tests/topotests/isis-topo1/r4/r4_topology.json
+++ b/tests/topotests/isis_topo1/r4/r4_topology.json
@@ -6,9 +6,9 @@
"vertex": "r4"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP",
+ "metric": "0",
+ "parent": "r4(4)",
+ "type": "IP internal",
"vertex": "10.0.11.0/24"
},
{
@@ -20,27 +20,27 @@
"vertex": "r5"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r4-eth1",
- "type": "IP",
+ "interface": "r4-eth1",
+ "metric": "10",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP TE",
"vertex": "10.0.10.0/24"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r4-eth1",
- "type": "IP",
+ "interface": "r4-eth1",
+ "metric": "10",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP TE",
"vertex": "10.0.11.0/24"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r4-eth1",
- "type": "IP",
+ "interface": "r4-eth1",
+ "metric": "10",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP TE",
"vertex": "10.254.0.5/32"
},
{
@@ -51,19 +51,19 @@
"vertex": "r3"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "20",
- "parent": "r4-eth1",
- "type": "IP",
+ "interface": "r4-eth1",
+ "metric": "20",
+ "next-hop": "r5",
+ "parent": "r3(4)",
+ "type": "IP TE",
"vertex": "10.0.20.0/24"
},
{
- "interface": "r5",
- "metric": "TE",
- "next-hop": "20",
- "parent": "r4-eth1",
- "type": "IP",
+ "interface": "r4-eth1",
+ "metric": "20",
+ "next-hop": "r5",
+ "parent": "r3(4)",
+ "type": "IP TE",
"vertex": "10.254.0.3/32"
}
],
@@ -72,9 +72,9 @@
"vertex": "r4"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
+ "metric": "0",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:2:2::/64"
},
{
@@ -86,17 +86,19 @@
"vertex": "r5"
},
{
- "interface": "r5",
- "next-hop": "10",
- "parent": "r4-eth1",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r4-eth1",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:2:1::/64"
},
{
- "interface": "r5",
- "next-hop": "10",
- "parent": "r4-eth1",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r4-eth1",
+ "next-hop": "r5",
+ "parent": "r5(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::5/128"
},
{
@@ -107,17 +109,19 @@
"vertex": "r3"
},
{
- "interface": "r5",
- "next-hop": "20",
- "parent": "r4-eth1",
- "type": "IP6",
+ "metric": "20",
+ "interface": "r4-eth1",
+ "next-hop": "r5",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:1:1::/64"
},
{
- "interface": "r5",
- "next-hop": "20",
- "parent": "r4-eth1",
- "type": "IP6",
+ "metric": "20",
+ "interface": "r4-eth1",
+ "next-hop": "r5",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::3/128"
}
]
@@ -128,9 +132,9 @@
"vertex": "r4"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP",
+ "metric": "0",
+ "parent": "r4(4)",
+ "type": "IP internal",
"vertex": "10.0.21.0/24"
},
{
@@ -142,19 +146,19 @@
"vertex": "r2"
},
{
- "interface": "r2",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r4-eth0",
- "type": "IP",
+ "interface": "r4-eth0",
+ "metric": "10",
+ "next-hop": "r2",
+ "parent": "r2(4)",
+ "type": "IP TE",
"vertex": "10.0.21.0/24"
},
{
- "interface": "r2",
- "metric": "TE",
- "next-hop": "10",
- "parent": "r4-eth0",
- "type": "IP",
+ "interface": "r4-eth0",
+ "metric": "10",
+ "next-hop": "r2",
+ "parent": "r2(4)",
+ "type": "IP TE",
"vertex": "10.254.0.2/32"
}
],
@@ -163,9 +167,9 @@
"vertex": "r4"
},
{
- "metric": "internal",
- "parent": "0",
- "type": "IP6",
+ "metric": "0",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:1:2::/64"
},
{
@@ -177,10 +181,11 @@
"vertex": "r2"
},
{
- "interface": "r2",
- "next-hop": "10",
- "parent": "r4-eth0",
- "type": "IP6",
+ "metric": "10",
+ "interface": "r4-eth0",
+ "next-hop": "r2",
+ "parent": "r2(4)",
+ "type": "IP6 internal",
"vertex": "2001:db8:f::2/128"
}
]
diff --git a/tests/topotests/isis-topo1/r4/zebra.conf b/tests/topotests/isis_topo1/r4/zebra.conf
index 5ca9a3db72..5ca9a3db72 100644
--- a/tests/topotests/isis-topo1/r4/zebra.conf
+++ b/tests/topotests/isis_topo1/r4/zebra.conf
diff --git a/tests/topotests/isis-topo1/r5/isisd.conf b/tests/topotests/isis_topo1/r5/isisd.conf
index 42493a4991..42493a4991 100644
--- a/tests/topotests/isis-topo1/r5/isisd.conf
+++ b/tests/topotests/isis_topo1/r5/isisd.conf
diff --git a/tests/topotests/isis-topo1/r5/r5_route.json b/tests/topotests/isis_topo1/r5/r5_route.json
index cca844b27c..cca844b27c 100644
--- a/tests/topotests/isis-topo1/r5/r5_route.json
+++ b/tests/topotests/isis_topo1/r5/r5_route.json
diff --git a/tests/topotests/isis-topo1/r5/r5_route6.json b/tests/topotests/isis_topo1/r5/r5_route6.json
index b9468764d4..b9468764d4 100644
--- a/tests/topotests/isis-topo1/r5/r5_route6.json
+++ b/tests/topotests/isis_topo1/r5/r5_route6.json
diff --git a/tests/topotests/isis-topo1/r5/r5_route6_linux.json b/tests/topotests/isis_topo1/r5/r5_route6_linux.json
index a7343b5330..a7343b5330 100644
--- a/tests/topotests/isis-topo1/r5/r5_route6_linux.json
+++ b/tests/topotests/isis_topo1/r5/r5_route6_linux.json
diff --git a/tests/topotests/isis-topo1/r5/r5_route_linux.json b/tests/topotests/isis_topo1/r5/r5_route_linux.json
index b809896468..b809896468 100644
--- a/tests/topotests/isis-topo1/r5/r5_route_linux.json
+++ b/tests/topotests/isis_topo1/r5/r5_route_linux.json
diff --git a/tests/topotests/isis_topo1/r5/r5_topology.json b/tests/topotests/isis_topo1/r5/r5_topology.json
new file mode 100644
index 0000000000..3d887b7cea
--- /dev/null
+++ b/tests/topotests/isis_topo1/r5/r5_topology.json
@@ -0,0 +1,156 @@
+{
+ "1": {
+ "level-1": {
+ "ipv4": [
+ {
+ "vertex": "r5"
+ },
+ {
+ "metric": "0",
+ "parent": "r5(4)",
+ "type": "IP internal",
+ "vertex": "10.0.10.0/24"
+ },
+ {
+ "metric": "0",
+ "parent": "r5(4)",
+ "type": "IP internal",
+ "vertex": "10.0.11.0/24"
+ },
+ {
+ "interface": "r5-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r5(4)",
+ "type": "TE-IS",
+ "vertex": "r3"
+ },
+ {
+ "interface": "r5-eth1",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r5(4)",
+ "type": "TE-IS",
+ "vertex": "r4"
+ },
+ {
+ "interface": "r5-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP TE",
+ "vertex": "10.0.10.0/24"
+ },
+ {
+ "interface": "r5-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP TE",
+ "vertex": "10.0.20.0/24"
+ },
+ {
+ "interface": "r5-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP TE",
+ "vertex": "10.254.0.3/32"
+ },
+ {
+ "interface": "r5-eth1",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP TE",
+ "vertex": "10.0.11.0/24"
+ },
+ {
+ "interface": "r5-eth1",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP TE",
+ "vertex": "10.0.21.0/24"
+ },
+ {
+ "interface": "r5-eth1",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP TE",
+ "vertex": "10.254.0.4/32"
+ }
+ ],
+ "ipv6": [
+ {
+ "vertex": "r5"
+ },
+ {
+ "metric": "0",
+ "parent": "r5(4)",
+ "type": "IP6 internal",
+ "vertex": "2001:db8:2:1::/64"
+ },
+ {
+ "metric": "0",
+ "parent": "r5(4)",
+ "type": "IP6 internal",
+ "vertex": "2001:db8:2:2::/64"
+ },
+ {
+ "interface": "r5-eth0",
+ "metric": "10",
+ "next-hop": "r3",
+ "parent": "r5(4)",
+ "type": "TE-IS",
+ "vertex": "r3"
+ },
+ {
+ "interface": "r5-eth1",
+ "metric": "10",
+ "next-hop": "r4",
+ "parent": "r5(4)",
+ "type": "TE-IS",
+ "vertex": "r4"
+ },
+ {
+ "metric": "10",
+ "interface": "r5-eth0",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
+ "vertex": "2001:db8:1:1::/64"
+ },
+ {
+ "metric": "10",
+ "interface": "r5-eth0",
+ "next-hop": "r3",
+ "parent": "r3(4)",
+ "type": "IP6 internal",
+ "vertex": "2001:db8:f::3/128"
+ },
+ {
+ "metric": "10",
+ "interface": "r5-eth1",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
+ "vertex": "2001:db8:1:2::/64"
+ },
+ {
+ "metric": "10",
+ "interface": "r5-eth1",
+ "next-hop": "r4",
+ "parent": "r4(4)",
+ "type": "IP6 internal",
+ "vertex": "2001:db8:f::4/128"
+ }
+ ]
+ },
+ "level-2": {
+ "ipv4": [],
+ "ipv6": []
+ }
+ }
+}
diff --git a/tests/topotests/isis-topo1/r5/zebra.conf b/tests/topotests/isis_topo1/r5/zebra.conf
index 48fed69662..48fed69662 100644
--- a/tests/topotests/isis-topo1/r5/zebra.conf
+++ b/tests/topotests/isis_topo1/r5/zebra.conf
diff --git a/tests/topotests/isis-topo1/test_isis_topo1.dot b/tests/topotests/isis_topo1/test_isis_topo1.dot
index 01f9ba780f..01f9ba780f 100644
--- a/tests/topotests/isis-topo1/test_isis_topo1.dot
+++ b/tests/topotests/isis_topo1/test_isis_topo1.dot
diff --git a/tests/topotests/isis-topo1/test_isis_topo1.jpg b/tests/topotests/isis_topo1/test_isis_topo1.jpg
index 4ad730f2a0..4ad730f2a0 100644
--- a/tests/topotests/isis-topo1/test_isis_topo1.jpg
+++ b/tests/topotests/isis_topo1/test_isis_topo1.jpg
Binary files differ
diff --git a/tests/topotests/isis-topo1/test_isis_topo1.py b/tests/topotests/isis_topo1/test_isis_topo1.py
index e7618c7bce..083a8b1e8d 100644
--- a/tests/topotests/isis-topo1/test_isis_topo1.py
+++ b/tests/topotests/isis_topo1/test_isis_topo1.py
@@ -47,6 +47,20 @@ from mininet.topo import Topo
pytestmark = [pytest.mark.isisd]
+VERTEX_TYPE_LIST = [
+ "pseudo_IS",
+ "pseudo_TE-IS",
+ "IS",
+ "TE-IS",
+ "ES",
+ "IP internal",
+ "IP external",
+ "IP TE",
+ "IP6 internal",
+ "IP6 external",
+ "UNKNOWN",
+]
+
class ISISTopo1(Topo):
"Simple two layer ISIS topology"
@@ -263,6 +277,7 @@ def parse_topology(lines, level):
areas = {}
area = None
ipv = None
+ vertex_type_regex = "|".join(VERTEX_TYPE_LIST)
for line in lines:
area_match = re.match(r"Area (.+):", line)
@@ -282,44 +297,57 @@ def parse_topology(lines, level):
ipv = "ipv4"
continue
- item_match = re.match(r"([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)", line)
- if item_match is not None:
+ item_match = re.match(
+ r"([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+)", line
+ )
+ if (
+ item_match is not None
+ and item_match.group(1) == "Vertex"
+ and item_match.group(2) == "Type"
+ and item_match.group(3) == "Metric"
+ and item_match.group(4) == "Next-Hop"
+ and item_match.group(5) == "Interface"
+ and item_match.group(6) == "Parent"
+ ):
# Skip header
- if (
- item_match.group(1) == "Vertex"
- and item_match.group(2) == "Type"
- and item_match.group(3) == "Metric"
- and item_match.group(4) == "Next-Hop"
- and item_match.group(5) == "Interface"
- and item_match.group(6) == "Parent"
- ):
- continue
+ continue
+ item_match = re.match(
+ r"([^\s]+) ({}) ([0]|([1-9][0-9]*)) ([^\s]+) ([^\s]+) ([^\s]+)".format(
+ vertex_type_regex
+ ),
+ line,
+ )
+ if item_match is not None:
areas[area][level][ipv].append(
{
"vertex": item_match.group(1),
"type": item_match.group(2),
"metric": item_match.group(3),
- "next-hop": item_match.group(4),
- "interface": item_match.group(5),
- "parent": item_match.group(6),
+ "next-hop": item_match.group(5),
+ "interface": item_match.group(6),
+ "parent": item_match.group(7),
}
)
continue
- item_match = re.match(r"([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)", line)
+ item_match = re.match(
+ r"([^\s]+) ({}) ([0]|([1-9][0-9]*)) ([^\s]+)".format(vertex_type_regex),
+ line,
+ )
+
if item_match is not None:
areas[area][level][ipv].append(
{
"vertex": item_match.group(1),
"type": item_match.group(2),
"metric": item_match.group(3),
- "parent": item_match.group(4),
+ "parent": item_match.group(5),
}
)
continue
- item_match = re.match(r"([^ ]+)", line)
+ item_match = re.match(r"([^\s]+)", line)
if item_match is not None:
areas[area][level][ipv].append({"vertex": item_match.group(1)})
continue
diff --git a/tests/topotests/multicast-pim-static-rp-topo1/__init__.py b/tests/topotests/isis_topo1_vrf/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/multicast-pim-static-rp-topo1/__init__.py
+++ b/tests/topotests/isis_topo1_vrf/__init__.py
diff --git a/tests/topotests/isis-topo1-vrf/r1/isisd.conf b/tests/topotests/isis_topo1_vrf/r1/isisd.conf
index 5fb4c14d0b..5fb4c14d0b 100755
--- a/tests/topotests/isis-topo1-vrf/r1/isisd.conf
+++ b/tests/topotests/isis_topo1_vrf/r1/isisd.conf
diff --git a/tests/topotests/isis-topo1-vrf/r1/r1_route.json b/tests/topotests/isis_topo1_vrf/r1/r1_route.json
index f0a3593a4c..f0a3593a4c 100644
--- a/tests/topotests/isis-topo1-vrf/r1/r1_route.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_route.json
diff --git a/tests/topotests/isis-topo1-vrf/r1/r1_route6.json b/tests/topotests/isis_topo1_vrf/r1/r1_route6.json
index 888b9e2c42..888b9e2c42 100644
--- a/tests/topotests/isis-topo1-vrf/r1/r1_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_route6.json
diff --git a/tests/topotests/isis-topo1-vrf/r1/r1_route6_linux.json b/tests/topotests/isis_topo1_vrf/r1/r1_route6_linux.json
index d1ace402ba..d1ace402ba 100755
--- a/tests/topotests/isis-topo1-vrf/r1/r1_route6_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_route6_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r1/r1_route_linux.json b/tests/topotests/isis_topo1_vrf/r1/r1_route_linux.json
index 6af22297e9..6af22297e9 100755
--- a/tests/topotests/isis-topo1-vrf/r1/r1_route_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_route_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r1/r1_topology.json b/tests/topotests/isis_topo1_vrf/r1/r1_topology.json
index 1a6fe6d5c6..1a6fe6d5c6 100644
--- a/tests/topotests/isis-topo1-vrf/r1/r1_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r1/r1_topology.json
diff --git a/tests/topotests/isis-topo1-vrf/r1/zebra.conf b/tests/topotests/isis_topo1_vrf/r1/zebra.conf
index fa1c02e5f8..fa1c02e5f8 100755
--- a/tests/topotests/isis-topo1-vrf/r1/zebra.conf
+++ b/tests/topotests/isis_topo1_vrf/r1/zebra.conf
diff --git a/tests/topotests/isis-topo1-vrf/r2/isisd.conf b/tests/topotests/isis_topo1_vrf/r2/isisd.conf
index 0d2bc7ab72..0d2bc7ab72 100755
--- a/tests/topotests/isis-topo1-vrf/r2/isisd.conf
+++ b/tests/topotests/isis_topo1_vrf/r2/isisd.conf
diff --git a/tests/topotests/isis-topo1-vrf/r2/r2_route.json b/tests/topotests/isis_topo1_vrf/r2/r2_route.json
index a26cdfad8e..a26cdfad8e 100644
--- a/tests/topotests/isis-topo1-vrf/r2/r2_route.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_route.json
diff --git a/tests/topotests/isis-topo1-vrf/r2/r2_route6.json b/tests/topotests/isis_topo1_vrf/r2/r2_route6.json
index b01789b8d9..b01789b8d9 100644
--- a/tests/topotests/isis-topo1-vrf/r2/r2_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_route6.json
diff --git a/tests/topotests/isis-topo1-vrf/r2/r2_route6_linux.json b/tests/topotests/isis_topo1_vrf/r2/r2_route6_linux.json
index 27423e1936..27423e1936 100755
--- a/tests/topotests/isis-topo1-vrf/r2/r2_route6_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_route6_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r2/r2_route_linux.json b/tests/topotests/isis_topo1_vrf/r2/r2_route_linux.json
index 744b0780f3..744b0780f3 100755
--- a/tests/topotests/isis-topo1-vrf/r2/r2_route_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_route_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r2/r2_topology.json b/tests/topotests/isis_topo1_vrf/r2/r2_topology.json
index a77f7977f9..a77f7977f9 100644
--- a/tests/topotests/isis-topo1-vrf/r2/r2_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r2/r2_topology.json
diff --git a/tests/topotests/isis-topo1-vrf/r2/zebra.conf b/tests/topotests/isis_topo1_vrf/r2/zebra.conf
index a62af1749e..a62af1749e 100755
--- a/tests/topotests/isis-topo1-vrf/r2/zebra.conf
+++ b/tests/topotests/isis_topo1_vrf/r2/zebra.conf
diff --git a/tests/topotests/isis-topo1-vrf/r3/isisd.conf b/tests/topotests/isis_topo1_vrf/r3/isisd.conf
index 66092407ab..66092407ab 100755
--- a/tests/topotests/isis-topo1-vrf/r3/isisd.conf
+++ b/tests/topotests/isis_topo1_vrf/r3/isisd.conf
diff --git a/tests/topotests/isis-topo1-vrf/r3/r3_route.json b/tests/topotests/isis_topo1_vrf/r3/r3_route.json
index 9717df5c1a..9717df5c1a 100644
--- a/tests/topotests/isis-topo1-vrf/r3/r3_route.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_route.json
diff --git a/tests/topotests/isis-topo1-vrf/r3/r3_route6.json b/tests/topotests/isis_topo1_vrf/r3/r3_route6.json
index 31a1e4620f..31a1e4620f 100644
--- a/tests/topotests/isis-topo1-vrf/r3/r3_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_route6.json
diff --git a/tests/topotests/isis-topo1-vrf/r3/r3_route6_linux.json b/tests/topotests/isis_topo1_vrf/r3/r3_route6_linux.json
index bc527d2e1e..bc527d2e1e 100755
--- a/tests/topotests/isis-topo1-vrf/r3/r3_route6_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_route6_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r3/r3_route_linux.json b/tests/topotests/isis_topo1_vrf/r3/r3_route_linux.json
index 515d376475..515d376475 100755
--- a/tests/topotests/isis-topo1-vrf/r3/r3_route_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_route_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r3/r3_topology.json b/tests/topotests/isis_topo1_vrf/r3/r3_topology.json
index 1e5d331965..1e5d331965 100644
--- a/tests/topotests/isis-topo1-vrf/r3/r3_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r3/r3_topology.json
diff --git a/tests/topotests/isis-topo1-vrf/r3/zebra.conf b/tests/topotests/isis_topo1_vrf/r3/zebra.conf
index ac0b810fce..ac0b810fce 100755
--- a/tests/topotests/isis-topo1-vrf/r3/zebra.conf
+++ b/tests/topotests/isis_topo1_vrf/r3/zebra.conf
diff --git a/tests/topotests/isis-topo1-vrf/r4/isisd.conf b/tests/topotests/isis_topo1_vrf/r4/isisd.conf
index 05815e8418..05815e8418 100755
--- a/tests/topotests/isis-topo1-vrf/r4/isisd.conf
+++ b/tests/topotests/isis_topo1_vrf/r4/isisd.conf
diff --git a/tests/topotests/isis-topo1-vrf/r4/r4_route.json b/tests/topotests/isis_topo1_vrf/r4/r4_route.json
index 6cb79b0301..6cb79b0301 100644
--- a/tests/topotests/isis-topo1-vrf/r4/r4_route.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_route.json
diff --git a/tests/topotests/isis-topo1-vrf/r4/r4_route6.json b/tests/topotests/isis_topo1_vrf/r4/r4_route6.json
index 88a91749c2..88a91749c2 100644
--- a/tests/topotests/isis-topo1-vrf/r4/r4_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_route6.json
diff --git a/tests/topotests/isis-topo1-vrf/r4/r4_route6_linux.json b/tests/topotests/isis_topo1_vrf/r4/r4_route6_linux.json
index b1cd5b9db9..b1cd5b9db9 100755
--- a/tests/topotests/isis-topo1-vrf/r4/r4_route6_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_route6_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r4/r4_route_linux.json b/tests/topotests/isis_topo1_vrf/r4/r4_route_linux.json
index 3198b85789..3198b85789 100755
--- a/tests/topotests/isis-topo1-vrf/r4/r4_route_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_route_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r4/r4_topology.json b/tests/topotests/isis_topo1_vrf/r4/r4_topology.json
index 34f5ac9ca4..34f5ac9ca4 100644
--- a/tests/topotests/isis-topo1-vrf/r4/r4_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r4/r4_topology.json
diff --git a/tests/topotests/isis-topo1-vrf/r4/zebra.conf b/tests/topotests/isis_topo1_vrf/r4/zebra.conf
index 9c8941f7a5..9c8941f7a5 100755
--- a/tests/topotests/isis-topo1-vrf/r4/zebra.conf
+++ b/tests/topotests/isis_topo1_vrf/r4/zebra.conf
diff --git a/tests/topotests/isis-topo1-vrf/r5/isisd.conf b/tests/topotests/isis_topo1_vrf/r5/isisd.conf
index f663c33fe9..f663c33fe9 100755
--- a/tests/topotests/isis-topo1-vrf/r5/isisd.conf
+++ b/tests/topotests/isis_topo1_vrf/r5/isisd.conf
diff --git a/tests/topotests/isis-topo1-vrf/r5/r5_route.json b/tests/topotests/isis_topo1_vrf/r5/r5_route.json
index 5efa36bce6..5efa36bce6 100644
--- a/tests/topotests/isis-topo1-vrf/r5/r5_route.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_route.json
diff --git a/tests/topotests/isis-topo1-vrf/r5/r5_route6.json b/tests/topotests/isis_topo1_vrf/r5/r5_route6.json
index 5e8f6364af..5e8f6364af 100644
--- a/tests/topotests/isis-topo1-vrf/r5/r5_route6.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_route6.json
diff --git a/tests/topotests/isis-topo1-vrf/r5/r5_route6_linux.json b/tests/topotests/isis_topo1_vrf/r5/r5_route6_linux.json
index 3db3c93ea6..3db3c93ea6 100755
--- a/tests/topotests/isis-topo1-vrf/r5/r5_route6_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_route6_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r5/r5_route_linux.json b/tests/topotests/isis_topo1_vrf/r5/r5_route_linux.json
index 6a38ba864a..6a38ba864a 100755
--- a/tests/topotests/isis-topo1-vrf/r5/r5_route_linux.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_route_linux.json
diff --git a/tests/topotests/isis-topo1-vrf/r5/r5_topology.json b/tests/topotests/isis_topo1_vrf/r5/r5_topology.json
index ace56536e9..ace56536e9 100644
--- a/tests/topotests/isis-topo1-vrf/r5/r5_topology.json
+++ b/tests/topotests/isis_topo1_vrf/r5/r5_topology.json
diff --git a/tests/topotests/isis-topo1-vrf/r5/zebra.conf b/tests/topotests/isis_topo1_vrf/r5/zebra.conf
index c6bc6302fc..c6bc6302fc 100755
--- a/tests/topotests/isis-topo1-vrf/r5/zebra.conf
+++ b/tests/topotests/isis_topo1_vrf/r5/zebra.conf
diff --git a/tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.dot b/tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.dot
index 01f9ba780f..01f9ba780f 100755
--- a/tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.dot
+++ b/tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.dot
diff --git a/tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.jpg b/tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.jpg
index 4ad730f2a0..4ad730f2a0 100755
--- a/tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.jpg
+++ b/tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.jpg
Binary files differ
diff --git a/tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.py b/tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.py
index b7fe0c2ddb..b7fe0c2ddb 100644
--- a/tests/topotests/isis-topo1-vrf/test_isis_topo1_vrf.py
+++ b/tests/topotests/isis_topo1_vrf/test_isis_topo1_vrf.py
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/ldpd.conf b/tests/topotests/ldp_oc_acl_topo1/r1/ldpd.conf
index 85bb970fdf..85bb970fdf 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/ldpd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/ldpd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/ospfd.conf b/tests/topotests/ldp_oc_acl_topo1/r1/ospfd.conf
index 877e14ff36..877e14ff36 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/ospfd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/ospfd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_acl_topo1/r1/show_ip_ospf_neighbor.json
index aa3f74fc5f..aa3f74fc5f 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_route.ref b/tests/topotests/ldp_oc_acl_topo1/r1/show_ip_route.ref
index 2131668fc3..2131668fc3 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_all_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_all_binding.ref
index 99a59668f8..99a59668f8 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_all_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_all_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_binding.ref
index ccc8413646..ccc8413646 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_discovery.ref
index b349f4418f..b349f4418f 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_neighbor.ref
index 4bff444a46..4bff444a46 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r1/zebra.conf b/tests/topotests/ldp_oc_acl_topo1/r1/zebra.conf
index 83aea46e64..83aea46e64 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r1/zebra.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r1/zebra.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/ldpd.conf b/tests/topotests/ldp_oc_acl_topo1/r2/ldpd.conf
index e1a552c701..e1a552c701 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/ldpd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/ldpd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/ospfd.conf b/tests/topotests/ldp_oc_acl_topo1/r2/ospfd.conf
index 8cba1529e8..8cba1529e8 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/ospfd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/ospfd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_acl_topo1/r2/show_ip_ospf_neighbor.json
index aa68198957..aa68198957 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_route.ref b/tests/topotests/ldp_oc_acl_topo1/r2/show_ip_route.ref
index 4b1d31a5d3..4b1d31a5d3 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_all_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_all_binding.ref
index 95fb847c1e..95fb847c1e 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_all_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_all_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_binding.ref
index ea32de3eda..ea32de3eda 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_discovery.ref
index 8129570082..8129570082 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_neighbor.ref
index eed35289ea..eed35289ea 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r2/zebra.conf b/tests/topotests/ldp_oc_acl_topo1/r2/zebra.conf
index 1f1e3e391a..1f1e3e391a 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r2/zebra.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r2/zebra.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/ldpd.conf b/tests/topotests/ldp_oc_acl_topo1/r3/ldpd.conf
index 4e66b140ac..4e66b140ac 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/ldpd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/ldpd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/ospfd.conf b/tests/topotests/ldp_oc_acl_topo1/r3/ospfd.conf
index 0d3a74c4ac..0d3a74c4ac 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/ospfd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/ospfd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_acl_topo1/r3/show_ip_ospf_neighbor.json
index 905774fc46..905774fc46 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_route.ref b/tests/topotests/ldp_oc_acl_topo1/r3/show_ip_route.ref
index 4d115caf3e..4d115caf3e 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_all_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_all_binding.ref
index 100dd307ea..100dd307ea 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_all_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_all_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_binding.ref
index bb1b2b3023..bb1b2b3023 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_discovery.ref
index c3a07e7e38..c3a07e7e38 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_neighbor.ref
index 4bff444a46..4bff444a46 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r3/zebra.conf b/tests/topotests/ldp_oc_acl_topo1/r3/zebra.conf
index 234c215ddf..234c215ddf 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r3/zebra.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r3/zebra.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/ldpd.conf b/tests/topotests/ldp_oc_acl_topo1/r4/ldpd.conf
index 6b7d28f983..6b7d28f983 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/ldpd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/ldpd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/ospfd.conf b/tests/topotests/ldp_oc_acl_topo1/r4/ospfd.conf
index 7bbd228d02..7bbd228d02 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/ospfd.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/ospfd.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_acl_topo1/r4/show_ip_ospf_neighbor.json
index 67593952ca..67593952ca 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_route.ref b/tests/topotests/ldp_oc_acl_topo1/r4/show_ip_route.ref
index 223cbded84..223cbded84 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_all_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_all_binding.ref
index 2a46c40346..2a46c40346 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_all_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_all_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_binding.ref b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_binding.ref
index 2a46c40346..2a46c40346 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_discovery.ref b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_discovery.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_neighbor.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-acl-topo1/r4/zebra.conf b/tests/topotests/ldp_oc_acl_topo1/r4/zebra.conf
index 7e291053e5..7e291053e5 100644
--- a/tests/topotests/ldp-oc-acl-topo1/r4/zebra.conf
+++ b/tests/topotests/ldp_oc_acl_topo1/r4/zebra.conf
diff --git a/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.dot b/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.dot
index 62058e3cb1..62058e3cb1 100644
--- a/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.dot
+++ b/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.dot
diff --git a/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.py b/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py
index 9aa4024598..9aa4024598 100644
--- a/tests/topotests/ldp-oc-acl-topo1/test_ldp_oc_acl_topo1.py
+++ b/tests/topotests/ldp_oc_acl_topo1/test_ldp_oc_acl_topo1.py
diff --git a/tests/topotests/ldp-oc-topo1/r1/ldpd.conf b/tests/topotests/ldp_oc_topo1/r1/ldpd.conf
index 2a8e023832..2a8e023832 100644
--- a/tests/topotests/ldp-oc-topo1/r1/ldpd.conf
+++ b/tests/topotests/ldp_oc_topo1/r1/ldpd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r1/ospfd.conf b/tests/topotests/ldp_oc_topo1/r1/ospfd.conf
index 877e14ff36..877e14ff36 100644
--- a/tests/topotests/ldp-oc-topo1/r1/ospfd.conf
+++ b/tests/topotests/ldp_oc_topo1/r1/ospfd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_topo1/r1/show_ip_ospf_neighbor.json
index aa3f74fc5f..aa3f74fc5f 100644
--- a/tests/topotests/ldp-oc-topo1/r1/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_topo1/r1/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ip_route.ref b/tests/topotests/ldp_oc_topo1/r1/show_ip_route.ref
index 2131668fc3..2131668fc3 100644
--- a/tests/topotests/ldp-oc-topo1/r1/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_topo1/r1/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp_oc_topo1/r1/show_ldp_binding.ref
index 99a59668f8..99a59668f8 100644
--- a/tests/topotests/ldp-oc-topo1/r1/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_topo1/r1/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp_oc_topo1/r1/show_ldp_discovery.ref
index b349f4418f..b349f4418f 100644
--- a/tests/topotests/ldp-oc-topo1/r1/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_topo1/r1/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_topo1/r1/show_ldp_neighbor.ref
index 4bff444a46..4bff444a46 100644
--- a/tests/topotests/ldp-oc-topo1/r1/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_topo1/r1/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-topo1/r1/zebra.conf b/tests/topotests/ldp_oc_topo1/r1/zebra.conf
index 83aea46e64..83aea46e64 100644
--- a/tests/topotests/ldp-oc-topo1/r1/zebra.conf
+++ b/tests/topotests/ldp_oc_topo1/r1/zebra.conf
diff --git a/tests/topotests/ldp-oc-topo1/r2/ldpd.conf b/tests/topotests/ldp_oc_topo1/r2/ldpd.conf
index e1a552c701..e1a552c701 100644
--- a/tests/topotests/ldp-oc-topo1/r2/ldpd.conf
+++ b/tests/topotests/ldp_oc_topo1/r2/ldpd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r2/ospfd.conf b/tests/topotests/ldp_oc_topo1/r2/ospfd.conf
index 8cba1529e8..8cba1529e8 100644
--- a/tests/topotests/ldp-oc-topo1/r2/ospfd.conf
+++ b/tests/topotests/ldp_oc_topo1/r2/ospfd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_topo1/r2/show_ip_ospf_neighbor.json
index aa68198957..aa68198957 100644
--- a/tests/topotests/ldp-oc-topo1/r2/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_topo1/r2/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ip_route.ref b/tests/topotests/ldp_oc_topo1/r2/show_ip_route.ref
index 4b1d31a5d3..4b1d31a5d3 100644
--- a/tests/topotests/ldp-oc-topo1/r2/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_topo1/r2/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp_oc_topo1/r2/show_ldp_binding.ref
index 95fb847c1e..95fb847c1e 100644
--- a/tests/topotests/ldp-oc-topo1/r2/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_topo1/r2/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp_oc_topo1/r2/show_ldp_discovery.ref
index 8129570082..8129570082 100644
--- a/tests/topotests/ldp-oc-topo1/r2/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_topo1/r2/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_topo1/r2/show_ldp_neighbor.ref
index eed35289ea..eed35289ea 100644
--- a/tests/topotests/ldp-oc-topo1/r2/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_topo1/r2/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-topo1/r2/zebra.conf b/tests/topotests/ldp_oc_topo1/r2/zebra.conf
index 1f1e3e391a..1f1e3e391a 100644
--- a/tests/topotests/ldp-oc-topo1/r2/zebra.conf
+++ b/tests/topotests/ldp_oc_topo1/r2/zebra.conf
diff --git a/tests/topotests/ldp-oc-topo1/r3/ldpd.conf b/tests/topotests/ldp_oc_topo1/r3/ldpd.conf
index 4e66b140ac..4e66b140ac 100644
--- a/tests/topotests/ldp-oc-topo1/r3/ldpd.conf
+++ b/tests/topotests/ldp_oc_topo1/r3/ldpd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r3/ospfd.conf b/tests/topotests/ldp_oc_topo1/r3/ospfd.conf
index 0d3a74c4ac..0d3a74c4ac 100644
--- a/tests/topotests/ldp-oc-topo1/r3/ospfd.conf
+++ b/tests/topotests/ldp_oc_topo1/r3/ospfd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_topo1/r3/show_ip_ospf_neighbor.json
index 905774fc46..905774fc46 100644
--- a/tests/topotests/ldp-oc-topo1/r3/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_topo1/r3/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ip_route.ref b/tests/topotests/ldp_oc_topo1/r3/show_ip_route.ref
index 4d115caf3e..4d115caf3e 100644
--- a/tests/topotests/ldp-oc-topo1/r3/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_topo1/r3/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp_oc_topo1/r3/show_ldp_binding.ref
index 100dd307ea..100dd307ea 100644
--- a/tests/topotests/ldp-oc-topo1/r3/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_topo1/r3/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp_oc_topo1/r3/show_ldp_discovery.ref
index c3a07e7e38..c3a07e7e38 100644
--- a/tests/topotests/ldp-oc-topo1/r3/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_topo1/r3/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_topo1/r3/show_ldp_neighbor.ref
index 4bff444a46..4bff444a46 100644
--- a/tests/topotests/ldp-oc-topo1/r3/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_topo1/r3/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-topo1/r3/zebra.conf b/tests/topotests/ldp_oc_topo1/r3/zebra.conf
index 234c215ddf..234c215ddf 100644
--- a/tests/topotests/ldp-oc-topo1/r3/zebra.conf
+++ b/tests/topotests/ldp_oc_topo1/r3/zebra.conf
diff --git a/tests/topotests/ldp-oc-topo1/r4/ldpd.conf b/tests/topotests/ldp_oc_topo1/r4/ldpd.conf
index 6b7d28f983..6b7d28f983 100644
--- a/tests/topotests/ldp-oc-topo1/r4/ldpd.conf
+++ b/tests/topotests/ldp_oc_topo1/r4/ldpd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r4/ospfd.conf b/tests/topotests/ldp_oc_topo1/r4/ospfd.conf
index 7bbd228d02..7bbd228d02 100644
--- a/tests/topotests/ldp-oc-topo1/r4/ospfd.conf
+++ b/tests/topotests/ldp_oc_topo1/r4/ospfd.conf
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ip_ospf_neighbor.json b/tests/topotests/ldp_oc_topo1/r4/show_ip_ospf_neighbor.json
index 67593952ca..67593952ca 100644
--- a/tests/topotests/ldp-oc-topo1/r4/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_oc_topo1/r4/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ip_route.ref b/tests/topotests/ldp_oc_topo1/r4/show_ip_route.ref
index 223cbded84..223cbded84 100644
--- a/tests/topotests/ldp-oc-topo1/r4/show_ip_route.ref
+++ b/tests/topotests/ldp_oc_topo1/r4/show_ip_route.ref
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ldp_binding.ref b/tests/topotests/ldp_oc_topo1/r4/show_ldp_binding.ref
index 2a46c40346..2a46c40346 100644
--- a/tests/topotests/ldp-oc-topo1/r4/show_ldp_binding.ref
+++ b/tests/topotests/ldp_oc_topo1/r4/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ldp_discovery.ref b/tests/topotests/ldp_oc_topo1/r4/show_ldp_discovery.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-oc-topo1/r4/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_oc_topo1/r4/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-oc-topo1/r4/show_ldp_neighbor.ref b/tests/topotests/ldp_oc_topo1/r4/show_ldp_neighbor.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-oc-topo1/r4/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_oc_topo1/r4/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-oc-topo1/r4/zebra.conf b/tests/topotests/ldp_oc_topo1/r4/zebra.conf
index 7e291053e5..7e291053e5 100644
--- a/tests/topotests/ldp-oc-topo1/r4/zebra.conf
+++ b/tests/topotests/ldp_oc_topo1/r4/zebra.conf
diff --git a/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.dot b/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.dot
index 62058e3cb1..62058e3cb1 100644
--- a/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.dot
+++ b/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.dot
diff --git a/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.py b/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py
index aef22c395d..aef22c395d 100644
--- a/tests/topotests/ldp-oc-topo1/test_ldp_oc_topo1.py
+++ b/tests/topotests/ldp_oc_topo1/test_ldp_oc_topo1.py
diff --git a/tests/topotests/ldp-snmp/ce1/zebra.conf b/tests/topotests/ldp_snmp/ce1/zebra.conf
index 6f165e2724..6f165e2724 100644
--- a/tests/topotests/ldp-snmp/ce1/zebra.conf
+++ b/tests/topotests/ldp_snmp/ce1/zebra.conf
diff --git a/tests/topotests/ldp-snmp/ce2/zebra.conf b/tests/topotests/ldp_snmp/ce2/zebra.conf
index ac02d0f9a4..ac02d0f9a4 100644
--- a/tests/topotests/ldp-snmp/ce2/zebra.conf
+++ b/tests/topotests/ldp_snmp/ce2/zebra.conf
diff --git a/tests/topotests/ldp-snmp/ce3/zebra.conf b/tests/topotests/ldp_snmp/ce3/zebra.conf
index c6a5824d15..c6a5824d15 100644
--- a/tests/topotests/ldp-snmp/ce3/zebra.conf
+++ b/tests/topotests/ldp_snmp/ce3/zebra.conf
diff --git a/tests/topotests/ldp-snmp/r1/isisd.conf b/tests/topotests/ldp_snmp/r1/isisd.conf
index da2970d94e..da2970d94e 100644
--- a/tests/topotests/ldp-snmp/r1/isisd.conf
+++ b/tests/topotests/ldp_snmp/r1/isisd.conf
diff --git a/tests/topotests/ldp-snmp/r1/ldpd.conf b/tests/topotests/ldp_snmp/r1/ldpd.conf
index 01fc039b09..01fc039b09 100644
--- a/tests/topotests/ldp-snmp/r1/ldpd.conf
+++ b/tests/topotests/ldp_snmp/r1/ldpd.conf
diff --git a/tests/topotests/ldp-snmp/r1/show_ip_route.ref b/tests/topotests/ldp_snmp/r1/show_ip_route.ref
index b1a55ba103..b1a55ba103 100644
--- a/tests/topotests/ldp-snmp/r1/show_ip_route.ref
+++ b/tests/topotests/ldp_snmp/r1/show_ip_route.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_isis_interface_detail.ref b/tests/topotests/ldp_snmp/r1/show_isis_interface_detail.ref
index d8fb27af8c..d8fb27af8c 100644
--- a/tests/topotests/ldp-snmp/r1/show_isis_interface_detail.ref
+++ b/tests/topotests/ldp_snmp/r1/show_isis_interface_detail.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_isis_interface_detail_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r1/show_isis_interface_detail_r1_eth1_shutdown.ref
index f77d65ebc1..f77d65ebc1 100644
--- a/tests/topotests/ldp-snmp/r1/show_isis_interface_detail_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r1/show_isis_interface_detail_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_isis_interface_detail_r2_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r1/show_isis_interface_detail_r2_eth1_shutdown.ref
index f77d65ebc1..f77d65ebc1 100644
--- a/tests/topotests/ldp-snmp/r1/show_isis_interface_detail_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r1/show_isis_interface_detail_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_isis_ldp_sync.ref b/tests/topotests/ldp_snmp/r1/show_isis_ldp_sync.ref
index b699e8c145..b699e8c145 100644
--- a/tests/topotests/ldp-snmp/r1/show_isis_ldp_sync.ref
+++ b/tests/topotests/ldp_snmp/r1/show_isis_ldp_sync.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref
index c28cd4cc7d..c28cd4cc7d 100644
--- a/tests/topotests/ldp-snmp/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref
index c63bbea77f..c63bbea77f 100644
--- a/tests/topotests/ldp-snmp/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_l2vpn_binding.ref b/tests/topotests/ldp_snmp/r1/show_l2vpn_binding.ref
index b3de7e2c66..b3de7e2c66 100644
--- a/tests/topotests/ldp-snmp/r1/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_snmp/r1/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_l2vpn_vc.ref b/tests/topotests/ldp_snmp/r1/show_l2vpn_vc.ref
index 29e9df1089..29e9df1089 100644
--- a/tests/topotests/ldp-snmp/r1/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_snmp/r1/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_ldp_binding.ref b/tests/topotests/ldp_snmp/r1/show_ldp_binding.ref
index b3a12ec53f..b3a12ec53f 100644
--- a/tests/topotests/ldp-snmp/r1/show_ldp_binding.ref
+++ b/tests/topotests/ldp_snmp/r1/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_ldp_discovery.ref b/tests/topotests/ldp_snmp/r1/show_ldp_discovery.ref
index 9301e60c67..9301e60c67 100644
--- a/tests/topotests/ldp-snmp/r1/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_snmp/r1/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_ldp_igp_sync.ref b/tests/topotests/ldp_snmp/r1/show_ldp_igp_sync.ref
index 54d015fef9..54d015fef9 100644
--- a/tests/topotests/ldp-snmp/r1/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_snmp/r1/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
index 2232069f68..2232069f68 100644
--- a/tests/topotests/ldp-snmp/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_ldp_neighbor.ref b/tests/topotests/ldp_snmp/r1/show_ldp_neighbor.ref
index 40d8ebeb90..40d8ebeb90 100644
--- a/tests/topotests/ldp-snmp/r1/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_snmp/r1/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-snmp/r1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/ldp_snmp/r1/show_yang_interface_isis_adjacencies.ref
index 6138d03672..6138d03672 100644
--- a/tests/topotests/ldp-snmp/r1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/ldp_snmp/r1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/ldp-snmp/r1/snmpd.conf b/tests/topotests/ldp_snmp/r1/snmpd.conf
index b37911da36..b37911da36 100644
--- a/tests/topotests/ldp-snmp/r1/snmpd.conf
+++ b/tests/topotests/ldp_snmp/r1/snmpd.conf
diff --git a/tests/topotests/ldp-snmp/r1/zebra.conf b/tests/topotests/ldp_snmp/r1/zebra.conf
index ea047355ad..ea047355ad 100644
--- a/tests/topotests/ldp-snmp/r1/zebra.conf
+++ b/tests/topotests/ldp_snmp/r1/zebra.conf
diff --git a/tests/topotests/ldp-snmp/r2/isisd.conf b/tests/topotests/ldp_snmp/r2/isisd.conf
index b29a2b93ee..b29a2b93ee 100644
--- a/tests/topotests/ldp-snmp/r2/isisd.conf
+++ b/tests/topotests/ldp_snmp/r2/isisd.conf
diff --git a/tests/topotests/ldp-snmp/r2/ldpd.conf b/tests/topotests/ldp_snmp/r2/ldpd.conf
index c93e1a6ac5..c93e1a6ac5 100644
--- a/tests/topotests/ldp-snmp/r2/ldpd.conf
+++ b/tests/topotests/ldp_snmp/r2/ldpd.conf
diff --git a/tests/topotests/ldp-snmp/r2/ospfd.conf b/tests/topotests/ldp_snmp/r2/ospfd.conf
index f93f6aed56..f93f6aed56 100644
--- a/tests/topotests/ldp-snmp/r2/ospfd.conf
+++ b/tests/topotests/ldp_snmp/r2/ospfd.conf
diff --git a/tests/topotests/ldp-snmp/r2/show_ip_route.ref b/tests/topotests/ldp_snmp/r2/show_ip_route.ref
index 04f141aba4..04f141aba4 100644
--- a/tests/topotests/ldp-snmp/r2/show_ip_route.ref
+++ b/tests/topotests/ldp_snmp/r2/show_ip_route.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_isis_interface_detail.ref b/tests/topotests/ldp_snmp/r2/show_isis_interface_detail.ref
index 844aa9402a..844aa9402a 100644
--- a/tests/topotests/ldp-snmp/r2/show_isis_interface_detail.ref
+++ b/tests/topotests/ldp_snmp/r2/show_isis_interface_detail.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_isis_interface_detail_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r2/show_isis_interface_detail_r1_eth1_shutdown.ref
index 821ec70ba5..821ec70ba5 100644
--- a/tests/topotests/ldp-snmp/r2/show_isis_interface_detail_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r2/show_isis_interface_detail_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_isis_interface_detail_r2_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r2/show_isis_interface_detail_r2_eth1_shutdown.ref
index 821ec70ba5..821ec70ba5 100644
--- a/tests/topotests/ldp-snmp/r2/show_isis_interface_detail_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r2/show_isis_interface_detail_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_isis_ldp_sync.ref b/tests/topotests/ldp_snmp/r2/show_isis_ldp_sync.ref
index 433d89bd16..433d89bd16 100644
--- a/tests/topotests/ldp-snmp/r2/show_isis_ldp_sync.ref
+++ b/tests/topotests/ldp_snmp/r2/show_isis_ldp_sync.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref
index 2f3eae47c8..2f3eae47c8 100644
--- a/tests/topotests/ldp-snmp/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref
index c3d97a3c73..c3d97a3c73 100644
--- a/tests/topotests/ldp-snmp/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_l2vpn_binding.ref b/tests/topotests/ldp_snmp/r2/show_l2vpn_binding.ref
index 42c5a1cbd9..42c5a1cbd9 100644
--- a/tests/topotests/ldp-snmp/r2/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_snmp/r2/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_l2vpn_vc.ref b/tests/topotests/ldp_snmp/r2/show_l2vpn_vc.ref
index 942ed23a1e..942ed23a1e 100644
--- a/tests/topotests/ldp-snmp/r2/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_snmp/r2/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_ldp_binding.ref b/tests/topotests/ldp_snmp/r2/show_ldp_binding.ref
index c641fb47e6..c641fb47e6 100644
--- a/tests/topotests/ldp-snmp/r2/show_ldp_binding.ref
+++ b/tests/topotests/ldp_snmp/r2/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_ldp_discovery.ref b/tests/topotests/ldp_snmp/r2/show_ldp_discovery.ref
index 26801acade..26801acade 100644
--- a/tests/topotests/ldp-snmp/r2/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_snmp/r2/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_ldp_igp_sync.ref b/tests/topotests/ldp_snmp/r2/show_ldp_igp_sync.ref
index f2b24d7d62..f2b24d7d62 100644
--- a/tests/topotests/ldp-snmp/r2/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_snmp/r2/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
index b5508dd35c..b5508dd35c 100644
--- a/tests/topotests/ldp-snmp/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref
index f2b24d7d62..f2b24d7d62 100644
--- a/tests/topotests/ldp-snmp/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_ldp_neighbor.ref b/tests/topotests/ldp_snmp/r2/show_ldp_neighbor.ref
index eed35289ea..eed35289ea 100644
--- a/tests/topotests/ldp-snmp/r2/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_snmp/r2/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-snmp/r2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/ldp_snmp/r2/show_yang_interface_isis_adjacencies.ref
index 4dd6ddd76b..4dd6ddd76b 100644
--- a/tests/topotests/ldp-snmp/r2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/ldp_snmp/r2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/ldp-snmp/r2/snmpd.conf b/tests/topotests/ldp_snmp/r2/snmpd.conf
index 0f779b8b91..0f779b8b91 100644
--- a/tests/topotests/ldp-snmp/r2/snmpd.conf
+++ b/tests/topotests/ldp_snmp/r2/snmpd.conf
diff --git a/tests/topotests/ldp-snmp/r2/zebra.conf b/tests/topotests/ldp_snmp/r2/zebra.conf
index c244442876..c244442876 100644
--- a/tests/topotests/ldp-snmp/r2/zebra.conf
+++ b/tests/topotests/ldp_snmp/r2/zebra.conf
diff --git a/tests/topotests/ldp-snmp/r3/isisd.conf b/tests/topotests/ldp_snmp/r3/isisd.conf
index 4c8499f23d..4c8499f23d 100644
--- a/tests/topotests/ldp-snmp/r3/isisd.conf
+++ b/tests/topotests/ldp_snmp/r3/isisd.conf
diff --git a/tests/topotests/ldp-snmp/r3/ldpd.conf b/tests/topotests/ldp_snmp/r3/ldpd.conf
index b7eeb258f1..b7eeb258f1 100644
--- a/tests/topotests/ldp-snmp/r3/ldpd.conf
+++ b/tests/topotests/ldp_snmp/r3/ldpd.conf
diff --git a/tests/topotests/ldp-snmp/r3/show_ip_route.ref b/tests/topotests/ldp_snmp/r3/show_ip_route.ref
index 22504046ed..22504046ed 100644
--- a/tests/topotests/ldp-snmp/r3/show_ip_route.ref
+++ b/tests/topotests/ldp_snmp/r3/show_ip_route.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_isis_interface_detail.ref b/tests/topotests/ldp_snmp/r3/show_isis_interface_detail.ref
index e323f61f25..e323f61f25 100644
--- a/tests/topotests/ldp-snmp/r3/show_isis_interface_detail.ref
+++ b/tests/topotests/ldp_snmp/r3/show_isis_interface_detail.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_isis_interface_detail_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r3/show_isis_interface_detail_r1_eth1_shutdown.ref
index e323f61f25..e323f61f25 100644
--- a/tests/topotests/ldp-snmp/r3/show_isis_interface_detail_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r3/show_isis_interface_detail_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_isis_interface_detail_r2_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r3/show_isis_interface_detail_r2_eth1_shutdown.ref
index e323f61f25..e323f61f25 100644
--- a/tests/topotests/ldp-snmp/r3/show_isis_interface_detail_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r3/show_isis_interface_detail_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_isis_ldp_sync.ref b/tests/topotests/ldp_snmp/r3/show_isis_ldp_sync.ref
index 9cb70a4758..9cb70a4758 100644
--- a/tests/topotests/ldp-snmp/r3/show_isis_ldp_sync.ref
+++ b/tests/topotests/ldp_snmp/r3/show_isis_ldp_sync.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref
index 9cb70a4758..9cb70a4758 100644
--- a/tests/topotests/ldp-snmp/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref
index 9cb70a4758..9cb70a4758 100644
--- a/tests/topotests/ldp-snmp/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_l2vpn_binding.ref b/tests/topotests/ldp_snmp/r3/show_l2vpn_binding.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-snmp/r3/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_snmp/r3/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_l2vpn_vc.ref b/tests/topotests/ldp_snmp/r3/show_l2vpn_vc.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-snmp/r3/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_snmp/r3/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_ldp_binding.ref b/tests/topotests/ldp_snmp/r3/show_ldp_binding.ref
index e54bd6e755..e54bd6e755 100644
--- a/tests/topotests/ldp-snmp/r3/show_ldp_binding.ref
+++ b/tests/topotests/ldp_snmp/r3/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_ldp_discovery.ref b/tests/topotests/ldp_snmp/r3/show_ldp_discovery.ref
index 42fa98d4da..42fa98d4da 100644
--- a/tests/topotests/ldp-snmp/r3/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_snmp/r3/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_ldp_igp_sync.ref b/tests/topotests/ldp_snmp/r3/show_ldp_igp_sync.ref
index 73261830c9..73261830c9 100644
--- a/tests/topotests/ldp-snmp/r3/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_snmp/r3/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_snmp/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
index 73261830c9..73261830c9 100644
--- a/tests/topotests/ldp-snmp/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_snmp/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_ldp_neighbor.ref b/tests/topotests/ldp_snmp/r3/show_ldp_neighbor.ref
index 5c482da697..5c482da697 100644
--- a/tests/topotests/ldp-snmp/r3/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_snmp/r3/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-snmp/r3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/ldp_snmp/r3/show_yang_interface_isis_adjacencies.ref
index 0922192361..0922192361 100644
--- a/tests/topotests/ldp-snmp/r3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/ldp_snmp/r3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/ldp-snmp/r3/zebra.conf b/tests/topotests/ldp_snmp/r3/zebra.conf
index b1919bd296..b1919bd296 100644
--- a/tests/topotests/ldp-snmp/r3/zebra.conf
+++ b/tests/topotests/ldp_snmp/r3/zebra.conf
diff --git a/tests/topotests/ldp-snmp/test_ldp_snmp_topo1.py b/tests/topotests/ldp_snmp/test_ldp_snmp_topo1.py
index f47d906157..f47d906157 100644
--- a/tests/topotests/ldp-snmp/test_ldp_snmp_topo1.py
+++ b/tests/topotests/ldp_snmp/test_ldp_snmp_topo1.py
diff --git a/tests/topotests/ldp-sync-isis-topo1/ce1/zebra.conf b/tests/topotests/ldp_sync_isis_topo1/ce1/zebra.conf
index 6f165e2724..6f165e2724 100644
--- a/tests/topotests/ldp-sync-isis-topo1/ce1/zebra.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/ce1/zebra.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/ce2/zebra.conf b/tests/topotests/ldp_sync_isis_topo1/ce2/zebra.conf
index ac02d0f9a4..ac02d0f9a4 100644
--- a/tests/topotests/ldp-sync-isis-topo1/ce2/zebra.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/ce2/zebra.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/ce3/zebra.conf b/tests/topotests/ldp_sync_isis_topo1/ce3/zebra.conf
index c6a5824d15..c6a5824d15 100644
--- a/tests/topotests/ldp-sync-isis-topo1/ce3/zebra.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/ce3/zebra.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/isisd.conf b/tests/topotests/ldp_sync_isis_topo1/r1/isisd.conf
index da2970d94e..da2970d94e 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/isisd.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/isisd.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/ldpd.conf b/tests/topotests/ldp_sync_isis_topo1/r1/ldpd.conf
index b9c32d3000..b9c32d3000 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/ldpd.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/ldpd.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_ip_route.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_ip_route.ref
index b1a55ba103..b1a55ba103 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_ip_route.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_ip_route.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail.ref
index d8fb27af8c..d8fb27af8c 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail_r1_eth1_shutdown.ref
index f77d65ebc1..f77d65ebc1 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail_r2_eth1_shutdown.ref
index f77d65ebc1..f77d65ebc1 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_interface_detail_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_interface_detail_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync.ref
index b699e8c145..b699e8c145 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref
index c28cd4cc7d..c28cd4cc7d 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref
index c63bbea77f..c63bbea77f 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_isis_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_l2vpn_binding.ref
index b3de7e2c66..b3de7e2c66 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_l2vpn_vc.ref
index 29e9df1089..29e9df1089 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_binding.ref
index b3a12ec53f..b3a12ec53f 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_binding.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_discovery.ref
index 9301e60c67..9301e60c67 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_igp_sync.ref
index 54d015fef9..54d015fef9 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
index 2232069f68..2232069f68 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_neighbor.ref
index 40d8ebeb90..40d8ebeb90 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/show_yang_interface_isis_adjacencies.ref b/tests/topotests/ldp_sync_isis_topo1/r1/show_yang_interface_isis_adjacencies.ref
index 6138d03672..6138d03672 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r1/zebra.conf b/tests/topotests/ldp_sync_isis_topo1/r1/zebra.conf
index ea047355ad..ea047355ad 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r1/zebra.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r1/zebra.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/isisd.conf b/tests/topotests/ldp_sync_isis_topo1/r2/isisd.conf
index b29a2b93ee..b29a2b93ee 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/isisd.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/isisd.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/ldpd.conf b/tests/topotests/ldp_sync_isis_topo1/r2/ldpd.conf
index 52398b1b72..52398b1b72 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/ldpd.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/ldpd.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_ip_route.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_ip_route.ref
index 04f141aba4..04f141aba4 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_ip_route.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_ip_route.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail.ref
index 844aa9402a..844aa9402a 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail_r1_eth1_shutdown.ref
index 821ec70ba5..821ec70ba5 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail_r2_eth1_shutdown.ref
index 821ec70ba5..821ec70ba5 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_interface_detail_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_interface_detail_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync.ref
index 433d89bd16..433d89bd16 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref
index 2f3eae47c8..2f3eae47c8 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref
index c3d97a3c73..c3d97a3c73 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_isis_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_l2vpn_binding.ref
index 42c5a1cbd9..42c5a1cbd9 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_l2vpn_vc.ref
index 942ed23a1e..942ed23a1e 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_binding.ref
index c641fb47e6..c641fb47e6 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_binding.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_discovery.ref
index 26801acade..26801acade 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync.ref
index f2b24d7d62..f2b24d7d62 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
index b5508dd35c..b5508dd35c 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref
index f2b24d7d62..f2b24d7d62 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_igp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_neighbor.ref
index eed35289ea..eed35289ea 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/show_yang_interface_isis_adjacencies.ref b/tests/topotests/ldp_sync_isis_topo1/r2/show_yang_interface_isis_adjacencies.ref
index 4dd6ddd76b..4dd6ddd76b 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r2/zebra.conf b/tests/topotests/ldp_sync_isis_topo1/r2/zebra.conf
index c244442876..c244442876 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r2/zebra.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r2/zebra.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/isisd.conf b/tests/topotests/ldp_sync_isis_topo1/r3/isisd.conf
index 4c8499f23d..4c8499f23d 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/isisd.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/isisd.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/ldpd.conf b/tests/topotests/ldp_sync_isis_topo1/r3/ldpd.conf
index 2935caf13b..2935caf13b 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/ldpd.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/ldpd.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_ip_route.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_ip_route.ref
index 22504046ed..22504046ed 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_ip_route.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_ip_route.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail.ref
index e323f61f25..e323f61f25 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail_r1_eth1_shutdown.ref
index e323f61f25..e323f61f25 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail_r2_eth1_shutdown.ref
index e323f61f25..e323f61f25 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_interface_detail_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_interface_detail_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync.ref
index 7180f84d1a..7180f84d1a 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref
index 7180f84d1a..7180f84d1a 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref
index 7180f84d1a..7180f84d1a 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_isis_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_l2vpn_binding.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_l2vpn_vc.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_binding.ref
index e54bd6e755..e54bd6e755 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_binding.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_discovery.ref
index 42fa98d4da..42fa98d4da 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_igp_sync.ref
index 73261830c9..73261830c9 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
index 73261830c9..73261830c9 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_neighbor.ref
index 5c482da697..5c482da697 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/show_yang_interface_isis_adjacencies.ref b/tests/topotests/ldp_sync_isis_topo1/r3/show_yang_interface_isis_adjacencies.ref
index 0922192361..0922192361 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/show_yang_interface_isis_adjacencies.ref
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/show_yang_interface_isis_adjacencies.ref
diff --git a/tests/topotests/ldp-sync-isis-topo1/r3/zebra.conf b/tests/topotests/ldp_sync_isis_topo1/r3/zebra.conf
index b1919bd296..b1919bd296 100644
--- a/tests/topotests/ldp-sync-isis-topo1/r3/zebra.conf
+++ b/tests/topotests/ldp_sync_isis_topo1/r3/zebra.conf
diff --git a/tests/topotests/ldp-sync-isis-topo1/test_ldp_sync_isis_topo1.dot b/tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.dot
index 4f1bd22f7c..4f1bd22f7c 100644
--- a/tests/topotests/ldp-sync-isis-topo1/test_ldp_sync_isis_topo1.dot
+++ b/tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.dot
diff --git a/tests/topotests/ldp-sync-isis-topo1/test_ldp_sync_isis_topo1.py b/tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.py
index 331e6fafd4..331e6fafd4 100644
--- a/tests/topotests/ldp-sync-isis-topo1/test_ldp_sync_isis_topo1.py
+++ b/tests/topotests/ldp_sync_isis_topo1/test_ldp_sync_isis_topo1.py
diff --git a/tests/topotests/ldp-sync-ospf-topo1/ce1/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/ce1/zebra.conf
index 6f165e2724..6f165e2724 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/ce1/zebra.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/ce1/zebra.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/ce2/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/ce2/zebra.conf
index ac02d0f9a4..ac02d0f9a4 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/ce2/zebra.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/ce2/zebra.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/ce3/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/ce3/zebra.conf
index c6a5824d15..c6a5824d15 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/ce3/zebra.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/ce3/zebra.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/ldpd.conf b/tests/topotests/ldp_sync_ospf_topo1/r1/ldpd.conf
index b9c32d3000..b9c32d3000 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/ldpd.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/ldpd.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/ospf-nbrs.txt b/tests/topotests/ldp_sync_ospf_topo1/r1/ospf-nbrs.txt
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/ospf-nbrs.txt
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/ospf-nbrs.txt
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/ospfd.conf b/tests/topotests/ldp_sync_ospf_topo1/r1/ospfd.conf
index eefcd1e71c..eefcd1e71c 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/ospfd.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/ospfd.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface.ref
index 8b2884786d..8b2884786d 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref
index b1a263e422..b1a263e422 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref
index 0c147338e3..0c147338e3 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_interface_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_neighbor.json b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_neighbor.json
index 3bfda39071..3bfda39071 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_route.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_route.ref
index fdb81f212d..fdb81f212d 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ip_route.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ip_route.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_binding.ref
index b3de7e2c66..b3de7e2c66 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_vc.ref
index 29e9df1089..29e9df1089 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_binding.ref
index b3a12ec53f..b3a12ec53f 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_binding.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_discovery.ref
index 9301e60c67..9301e60c67 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync.ref
index 54d015fef9..54d015fef9 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
index 2232069f68..2232069f68 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_neighbor.ref
index 40d8ebeb90..40d8ebeb90 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync.ref
index 3782071bf9..3782071bf9 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref
index c2642c6483..c2642c6483 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref
index 6f180b048a..6f180b048a 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/show_ospf_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r1/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/r1/zebra.conf
index ea047355ad..ea047355ad 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r1/zebra.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r1/zebra.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/ldpd.conf b/tests/topotests/ldp_sync_ospf_topo1/r2/ldpd.conf
index 52398b1b72..52398b1b72 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/ldpd.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/ldpd.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/ospfd.conf b/tests/topotests/ldp_sync_ospf_topo1/r2/ospfd.conf
index f93f6aed56..f93f6aed56 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/ospfd.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/ospfd.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface.ref
index 82806721e7..82806721e7 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref
index 71e8af1778..71e8af1778 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref
index af9a9c80e5..af9a9c80e5 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_interface_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_neighbor.json b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_neighbor.json
index 5b7a5ebbb9..5b7a5ebbb9 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_route.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_route.ref
index 6056feffe3..6056feffe3 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ip_route.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ip_route.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_binding.ref
index 42c5a1cbd9..42c5a1cbd9 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_vc.ref
index 942ed23a1e..942ed23a1e 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_binding.ref
index c641fb47e6..c641fb47e6 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_binding.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_discovery.ref
index 26801acade..26801acade 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync.ref
index f2b24d7d62..f2b24d7d62 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
index b5508dd35c..b5508dd35c 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_neighbor.ref
index eed35289ea..eed35289ea 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync.ref
index 6c27a10427..6c27a10427 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref
index 889f69ed7f..889f69ed7f 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref
index d9036e124b..d9036e124b 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r2/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/r2/zebra.conf
index c244442876..c244442876 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r2/zebra.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r2/zebra.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/ldpd.conf b/tests/topotests/ldp_sync_ospf_topo1/r3/ldpd.conf
index 2935caf13b..2935caf13b 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/ldpd.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/ldpd.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/ospfd.conf b/tests/topotests/ldp_sync_ospf_topo1/r3/ospfd.conf
index 09eea759ad..09eea759ad 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/ospfd.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/ospfd.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface.ref
index aec97b30cb..aec97b30cb 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref
index aec97b30cb..aec97b30cb 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref
index aec97b30cb..aec97b30cb 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_interface_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_neighbor.json b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_neighbor.json
index 1b29b9f947..1b29b9f947 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_route.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_route.ref
index fc96ada443..fc96ada443 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ip_route.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ip_route.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_l2vpn_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_binding.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_l2vpn_vc.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_vc.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_binding.ref
index e54bd6e755..e54bd6e755 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_binding.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_discovery.ref
index 42fa98d4da..42fa98d4da 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_igp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync.ref
index 73261830c9..73261830c9 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_igp_sync.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
index 73261830c9..73261830c9 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_igp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_neighbor.ref
index 5c482da697..5c482da697 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync.ref
index b417ab040a..b417ab040a 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref
index b417ab040a..b417ab040a 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref
index b417ab040a..b417ab040a 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref
diff --git a/tests/topotests/ldp-sync-ospf-topo1/r3/zebra.conf b/tests/topotests/ldp_sync_ospf_topo1/r3/zebra.conf
index b1919bd296..b1919bd296 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/r3/zebra.conf
+++ b/tests/topotests/ldp_sync_ospf_topo1/r3/zebra.conf
diff --git a/tests/topotests/ldp-sync-ospf-topo1/test_ldp_sync_ospf_topo1.dot b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.dot
index 4f1bd22f7c..4f1bd22f7c 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/test_ldp_sync_ospf_topo1.dot
+++ b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.dot
diff --git a/tests/topotests/ldp-sync-ospf-topo1/test_ldp_sync_ospf_topo1.py b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py
index 57b45e5fdf..57b45e5fdf 100644
--- a/tests/topotests/ldp-sync-ospf-topo1/test_ldp_sync_ospf_topo1.py
+++ b/tests/topotests/ldp_sync_ospf_topo1/test_ldp_sync_ospf_topo1.py
diff --git a/tests/topotests/ldp-topo1/r1/ip_mpls_route.ref b/tests/topotests/ldp_topo1/r1/ip_mpls_route.ref
index a13c1d459b..a13c1d459b 100644
--- a/tests/topotests/ldp-topo1/r1/ip_mpls_route.ref
+++ b/tests/topotests/ldp_topo1/r1/ip_mpls_route.ref
diff --git a/tests/topotests/ldp-topo1/r1/ldpd.conf b/tests/topotests/ldp_topo1/r1/ldpd.conf
index 3c6cbddc2a..3c6cbddc2a 100644
--- a/tests/topotests/ldp-topo1/r1/ldpd.conf
+++ b/tests/topotests/ldp_topo1/r1/ldpd.conf
diff --git a/tests/topotests/ldp-topo1/r1/ospfd.conf b/tests/topotests/ldp_topo1/r1/ospfd.conf
index 87d5703d9e..87d5703d9e 100644
--- a/tests/topotests/ldp-topo1/r1/ospfd.conf
+++ b/tests/topotests/ldp_topo1/r1/ospfd.conf
diff --git a/tests/topotests/ldp-topo1/r1/show_ipv4_route.ref b/tests/topotests/ldp_topo1/r1/show_ipv4_route.ref
index 7d398887c4..7d398887c4 100644
--- a/tests/topotests/ldp-topo1/r1/show_ipv4_route.ref
+++ b/tests/topotests/ldp_topo1/r1/show_ipv4_route.ref
diff --git a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_binding.ref b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_binding.ref
index 32aa60c30d..32aa60c30d 100644
--- a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_binding.ref
+++ b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_binding.ref
diff --git a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_discovery.ref b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_discovery.ref
index 373755ab87..373755ab87 100644
--- a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_discovery.ref
+++ b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_discovery.ref
diff --git a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_interface.ref b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_interface.ref
index 0fb15d2da7..0fb15d2da7 100644
--- a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_interface.ref
+++ b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_interface.ref
diff --git a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_neighbor.ref b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_neighbor.ref
index 29e264ff3c..29e264ff3c 100644
--- a/tests/topotests/ldp-topo1/r1/show_mpls_ldp_neighbor.ref
+++ b/tests/topotests/ldp_topo1/r1/show_mpls_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-topo1/r1/show_mpls_table.ref b/tests/topotests/ldp_topo1/r1/show_mpls_table.ref
index 7e24359af3..7e24359af3 100644
--- a/tests/topotests/ldp-topo1/r1/show_mpls_table.ref
+++ b/tests/topotests/ldp_topo1/r1/show_mpls_table.ref
diff --git a/tests/topotests/ldp-topo1/r1/zebra.conf b/tests/topotests/ldp_topo1/r1/zebra.conf
index 55b4b0e9c6..55b4b0e9c6 100644
--- a/tests/topotests/ldp-topo1/r1/zebra.conf
+++ b/tests/topotests/ldp_topo1/r1/zebra.conf
diff --git a/tests/topotests/ldp-topo1/r2/ip_mpls_route.ref b/tests/topotests/ldp_topo1/r2/ip_mpls_route.ref
index f962070c36..f962070c36 100644
--- a/tests/topotests/ldp-topo1/r2/ip_mpls_route.ref
+++ b/tests/topotests/ldp_topo1/r2/ip_mpls_route.ref
diff --git a/tests/topotests/ldp-topo1/r2/ldpd.conf b/tests/topotests/ldp_topo1/r2/ldpd.conf
index bfdef21b75..bfdef21b75 100644
--- a/tests/topotests/ldp-topo1/r2/ldpd.conf
+++ b/tests/topotests/ldp_topo1/r2/ldpd.conf
diff --git a/tests/topotests/ldp-topo1/r2/ospfd.conf b/tests/topotests/ldp_topo1/r2/ospfd.conf
index dbed6189c8..dbed6189c8 100644
--- a/tests/topotests/ldp-topo1/r2/ospfd.conf
+++ b/tests/topotests/ldp_topo1/r2/ospfd.conf
diff --git a/tests/topotests/ldp-topo1/r2/show_ipv4_route.ref b/tests/topotests/ldp_topo1/r2/show_ipv4_route.ref
index 90e18962a8..90e18962a8 100644
--- a/tests/topotests/ldp-topo1/r2/show_ipv4_route.ref
+++ b/tests/topotests/ldp_topo1/r2/show_ipv4_route.ref
diff --git a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_binding.ref b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_binding.ref
index d7df72e854..d7df72e854 100644
--- a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_binding.ref
+++ b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_binding.ref
diff --git a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_discovery.ref b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_discovery.ref
index 6405b5e388..6405b5e388 100644
--- a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_discovery.ref
+++ b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_discovery.ref
diff --git a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_interface.ref b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_interface.ref
index f9fc98408c..f9fc98408c 100644
--- a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_interface.ref
+++ b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_interface.ref
diff --git a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_neighbor.ref b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_neighbor.ref
index 1172cbfc2b..1172cbfc2b 100644
--- a/tests/topotests/ldp-topo1/r2/show_mpls_ldp_neighbor.ref
+++ b/tests/topotests/ldp_topo1/r2/show_mpls_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-topo1/r2/show_mpls_table.ref b/tests/topotests/ldp_topo1/r2/show_mpls_table.ref
index df05a6b31a..df05a6b31a 100644
--- a/tests/topotests/ldp-topo1/r2/show_mpls_table.ref
+++ b/tests/topotests/ldp_topo1/r2/show_mpls_table.ref
diff --git a/tests/topotests/ldp-topo1/r2/zebra.conf b/tests/topotests/ldp_topo1/r2/zebra.conf
index dd1dbac32b..dd1dbac32b 100644
--- a/tests/topotests/ldp-topo1/r2/zebra.conf
+++ b/tests/topotests/ldp_topo1/r2/zebra.conf
diff --git a/tests/topotests/ldp-topo1/r3/ip_mpls_route.ref b/tests/topotests/ldp_topo1/r3/ip_mpls_route.ref
index 21750b4a23..21750b4a23 100644
--- a/tests/topotests/ldp-topo1/r3/ip_mpls_route.ref
+++ b/tests/topotests/ldp_topo1/r3/ip_mpls_route.ref
diff --git a/tests/topotests/ldp-topo1/r3/ldpd.conf b/tests/topotests/ldp_topo1/r3/ldpd.conf
index dbf1d72b5f..dbf1d72b5f 100644
--- a/tests/topotests/ldp-topo1/r3/ldpd.conf
+++ b/tests/topotests/ldp_topo1/r3/ldpd.conf
diff --git a/tests/topotests/ldp-topo1/r3/ospfd.conf b/tests/topotests/ldp_topo1/r3/ospfd.conf
index bd86fe4f24..bd86fe4f24 100644
--- a/tests/topotests/ldp-topo1/r3/ospfd.conf
+++ b/tests/topotests/ldp_topo1/r3/ospfd.conf
diff --git a/tests/topotests/ldp-topo1/r3/show_ipv4_route.ref b/tests/topotests/ldp_topo1/r3/show_ipv4_route.ref
index 9b9c763339..9b9c763339 100644
--- a/tests/topotests/ldp-topo1/r3/show_ipv4_route.ref
+++ b/tests/topotests/ldp_topo1/r3/show_ipv4_route.ref
diff --git a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_binding.ref b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_binding.ref
index 058a245f59..058a245f59 100644
--- a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_binding.ref
+++ b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_binding.ref
diff --git a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_discovery.ref b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_discovery.ref
index e3dbf06c2e..e3dbf06c2e 100644
--- a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_discovery.ref
+++ b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_discovery.ref
diff --git a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_interface.ref b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_interface.ref
index 243811e3a9..243811e3a9 100644
--- a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_interface.ref
+++ b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_interface.ref
diff --git a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_neighbor.ref b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_neighbor.ref
index 769f78277b..769f78277b 100644
--- a/tests/topotests/ldp-topo1/r3/show_mpls_ldp_neighbor.ref
+++ b/tests/topotests/ldp_topo1/r3/show_mpls_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-topo1/r3/show_mpls_table.ref b/tests/topotests/ldp_topo1/r3/show_mpls_table.ref
index 3978895613..3978895613 100644
--- a/tests/topotests/ldp-topo1/r3/show_mpls_table.ref
+++ b/tests/topotests/ldp_topo1/r3/show_mpls_table.ref
diff --git a/tests/topotests/ldp-topo1/r3/zebra.conf b/tests/topotests/ldp_topo1/r3/zebra.conf
index 456820fdb4..456820fdb4 100644
--- a/tests/topotests/ldp-topo1/r3/zebra.conf
+++ b/tests/topotests/ldp_topo1/r3/zebra.conf
diff --git a/tests/topotests/ldp-topo1/r4/ip_mpls_route.ref b/tests/topotests/ldp_topo1/r4/ip_mpls_route.ref
index aef2fefd57..aef2fefd57 100644
--- a/tests/topotests/ldp-topo1/r4/ip_mpls_route.ref
+++ b/tests/topotests/ldp_topo1/r4/ip_mpls_route.ref
diff --git a/tests/topotests/ldp-topo1/r4/ldpd.conf b/tests/topotests/ldp_topo1/r4/ldpd.conf
index 8f3533527d..8f3533527d 100644
--- a/tests/topotests/ldp-topo1/r4/ldpd.conf
+++ b/tests/topotests/ldp_topo1/r4/ldpd.conf
diff --git a/tests/topotests/ldp-topo1/r4/ospfd.conf b/tests/topotests/ldp_topo1/r4/ospfd.conf
index 5aae885a12..5aae885a12 100644
--- a/tests/topotests/ldp-topo1/r4/ospfd.conf
+++ b/tests/topotests/ldp_topo1/r4/ospfd.conf
diff --git a/tests/topotests/ldp-topo1/r4/show_ipv4_route.ref b/tests/topotests/ldp_topo1/r4/show_ipv4_route.ref
index 7444cc924b..7444cc924b 100644
--- a/tests/topotests/ldp-topo1/r4/show_ipv4_route.ref
+++ b/tests/topotests/ldp_topo1/r4/show_ipv4_route.ref
diff --git a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_binding.ref b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_binding.ref
index 1e9dfa3d16..1e9dfa3d16 100644
--- a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_binding.ref
+++ b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_binding.ref
diff --git a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_discovery.ref b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_discovery.ref
index a7026570db..a7026570db 100644
--- a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_discovery.ref
+++ b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_discovery.ref
diff --git a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_interface.ref b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_interface.ref
index dd57656f15..dd57656f15 100644
--- a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_interface.ref
+++ b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_interface.ref
diff --git a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_neighbor.ref b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_neighbor.ref
index 7c60522f9b..7c60522f9b 100644
--- a/tests/topotests/ldp-topo1/r4/show_mpls_ldp_neighbor.ref
+++ b/tests/topotests/ldp_topo1/r4/show_mpls_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-topo1/r4/show_mpls_table.ref b/tests/topotests/ldp_topo1/r4/show_mpls_table.ref
index 174dcebd4d..174dcebd4d 100644
--- a/tests/topotests/ldp-topo1/r4/show_mpls_table.ref
+++ b/tests/topotests/ldp_topo1/r4/show_mpls_table.ref
diff --git a/tests/topotests/ldp-topo1/r4/zebra.conf b/tests/topotests/ldp_topo1/r4/zebra.conf
index 4a270af578..4a270af578 100644
--- a/tests/topotests/ldp-topo1/r4/zebra.conf
+++ b/tests/topotests/ldp_topo1/r4/zebra.conf
diff --git a/tests/topotests/ldp-topo1/test_ldp_topo1.py b/tests/topotests/ldp_topo1/test_ldp_topo1.py
index 06e7734094..06e7734094 100644
--- a/tests/topotests/ldp-topo1/test_ldp_topo1.py
+++ b/tests/topotests/ldp_topo1/test_ldp_topo1.py
diff --git a/tests/topotests/ospf-sr-topo1/__init__.py b/tests/topotests/ldp_vpls_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/ospf-sr-topo1/__init__.py
+++ b/tests/topotests/ldp_vpls_topo1/__init__.py
diff --git a/tests/topotests/ldp-vpls-topo1/ce1/zebra.conf b/tests/topotests/ldp_vpls_topo1/ce1/zebra.conf
index 6f165e2724..6f165e2724 100644
--- a/tests/topotests/ldp-vpls-topo1/ce1/zebra.conf
+++ b/tests/topotests/ldp_vpls_topo1/ce1/zebra.conf
diff --git a/tests/topotests/ldp-vpls-topo1/ce2/zebra.conf b/tests/topotests/ldp_vpls_topo1/ce2/zebra.conf
index ac02d0f9a4..ac02d0f9a4 100644
--- a/tests/topotests/ldp-vpls-topo1/ce2/zebra.conf
+++ b/tests/topotests/ldp_vpls_topo1/ce2/zebra.conf
diff --git a/tests/topotests/ldp-vpls-topo1/ce3/zebra.conf b/tests/topotests/ldp_vpls_topo1/ce3/zebra.conf
index c6a5824d15..c6a5824d15 100644
--- a/tests/topotests/ldp-vpls-topo1/ce3/zebra.conf
+++ b/tests/topotests/ldp_vpls_topo1/ce3/zebra.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r1/ldpd.conf b/tests/topotests/ldp_vpls_topo1/r1/ldpd.conf
index a1c0c822d6..a1c0c822d6 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/ldpd.conf
+++ b/tests/topotests/ldp_vpls_topo1/r1/ldpd.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r1/ospf-nbrs.txt b/tests/topotests/ldp_vpls_topo1/r1/ospf-nbrs.txt
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/ospf-nbrs.txt
+++ b/tests/topotests/ldp_vpls_topo1/r1/ospf-nbrs.txt
diff --git a/tests/topotests/ldp-vpls-topo1/r1/ospfd.conf b/tests/topotests/ldp_vpls_topo1/r1/ospfd.conf
index a66fb92ba3..a66fb92ba3 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/ospfd.conf
+++ b/tests/topotests/ldp_vpls_topo1/r1/ospfd.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r1/show_ip_ospf_neighbor.json b/tests/topotests/ldp_vpls_topo1/r1/show_ip_ospf_neighbor.json
index 7e281abb5f..7e281abb5f 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_vpls_topo1/r1/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-vpls-topo1/r1/show_ip_route.ref b/tests/topotests/ldp_vpls_topo1/r1/show_ip_route.ref
index fdb81f212d..fdb81f212d 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/show_ip_route.ref
+++ b/tests/topotests/ldp_vpls_topo1/r1/show_ip_route.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r1/show_l2vpn_binding.ref b/tests/topotests/ldp_vpls_topo1/r1/show_l2vpn_binding.ref
index b3de7e2c66..b3de7e2c66 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_vpls_topo1/r1/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r1/show_l2vpn_vc.ref b/tests/topotests/ldp_vpls_topo1/r1/show_l2vpn_vc.ref
index 29e9df1089..29e9df1089 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_vpls_topo1/r1/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r1/show_ldp_binding.ref b/tests/topotests/ldp_vpls_topo1/r1/show_ldp_binding.ref
index b3a12ec53f..b3a12ec53f 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/show_ldp_binding.ref
+++ b/tests/topotests/ldp_vpls_topo1/r1/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r1/show_ldp_discovery.ref b/tests/topotests/ldp_vpls_topo1/r1/show_ldp_discovery.ref
index 9301e60c67..9301e60c67 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_vpls_topo1/r1/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r1/show_ldp_neighbor.ref b/tests/topotests/ldp_vpls_topo1/r1/show_ldp_neighbor.ref
index 40d8ebeb90..40d8ebeb90 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_vpls_topo1/r1/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r1/zebra.conf b/tests/topotests/ldp_vpls_topo1/r1/zebra.conf
index ea047355ad..ea047355ad 100644
--- a/tests/topotests/ldp-vpls-topo1/r1/zebra.conf
+++ b/tests/topotests/ldp_vpls_topo1/r1/zebra.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r2/ldpd.conf b/tests/topotests/ldp_vpls_topo1/r2/ldpd.conf
index 06e5973040..06e5973040 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/ldpd.conf
+++ b/tests/topotests/ldp_vpls_topo1/r2/ldpd.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r2/ospfd.conf b/tests/topotests/ldp_vpls_topo1/r2/ospfd.conf
index b4692feec8..b4692feec8 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/ospfd.conf
+++ b/tests/topotests/ldp_vpls_topo1/r2/ospfd.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r2/show_ip_ospf_neighbor.json b/tests/topotests/ldp_vpls_topo1/r2/show_ip_ospf_neighbor.json
index 22fd98f519..22fd98f519 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_vpls_topo1/r2/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-vpls-topo1/r2/show_ip_route.ref b/tests/topotests/ldp_vpls_topo1/r2/show_ip_route.ref
index 6056feffe3..6056feffe3 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/show_ip_route.ref
+++ b/tests/topotests/ldp_vpls_topo1/r2/show_ip_route.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r2/show_l2vpn_binding.ref b/tests/topotests/ldp_vpls_topo1/r2/show_l2vpn_binding.ref
index 42c5a1cbd9..42c5a1cbd9 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_vpls_topo1/r2/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r2/show_l2vpn_vc.ref b/tests/topotests/ldp_vpls_topo1/r2/show_l2vpn_vc.ref
index 942ed23a1e..942ed23a1e 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_vpls_topo1/r2/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r2/show_ldp_binding.ref b/tests/topotests/ldp_vpls_topo1/r2/show_ldp_binding.ref
index c641fb47e6..c641fb47e6 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/show_ldp_binding.ref
+++ b/tests/topotests/ldp_vpls_topo1/r2/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r2/show_ldp_discovery.ref b/tests/topotests/ldp_vpls_topo1/r2/show_ldp_discovery.ref
index 26801acade..26801acade 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_vpls_topo1/r2/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r2/show_ldp_neighbor.ref b/tests/topotests/ldp_vpls_topo1/r2/show_ldp_neighbor.ref
index eed35289ea..eed35289ea 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_vpls_topo1/r2/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r2/zebra.conf b/tests/topotests/ldp_vpls_topo1/r2/zebra.conf
index c244442876..c244442876 100644
--- a/tests/topotests/ldp-vpls-topo1/r2/zebra.conf
+++ b/tests/topotests/ldp_vpls_topo1/r2/zebra.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r3/ldpd.conf b/tests/topotests/ldp_vpls_topo1/r3/ldpd.conf
index 57a203bce3..57a203bce3 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/ldpd.conf
+++ b/tests/topotests/ldp_vpls_topo1/r3/ldpd.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r3/ospfd.conf b/tests/topotests/ldp_vpls_topo1/r3/ospfd.conf
index 2413bfa9d5..2413bfa9d5 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/ospfd.conf
+++ b/tests/topotests/ldp_vpls_topo1/r3/ospfd.conf
diff --git a/tests/topotests/ldp-vpls-topo1/r3/show_ip_ospf_neighbor.json b/tests/topotests/ldp_vpls_topo1/r3/show_ip_ospf_neighbor.json
index 970eb2fc1d..970eb2fc1d 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/show_ip_ospf_neighbor.json
+++ b/tests/topotests/ldp_vpls_topo1/r3/show_ip_ospf_neighbor.json
diff --git a/tests/topotests/ldp-vpls-topo1/r3/show_ip_route.ref b/tests/topotests/ldp_vpls_topo1/r3/show_ip_route.ref
index fc96ada443..fc96ada443 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/show_ip_route.ref
+++ b/tests/topotests/ldp_vpls_topo1/r3/show_ip_route.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r3/show_l2vpn_binding.ref b/tests/topotests/ldp_vpls_topo1/r3/show_l2vpn_binding.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/show_l2vpn_binding.ref
+++ b/tests/topotests/ldp_vpls_topo1/r3/show_l2vpn_binding.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r3/show_l2vpn_vc.ref b/tests/topotests/ldp_vpls_topo1/r3/show_l2vpn_vc.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/show_l2vpn_vc.ref
+++ b/tests/topotests/ldp_vpls_topo1/r3/show_l2vpn_vc.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r3/show_ldp_binding.ref b/tests/topotests/ldp_vpls_topo1/r3/show_ldp_binding.ref
index e54bd6e755..e54bd6e755 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/show_ldp_binding.ref
+++ b/tests/topotests/ldp_vpls_topo1/r3/show_ldp_binding.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r3/show_ldp_discovery.ref b/tests/topotests/ldp_vpls_topo1/r3/show_ldp_discovery.ref
index 42fa98d4da..42fa98d4da 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/show_ldp_discovery.ref
+++ b/tests/topotests/ldp_vpls_topo1/r3/show_ldp_discovery.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r3/show_ldp_neighbor.ref b/tests/topotests/ldp_vpls_topo1/r3/show_ldp_neighbor.ref
index 5c482da697..5c482da697 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/show_ldp_neighbor.ref
+++ b/tests/topotests/ldp_vpls_topo1/r3/show_ldp_neighbor.ref
diff --git a/tests/topotests/ldp-vpls-topo1/r3/zebra.conf b/tests/topotests/ldp_vpls_topo1/r3/zebra.conf
index 6b1eaa2ca0..6b1eaa2ca0 100644
--- a/tests/topotests/ldp-vpls-topo1/r3/zebra.conf
+++ b/tests/topotests/ldp_vpls_topo1/r3/zebra.conf
diff --git a/tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.dot b/tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.dot
index 4f1bd22f7c..4f1bd22f7c 100644
--- a/tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.dot
+++ b/tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.dot
diff --git a/tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.pdf b/tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.pdf
index 4d26732ea7..4d26732ea7 100644
--- a/tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.pdf
+++ b/tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.pdf
Binary files differ
diff --git a/tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.py b/tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.py
index 0ea7aca3eb..0ea7aca3eb 100644
--- a/tests/topotests/ldp-vpls-topo1/test_ldp_vpls_topo1.py
+++ b/tests/topotests/ldp_vpls_topo1/test_ldp_vpls_topo1.py
diff --git a/tests/topotests/multicast-pim-bsm-topo1/mcast_pim_bsmp_01.json b/tests/topotests/multicast_pim_bsm_topo1/mcast_pim_bsmp_01.json
index 14cb0bee1d..14cb0bee1d 100644
--- a/tests/topotests/multicast-pim-bsm-topo1/mcast_pim_bsmp_01.json
+++ b/tests/topotests/multicast_pim_bsm_topo1/mcast_pim_bsmp_01.json
diff --git a/tests/topotests/multicast-pim-bsm-topo1/test_mcast_pim_bsmp_01.py b/tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py
index cd398a5111..cd398a5111 100644
--- a/tests/topotests/multicast-pim-bsm-topo1/test_mcast_pim_bsmp_01.py
+++ b/tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py
diff --git a/tests/topotests/multicast-pim-bsm-topo2/mcast_pim_bsmp_02.json b/tests/topotests/multicast_pim_bsm_topo2/mcast_pim_bsmp_02.json
index 14cb0bee1d..14cb0bee1d 100644
--- a/tests/topotests/multicast-pim-bsm-topo2/mcast_pim_bsmp_02.json
+++ b/tests/topotests/multicast_pim_bsm_topo2/mcast_pim_bsmp_02.json
diff --git a/tests/topotests/multicast-pim-bsm-topo2/test_mcast_pim_bsmp_02.py b/tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py
index 199746d5f6..199746d5f6 100644
--- a/tests/topotests/multicast-pim-bsm-topo2/test_mcast_pim_bsmp_02.py
+++ b/tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py
diff --git a/tests/topotests/multicast-pim-sm-topo1/multicast_pim_sm_topo1.json b/tests/topotests/multicast_pim_sm_topo1/multicast_pim_sm_topo1.json
index 71454c2ab2..71454c2ab2 100644
--- a/tests/topotests/multicast-pim-sm-topo1/multicast_pim_sm_topo1.json
+++ b/tests/topotests/multicast_pim_sm_topo1/multicast_pim_sm_topo1.json
diff --git a/tests/topotests/multicast-pim-sm-topo1/test_multicast_pim_sm_topo1.py b/tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py
index e55e30270d..e55e30270d 100755
--- a/tests/topotests/multicast-pim-sm-topo1/test_multicast_pim_sm_topo1.py
+++ b/tests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py
diff --git a/tests/topotests/multicast-pim-sm-topo2/multicast_pim_sm_topo2.json b/tests/topotests/multicast_pim_sm_topo2/multicast_pim_sm_topo2.json
index 71454c2ab2..71454c2ab2 100644
--- a/tests/topotests/multicast-pim-sm-topo2/multicast_pim_sm_topo2.json
+++ b/tests/topotests/multicast_pim_sm_topo2/multicast_pim_sm_topo2.json
diff --git a/tests/topotests/multicast-pim-sm-topo2/test_multicast_pim_sm_topo2.py b/tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py
index 7e409c2a05..7e409c2a05 100755
--- a/tests/topotests/multicast-pim-sm-topo2/test_multicast_pim_sm_topo2.py
+++ b/tests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py
diff --git a/tests/topotests/multicast-pim-sm-topo3/multicast_pim_sm_topo3.json b/tests/topotests/multicast_pim_sm_topo3/multicast_pim_sm_topo3.json
index f582f4929d..f582f4929d 100644
--- a/tests/topotests/multicast-pim-sm-topo3/multicast_pim_sm_topo3.json
+++ b/tests/topotests/multicast_pim_sm_topo3/multicast_pim_sm_topo3.json
diff --git a/tests/topotests/multicast-pim-sm-topo3/multicast_pim_sm_topo4.json b/tests/topotests/multicast_pim_sm_topo3/multicast_pim_sm_topo4.json
index 4635dac7d2..4635dac7d2 100644
--- a/tests/topotests/multicast-pim-sm-topo3/multicast_pim_sm_topo4.json
+++ b/tests/topotests/multicast_pim_sm_topo3/multicast_pim_sm_topo4.json
diff --git a/tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo3.py b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py
index 33f476de44..33f476de44 100755
--- a/tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo3.py
+++ b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py
diff --git a/tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo4.py b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py
index 1081b764ac..1081b764ac 100755
--- a/tests/topotests/multicast-pim-sm-topo3/test_multicast_pim_sm_topo4.py
+++ b/tests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo4.py
diff --git a/tests/topotests/ospf-te-topo1/__init__.py b/tests/topotests/multicast_pim_static_rp_topo1/__init__.py
index e69de29bb2..e69de29bb2 100755..100644
--- a/tests/topotests/ospf-te-topo1/__init__.py
+++ b/tests/topotests/multicast_pim_static_rp_topo1/__init__.py
diff --git a/tests/topotests/multicast-pim-static-rp-topo1/multicast_pim_static_rp.json b/tests/topotests/multicast_pim_static_rp_topo1/multicast_pim_static_rp.json
index 6d6c047b00..6d6c047b00 100644
--- a/tests/topotests/multicast-pim-static-rp-topo1/multicast_pim_static_rp.json
+++ b/tests/topotests/multicast_pim_static_rp_topo1/multicast_pim_static_rp.json
diff --git a/tests/topotests/multicast-pim-static-rp-topo1/test_multicast_pim_static_rp.py b/tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py
index e90230eb3b..7bef57b629 100755
--- a/tests/topotests/multicast-pim-static-rp-topo1/test_multicast_pim_static_rp.py
+++ b/tests/topotests/multicast_pim_static_rp_topo1/test_multicast_pim_static_rp.py
@@ -101,9 +101,9 @@ import os
import sys
import json
import time
-import pytest
from time import sleep
import datetime
+import pytest
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -114,9 +114,12 @@ sys.path.append(os.path.join(CWD, "../lib/"))
# pylint: disable=C0413
# Import topogen and topotest helpers
-from lib.topogen import Topogen, get_topogen
from mininet.topo import Topo
+from lib.topogen import Topogen, get_topogen
+from lib.topolog import logger
+from lib.topojson import build_topo_from_json, build_config_from_json
+
from lib.common_config import (
start_topology,
write_test_header,
@@ -149,16 +152,14 @@ from lib.pim import (
clear_ip_mroute,
clear_ip_mroute_verify,
)
-from lib.topolog import logger
-from lib.topojson import build_topo_from_json, build_config_from_json
# Reading the data from JSON File for topology and configuration creation
jsonFile = "{}/multicast_pim_static_rp.json".format(CWD)
try:
with open(jsonFile, "r") as topoJson:
- topo = json.load(topoJson)
+ TOPO = json.load(topoJson)
except IOError:
- logger.info("Could not read file:", jsonFile)
+ logger.info("Could not read file: %s", jsonFile)
# Global variables
GROUP_RANGE_ALL = "224.0.0.0/4"
@@ -203,7 +204,11 @@ class CreateTopo(Topo):
tgen = get_topogen(self)
# Building topology from json file
- build_topo_from_json(tgen, topo)
+ build_topo_from_json(tgen, TOPO)
+
+ def dumdum(self):
+ """ Dummy """
+ print("%s", self.name)
def setup_module(mod):
@@ -212,10 +217,9 @@ def setup_module(mod):
* `mod`: module name
"""
- global topo
testsuite_run_time = time.asctime(time.localtime(time.time()))
- logger.info("Testsuite start time: {}".format(testsuite_run_time))
+ logger.info("Testsuite start time: %s", testsuite_run_time)
logger.info("=" * 40)
topology = """
@@ -229,7 +233,7 @@ def setup_module(mod):
r4
"""
- logger.info("Master Topology: \n {}".format(topology))
+ logger.info("Master Topology: \n %s", topology)
logger.info("Running setup_module to create topology")
@@ -239,7 +243,7 @@ def setup_module(mod):
# ... and here it calls Mininet initialization functions.
# get list of daemons needs to be started for this suite.
- daemons = topo_daemons(tgen, topo)
+ daemons = topo_daemons(tgen, TOPO)
# Starting topology, create tmp files which are loaded to routers
# to start deamons and then start routers
@@ -250,10 +254,10 @@ def setup_module(mod):
pytest.skip(tgen.errors)
# Creating configuration from JSON
- build_config_from_json(tgen, topo)
+ build_config_from_json(tgen, TOPO)
# Verify PIM neighbors
- result = verify_pim_neighbors(tgen, topo)
+ result = verify_pim_neighbors(tgen, TOPO)
assert result is True, "setup_module :Failed \n Error:" " {}".format(result)
logger.info("Running setup_module() done")
@@ -269,9 +273,7 @@ def teardown_module():
# Stop toplogy and Remove tmp files
tgen.stop_topology()
- logger.info(
- "Testsuite end time: {}".format(time.asctime(time.localtime(time.time())))
- )
+ logger.info("Testsuite end time: %s", time.asctime(time.localtime(time.time())))
logger.info("=" * 40)
@@ -335,9 +337,9 @@ def verify_mroute_repopulated(uptime_before, uptime_after):
)
return errormsg
- d1 = datetime.datetime.strptime(uptime_before[group][source], "%H:%M:%S")
- d2 = datetime.datetime.strptime(uptime_after[group][source], "%H:%M:%S")
- if d2 >= d1:
+ d_1 = datetime.datetime.strptime(uptime_before[group][source], "%H:%M:%S")
+ d_2 = datetime.datetime.strptime(uptime_after[group][source], "%H:%M:%S")
+ if d_2 >= d_1:
errormsg = "mroute (%s, %s) is not " "repopulated [FAILED!!]" % (
source,
group,
@@ -360,7 +362,7 @@ def verify_state_incremented(state_before, state_after):
"""
for router, state_data in state_before.items():
- for state, value in state_data.items():
+ for state, _ in state_data.items():
if state_before[router][state] >= state_after[router][state]:
errormsg = (
"[DUT: %s]: state %s value has not"
@@ -422,7 +424,7 @@ def test_add_delete_static_RP_p0(request):
step("r1: Verify show ip igmp group without any IGMP join")
dut = "r1"
interface = "r1-r0-eth0"
- result = verify_igmp_groups(tgen, dut, interface, GROUP_ADDRESS, expected=False)
+ result = verify_igmp_groups(tgen, dut, interface, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: igmp group present without any IGMP join \n Error: {}".format(
@@ -436,8 +438,9 @@ def test_add_delete_static_RP_p0(request):
state_before = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_before, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase {} : Failed \n state_before is not dictionary\n Error: {}".format(
+ tc_name, result
+ )
step("r0 : Send IGMP join")
result = iperfSendIGMPJoin(tgen, "r0", GROUP_ADDRESS, join_interval=1)
@@ -453,7 +456,7 @@ def test_add_delete_static_RP_p0(request):
iif = "r1-r2-eth1"
rp_address = "1.0.2.17"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -487,12 +490,12 @@ def test_add_delete_static_RP_p0(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify RP info")
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE, expected=False
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert (
result is not True
@@ -501,16 +504,14 @@ def test_add_delete_static_RP_p0(request):
)
step("r1: Verify upstream IIF interface")
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: upstream IIF interface present \n Error: {}".format(tc_name, result)
)
step("r1: Verify upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: upstream join state is up and join timer is running \n Error: {}".format(
@@ -519,13 +520,13 @@ def test_add_delete_static_RP_p0(request):
)
step("r1: Verify PIM state")
- result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
+ result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS)
assert result is not True, "Testcase {} :Failed \n Error: {}".format(
tc_name, result
)
step("r1: Verify ip mroutes")
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert (
result is not True
), "Testcase {} : Failed \n " "r1: mroutes are still present \n Error: {}".format(
@@ -536,8 +537,9 @@ def test_add_delete_static_RP_p0(request):
state_after = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_after, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase {} : Failed \n state_before is not dictionary \n Error: {}".format(
+ tc_name, result
+ )
result = verify_state_incremented(state_before, state_after)
assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result)
@@ -576,7 +578,7 @@ def test_SPT_RPT_path_same_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -604,7 +606,7 @@ def test_SPT_RPT_path_same_p1(request):
rp_address = "1.0.2.17"
iif = "lo"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -684,9 +686,7 @@ def test_SPT_RPT_path_same_p1(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (S, G) upstream join state is up and join timer is running\n Error: {}".format(
@@ -732,7 +732,7 @@ def test_not_reachable_static_RP_p0(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -754,8 +754,9 @@ def test_not_reachable_static_RP_p0(request):
state_before = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_before, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
step("Enable IGMP on r1 interface and send IGMP " "join (225.1.1.1) to r1")
step("Configure r2 loopback interface as RP")
@@ -770,7 +771,7 @@ def test_not_reachable_static_RP_p0(request):
iif = "r1-r2-eth1"
rp_address = "1.0.2.17"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -810,7 +811,7 @@ def test_not_reachable_static_RP_p0(request):
step("r1: Check RP detail using show ip pim rp-info OIF should be unknown")
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, "Unknown", rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, "Unknown", rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -818,7 +819,7 @@ def test_not_reachable_static_RP_p0(request):
"r1 : OIL should be same and IIF should be cleared on R1 verify"
"using show ip pim state"
)
- result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
+ result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"OIL is not same and IIF is not cleared on R1 \n Error: {}".format(
@@ -827,7 +828,7 @@ def test_not_reachable_static_RP_p0(request):
)
step("r1: upstream IIF should be unknown , verify using show ip pim" "upstream")
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: upstream IIF is not unknown \n Error: {}".format(tc_name, result)
@@ -837,9 +838,7 @@ def test_not_reachable_static_RP_p0(request):
"r1: join state should not be joined and join timer should stop,"
"verify using show ip pim upstream"
)
- result = verify_join_state_and_timer(
- tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: join state is joined and timer is not stopped \n Error: {}".format(
@@ -854,21 +853,22 @@ def test_not_reachable_static_RP_p0(request):
state_after = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_after, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
result = verify_state_incremented(state_before, state_after)
assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result)
step("r1: (*, G) cleared from mroute table using show ip mroute")
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: (*, G) are not cleared from mroute table \n Error: {}".format(
tc_name, result
)
)
- logger.info("Expected behavior: {}".format(result))
+ logger.info("Expected behavior: %s", result)
# Uncomment next line for debugging
# tgen.mininet_cli()
@@ -898,7 +898,7 @@ def test_add_RP_after_join_received_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -924,7 +924,7 @@ def test_add_RP_after_join_received_p1(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify rp-info")
@@ -932,7 +932,7 @@ def test_add_RP_after_join_received_p1(request):
rp_address = "1.0.2.17"
iif = "r1-r2-eth1"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE, expected=False
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert (
result is not True
@@ -945,8 +945,9 @@ def test_add_RP_after_join_received_p1(request):
state_before = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_before, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
step("r0 : Send IGMP join (225.1.1.1) to r1, when rp is not configured" "in r1")
result = iperfSendIGMPJoin(tgen, "r0", GROUP_ADDRESS, join_interval=1)
@@ -958,7 +959,7 @@ def test_add_RP_after_join_received_p1(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify upstream IIF interface")
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: upstream IFF interface is present \n Error: {}".format(tc_name, result)
@@ -966,9 +967,7 @@ def test_add_RP_after_join_received_p1(request):
step("r1: Verify upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: upstream join state is joined and timer is running \n Error: {}".format(
@@ -977,7 +976,7 @@ def test_add_RP_after_join_received_p1(request):
)
step("r1: Verify PIM state")
- result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
+ result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS)
assert (
result is not True
), "Testcase {} : Failed \n " "r1: PIM state is up\n Error: {}".format(
@@ -985,7 +984,7 @@ def test_add_RP_after_join_received_p1(request):
)
step("r1: Verify ip mroutes")
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert (
result is not True
), "Testcase {} : Failed \n " "r1: mroutes are still present\n Error: {}".format(
@@ -1006,12 +1005,12 @@ def test_add_RP_after_join_received_p1(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify rp-info")
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -1030,13 +1029,14 @@ def test_add_RP_after_join_received_p1(request):
step("r1 : Verify ip mroutes")
result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- logger.info("Expected behavior: {}".format(result))
+ logger.info("Expected behavior: %s", result)
state_after = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_after, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
result = verify_state_incremented(state_before, state_after)
assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
@@ -1068,7 +1068,7 @@ def test_reachable_static_RP_after_join_p0(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -1083,8 +1083,9 @@ def test_reachable_static_RP_after_join_p0(request):
state_before = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_before, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
step("r1: Make RP un-reachable")
dut = "r1"
@@ -1098,7 +1099,7 @@ def test_reachable_static_RP_after_join_p0(request):
step("r1: Verify rp-info")
rp_address = "1.0.2.17"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_ADDRESS, "Unknown", rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_ADDRESS, "Unknown", rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -1113,16 +1114,14 @@ def test_reachable_static_RP_after_join_p0(request):
step("r1 : Verify upstream IIF interface")
iif = "r1-r2-eth1"
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: upstream IIF interface is present\n Error: {}".format(tc_name, result)
)
step("r1 : Verify upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, STAR, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: upstream join state is joined and timer is running\n Error: {}".format(
@@ -1131,7 +1130,7 @@ def test_reachable_static_RP_after_join_p0(request):
)
step("r1 : Verify PIM state")
- result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS, expected=False)
+ result = verify_pim_state(tgen, dut, iif, oif, GROUP_ADDRESS)
assert (
result is not True
), "Testcase {} : Failed \n " "r1: PIM state is up\n Error: {}".format(
@@ -1139,7 +1138,7 @@ def test_reachable_static_RP_after_join_p0(request):
)
step("r1 : Verify ip mroutes")
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert (
result is not True
), "Testcase {} : Failed \n " "r1: mroutes are still present\n Error: {}".format(
@@ -1156,7 +1155,7 @@ def test_reachable_static_RP_after_join_p0(request):
step("r1 : Verify rp-info")
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -1175,14 +1174,15 @@ def test_reachable_static_RP_after_join_p0(request):
step("r1 : Verify ip mroutes")
result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- logger.info("Expected behavior: {}".format(result))
+ logger.info("Expected behavior: %s", result)
step("r1 : Verify pim interface traffic")
state_after = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_after, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
result = verify_state_incremented(state_before, state_after)
assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result)
@@ -1235,7 +1235,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -1272,8 +1272,9 @@ def test_send_join_on_higher_preffered_rp_p1(request):
state_before = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_before, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
step("r0 : Send IGMP join for 225.1.1.1")
result = iperfSendIGMPJoin(tgen, "r0", GROUP_ADDRESS, join_interval=1)
@@ -1299,21 +1300,21 @@ def test_send_join_on_higher_preffered_rp_p1(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1 : Verify RP info for group 224.0.0.0/4")
rp_address_1 = "1.0.2.17"
iif = "r1-r2-eth1"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address_1, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address_1, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1 : Verify RP info for group 225.1.1.1")
rp_address_2 = "1.0.4.17"
iif = "r1-r4-eth3"
- result = verify_pim_rp_info(tgen, topo, dut, GROUP_RANGE, iif, rp_address_2, SOURCE)
+ result = verify_pim_rp_info(tgen, TOPO, dut, GROUP_RANGE, iif, rp_address_2, SOURCE)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1 : Verify join is sent to higher preferred RP")
@@ -1321,8 +1322,9 @@ def test_send_join_on_higher_preffered_rp_p1(request):
state_after = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_after, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
result = verify_state_incremented(state_before, state_after)
assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result)
@@ -1344,7 +1346,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("r1 : Verify joinTx, pruneTx count before RP gets deleted")
state_dict = {"r1": {"r1-r2-eth1": ["joinTx"], "r1-r4-eth3": ["pruneTx"]}}
@@ -1352,8 +1354,9 @@ def test_send_join_on_higher_preffered_rp_p1(request):
state_before = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_before, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
step("r1 : Delete RP configuration for 225.1.1.1")
input_dict = {
@@ -1370,21 +1373,19 @@ def test_send_join_on_higher_preffered_rp_p1(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1 : Verify rp-info for group 224.0.0.0/4")
iif = "r1-r2-eth1"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address_1, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address_1, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1 : Verify rp-info for group 225.1.1.1")
iif = "r1-r4-eth3"
- result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE, oif, rp_address_2, SOURCE, expected=False
- )
+ result = verify_pim_rp_info(tgen, TOPO, dut, GROUP_RANGE, oif, rp_address_2, SOURCE)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: rp-info is present for group 225.1.1.1 \n Error: {}".format(
@@ -1399,7 +1400,7 @@ def test_send_join_on_higher_preffered_rp_p1(request):
iif = "r1-r2-eth1"
result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- logger.info("Expected behavior: {}".format(result))
+ logger.info("Expected behavior: %s", result)
step(
"r1 : Verify IIF and OIL in show ip pim state updated when higher"
@@ -1433,8 +1434,9 @@ def test_send_join_on_higher_preffered_rp_p1(request):
state_after = verify_pim_interface_traffic(tgen, state_dict)
assert isinstance(
state_after, dict
- ), "Testcase{} : Failed \n state_before is not dictionary \n "
- "Error: {}".format(tc_name, result)
+ ), "Testcase{} : Failed \n state_before is not dictionary \n " "Error: {}".format(
+ tc_name, result
+ )
result = verify_state_incremented(state_before, state_after)
assert result is True, "Testcase{} : Failed Error: {}".format(tc_name, result)
@@ -1472,7 +1474,7 @@ def test_RP_configured_as_LHR_1_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -1532,7 +1534,7 @@ def test_RP_configured_as_LHR_1_p1(request):
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Configure r1(LHR) as RP")
@@ -1579,7 +1581,7 @@ def test_RP_configured_as_LHR_1_p1(request):
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
shutdown_bringup_interface(tgen, "r1", "lo", False)
@@ -1592,7 +1594,7 @@ def test_RP_configured_as_LHR_1_p1(request):
rp_address = "1.0.1.17"
iif = "lo"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -1641,9 +1643,7 @@ def test_RP_configured_as_LHR_1_p1(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (S, G) upstream join state is joined and join"
@@ -1688,7 +1688,7 @@ def test_RP_configured_as_LHR_2_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -1748,7 +1748,7 @@ def test_RP_configured_as_LHR_2_p1(request):
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1, r2, r3, r4: Configure r1(LHR) as RP")
@@ -1795,14 +1795,14 @@ def test_RP_configured_as_LHR_2_p1(request):
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify RP info")
dut = "r1"
rp_address = "1.0.1.17"
iif = "lo"
- result = verify_pim_rp_info(tgen, topo, dut, GROUP_ADDRESS, iif, rp_address, SOURCE)
+ result = verify_pim_rp_info(tgen, TOPO, dut, GROUP_ADDRESS, iif, rp_address, SOURCE)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r5: Send multicast traffic for group 225.1.1.1")
@@ -1850,9 +1850,7 @@ def test_RP_configured_as_LHR_2_p1(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
@@ -1898,7 +1896,7 @@ def test_RP_configured_as_FHR_1_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -1957,7 +1955,7 @@ def test_RP_configured_as_FHR_1_p1(request):
}
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1, r2, r3, r4: Configure r3(FHR) as RP")
@@ -2004,7 +2002,7 @@ def test_RP_configured_as_FHR_1_p1(request):
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify RP info")
@@ -2012,7 +2010,7 @@ def test_RP_configured_as_FHR_1_p1(request):
rp_address = "1.0.3.17"
iif = "r1-r3-eth2"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -2060,9 +2058,7 @@ def test_RP_configured_as_FHR_1_p1(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
@@ -2107,7 +2103,7 @@ def test_RP_configured_as_FHR_2_p2(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -2167,7 +2163,7 @@ def test_RP_configured_as_FHR_2_p2(request):
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1, r2, r3, r4: Configure r3(FHR) as RP")
@@ -2214,7 +2210,7 @@ def test_RP_configured_as_FHR_2_p2(request):
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify RP info")
@@ -2222,7 +2218,7 @@ def test_RP_configured_as_FHR_2_p2(request):
rp_address = "1.0.3.17"
iif = "r1-r3-eth2"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -2271,9 +2267,7 @@ def test_RP_configured_as_FHR_2_p2(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
@@ -2320,7 +2314,7 @@ def test_SPT_RPT_path_different_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -2335,7 +2329,7 @@ def test_SPT_RPT_path_different_p1(request):
dut = "r2"
rp_address = "1.0.2.17"
iif = "lo"
- result = verify_pim_rp_info(tgen, topo, dut, GROUP_ADDRESS, iif, rp_address, SOURCE)
+ result = verify_pim_rp_info(tgen, TOPO, dut, GROUP_ADDRESS, iif, rp_address, SOURCE)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r0: Send IGMP join")
@@ -2400,9 +2394,7 @@ def test_SPT_RPT_path_different_p1(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
@@ -2424,9 +2416,7 @@ def test_SPT_RPT_path_different_p1(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r2: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
@@ -2475,7 +2465,7 @@ def test_clear_pim_configuration_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -2492,7 +2482,7 @@ def test_clear_pim_configuration_p1(request):
rp_address = "1.0.2.17"
oif = "lo"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -2572,7 +2562,7 @@ def test_restart_pimd_process_p2(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -2589,7 +2579,7 @@ def test_restart_pimd_process_p2(request):
rp_address = "1.0.2.17"
oif = "lo"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -2655,9 +2645,7 @@ def test_restart_pimd_process_p2(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
- result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS, expected=False
- )
+ result = verify_join_state_and_timer(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (S,G) upstream state is joined and join timer is running\n Error: {}".format(
@@ -2676,7 +2664,7 @@ def test_restart_pimd_process_p2(request):
logger.info("waiting for 10 sec to make sure old mroute time is higher")
sleep(10)
uptime_before = verify_ip_mroutes(
- tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, wait=60
+ tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, mwait=60
)
assert isinstance(uptime_before, dict), "Testcase{} : Failed Error: {}".format(
tc_name, result
@@ -2692,7 +2680,7 @@ def test_restart_pimd_process_p2(request):
sleep(5)
uptime_after = verify_ip_mroutes(
- tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, wait=10
+ tgen, dut, STAR, GROUP_ADDRESS, iif, oil, return_uptime=True, mwait=10
)
assert isinstance(uptime_after, dict), "Testcase{} : Failed Error: {}".format(
tc_name, result
@@ -2731,7 +2719,7 @@ def test_multiple_groups_same_RP_address_p2(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -2754,79 +2742,79 @@ def test_multiple_groups_same_RP_address_p2(request):
rp_address = "1.0.2.17"
oif = "lo"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, oif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- GROUP_ADDRESS_LIST = GROUP_ADDRESS_LIST_1 + GROUP_ADDRESS_LIST_2
+ group_address_list = GROUP_ADDRESS_LIST_1 + GROUP_ADDRESS_LIST_2
step("r0: Send IGMP join for 10 groups")
- result = iperfSendIGMPJoin(tgen, "r0", GROUP_ADDRESS_LIST, join_interval=1)
+ result = iperfSendIGMPJoin(tgen, "r0", group_address_list, join_interval=1)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify IGMP groups")
dut = "r1"
oif = "r1-r0-eth0"
- result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS_LIST)
+ result = verify_igmp_groups(tgen, dut, oif, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r5: Send multicast traffic for group 225.1.1.1")
- result = iperfSendTraffic(tgen, "r5", GROUP_ADDRESS_LIST, 32, 2500)
+ result = iperfSendTraffic(tgen, "r5", group_address_list, 32, 2500)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (*, G) upstream IIF interface")
dut = "r1"
iif = "r1-r2-eth1"
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (*, G) upstream join state and join timer")
- result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (*, G) ip mroutes")
oif = "r1-r0-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (S, G) upstream IIF interface")
iif = "r1-r3-eth2"
- result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (S, G) ip mroutes")
- result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (*, G) upstream IIF interface")
dut = "r2"
iif = "lo"
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (*, G) upstream join state and join timer")
- result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (*, G) ip mroutes")
oif = "r2-r1-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream IIF interface")
dut = "r3"
iif = "r3-r5-eth3"
- result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -2837,20 +2825,20 @@ def test_multiple_groups_same_RP_address_p2(request):
step("r3: Verify (S, G) ip mroutes")
oif = "r3-r1-eth0"
- result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (S, G) upstream IIF interface")
dut = "r2"
iif = "r2-r3-eth1"
result = verify_upstream_iif(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, joinState="NotJoined"
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list, joinState="NotJoined"
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -2861,7 +2849,7 @@ def test_multiple_groups_same_RP_address_p2(request):
step("r2: Verify (S, G) ip mroutes")
oif = "none"
- result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Delete RP configuration")
@@ -2879,7 +2867,7 @@ def test_multiple_groups_same_RP_address_p2(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
@@ -2905,7 +2893,7 @@ def test_multiple_groups_same_RP_address_p2(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Shut the interface r1-r0-eth0 from R1 to R2")
@@ -2919,59 +2907,59 @@ def test_multiple_groups_same_RP_address_p2(request):
step("r1: Verify (*, G) upstream IIF interface")
dut = "r1"
iif = "r1-r2-eth1"
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (*, G) upstream join state and join timer")
- result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (*, G) ip mroutes")
oif = "r1-r0-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (S, G) upstream IIF interface")
iif = "r1-r3-eth2"
- result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (S, G) ip mroutes")
- result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (*, G) upstream IIF interface")
dut = "r2"
iif = "lo"
- result = verify_upstream_iif(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (*, G) upstream join state and join timer")
- result = verify_join_state_and_timer(tgen, dut, iif, STAR, GROUP_ADDRESS_LIST)
+ result = verify_join_state_and_timer(tgen, dut, iif, STAR, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (*, G) ip mroutes")
oif = "r2-r1-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, STAR, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (S, G) upstream IIF interface")
dut = "r2"
iif = "r2-r3-eth1"
result = verify_upstream_iif(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, joinState="NotJoined"
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list, joinState="NotJoined"
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -2982,18 +2970,18 @@ def test_multiple_groups_same_RP_address_p2(request):
step("r2: Verify (S, G) ip mroutes")
oif = "none"
- result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream IIF interface")
dut = "r3"
iif = "r3-r5-eth3"
- result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST)
+ result = verify_upstream_iif(tgen, dut, iif, SOURCE_ADDRESS, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r3: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, group_address_list
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3004,7 +2992,7 @@ def test_multiple_groups_same_RP_address_p2(request):
step("r3: Verify (S, G) ip mroutes")
oif = "r3-r1-eth0"
- result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, GROUP_ADDRESS_LIST, iif, oif)
+ result = verify_ip_mroutes(tgen, dut, SOURCE_ADDRESS, group_address_list, iif, oif)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
write_test_footer(tc_name)
@@ -3040,7 +3028,7 @@ def test_multiple_groups_different_RP_address_p2(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -3060,7 +3048,7 @@ def test_multiple_groups_different_RP_address_p2(request):
}
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
input_dict = {
@@ -3085,7 +3073,7 @@ def test_multiple_groups_different_RP_address_p2(request):
}
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Verify RP info")
@@ -3093,7 +3081,7 @@ def test_multiple_groups_different_RP_address_p2(request):
rp_address = "1.0.2.17"
oif = "lo"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_LIST_1, oif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_LIST_1, oif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -3101,23 +3089,23 @@ def test_multiple_groups_different_RP_address_p2(request):
dut = "r4"
rp_address = "1.0.4.17"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_LIST_2, oif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_LIST_2, oif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- GROUP_ADDRESS_LIST = GROUP_ADDRESS_LIST_1 + GROUP_ADDRESS_LIST_2
+ group_address_list = GROUP_ADDRESS_LIST_1 + GROUP_ADDRESS_LIST_2
step("r0: Send IGMP join")
- result = iperfSendIGMPJoin(tgen, "r0", GROUP_ADDRESS_LIST, join_interval=1)
+ result = iperfSendIGMPJoin(tgen, "r0", group_address_list, join_interval=1)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify IGMP groups")
dut = "r1"
oif = "r1-r0-eth0"
- result = verify_igmp_groups(tgen, dut, oif, GROUP_ADDRESS_LIST)
+ result = verify_igmp_groups(tgen, dut, oif, group_address_list)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r5: Send multicast traffic for group 225.1.1.1")
- result = iperfSendTraffic(tgen, "r5", GROUP_ADDRESS_LIST, 32, 2500)
+ result = iperfSendTraffic(tgen, "r5", group_address_list, 32, 2500)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Verify (*, G) upstream IIF interface")
@@ -3175,7 +3163,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r2: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3199,7 +3187,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r3: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3271,7 +3259,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r4: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3295,7 +3283,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r3: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2
)
assert result is not True, "Testcase {} :Failed \n Error: {}".format(
tc_name, result
@@ -3333,7 +3321,7 @@ def test_multiple_groups_different_RP_address_p2(request):
}
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1, r2, r3, r4: Re-configure RP")
@@ -3359,7 +3347,7 @@ def test_multiple_groups_different_RP_address_p2(request):
}
},
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
@@ -3448,7 +3436,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r2: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3472,7 +3460,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r3: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_1
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3544,7 +3532,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r4: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3568,7 +3556,7 @@ def test_multiple_groups_different_RP_address_p2(request):
step("r3: Verify (S, G) upstream join state and join timer")
result = verify_join_state_and_timer(
- tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2, expected=False
+ tgen, dut, iif, SOURCE_ADDRESS, GROUP_ADDRESS_LIST_2
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -3611,7 +3599,7 @@ def test_shutdown_primary_path_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -3630,7 +3618,7 @@ def test_shutdown_primary_path_p1(request):
rp_address = "1.0.2.17"
iif = "r1-r2-eth1"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -3701,7 +3689,7 @@ def test_shutdown_primary_path_p1(request):
dut = "r1"
iif = "r1-r3-eth2"
oif = "r1-r0-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format(
@@ -3713,7 +3701,7 @@ def test_shutdown_primary_path_p1(request):
dut = "r2"
iif = "lo"
oif = "r2-r3-eth1"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r2: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format(
@@ -3725,7 +3713,7 @@ def test_shutdown_primary_path_p1(request):
dut = "r3"
iif = "r3-r2-eth1"
oif = "r3-r1-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r3: (*,G) mroutes are not cleared after shut of R1 to R3 link\n Error: {}".format(
@@ -3804,7 +3792,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -3821,7 +3809,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request):
rp_address = "1.0.2.17"
iif = "r1-r2-eth1"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -3863,7 +3851,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r1: Shut the interface r1-r2-eth1 from R1 to R2")
@@ -3890,7 +3878,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request):
dut = "r1"
iif = "r1-r2-eth1"
oif = "r1-r0-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format(
@@ -3902,7 +3890,7 @@ def test_delete_RP_shut_noshut_upstream_interface_p1(request):
dut = "r2"
iif = "lo"
oif = "r2-r1-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r2: (*,G) mroutes are not cleared after shut of R1 to R0 link\n Error: {}".format(
@@ -3937,7 +3925,7 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request):
reset_config_on_routers(tgen)
kill_iperf(tgen)
clear_ip_mroute(tgen)
- clear_ip_pim_interface_traffic(tgen, topo)
+ clear_ip_pim_interface_traffic(tgen, TOPO)
step("pre-configuration to send IGMP join and multicast traffic")
result = config_to_send_igmp_join_and_traffic(tgen, tc_name)
@@ -3954,7 +3942,7 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request):
rp_address = "1.0.2.17"
iif = "r1-r2-eth1"
result = verify_pim_rp_info(
- tgen, topo, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
+ tgen, TOPO, dut, GROUP_RANGE_ALL, iif, rp_address, SOURCE
)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
@@ -3995,7 +3983,7 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request):
}
}
- result = create_pim_config(tgen, topo, input_dict)
+ result = create_pim_config(tgen, TOPO, input_dict)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("r2: Shut the RP interface lo")
@@ -4017,7 +4005,7 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request):
dut = "r1"
iif = "r1-r2-eth1"
oif = "r1-r0-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r1: (*,G) mroutes are not cleared after shut of R1 to R2 and R3 link\n Error: {}".format(
@@ -4029,7 +4017,7 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request):
dut = "r2"
iif = "lo"
oif = "r2-r1-eth0"
- result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif, expected=False)
+ result = verify_ip_mroutes(tgen, dut, STAR, GROUP_ADDRESS, iif, oif)
assert result is not True, (
"Testcase {} : Failed \n "
"r2: (*,G) mroutes are not cleared after shut of R1 to R2 and R3 link\n Error: {}".format(
@@ -4041,5 +4029,5 @@ def test_delete_RP_shut_noshut_RP_interface_p1(request):
if __name__ == "__main__":
- args = ["-s"] + sys.argv[1:]
- sys.exit(pytest.main(args))
+ ARGS = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(ARGS))
diff --git a/tests/topotests/nhrp-topo/r1/nhrp4_cache.json b/tests/topotests/nhrp_topo/r1/nhrp4_cache.json
index 6426a939be..6426a939be 100644
--- a/tests/topotests/nhrp-topo/r1/nhrp4_cache.json
+++ b/tests/topotests/nhrp_topo/r1/nhrp4_cache.json
diff --git a/tests/topotests/nhrp-topo/r1/nhrp_route4.json b/tests/topotests/nhrp_topo/r1/nhrp_route4.json
index 68b5a6ece2..68b5a6ece2 100644
--- a/tests/topotests/nhrp-topo/r1/nhrp_route4.json
+++ b/tests/topotests/nhrp_topo/r1/nhrp_route4.json
diff --git a/tests/topotests/nhrp-topo/r1/nhrpd.conf b/tests/topotests/nhrp_topo/r1/nhrpd.conf
index 04114bdbe6..04114bdbe6 100644
--- a/tests/topotests/nhrp-topo/r1/nhrpd.conf
+++ b/tests/topotests/nhrp_topo/r1/nhrpd.conf
diff --git a/tests/topotests/nhrp-topo/r1/zebra.conf b/tests/topotests/nhrp_topo/r1/zebra.conf
index b45670fcb2..b45670fcb2 100644
--- a/tests/topotests/nhrp-topo/r1/zebra.conf
+++ b/tests/topotests/nhrp_topo/r1/zebra.conf
diff --git a/tests/topotests/nhrp-topo/r2/nhrp4_cache.json b/tests/topotests/nhrp_topo/r2/nhrp4_cache.json
index 34558e0c28..34558e0c28 100644
--- a/tests/topotests/nhrp-topo/r2/nhrp4_cache.json
+++ b/tests/topotests/nhrp_topo/r2/nhrp4_cache.json
diff --git a/tests/topotests/nhrp-topo/r2/nhrp_route4.json b/tests/topotests/nhrp_topo/r2/nhrp_route4.json
index 7393cba893..7393cba893 100644
--- a/tests/topotests/nhrp-topo/r2/nhrp_route4.json
+++ b/tests/topotests/nhrp_topo/r2/nhrp_route4.json
diff --git a/tests/topotests/nhrp-topo/r2/nhrpd.conf b/tests/topotests/nhrp_topo/r2/nhrpd.conf
index e4f6fb7445..e4f6fb7445 100644
--- a/tests/topotests/nhrp-topo/r2/nhrpd.conf
+++ b/tests/topotests/nhrp_topo/r2/nhrpd.conf
diff --git a/tests/topotests/nhrp-topo/r2/zebra.conf b/tests/topotests/nhrp_topo/r2/zebra.conf
index 9f40d4d72e..9f40d4d72e 100644
--- a/tests/topotests/nhrp-topo/r2/zebra.conf
+++ b/tests/topotests/nhrp_topo/r2/zebra.conf
diff --git a/tests/topotests/nhrp-topo/r3/zebra.conf b/tests/topotests/nhrp_topo/r3/zebra.conf
index 6d3d267978..6d3d267978 100644
--- a/tests/topotests/nhrp-topo/r3/zebra.conf
+++ b/tests/topotests/nhrp_topo/r3/zebra.conf
diff --git a/tests/topotests/nhrp-topo/test_nhrp_topo.dot b/tests/topotests/nhrp_topo/test_nhrp_topo.dot
index 6b68fb398f..6b68fb398f 100644
--- a/tests/topotests/nhrp-topo/test_nhrp_topo.dot
+++ b/tests/topotests/nhrp_topo/test_nhrp_topo.dot
diff --git a/tests/topotests/nhrp-topo/test_nhrp_topo.py b/tests/topotests/nhrp_topo/test_nhrp_topo.py
index 1687961f34..1687961f34 100644
--- a/tests/topotests/nhrp-topo/test_nhrp_topo.py
+++ b/tests/topotests/nhrp_topo/test_nhrp_topo.py
diff --git a/tests/topotests/ospf-sr-te-topo1/dst/zebra.conf b/tests/topotests/ospf-sr-te-topo1/dst/zebra.conf
new file mode 100644
index 0000000000..4cb50fdb27
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/dst/zebra.conf
@@ -0,0 +1,23 @@
+log file zebra.log
+!
+hostname dst
+!
+debug zebra kernel
+debug zebra packet
+debug zebra mpls
+!
+interface lo
+ ip address 9.9.9.2/32
+ ipv6 address 2001:db8:1066::2/128
+!
+interface eth-rt6
+ ip address 10.0.11.2/24
+ link-params
+ enable
+ exit-link-params
+!
+!
+ip forwarding
+!
+line vty
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/bgpd.conf b/tests/topotests/ospf-sr-te-topo1/rt1/bgpd.conf
new file mode 100644
index 0000000000..efc03701b5
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/bgpd.conf
@@ -0,0 +1,16 @@
+log file bgpd.log
+!
+router bgp 1
+ bgp router-id 1.1.1.1
+ neighbor 6.6.6.6 remote-as 1
+ neighbor 6.6.6.6 update-source lo
+ !
+ address-family ipv4 unicast
+ redistribute static
+ neighbor 6.6.6.6 next-hop-self
+ neighbor 6.6.6.6 route-map SET_SR_POLICY in
+ exit-address-family
+!
+route-map SET_SR_POLICY permit 10
+ set sr-te color 1
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/ospfd.conf b/tests/topotests/ospf-sr-te-topo1/rt1/ospfd.conf
new file mode 100644
index 0000000000..225ac93528
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/ospfd.conf
@@ -0,0 +1,36 @@
+password 1
+hostname rt1
+log file ospfd.log
+!
+debug ospf sr
+debug ospf te
+debug ospf event
+debug ospf lsa
+debug ospf zebra
+!
+interface lo
+ ip ospf area 0.0.0.0
+!
+interface eth-sw1
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 1.1.1.1
+ network 1.1.1.1/32 area 0.0.0.0
+ network 10.0.0.0/16 area 0.0.0.0
+ capability opaque
+ !ospf opaque-lsa
+ mpls-te on
+ mpls-te export
+ mpls-te router-address 1.1.1.1
+ router-info area 0.0.0.0
+ passive-interface lo
+ segment-routing on
+ segment-routing global-block 16000 23999
+ !segment-routing local-block 15000 15999
+ segment-routing node-msd 8
+ segment-routing prefix 1.1.1.1/32 index 10
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/pathd.conf b/tests/topotests/ospf-sr-te-topo1/rt1/pathd.conf
new file mode 100644
index 0000000000..55d5857f5d
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/pathd.conf
@@ -0,0 +1,27 @@
+log file pathd.log
+!
+hostname rt1
+!
+segment-routing
+ traffic-eng
+ mpls-te on
+ mpls-te import ospfv2
+ segment-list default
+ index 10 nai adjacency 10.0.1.1 10.0.1.2
+ index 20 nai adjacency 10.0.2.2 10.0.2.4
+ index 30 nai adjacency 10.0.7.4 10.0.7.6
+
+
+ !
+ segment-list test
+ index 10 nai adjacency 10.0.1.1 10.0.1.2
+ index 20 nai adjacency 10.0.2.2 10.0.2.4
+ index 30 nai adjacency 10.0.6.4 10.0.6.5
+ index 40 nai adjacency 10.0.8.5 10.0.8.6
+ !
+ policy color 1 endpoint 6.6.6.6
+ name default
+ binding-sid 1111
+ !
+ !
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data.ref b/tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data.ref
new file mode 100644
index 0000000000..4ef8d946f2
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data.ref
@@ -0,0 +1,13 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "6.6.6.6",
+ "is-operational": false
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data_with_candidate.ref b/tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data_with_candidate.ref
new file mode 100644
index 0000000000..9b28f6a42b
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/step2/show_operational_data_with_candidate.ref
@@ -0,0 +1,20 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "6.6.6.6",
+ "is-operational": true,
+ "candidate-path": [
+ {
+ "preference": 100,
+ "discriminator": "*",
+ "is-best-candidate-path": true
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_single_candidate.ref b/tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_single_candidate.ref
new file mode 100644
index 0000000000..9b28f6a42b
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_single_candidate.ref
@@ -0,0 +1,20 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "6.6.6.6",
+ "is-operational": true,
+ "candidate-path": [
+ {
+ "preference": 100,
+ "discriminator": "*",
+ "is-best-candidate-path": true
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_two_candidates.ref b/tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_two_candidates.ref
new file mode 100644
index 0000000000..249117198a
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/step3/show_operational_data_with_two_candidates.ref
@@ -0,0 +1,25 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "6.6.6.6",
+ "is-operational": true,
+ "candidate-path": [
+ {
+ "preference": 100,
+ "discriminator": "*",
+ "is-best-candidate-path": false
+ },
+ {
+ "preference": 200,
+ "discriminator": "*",
+ "is-best-candidate-path": true
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt1/zebra.conf b/tests/topotests/ospf-sr-te-topo1/rt1/zebra.conf
new file mode 100644
index 0000000000..dd686ea3da
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt1/zebra.conf
@@ -0,0 +1,21 @@
+log file zebra.log
+!
+hostname rt1
+!
+debug zebra kernel
+debug zebra packet
+debug zebra mpls
+!
+interface lo
+ ip address 1.1.1.1/32
+!
+interface eth-sw1
+ ip address 10.0.1.1/24
+ link-params
+ enable
+ exit-link-params
+!
+ip forwarding
+!
+line vty
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt2/ospfd.conf b/tests/topotests/ospf-sr-te-topo1/rt2/ospfd.conf
new file mode 100644
index 0000000000..f6a7bbb621
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt2/ospfd.conf
@@ -0,0 +1,47 @@
+hostname rt2
+log file ospfd.log
+!
+debug ospf sr
+debug ospf te
+debug ospf event
+debug ospf lsa
+debug ospf zebra
+!
+interface lo
+ ip ospf area 0.0.0.0
+!
+interface eth-sw1
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt4-1
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt4-2
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 2.2.2.2
+ network 2.2.2.2/32 area 0.0.0.0
+ network 10.0.0.0/16 area 0.0.0.0
+ capability opaque
+ !ospf opaque-lsa
+ mpls-te on
+ !mpls-te export
+ mpls-te router-address 2.2.2.2
+ router-info area 0.0.0.0
+ passive-interface lo
+ segment-routing on
+ segment-routing global-block 16000 23999
+ !segment-routing local-block 15000 15999
+ segment-routing node-msd 8
+ segment-routing prefix 2.2.2.2/32 index 20
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt2/zebra.conf b/tests/topotests/ospf-sr-te-topo1/rt2/zebra.conf
new file mode 100644
index 0000000000..ddd50ba520
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt2/zebra.conf
@@ -0,0 +1,35 @@
+log file zebra.log
+!
+hostname rt2
+!
+debug zebra kernel
+debug zebra packet
+debug zebra mpls
+!
+interface lo
+ ip address 2.2.2.2/32
+!
+interface eth-sw1
+ ip address 10.0.1.2/24
+ link-params
+ enable
+ exit-link-params
+!
+interface eth-rt4-1
+ ip address 10.0.2.2/24
+ link-params
+ enable
+ exit-link-params
+!
+!
+interface eth-rt4-2
+ ip address 10.0.3.2/24
+ link-params
+ enable
+ exit-link-params
+!
+!
+ip forwarding
+!
+line vty
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt3/ospfd.conf b/tests/topotests/ospf-sr-te-topo1/rt3/ospfd.conf
new file mode 100644
index 0000000000..5f71cd8484
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt3/ospfd.conf
@@ -0,0 +1,46 @@
+hostname rt3
+log file ospfd.log
+!
+debug ospf sr
+debug ospf te
+debug ospf event
+debug ospf lsa
+debug ospf zebra
+!
+interface lo
+ ip ospf area 0.0.0.0
+!
+interface eth-sw1
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt5-1
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt5-2
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 3.3.3.3
+ network 3.3.3.3/32 area 0.0.0.0
+ network 10.0.0.0/16 area 0.0.0.0
+ capability opaque
+ !ospf opaque-lsa
+ mpls-te on
+ !mpls-te export
+ mpls-te router-address 3.3.3.3
+ router-info area 0.0.0.0
+ segment-routing on
+ segment-routing global-block 16000 23999
+ !segment-routing local-block 15000 15999
+ segment-routing node-msd 8
+ segment-routing prefix 3.3.3.3/32 index 30
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt3/zebra.conf b/tests/topotests/ospf-sr-te-topo1/rt3/zebra.conf
new file mode 100644
index 0000000000..0825b5c8bf
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt3/zebra.conf
@@ -0,0 +1,33 @@
+log file zebra.log
+!
+hostname rt3
+!
+debug zebra kernel
+debug zebra packet
+debug zebra mpls
+!
+interface lo
+ ip address 3.3.3.3/32
+!
+interface eth-sw1
+ ip address 10.0.1.3/24
+ link-params
+ enable
+ exit-link-params
+!!
+interface eth-rt5-1
+ ip address 10.0.4.3/24
+ link-params
+ enable
+ exit-link-params
+!!
+interface eth-rt5-2
+ ip address 10.0.5.3/24
+ link-params
+ enable
+ exit-link-params
+!!
+ip forwarding
+!
+line vty
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt4/ospfd.conf b/tests/topotests/ospf-sr-te-topo1/rt4/ospfd.conf
new file mode 100644
index 0000000000..d4862cd233
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt4/ospfd.conf
@@ -0,0 +1,53 @@
+hostname rt4
+log file ospfd.log
+!
+debug ospf sr
+debug ospf te
+debug ospf event
+debug ospf lsa
+debug ospf zebra
+!
+interface lo
+ ip ospf area 0.0.0.0
+!
+interface eth-rt2-1
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt2-2
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt5
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt6
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 4.4.4.4
+ network 4.4.4.4/32 area 0.0.0.0
+ network 10.0.0.0/16 area 0.0.0.0
+ capability opaque
+ !ospf opaque-lsa
+ mpls-te on
+ !mpls-te export
+ mpls-te router-address 4.4.4.4
+ router-info area 0.0.0.0
+ passive-interface lo
+ segment-routing on
+ segment-routing global-block 16000 23999
+ !segment-routing local-block 15000 15999
+ segment-routing node-msd 8
+ segment-routing prefix 4.4.4.4/32 index 40
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt4/zebra.conf b/tests/topotests/ospf-sr-te-topo1/rt4/zebra.conf
new file mode 100644
index 0000000000..c6d1f4f40e
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt4/zebra.conf
@@ -0,0 +1,43 @@
+log file zebra.log
+!
+hostname rt4
+!
+debug zebra kernel
+debug zebra packet
+debug zebra mpls
+!
+interface lo
+ ip address 4.4.4.4/32
+!
+interface eth-rt2-1
+ ip address 10.0.2.4/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-rt2-2
+ ip address 10.0.3.4/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-rt5
+ ip address 10.0.6.4/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-rt6
+ ip address 10.0.7.4/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+ip forwarding
+!
+line vty
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt5/ospfd.conf b/tests/topotests/ospf-sr-te-topo1/rt5/ospfd.conf
new file mode 100644
index 0000000000..fdc0dcfdb7
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt5/ospfd.conf
@@ -0,0 +1,53 @@
+hostname rt5
+log file ospfd.log
+!
+debug ospf sr
+debug ospf te
+debug ospf event
+debug ospf lsa
+debug ospf zebra
+!
+interface lo
+ ip ospf area 0.0.0.0
+!
+interface eth-rt3-1
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt3-2
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt4
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt6
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 5.5.5.5
+ network 5.5.5.5/32 area 0.0.0.0
+ network 10.0.0.0/16 area 0.0.0.0
+ capability opaque
+! ospf opaque-lsa
+ mpls-te on
+! mpls-te export
+ mpls-te router-address 5.5.5.5
+ router-info area 0.0.0.0
+ passive-interface lo
+ segment-routing on
+ segment-routing global-block 16000 23999
+! segment-routing local-block 15000 15999
+ segment-routing node-msd 8
+ segment-routing prefix 5.5.5.5/32 index 50
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt5/zebra.conf b/tests/topotests/ospf-sr-te-topo1/rt5/zebra.conf
new file mode 100644
index 0000000000..96b732d398
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt5/zebra.conf
@@ -0,0 +1,43 @@
+log file zebra.log
+!
+hostname rt5
+!
+debug zebra kernel
+debug zebra packet
+debug zebra mpls
+!
+interface lo
+ ip address 5.5.5.5/32
+!
+interface eth-rt3-1
+ ip address 10.0.4.5/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-rt3-2
+ ip address 10.0.5.5/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-rt4
+ ip address 10.0.6.5/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-rt6
+ ip address 10.0.8.5/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+ip forwarding
+!
+line vty
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/bgpd.conf b/tests/topotests/ospf-sr-te-topo1/rt6/bgpd.conf
new file mode 100644
index 0000000000..e72ee52fce
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/bgpd.conf
@@ -0,0 +1,12 @@
+log file bgpd.log
+!
+router bgp 1
+ bgp router-id 6.6.6.6
+ neighbor 1.1.1.1 remote-as 1
+ neighbor 1.1.1.1 update-source lo
+ !
+ address-family ipv4 unicast
+ redistribute static
+ neighbor 1.1.1.1 next-hop-self
+ exit-address-family
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/ospfd.conf b/tests/topotests/ospf-sr-te-topo1/rt6/ospfd.conf
new file mode 100644
index 0000000000..c06565be0b
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/ospfd.conf
@@ -0,0 +1,41 @@
+hostname rt6
+log file ospfd.log
+!
+debug ospf sr
+debug ospf te
+debug ospf event
+debug ospf lsa
+debug ospf zebra
+!
+interface lo
+ ip ospf area 0.0.0.0
+!
+interface eth-rt4
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+interface eth-rt5
+ ip ospf network point-to-point
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 6.6.6.6
+ network 6.6.6.6/32 area 0.0.0.0
+ network 10.0.0.0/16 area 0.0.0.0
+ capability opaque
+! ospf opaque-lsa
+ mpls-te on
+ mpls-te export
+ mpls-te router-address 6.6.6.6
+ router-info area 0.0.0.0
+ passive-interface lo
+ segment-routing on
+ segment-routing global-block 16000 23999
+! segment-routing local-block 15000 15999
+ segment-routing node-msd 8
+ segment-routing prefix 6.6.6.6/32 index 60
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/pathd.conf b/tests/topotests/ospf-sr-te-topo1/rt6/pathd.conf
new file mode 100644
index 0000000000..696df2214b
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/pathd.conf
@@ -0,0 +1,25 @@
+log file pathd.log
+!
+hostname rt6
+!
+segment-routing
+ traffic-eng
+ mpls-te on
+ mpls-te import ospfv2
+ segment-list default
+ index 10 nai adjacency 10.0.7.6 10.0.7.4
+ index 20 nai adjacency 10.0.2.4 10.0.2.2
+ index 30 nai adjacency 10.0.1.2 10.0.1.1
+ !
+ segment-list test
+ index 10 nai adjacency 10.0.8.6 10.0.8.5
+ index 20 nai adjacency 10.0.6.5 10.0.6.4
+ index 30 nai adjacency 10.0.2.4 10.0.2.2
+ index 40 nai adjacency 10.0.1.2 10.0.1.1
+ !
+ policy color 1 endpoint 1.1.1.1
+ name default
+ binding-sid 6666
+ !
+ !
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data.ref b/tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data.ref
new file mode 100644
index 0000000000..241c80bdd7
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data.ref
@@ -0,0 +1,13 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "1.1.1.1",
+ "is-operational": false
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data_with_candidate.ref b/tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data_with_candidate.ref
new file mode 100644
index 0000000000..20ea69e386
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/step2/show_operational_data_with_candidate.ref
@@ -0,0 +1,19 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "1.1.1.1",
+ "is-operational": true,
+ "candidate-path": [
+ {
+ "preference": 100,
+ "is-best-candidate-path": true
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_single_candidate.ref b/tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_single_candidate.ref
new file mode 100644
index 0000000000..20ea69e386
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_single_candidate.ref
@@ -0,0 +1,19 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "1.1.1.1",
+ "is-operational": true,
+ "candidate-path": [
+ {
+ "preference": 100,
+ "is-best-candidate-path": true
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_two_candidates.ref b/tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_two_candidates.ref
new file mode 100644
index 0000000000..10cafe9091
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/step3/show_operational_data_with_two_candidates.ref
@@ -0,0 +1,23 @@
+{
+ "frr-pathd:pathd": {
+ "srte": {
+ "policy": [
+ {
+ "color": 1,
+ "endpoint": "1.1.1.1",
+ "is-operational": true,
+ "candidate-path": [
+ {
+ "preference": 100,
+ "is-best-candidate-path": false
+ },
+ {
+ "preference": 200,
+ "is-best-candidate-path": true
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/ospf-sr-te-topo1/rt6/zebra.conf b/tests/topotests/ospf-sr-te-topo1/rt6/zebra.conf
new file mode 100644
index 0000000000..360837c4ca
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/rt6/zebra.conf
@@ -0,0 +1,38 @@
+log file zebra.log
+!
+hostname rt6
+!
+debug zebra kernel
+debug zebra packet
+debug zebra mpls
+!
+interface lo
+ ip address 6.6.6.6/32
+!
+interface eth-rt4
+ ip address 10.0.7.6/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-rt5
+ ip address 10.0.8.6/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+interface eth-dst
+ ip address 10.0.11.1/24
+ link-params
+ enable
+ exit-link-params
+!!
+!
+ip forwarding
+!
+ip route 9.9.9.2/32 10.0.11.2
+!
+line vty
+!
diff --git a/tests/topotests/ospf-sr-te-topo1/test_ospf_sr_te_topo1.py b/tests/topotests/ospf-sr-te-topo1/test_ospf_sr_te_topo1.py
new file mode 100755
index 0000000000..6c1122ab72
--- /dev/null
+++ b/tests/topotests/ospf-sr-te-topo1/test_ospf_sr_te_topo1.py
@@ -0,0 +1,640 @@
+#!/usr/bin/env python
+
+#
+# test_ospf_sr_te_topo1.py
+#
+# Copyright (c) 2021 by
+# Volta Networks
+#
+# 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_ospf_sr_te_topo1.py:
+
+ +---------+
+ | |
+ | RT1 |
+ | 1.1.1.1 |
+ | |
+ +---------+
+ |eth-sw1
+ |
+ |
+ |
+ +---------+ | +---------+
+ | | | | |
+ | RT2 |eth-sw1 | eth-sw1| RT3 |
+ | 2.2.2.2 +----------+ + 3.3.3.3 |
+ | | 10.0.1.0/24 | |
+ +---------+ +---------+
+ eth-rt4-1| eth-rt5-1| |eth-rt5-2
+ | | |
+ 10.0.2.0/24| 10.0.4.0/24| |10.0.5.0/24
+ | | |
+ eth-rt2-1| eth-rt3-1| |eth-rt3-2
+ +---------+ +---------+
+ | | | |
+ | RT4 | 10.0.6.0/24 | RT5 |
+ | 4.4.4.4 +---------------------+ 5.5.5.5 |
+ | |eth-rt5 eth-rt4| |
+ +---------+ +---------+
+ eth-rt6| |eth-rt6
+ | |
+ 10.0.7.0/24| |10.0.8.0/24
+ | +---------+ |
+ | | | |
+ | | RT6 | |
+ +----------+ 6.6.6.6 +-----------+
+ eth-rt4| |eth-rt5
+ +---------+
+ |eth-dst (.1)
+ |
+ |10.0.11.0/24
+ |
+ |eth-rt6 (.2)
+ +---------+
+ | |
+ | DST |
+ | 9.9.9.2 |
+ | |
+ +---------+
+
+"""
+
+import os
+import sys
+import pytest
+import json
+import re
+from time import sleep
+from functools import partial
+
+# Save the Current Working Directory to find configuration files.
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+# Import topogen and topotest helpers
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.topolog import logger
+
+# Required to instantiate the topology builder class.
+from mininet.topo import Topo
+
+pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd, pytest.mark.pathd]
+
+
+class TemplateTopo(Topo):
+ "Test topology builder"
+
+ def build(self, *_args, **_opts):
+ "Build function"
+ tgen = get_topogen(self)
+
+ #
+ # Define FRR Routers
+ #
+ for router in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6", "dst"]:
+ tgen.add_router(router)
+
+ #
+ # Define connections
+ #
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["rt1"], nodeif="eth-sw1")
+ switch.add_link(tgen.gears["rt2"], nodeif="eth-sw1")
+ #switch.add_link(tgen.gears["rt3"], nodeif="eth-sw1")
+
+ switch = tgen.add_switch("s2")
+ switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4-1")
+ switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2-1")
+
+ #switch = tgen.add_switch("s3")
+ #switch.add_link(tgen.gears["rt2"], nodeif="eth-rt4-2")
+ #switch.add_link(tgen.gears["rt4"], nodeif="eth-rt2-2")
+
+ switch = tgen.add_switch("s4")
+ switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5-1")
+ switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3-1")
+
+ switch = tgen.add_switch("s5")
+ switch.add_link(tgen.gears["rt3"], nodeif="eth-rt5-2")
+ switch.add_link(tgen.gears["rt5"], nodeif="eth-rt3-2")
+
+ switch = tgen.add_switch("s6")
+ switch.add_link(tgen.gears["rt4"], nodeif="eth-rt5")
+ switch.add_link(tgen.gears["rt5"], nodeif="eth-rt4")
+
+ switch = tgen.add_switch("s7")
+ switch.add_link(tgen.gears["rt4"], nodeif="eth-rt6")
+ switch.add_link(tgen.gears["rt6"], nodeif="eth-rt4")
+
+ switch = tgen.add_switch("s8")
+ switch.add_link(tgen.gears["rt5"], nodeif="eth-rt6")
+ switch.add_link(tgen.gears["rt6"], nodeif="eth-rt5")
+
+ switch = tgen.add_switch("s9")
+ switch.add_link(tgen.gears["rt6"], nodeif="eth-dst")
+ switch.add_link(tgen.gears["dst"], nodeif="eth-rt6")
+
+
+def setup_module(mod):
+ "Sets up the pytest environment"
+
+ tgen = Topogen(TemplateTopo, mod.__name__)
+
+ frrdir = tgen.config.get(tgen.CONFIG_SECTION, "frrdir")
+ if not os.path.isfile(os.path.join(frrdir, "pathd")):
+ pytest.skip("pathd daemon wasn't built in:"+frrdir)
+
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+
+ # For all registered routers, load the zebra configuration file
+ for rname, router in router_list.items():
+ router.load_config(
+ TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_OSPF, os.path.join(CWD, "{}/ospfd.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_PATH, os.path.join(CWD, "{}/pathd.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
+ )
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ "Teardown the pytest environment"
+ tgen = get_topogen()
+
+ # This function tears down the whole topology.
+ tgen.stop_topology()
+
+
+def setup_testcase(msg):
+ logger.info(msg)
+ tgen = get_topogen()
+
+ # Skip if previous fatal error condition is raised
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ return tgen
+
+
+def print_cmd_result(rname, command):
+ print(get_topogen().gears[rname].vtysh_cmd(command, isjson=False))
+
+
+def compare_json_test(router, command, reference, exact):
+ output = router.vtysh_cmd(command, isjson=True)
+ result = topotest.json_cmp(output, reference)
+
+ # Note: topotest.json_cmp() just checks on inclusion of keys.
+ # For exact matching also compare the other way around.
+ if not result and exact:
+ return topotest.json_cmp(reference, output)
+ else:
+ return result
+
+
+def cmp_json_output(rname, command, reference, exact=False):
+ "Compare router JSON output"
+
+ logger.info('Comparing router "%s" "%s" output', rname, command)
+
+ tgen = get_topogen()
+ filename = "{}/{}/{}".format(CWD, rname, reference)
+ expected = json.loads(open(filename).read())
+
+ # Run test function until we get an result. Wait at most 60 seconds.
+ test_func = partial(compare_json_test, tgen.gears[rname], command, expected, exact)
+ _, diff = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assertmsg = '"{}" JSON output mismatches the expected result'.format(rname)
+ assert diff is None, assertmsg
+
+
+def cmp_json_output_exact(rname, command, reference):
+ return cmp_json_output(rname, command, reference, True)
+
+
+def add_candidate_path(rname, endpoint, pref, name, segment_list="default"):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "segment-routing" \
+ -c "traffic-eng" \
+ -c "policy color 1 endpoint """
+ + endpoint
+ + """" \
+ -c "candidate-path preference """
+ + str(pref)
+ + """ name """
+ + name
+ + """ explicit segment-list """
+ + segment_list
+ + '''"'''
+ )
+
+
+def delete_candidate_path(rname, endpoint, pref):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "segment-routing" \
+ -c "traffic-eng" \
+ -c "policy color 1 endpoint """
+ + endpoint
+ + """" \
+ -c "no candidate-path preference """
+ + str(pref)
+ + '''"'''
+ )
+
+
+def add_segment(rname, name, index, label):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "segment-routing" \
+ -c "traffic-eng" \
+ -c "segment-list """
+ + name
+ + """" \
+ -c "index """
+ + str(index)
+ + """ mpls label """
+ + str(label)
+ + '''"'''
+ )
+
+
+def delete_segment(rname, name, index):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "segment-routing" \
+ -c "traffic-eng" \
+ -c "segment-list """
+ + name
+ + """" \
+ -c "no index """
+ + str(index)
+ + '''"'''
+ )
+
+
+def add_segment_adj(rname, name, index, src, dst):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "segment-routing" \
+ -c "traffic-eng" \
+ -c "segment-list """
+ + name
+ + """" \
+ -c "index """
+ + str(index)
+ + """ nai adjacency """
+ + str(src)
+ + """ """
+ + str(dst)
+ + '''"'''
+ )
+
+
+def create_sr_policy(rname, endpoint, bsid):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "segment-routing" \
+ -c "traffic-eng" \
+ -c "policy color 1 endpoint """
+ + endpoint
+ + """" \
+ -c "name default" \
+ -c "binding-sid """
+ + str(bsid)
+ + '''"'''
+ )
+
+
+def delete_sr_policy(rname, endpoint):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "segment-routing" \
+ -c "traffic-eng" \
+ -c "no policy color 1 endpoint """
+ + endpoint
+ + '''"'''
+ )
+
+
+def create_prefix_sid(rname, prefix, sid):
+ get_topogen().net[rname].cmd(
+ """ \
+ vtysh -c "conf t" \
+ -c "router ospf " \
+ -c "segment-routing prefix """
+ + prefix
+ + " index "
+ + str(sid)
+ + '''"'''
+ )
+
+
+def delete_prefix_sid(rname, prefix):
+ get_topogen().net[rname].cmd(
+ ''' \
+ vtysh -c "conf t" \
+ -c "router ospf " \
+ -c "no segment-routing prefix "'''
+ + prefix
+ )
+
+
+def check_bsid(rt, bsid, fn_name, positive):
+ """
+ Search for a bsid in rt1 and rt6
+ Positive means that check is true is bsid is found
+ Positive="False" means that check is true is bsid is NOT found
+ """
+
+ logger.info('Checking "%s" bsid "%s" for router "%s" ', positive, bsid, rt)
+
+ count = 0
+ candidate_key = bsid
+ candidate_output = ""
+ # First wait for convergence
+ tgen = get_topogen()
+ while count < 30:
+ matched = False
+ matched_key = False
+ sleep(1)
+ count += 1
+ router = tgen.gears[rt]
+ candidate_output = router.vtysh_cmd("show mpls table json")
+ candidate_output_json = json.loads(candidate_output)
+ for item in candidate_output_json.items():
+ # logger.info('item "%s"', item)
+ if item[0] == candidate_key:
+ matched_key = True
+ if positive:
+ break
+ if positive:
+ if matched_key:
+ matched = True
+ assertmsg = "{} don't has entry {} but is was expected".format(
+ router.name, candidate_key)
+ else:
+ if not matched_key:
+ matched = True
+ assertmsg = "{} has entry {} but is wans't expected".format(
+ router.name, candidate_key)
+ if matched:
+ logger.info('Success "%s" in "%s"', router.name, fn_name)
+ return
+ assert matched, assertmsg
+
+
+#
+# Step 1
+#
+# Checking the MPLS table using a single SR Policy and a single Candidate Path
+# Segment list are base in adjacency that query TED
+#
+def test_srte_init_step1():
+ setup_testcase("Test (step 1): wait OSPF convergence / label distribution")
+
+ check_bsid("rt1", "1111", test_srte_init_step1.__name__, False)
+ check_bsid("rt6", "6666", test_srte_init_step1.__name__, False)
+
+
+def test_srte_add_candidate_check_mpls_table_step1():
+ setup_testcase("Test (step 1): check MPLS table regarding the added Candidate Path")
+
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ add_candidate_path(rname, endpoint, 100, "default")
+ check_bsid(rname, "1111" if rname == "rt1" else "6666", test_srte_init_step1.__name__, True)
+ delete_candidate_path(rname, endpoint, 100)
+
+
+def test_srte_reinstall_sr_policy_check_mpls_table_step1():
+ setup_testcase(
+ "Test (step 1): check MPLS table after the SR Policy was removed and reinstalled"
+ )
+
+ for rname, endpoint, bsid in [("rt1", "6.6.6.6", 1111), ("rt6", "1.1.1.1", 6666)]:
+ add_candidate_path(rname, endpoint, 100, "default")
+ delete_sr_policy(rname, endpoint)
+ check_bsid(rname, bsid, test_srte_init_step1.__name__, False)
+ create_sr_policy(rname, endpoint, bsid)
+ add_candidate_path(rname, endpoint, 100, "default")
+ check_bsid(rname, "1111" if rname == "rt1" else "6666", test_srte_init_step1.__name__, True)
+ delete_candidate_path(rname, endpoint, 100)
+
+
+#
+# Step 2
+#
+# Checking pathd operational data using a single SR Policy and a single Candidate Path
+# Segment list are base in adjacency that query TED
+#
+def test_srte_bare_policy_step2():
+ setup_testcase("Test (step 2): bare SR Policy should not be operational")
+
+ for rname in ["rt1", "rt6"]:
+ cmp_json_output_exact(
+ rname,
+ "show yang operational-data /frr-pathd:pathd pathd",
+ "step2/show_operational_data.ref",
+ )
+
+
+def test_srte_add_candidate_check_operational_data_step2():
+ setup_testcase(
+ "Test (step 2): add single Candidate Path, SR Policy should be operational"
+ )
+
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ add_candidate_path(rname, endpoint, 100, "default")
+ cmp_json_output(
+ rname,
+ "show yang operational-data /frr-pathd:pathd pathd",
+ "step2/show_operational_data_with_candidate.ref",
+ )
+
+
+def test_srte_config_remove_candidate_check_operational_data_step2():
+ setup_testcase(
+ "Test (step 2): remove single Candidate Path, SR Policy should not be operational anymore"
+ )
+
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ delete_candidate_path(rname, endpoint, 100)
+ cmp_json_output_exact(
+ rname,
+ "show yang operational-data /frr-pathd:pathd pathd",
+ "step2/show_operational_data.ref",
+ )
+
+
+#
+# Step 3
+#
+# Testing the Candidate Path selection
+# Segment list are based in adjacencies resolved by query TED
+#
+def test_srte_add_two_candidates_step3():
+ setup_testcase("Test (step 3): second Candidate Path has higher Priority")
+
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ for pref, cand_name in [("100", "first"), ("200", "second")]:
+ add_candidate_path(rname, endpoint, pref, cand_name)
+ cmp_json_output(
+ rname,
+ "show yang operational-data /frr-pathd:pathd pathd",
+ "step3/show_operational_data_with_two_candidates.ref",
+ )
+
+ # cleanup
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ for pref in ["100", "200"]:
+ delete_candidate_path(rname, endpoint, pref)
+
+
+def test_srte_add_two_candidates_with_reverse_priority_step3():
+ setup_testcase("Test (step 3): second Candidate Path has lower Priority")
+
+ # Use reversed priorities here
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ for pref, cand_name in [("200", "first"), ("100", "second")]:
+ add_candidate_path(rname, endpoint, pref, cand_name)
+ cmp_json_output(
+ rname,
+ "show yang operational-data /frr-pathd:pathd pathd",
+ "step3/show_operational_data_with_two_candidates.ref",
+ )
+
+ # cleanup
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ for pref in ["100", "200"]:
+ delete_candidate_path(rname, endpoint, pref)
+
+
+def test_srte_remove_best_candidate_step3():
+ setup_testcase("Test (step 3): delete the Candidate Path with higher priority")
+
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ for pref, cand_name in [("100", "first"), ("200", "second")]:
+ add_candidate_path(rname, endpoint, pref, cand_name)
+
+ # Delete candidate with higher priority
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ delete_candidate_path(rname, endpoint, 200)
+
+ # Candidate with lower priority should get active now
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ cmp_json_output(
+ rname,
+ "show yang operational-data /frr-pathd:pathd pathd",
+ "step3/show_operational_data_with_single_candidate.ref",
+ )
+ # cleanup
+ delete_candidate_path(rname, endpoint, 100)
+
+
+#
+# Step 4
+#
+# Checking MPLS table with a single SR Policy and a Candidate Path with different Segment Lists and other modifications
+# Segment list are base in adjacency that query TED
+#
+def test_srte_change_segment_list_check_mpls_table_step4():
+ setup_testcase("Test (step 4): check MPLS table for changed Segment List")
+
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ add_candidate_path(rname, endpoint, 100, "default")
+ # now change the segment list name
+ add_candidate_path(rname, endpoint, 100, "default", "test")
+ check_bsid(rname, "1111" if rname == "rt1" else "6666", test_srte_init_step1.__name__, True)
+ delete_segment(rname, "test", 10)
+ delete_segment(rname, "test", 20)
+ delete_segment(rname, "test", 30)
+ delete_segment(rname, "test", 40)
+ if rname == "rt1":
+ add_segment_adj(rname, "test", 10, "10.0.1.1", "10.0.1.2")
+ add_segment_adj(rname, "test", 20, "10.0.2.2", "10.0.2.4")
+ add_segment_adj(rname, "test", 30, "10.0.6.4", "10.0.6.5")
+ add_segment_adj(rname, "test", 40, "10.0.8.5", "10.0.8.6")
+ else:
+ add_segment_adj(rname, "test", 10, "10.0.8.6", "10.0.8.5")
+ add_segment_adj(rname, "test", 20, "10.0.6.5", "10.0.6.4")
+ add_segment_adj(rname, "test", 30, "10.0.2.4", "10.0.2.2")
+ add_segment_adj(rname, "test", 40, "10.0.1.2", "10.0.1.1")
+ check_bsid(rname, "1111" if rname == "rt1" else "6666", test_srte_init_step1.__name__, True)
+ delete_candidate_path(rname, endpoint, 100)
+
+
+def test_srte_change_sl_priority_error_ted_check_mpls_table_step4():
+ setup_testcase("Test (step 4): check MPLS table keeps low prio sl")
+
+ for rname, endpoint in [("rt1", "6.6.6.6"), ("rt6", "1.1.1.1")]:
+ add_candidate_path(rname, endpoint, 100, "default")
+ # now change the segment list name
+ add_candidate_path(rname, endpoint, 200, "test", "test")
+ check_bsid(rname, "1111" if rname == "rt1" else "6666", test_srte_init_step1.__name__, True)
+ delete_segment(rname, "test", 10)
+ delete_segment(rname, "test", 20)
+ delete_segment(rname, "test", 30)
+ delete_segment(rname, "test", 40)
+ # These won't resolv
+ if rname == "rt1":
+ add_segment_adj(rname, "test", 10, "10.0.1.99", "10.0.1.99")
+ add_segment_adj(rname, "test", 20, "10.0.2.99", "10.0.2.99")
+ add_segment_adj(rname, "test", 30, "10.0.6.99", "10.0.6.99")
+ add_segment_adj(rname, "test", 40, "10.0.8.99", "10.0.8.99")
+ else:
+ add_segment_adj(rname, "test", 10, "10.0.8.99", "10.0.8.99")
+ add_segment_adj(rname, "test", 20, "10.0.6.99", "10.0.6.99")
+ add_segment_adj(rname, "test", 30, "10.0.2.99", "10.0.2.99")
+ add_segment_adj(rname, "test", 40, "10.0.1.99", "10.0.1.99")
+ # So policy sticks with default sl even higher prio
+ check_bsid(rname, "1111" if rname == "rt1" else "6666", test_srte_init_step1.__name__, True)
+ delete_candidate_path(rname, endpoint, 100)
+
+
+# Memory leak test template
+def test_memory_leak():
+ "Run the memory leak test and report results."
+ tgen = get_topogen()
+ if not tgen.is_memleak_enabled():
+ pytest.skip("Memory leak test/report is disabled")
+
+ tgen.report_memory_leaks()
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/ospf6-topo1/README.md b/tests/topotests/ospf6_topo1/README.md
index 526c019c6a..526c019c6a 100644
--- a/tests/topotests/ospf6-topo1/README.md
+++ b/tests/topotests/ospf6_topo1/README.md
diff --git a/tests/topotests/ospf6-topo1/r1/ip_6_address.nhg.ref b/tests/topotests/ospf6_topo1/r1/ip_6_address.nhg.ref
index 11fd9fe3c4..11fd9fe3c4 100644
--- a/tests/topotests/ospf6-topo1/r1/ip_6_address.nhg.ref
+++ b/tests/topotests/ospf6_topo1/r1/ip_6_address.nhg.ref
diff --git a/tests/topotests/ospf6-topo1/r1/ip_6_address.ref b/tests/topotests/ospf6_topo1/r1/ip_6_address.ref
index 8c48f22381..8c48f22381 100644
--- a/tests/topotests/ospf6-topo1/r1/ip_6_address.ref
+++ b/tests/topotests/ospf6_topo1/r1/ip_6_address.ref
diff --git a/tests/topotests/ospf6-topo1/r1/ospf6d.conf b/tests/topotests/ospf6_topo1/r1/ospf6d.conf
index 9f7e058931..9f7e058931 100644
--- a/tests/topotests/ospf6-topo1/r1/ospf6d.conf
+++ b/tests/topotests/ospf6_topo1/r1/ospf6d.conf
diff --git a/tests/topotests/ospf6-topo1/r1/show_ipv6_route.ref b/tests/topotests/ospf6_topo1/r1/show_ipv6_route.ref
index a2ddf7c5ae..a2ddf7c5ae 100644
--- a/tests/topotests/ospf6-topo1/r1/show_ipv6_route.ref
+++ b/tests/topotests/ospf6_topo1/r1/show_ipv6_route.ref
diff --git a/tests/topotests/ospf6-topo1/r1/zebra.conf b/tests/topotests/ospf6_topo1/r1/zebra.conf
index dfbcea8d21..dfbcea8d21 100644
--- a/tests/topotests/ospf6-topo1/r1/zebra.conf
+++ b/tests/topotests/ospf6_topo1/r1/zebra.conf
diff --git a/tests/topotests/ospf6-topo1/r2/ip_6_address.nhg.ref b/tests/topotests/ospf6_topo1/r2/ip_6_address.nhg.ref
index 032acb5341..032acb5341 100644
--- a/tests/topotests/ospf6-topo1/r2/ip_6_address.nhg.ref
+++ b/tests/topotests/ospf6_topo1/r2/ip_6_address.nhg.ref
diff --git a/tests/topotests/ospf6-topo1/r2/ip_6_address.ref b/tests/topotests/ospf6_topo1/r2/ip_6_address.ref
index edb6c864be..edb6c864be 100644
--- a/tests/topotests/ospf6-topo1/r2/ip_6_address.ref
+++ b/tests/topotests/ospf6_topo1/r2/ip_6_address.ref
diff --git a/tests/topotests/ospf6-topo1/r2/ospf6d.conf b/tests/topotests/ospf6_topo1/r2/ospf6d.conf
index 26ebc2c0ea..26ebc2c0ea 100644
--- a/tests/topotests/ospf6-topo1/r2/ospf6d.conf
+++ b/tests/topotests/ospf6_topo1/r2/ospf6d.conf
diff --git a/tests/topotests/ospf6-topo1/r2/show_ipv6_route.ref b/tests/topotests/ospf6_topo1/r2/show_ipv6_route.ref
index 1f642b1b22..1f642b1b22 100644
--- a/tests/topotests/ospf6-topo1/r2/show_ipv6_route.ref
+++ b/tests/topotests/ospf6_topo1/r2/show_ipv6_route.ref
diff --git a/tests/topotests/ospf6-topo1/r2/zebra.conf b/tests/topotests/ospf6_topo1/r2/zebra.conf
index f05d1a60ff..f05d1a60ff 100644
--- a/tests/topotests/ospf6-topo1/r2/zebra.conf
+++ b/tests/topotests/ospf6_topo1/r2/zebra.conf
diff --git a/tests/topotests/ospf6-topo1/r3/ip_6_address.nhg.ref b/tests/topotests/ospf6_topo1/r3/ip_6_address.nhg.ref
index 101fcc95b4..101fcc95b4 100644
--- a/tests/topotests/ospf6-topo1/r3/ip_6_address.nhg.ref
+++ b/tests/topotests/ospf6_topo1/r3/ip_6_address.nhg.ref
diff --git a/tests/topotests/ospf6-topo1/r3/ip_6_address.ref b/tests/topotests/ospf6_topo1/r3/ip_6_address.ref
index 1a3a4ea86f..1a3a4ea86f 100644
--- a/tests/topotests/ospf6-topo1/r3/ip_6_address.ref
+++ b/tests/topotests/ospf6_topo1/r3/ip_6_address.ref
diff --git a/tests/topotests/ospf6-topo1/r3/ospf6d.conf b/tests/topotests/ospf6_topo1/r3/ospf6d.conf
index e902496530..e902496530 100644
--- a/tests/topotests/ospf6-topo1/r3/ospf6d.conf
+++ b/tests/topotests/ospf6_topo1/r3/ospf6d.conf
diff --git a/tests/topotests/ospf6-topo1/r3/show_ipv6_route.ref b/tests/topotests/ospf6_topo1/r3/show_ipv6_route.ref
index 8e3afa583a..8e3afa583a 100644
--- a/tests/topotests/ospf6-topo1/r3/show_ipv6_route.ref
+++ b/tests/topotests/ospf6_topo1/r3/show_ipv6_route.ref
diff --git a/tests/topotests/ospf6-topo1/r3/zebra.conf b/tests/topotests/ospf6_topo1/r3/zebra.conf
index d8051c350d..d8051c350d 100644
--- a/tests/topotests/ospf6-topo1/r3/zebra.conf
+++ b/tests/topotests/ospf6_topo1/r3/zebra.conf
diff --git a/tests/topotests/ospf6-topo1/r4/ip_6_address.nhg.ref b/tests/topotests/ospf6_topo1/r4/ip_6_address.nhg.ref
index 4f11670ce3..4f11670ce3 100644
--- a/tests/topotests/ospf6-topo1/r4/ip_6_address.nhg.ref
+++ b/tests/topotests/ospf6_topo1/r4/ip_6_address.nhg.ref
diff --git a/tests/topotests/ospf6-topo1/r4/ip_6_address.ref b/tests/topotests/ospf6_topo1/r4/ip_6_address.ref
index cb3b745de5..cb3b745de5 100644
--- a/tests/topotests/ospf6-topo1/r4/ip_6_address.ref
+++ b/tests/topotests/ospf6_topo1/r4/ip_6_address.ref
diff --git a/tests/topotests/ospf6-topo1/r4/ospf6d.conf b/tests/topotests/ospf6_topo1/r4/ospf6d.conf
index 5607a789de..5607a789de 100644
--- a/tests/topotests/ospf6-topo1/r4/ospf6d.conf
+++ b/tests/topotests/ospf6_topo1/r4/ospf6d.conf
diff --git a/tests/topotests/ospf6-topo1/r4/show_ipv6_route.ref b/tests/topotests/ospf6_topo1/r4/show_ipv6_route.ref
index 0df652ffb3..0df652ffb3 100644
--- a/tests/topotests/ospf6-topo1/r4/show_ipv6_route.ref
+++ b/tests/topotests/ospf6_topo1/r4/show_ipv6_route.ref
diff --git a/tests/topotests/ospf6-topo1/r4/zebra.conf b/tests/topotests/ospf6_topo1/r4/zebra.conf
index cada58bd01..cada58bd01 100644
--- a/tests/topotests/ospf6-topo1/r4/zebra.conf
+++ b/tests/topotests/ospf6_topo1/r4/zebra.conf
diff --git a/tests/topotests/ospf6-topo1/test_ospf6_topo1.py b/tests/topotests/ospf6_topo1/test_ospf6_topo1.py
index f8c3476e18..f8c3476e18 100644
--- a/tests/topotests/ospf6-topo1/test_ospf6_topo1.py
+++ b/tests/topotests/ospf6_topo1/test_ospf6_topo1.py
diff --git a/tests/topotests/ospf6_topo1_vrf/README.md b/tests/topotests/ospf6_topo1_vrf/README.md
new file mode 100644
index 0000000000..3ed0b8fbe2
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/README.md
@@ -0,0 +1,132 @@
+# OSPFv3 (IPv6) Topology Test
+
+## Topology
+ -----\
+ SW1 - Stub Net 1 SW2 - Stub Net 2 \
+ fc00:1:1:1::/64 fc00:2:2:2::/64 \
+ \___________________/ \___________________/ |
+ | | |
+ | | |
+ | ::1 | ::2 |
+ +---------+---------+ +---------+---------+ |
+ | R1 | | R2 | |
+ | FRRouting | | FRRouting | |
+ | Rtr-ID: 10.0.0.1 | | Rtr-ID: 10.0.0.2 | |
+ +---------+---------+ +---------+---------+ |
+ | ::1 | ::2 \
+ \______ ___________/ OSPFv3
+ \ / Area 0.0.0.0
+ \ / /
+ ~~~~~~~~~~~~~~~~~~ |
+ ~~ SW5 ~~ |
+ ~~ Switch ~~ |
+ ~~ fc00:A:A:A::/64 ~~ |
+ ~~~~~~~~~~~~~~~~~~ |
+ | /---- |
+ | ::3 | SW3 - Stub Net 3 |
+ +---------+---------+ /-+ fc00:3:3:3::/64 |
+ | R3 | / | /
+ | FRRouting +--/ \---- /
+ | Rtr-ID: 10.0.0.3 | ::3 ___________/
+ +---------+---------+ \
+ | ::3 \
+ | \
+ ~~~~~~~~~~~~~~~~~~ |
+ ~~ SW6 ~~ |
+ ~~ Switch ~~ |
+ ~~ fc00:B:B:B::/64 ~~ \
+ ~~~~~~~~~~~~~~~~~~ OSPFv3
+ | Area 0.0.0.1
+ | ::4 /
+ +---------+---------+ /---- |
+ | R4 | | SW4 - Stub Net 4 |
+ | FRRouting +------+ fc00:4:4:4::/64 |
+ | Rtr-ID: 10.0.0.4 | ::4 | /
+ +-------------------+ \---- /
+ -----/
+
+## FRR Configuration
+
+Full config as used is in r1 / r2 / r3 / r4 / r5 subdirectories
+
+Simplified `R1` config (R1 is similar)
+
+ hostname r1
+ !
+ interface r1-stubnet vrf r1-cust1
+ ipv6 address fc00:1:1:1::1/64
+ ipv6 ospf6 network broadcast
+ !
+ interface r1-sw5 vrf r1-cust1
+ ipv6 address fc00:a:a:a::1/64
+ ipv6 ospf6 network broadcast
+ !
+ router ospf6 vrf r1-cust1
+ router-id 10.0.0.1
+ log-adjacency-changes detail
+ redistribute static
+ interface r1-stubnet area 0.0.0.0
+ interface r1-sw5 area 0.0.0.0
+ !
+ ipv6 route fc00:1111:1111:1111::/64 fc00:1:1:1::1234 vrf r1-cust1
+
+Simplified `R3` config
+
+ hostname r3
+ !
+ interface r3-stubnet vrf r3-cust1
+ ipv6 address fc00:3:3:3::3/64
+ ipv6 ospf6 network broadcast
+ !
+ interface r3-sw5 vrf r3-cust1
+ ipv6 address fc00:a:a:a::3/64
+ ipv6 ospf6 network broadcast
+ !
+ interface r3-sw6 vrf r3-cust1
+ ipv6 address fc00:b:b:b::3/64
+ ipv6 ospf6 network broadcast
+ !
+ router ospf6 vrf r3-cust1
+ router-id 10.0.0.3
+ log-adjacency-changes detail
+ redistribute static
+ interface r3-stubnet area 0.0.0.0
+ interface r3-sw5 area 0.0.0.0
+ interface r3-sw6 area 0.0.0.1
+ !
+ ipv6 route fc00:3333:3333:3333::/64 fc00:3:3:3::1234 vrf r3-cust1
+
+## Tests executed
+
+### Check if FRR is running
+
+Test is executed by running
+
+ vtysh -c "show logging" | grep "Logging configuration for"
+
+on each FRR router. This should return the logging information for all daemons registered
+to Zebra and the list of running daemons is compared to the daemons started for this test (`zebra` and `ospf6d`)
+
+### Verify for OSPFv3 to converge
+
+OSPFv3 is expected to converge on each view within 60s total time. Convergence is verified by executing (on each node)
+
+ vtysh -c "show ipv6 ospf vrf r1-cust1 neigh"
+
+and checking for "Full" neighbor status in the output. An additional 15 seconds after the full converge is waited for routes to populate before the following routing table checks are executed
+
+### Verifying OSPFv3 Routing Tables
+
+Routing table is verified by running
+
+ vtysh -c "show ipv6 route vrf r1-cust1"
+
+on each node and comparing the result to the stored example config (see `show_ipv6_route.ref` in r1 / r2 / r3 / r4 directories). Link-Local addresses are masked out before the compare.
+
+### Verifying Linux Kernel Routing Table
+
+Linux Kernel IPv6 Routing table is verified on each FRR node with
+
+ ip -6 route vrf r1-cust1
+
+Tables are compared with reference routing table (see `ip_6_address.ref` in r1 / r2 / r3 / r4 directories). Link-Local addresses are translated after getting collected on each node with interface name to make them consistent
diff --git a/tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.nhg.ref b/tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.nhg.ref
new file mode 100644
index 0000000000..11fd9fe3c4
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.nhg.ref
@@ -0,0 +1,10 @@
+fc00:1111:1111:1111::/64 nhid XXXX via fc00:1:1:1::1234 dev r1-stubnet proto XXXX metric 20 pref medium
+fc00:1:1:1::/64 dev r1-stubnet proto XXXX metric 256 pref medium
+fc00:2222:2222:2222::/64 nhid XXXX via fe80::__(r2-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:2:2:2::/64 nhid XXXX via fe80::__(r2-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:3333:3333:3333::/64 nhid XXXX via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:3:3:3::/64 nhid XXXX via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:4444:4444:4444::/64 nhid XXXX via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:4:4:4::/64 nhid XXXX via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:a:a:a::/64 dev r1-sw5 proto XXXX metric 256 pref medium
+fc00:b:b:b::/64 nhid XXXX via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
diff --git a/tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.ref b/tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.ref
new file mode 100644
index 0000000000..f17e1fed16
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r1/ip_6_address.ref
@@ -0,0 +1,10 @@
+fc00:1111:1111:1111::/64 via fc00:1:1:1::1234 dev r1-stubnet proto XXXX metric 20 pref medium
+fc00:1:1:1::/64 dev r1-stubnet proto XXXX metric 256 pref medium
+fc00:2222:2222:2222::/64 via fe80::__(r2-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:2:2:2::/64 via fe80::__(r2-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:3333:3333:3333::/64 via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:3:3:3::/64 via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:4444:4444:4444::/64 via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:4:4:4::/64 via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
+fc00:a:a:a::/64 dev r1-sw5 proto XXXX metric 256 pref medium
+fc00:b:b:b::/64 via fe80::__(r3-sw5)__ dev r1-sw5 proto XXXX metric 20 pref medium
diff --git a/tests/topotests/ospf6_topo1_vrf/r1/ospf6d.conf b/tests/topotests/ospf6_topo1_vrf/r1/ospf6d.conf
new file mode 100644
index 0000000000..ed480354e4
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r1/ospf6d.conf
@@ -0,0 +1,31 @@
+hostname r1
+log file ospf6d.log
+!
+debug ospf6 message all
+debug ospf6 lsa unknown
+debug ospf6 zebra
+debug ospf6 interface
+debug ospf6 neighbor
+debug ospf6 route table
+debug ospf6 flooding
+!
+interface r1-stubnet vrf r1-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+interface r1-sw5 vrf r1-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+router ospf6 vrf r1-cust1
+ ospf6 router-id 10.0.0.1
+ log-adjacency-changes detail
+ redistribute static
+ interface r1-stubnet area 0.0.0.0
+ interface r1-sw5 area 0.0.0.0
+!
+line vty
+ exec-timeout 0 0
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/r1/show_ipv6_vrf_route.ref b/tests/topotests/ospf6_topo1_vrf/r1/show_ipv6_vrf_route.ref
new file mode 100644
index 0000000000..a2ddf7c5ae
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r1/show_ipv6_vrf_route.ref
@@ -0,0 +1,9 @@
+O fc00:1:1:1::/64 [110/10] is directly connected, r1-stubnet, weight 1, XX:XX:XX
+O>* fc00:2:2:2::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r1-sw5, weight 1, XX:XX:XX
+O>* fc00:3:3:3::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r1-sw5, weight 1, XX:XX:XX
+O>* fc00:4:4:4::/64 [110/30] via fe80::XXXX:XXXX:XXXX:XXXX, r1-sw5, weight 1, XX:XX:XX
+O fc00:a:a:a::/64 [110/10] is directly connected, r1-sw5, weight 1, XX:XX:XX
+O>* fc00:b:b:b::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r1-sw5, weight 1, XX:XX:XX
+O>* fc00:2222:2222:2222::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r1-sw5, weight 1, XX:XX:XX
+O>* fc00:3333:3333:3333::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r1-sw5, weight 1, XX:XX:XX
+O>* fc00:4444:4444:4444::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r1-sw5, weight 1, XX:XX:XX
diff --git a/tests/topotests/ospf6_topo1_vrf/r1/zebra.conf b/tests/topotests/ospf6_topo1_vrf/r1/zebra.conf
new file mode 100644
index 0000000000..abe8a9bc45
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r1/zebra.conf
@@ -0,0 +1,20 @@
+!
+hostname r1
+log file zebra.log
+!
+debug zebra events
+debug zebra rib
+!
+interface r1-stubnet vrf r1-cust1
+ ipv6 address fc00:1:1:1::1/64
+!
+interface r1-sw5 vrf r1-cust1
+ ipv6 address fc00:a:a:a::1/64
+!
+interface lo
+!
+ipv6 route fc00:1111:1111:1111::/64 fc00:1:1:1::1234 vrf r1-cust1
+!
+!
+line vty
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/r2/ip_6_address.ref b/tests/topotests/ospf6_topo1_vrf/r2/ip_6_address.ref
new file mode 100644
index 0000000000..1a3e67bb09
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r2/ip_6_address.ref
@@ -0,0 +1,10 @@
+fc00:1111:1111:1111::/64 via fe80::__(r1-sw5)__ dev r2-sw5 proto XXXX metric 20 pref medium
+fc00:1:1:1::/64 via fe80::__(r1-sw5)__ dev r2-sw5 proto XXXX metric 20 pref medium
+fc00:2222:2222:2222::/64 via fc00:2:2:2::1234 dev r2-stubnet proto XXXX metric 20 pref medium
+fc00:2:2:2::/64 dev r2-stubnet proto XXXX metric 256 pref medium
+fc00:3333:3333:3333::/64 via fe80::__(r3-sw5)__ dev r2-sw5 proto XXXX metric 20 pref medium
+fc00:3:3:3::/64 via fe80::__(r3-sw5)__ dev r2-sw5 proto XXXX metric 20 pref medium
+fc00:4444:4444:4444::/64 via fe80::__(r3-sw5)__ dev r2-sw5 proto XXXX metric 20 pref medium
+fc00:4:4:4::/64 via fe80::__(r3-sw5)__ dev r2-sw5 proto XXXX metric 20 pref medium
+fc00:a:a:a::/64 dev r2-sw5 proto XXXX metric 256 pref medium
+fc00:b:b:b::/64 via fe80::__(r3-sw5)__ dev r2-sw5 proto XXXX metric 20 pref medium
diff --git a/tests/topotests/ospf6_topo1_vrf/r2/ospf6d.conf b/tests/topotests/ospf6_topo1_vrf/r2/ospf6d.conf
new file mode 100644
index 0000000000..485771e7d5
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r2/ospf6d.conf
@@ -0,0 +1,31 @@
+hostname r2
+log file ospf6d.log
+!
+debug ospf6 message all
+debug ospf6 lsa unknown
+debug ospf6 zebra
+debug ospf6 interface
+debug ospf6 neighbor
+debug ospf6 route table
+debug ospf6 flooding
+!
+interface r2-stubnet vrf r2-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 dead-interval 10
+ ipv6 ospf6 hello-interval 2
+!
+interface r2-sw5 vrf r2-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 dead-interval 10
+ ipv6 ospf6 hello-interval 2
+!
+router ospf6 vrf r2-cust1
+ ospf6 router-id 10.0.0.2
+ log-adjacency-changes detail
+ redistribute static
+ interface r2-stubnet area 0.0.0.0
+ interface r2-sw5 area 0.0.0.0
+!
+line vty
+ exec-timeout 0 0
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/r2/show_ipv6_vrf_route.ref b/tests/topotests/ospf6_topo1_vrf/r2/show_ipv6_vrf_route.ref
new file mode 100644
index 0000000000..3289619414
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r2/show_ipv6_vrf_route.ref
@@ -0,0 +1,9 @@
+O>* fc00:1:1:1::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r2-sw5, weight 1, XX:XX:XX
+O fc00:2:2:2::/64 [110/10] is directly connected, r2-stubnet, weight 1, XX:XX:XX
+O>* fc00:3:3:3::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r2-sw5, weight 1, XX:XX:XX
+O>* fc00:4:4:4::/64 [110/30] via fe80::XXXX:XXXX:XXXX:XXXX, r2-sw5, weight 1, XX:XX:XX
+O fc00:a:a:a::/64 [110/10] is directly connected, r2-sw5, weight 1, XX:XX:XX
+O>* fc00:b:b:b::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r2-sw5, weight 1, XX:XX:XX
+O>* fc00:1111:1111:1111::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r2-sw5, weight 1, XX:XX:XX
+O>* fc00:3333:3333:3333::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r2-sw5, weight 1, XX:XX:XX
+O>* fc00:4444:4444:4444::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r2-sw5, weight 1, XX:XX:XX
diff --git a/tests/topotests/ospf6_topo1_vrf/r2/zebra.conf b/tests/topotests/ospf6_topo1_vrf/r2/zebra.conf
new file mode 100644
index 0000000000..e1011bd3b6
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r2/zebra.conf
@@ -0,0 +1,20 @@
+!
+hostname r2
+log file zebra.log
+!
+debug zebra events
+debug zebra rib
+!
+interface r2-stubnet vrf r2-cust1
+ ipv6 address fc00:2:2:2::2/64
+!
+interface r2-sw5 vrf r2-cust1
+ ipv6 address fc00:a:a:a::2/64
+!
+interface lo
+!
+ipv6 route fc00:2222:2222:2222::/64 fc00:2:2:2::1234 vrf r2-cust1
+!
+!
+line vty
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/r3/ip_6_address.ref b/tests/topotests/ospf6_topo1_vrf/r3/ip_6_address.ref
new file mode 100644
index 0000000000..d70027fb9e
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r3/ip_6_address.ref
@@ -0,0 +1,10 @@
+fc00:1111:1111:1111::/64 via fe80::__(r1-sw5)__ dev r3-sw5 proto XXXX metric 20 pref medium
+fc00:1:1:1::/64 via fe80::__(r1-sw5)__ dev r3-sw5 proto XXXX metric 20 pref medium
+fc00:2222:2222:2222::/64 via fe80::__(r2-sw5)__ dev r3-sw5 proto XXXX metric 20 pref medium
+fc00:2:2:2::/64 via fe80::__(r2-sw5)__ dev r3-sw5 proto XXXX metric 20 pref medium
+fc00:3333:3333:3333::/64 via fc00:3:3:3::1234 dev r3-stubnet proto XXXX metric 20 pref medium
+fc00:3:3:3::/64 dev r3-stubnet proto XXXX metric 256 pref medium
+fc00:4444:4444:4444::/64 via fe80::__(r4-sw6)__ dev r3-sw6 proto XXXX metric 20 pref medium
+fc00:4:4:4::/64 via fe80::__(r4-sw6)__ dev r3-sw6 proto XXXX metric 20 pref medium
+fc00:a:a:a::/64 dev r3-sw5 proto XXXX metric 256 pref medium
+fc00:b:b:b::/64 dev r3-sw6 proto XXXX metric 256 pref medium
diff --git a/tests/topotests/ospf6_topo1_vrf/r3/ospf6d.conf b/tests/topotests/ospf6_topo1_vrf/r3/ospf6d.conf
new file mode 100644
index 0000000000..f5837bf6fd
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r3/ospf6d.conf
@@ -0,0 +1,37 @@
+hostname r3
+log file ospf6d.log
+!
+debug ospf6 message all
+debug ospf6 lsa unknown
+debug ospf6 zebra
+debug ospf6 interface
+debug ospf6 neighbor
+debug ospf6 route table
+debug ospf6 flooding
+!
+interface r3-stubnet vrf r3-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 dead-interval 10
+ ipv6 ospf6 hello-interval 2
+!
+interface r3-sw5 vrf r3-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 dead-interval 10
+ ipv6 ospf6 hello-interval 2
+!
+interface r3-sw6 vrf r3-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 dead-interval 10
+ ipv6 ospf6 hello-interval 2
+!
+router ospf6 vrf r3-cust1
+ ospf6 router-id 10.0.0.3
+ log-adjacency-changes detail
+ redistribute static
+ interface r3-stubnet area 0.0.0.0
+ interface r3-sw5 area 0.0.0.0
+ interface r3-sw6 area 0.0.0.1
+!
+line vty
+ exec-timeout 0 0
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/r3/show_ipv6_vrf_route.ref b/tests/topotests/ospf6_topo1_vrf/r3/show_ipv6_vrf_route.ref
new file mode 100644
index 0000000000..ac713190ff
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r3/show_ipv6_vrf_route.ref
@@ -0,0 +1,9 @@
+O>* fc00:1:1:1::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r3-sw5, weight 1, XX:XX:XX
+O>* fc00:2:2:2::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r3-sw5, weight 1, XX:XX:XX
+O fc00:3:3:3::/64 [110/10] is directly connected, r3-stubnet, weight 1, XX:XX:XX
+O>* fc00:4:4:4::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r3-sw6, weight 1, XX:XX:XX
+O fc00:a:a:a::/64 [110/10] is directly connected, r3-sw5, weight 1, XX:XX:XX
+O fc00:b:b:b::/64 [110/10] is directly connected, r3-sw6, weight 1, XX:XX:XX
+O>* fc00:1111:1111:1111::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r3-sw5, weight 1, XX:XX:XX
+O>* fc00:2222:2222:2222::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r3-sw5, weight 1, XX:XX:XX
+O>* fc00:4444:4444:4444::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r3-sw6, weight 1, XX:XX:XX
diff --git a/tests/topotests/ospf6_topo1_vrf/r3/zebra.conf b/tests/topotests/ospf6_topo1_vrf/r3/zebra.conf
new file mode 100644
index 0000000000..f489f3ac73
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r3/zebra.conf
@@ -0,0 +1,23 @@
+!
+hostname r3
+log file zebra.log
+!
+debug zebra events
+debug zebra rib
+!
+interface r3-stubnet vrf r3-cust1
+ ipv6 address fc00:3:3:3::3/64
+!
+interface r3-sw5 vrf r3-cust1
+ ipv6 address fc00:a:a:a::3/64
+!
+interface r3-sw6 vrf r3-cust1
+ ipv6 address fc00:b:b:b::3/64
+!
+interface lo
+!
+ipv6 route fc00:3333:3333:3333::/64 fc00:3:3:3::1234 vrf r3-cust1
+!
+!
+line vty
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/r4/ip_6_address.ref b/tests/topotests/ospf6_topo1_vrf/r4/ip_6_address.ref
new file mode 100644
index 0000000000..0883f3c588
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r4/ip_6_address.ref
@@ -0,0 +1,10 @@
+fc00:1111:1111:1111::/64 via fe80::__(r3-sw6)__ dev r4-sw6 proto XXXX metric 20 pref medium
+fc00:1:1:1::/64 via fe80::__(r3-sw6)__ dev r4-sw6 proto XXXX metric 20 pref medium
+fc00:2222:2222:2222::/64 via fe80::__(r3-sw6)__ dev r4-sw6 proto XXXX metric 20 pref medium
+fc00:2:2:2::/64 via fe80::__(r3-sw6)__ dev r4-sw6 proto XXXX metric 20 pref medium
+fc00:3333:3333:3333::/64 via fe80::__(r3-sw6)__ dev r4-sw6 proto XXXX metric 20 pref medium
+fc00:3:3:3::/64 via fe80::__(r3-sw6)__ dev r4-sw6 proto XXXX metric 20 pref medium
+fc00:4444:4444:4444::/64 via fc00:4:4:4::1234 dev r4-stubnet proto XXXX metric 20 pref medium
+fc00:4:4:4::/64 dev r4-stubnet proto XXXX metric 256 pref medium
+fc00:a:a:a::/64 via fe80::__(r3-sw6)__ dev r4-sw6 proto XXXX metric 20 pref medium
+fc00:b:b:b::/64 dev r4-sw6 proto XXXX metric 256 pref medium
diff --git a/tests/topotests/ospf6_topo1_vrf/r4/ospf6d.conf b/tests/topotests/ospf6_topo1_vrf/r4/ospf6d.conf
new file mode 100644
index 0000000000..ab67d06ff4
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r4/ospf6d.conf
@@ -0,0 +1,31 @@
+hostname r4
+log file ospf6d.log
+!
+debug ospf6 message all
+debug ospf6 lsa unknown
+debug ospf6 zebra
+debug ospf6 interface
+debug ospf6 neighbor
+debug ospf6 route table
+debug ospf6 flooding
+!
+interface r4-stubnet vrf r4-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+interface r4-sw6 vrf r4-cust1
+ ipv6 ospf6 network broadcast
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+router ospf6 vrf r4-cust1
+ ospf6 router-id 10.0.0.4
+ log-adjacency-changes detail
+ redistribute static
+ interface r4-stubnet area 0.0.0.1
+ interface r4-sw6 area 0.0.0.1
+!
+line vty
+ exec-timeout 0 0
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/r4/show_ipv6_vrf_route.ref b/tests/topotests/ospf6_topo1_vrf/r4/show_ipv6_vrf_route.ref
new file mode 100644
index 0000000000..0df652ffb3
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r4/show_ipv6_vrf_route.ref
@@ -0,0 +1,9 @@
+O>* fc00:1:1:1::/64 [110/30] via fe80::XXXX:XXXX:XXXX:XXXX, r4-sw6, weight 1, XX:XX:XX
+O>* fc00:2:2:2::/64 [110/30] via fe80::XXXX:XXXX:XXXX:XXXX, r4-sw6, weight 1, XX:XX:XX
+O>* fc00:3:3:3::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r4-sw6, weight 1, XX:XX:XX
+O fc00:4:4:4::/64 [110/10] is directly connected, r4-stubnet, weight 1, XX:XX:XX
+O>* fc00:a:a:a::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r4-sw6, weight 1, XX:XX:XX
+O fc00:b:b:b::/64 [110/10] is directly connected, r4-sw6, weight 1, XX:XX:XX
+O>* fc00:1111:1111:1111::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r4-sw6, weight 1, XX:XX:XX
+O>* fc00:2222:2222:2222::/64 [110/20] via fe80::XXXX:XXXX:XXXX:XXXX, r4-sw6, weight 1, XX:XX:XX
+O>* fc00:3333:3333:3333::/64 [110/10] via fe80::XXXX:XXXX:XXXX:XXXX, r4-sw6, weight 1, XX:XX:XX
diff --git a/tests/topotests/ospf6_topo1_vrf/r4/zebra.conf b/tests/topotests/ospf6_topo1_vrf/r4/zebra.conf
new file mode 100644
index 0000000000..c59116df8c
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/r4/zebra.conf
@@ -0,0 +1,20 @@
+!
+hostname r4
+log file zebra.log
+!
+debug zebra events
+debug zebra rib
+!
+interface r4-stubnet vrf r4-cust1
+ ipv6 address fc00:4:4:4::4/64
+!
+interface r4-sw6 vrf r4-cust1
+ ipv6 address fc00:b:b:b::4/64
+!
+interface lo
+!
+ipv6 route fc00:4444:4444:4444::/64 fc00:4:4:4::1234 vrf r4-cust1
+!
+!
+line vty
+!
diff --git a/tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py b/tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py
new file mode 100755
index 0000000000..fa2784ee7e
--- /dev/null
+++ b/tests/topotests/ospf6_topo1_vrf/test_ospf6_topo1_vrf.py
@@ -0,0 +1,457 @@
+#!/usr/bin/env python
+
+#
+# test_ospf6_topo1_vrf.py
+# Part of NetDEF Topology Tests
+#
+# Copyright (c) 2021 by Niral Networks, Inc. ("Niral Networks")
+# Used Copyright (c) 2016 by Network Device Education Foundation,
+# Inc. ("NetDEF") in this file.
+#
+# 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_ospf6_topo1_vrf.py:
+
+ -----\
+ SW1 - Stub Net 1 SW2 - Stub Net 2 \
+ fc00:1:1:1::/64 fc00:2:2:2::/64 \
+\___________________/ \___________________/ |
+ | | |
+ | | |
+ | ::1 | ::2 |
++---------+---------+ +---------+---------+ |
+| R1 | | R2 | |
+| FRRouting | | FRRouting | |
+| Rtr-ID: 10.0.0.1 | | Rtr-ID: 10.0.0.2 | |
++---------+---------+ +---------+---------+ |
+ | ::1 | ::2 \
+ \______ ___________/ OSPFv3
+ \ / Area 0.0.0.0
+ \ / /
+ ~~~~~~~~~~~~~~~~~~ |
+ ~~ SW5 ~~ |
+ ~~ Switch ~~ |
+ ~~ fc00:A:A:A::/64 ~~ |
+ ~~~~~~~~~~~~~~~~~~ |
+ | /---- |
+ | ::3 | SW3 - Stub Net 3 |
+ +---------+---------+ /-+ fc00:3:3:3::/64 |
+ | R3 | / | /
+ | FRRouting +--/ \---- /
+ | Rtr-ID: 10.0.0.3 | ::3 ___________/
+ +---------+---------+ \
+ | ::3 \
+ | \
+ ~~~~~~~~~~~~~~~~~~ |
+ ~~ SW6 ~~ |
+ ~~ Switch ~~ |
+ ~~ fc00:B:B:B::/64 ~~ \
+ ~~~~~~~~~~~~~~~~~~ OSPFv3
+ | Area 0.0.0.1
+ | ::4 /
+ +---------+---------+ /---- |
+ | R4 | | SW4 - Stub Net 4 |
+ | FRRouting +------+ fc00:4:4:4::/64 |
+ | Rtr-ID: 10.0.0.4 | ::4 | /
+ +-------------------+ \---- /
+ -----/
+"""
+
+import os
+import re
+import sys
+import pytest
+import platform
+from time import sleep
+
+from functools import partial
+
+from mininet.topo import Topo
+
+# Save the Current Working Directory to find configuration files later.
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+# Import topogen and topotest helpers
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.topolog import logger
+from lib.topotest import iproute2_is_vrf_capable
+from lib.common_config import (
+ required_linux_kernel_version,
+ adjust_router_l3mdev,
+)
+
+#####################################################
+##
+## Network Topology Definition
+##
+#####################################################
+
+
+class NetworkTopo(Topo):
+ "OSPFv3 (IPv6) Test Topology 1"
+
+ def build(self, **_opts):
+ "Build function"
+
+ tgen = get_topogen(self)
+
+ # Create 4 routers
+ for routern in range(1, 5):
+ tgen.add_router("r{}".format(routern))
+
+ #
+ # Wire up the switches and routers
+ # Note that we specify the link names so we match the config files
+ #
+
+ # Create a empty network for router 1
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["r1"], nodeif="r1-stubnet")
+
+ # Create a empty network for router 2
+ switch = tgen.add_switch("s2")
+ switch.add_link(tgen.gears["r2"], nodeif="r2-stubnet")
+
+ # Create a empty network for router 3
+ switch = tgen.add_switch("s3")
+ switch.add_link(tgen.gears["r3"], nodeif="r3-stubnet")
+
+ # Create a empty network for router 4
+ switch = tgen.add_switch("s4")
+ switch.add_link(tgen.gears["r4"], nodeif="r4-stubnet")
+
+ # Interconnect routers 1, 2, and 3
+ switch = tgen.add_switch("s5")
+ switch.add_link(tgen.gears["r1"], nodeif="r1-sw5")
+ switch.add_link(tgen.gears["r2"], nodeif="r2-sw5")
+ switch.add_link(tgen.gears["r3"], nodeif="r3-sw5")
+
+ # Interconnect routers 3 and 4
+ switch = tgen.add_switch("s6")
+ switch.add_link(tgen.gears["r3"], nodeif="r3-sw6")
+ switch.add_link(tgen.gears["r4"], nodeif="r4-sw6")
+
+
+#####################################################
+##
+## Tests starting
+##
+#####################################################
+
+
+def setup_module(mod):
+ "Sets up the pytest environment"
+
+ tgen = Topogen(NetworkTopo, mod.__name__)
+ tgen.start_topology()
+
+ logger.info("** %s: Setup Topology" % mod.__name__)
+ logger.info("******************************************")
+
+ # For debugging after starting net, but before starting FRR,
+ # uncomment the next line
+ # tgen.mininet_cli()
+
+ logger.info("Testing with VRF Lite support")
+
+ cmds = [
+ "ip link add {0}-cust1 type vrf table 1001",
+ "ip link add loop1 type dummy",
+ "ip link set {0}-stubnet master {0}-cust1",
+ ]
+
+ cmds1 = [
+ "ip link set {0}-sw5 master {0}-cust1",
+ ]
+
+ cmds2 = [
+ "ip link set {0}-sw6 master {0}-cust1",
+ ]
+
+ # For all registered routers, load the zebra configuration file
+ for rname, router in tgen.routers().items():
+ # create VRF rx-cust1 and link rx-eth0 to rx-cust1
+ for cmd in cmds:
+ output = tgen.net[rname].cmd(cmd.format(rname))
+ if rname == "r1" or rname == "r2" or rname == "r3":
+ for cmd in cmds1:
+ output = tgen.net[rname].cmd(cmd.format(rname))
+ if rname == "r3" or rname == "r4":
+ for cmd in cmds2:
+ output = tgen.net[rname].cmd(cmd.format(rname))
+
+ # adjust handling of vrf traffic
+ adjust_router_l3mdev(tgen, rname)
+
+ for rname, router in tgen.routers().items():
+ router.load_config(
+ TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_OSPF6, os.path.join(CWD, "{}/ospf6d.conf".format(rname))
+ )
+
+ # Initialize all routers.
+ tgen.start_router()
+
+ # For debugging after starting FRR daemons, uncomment the next line
+ # tgen.mininet_cli()
+
+
+def teardown_module(mod):
+ "Teardown the pytest environment"
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+def test_wait_protocol_convergence():
+ "Wait for OSPFv3 to converge"
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("waiting for protocols to converge")
+
+ def expect_neighbor_full(router, neighbor):
+ "Wait until OSPFv3 convergence."
+ logger.info("waiting OSPFv3 router '{}'".format(router))
+ test_func = partial(
+ topotest.router_json_cmp,
+ tgen.gears[router],
+ "show ipv6 ospf6 vrf {0}-cust1 neighbor json".format(router),
+ {"neighbors": [{"neighborId": neighbor, "state": "Full"}]},
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=130, wait=1)
+ assertmsg = '"{}" convergence failure'.format(router)
+ assert result is None, assertmsg
+
+ expect_neighbor_full("r1", "10.0.0.2")
+ expect_neighbor_full("r1", "10.0.0.3")
+
+ expect_neighbor_full("r2", "10.0.0.1")
+ expect_neighbor_full("r2", "10.0.0.3")
+
+ expect_neighbor_full("r3", "10.0.0.1")
+ expect_neighbor_full("r3", "10.0.0.2")
+ expect_neighbor_full("r3", "10.0.0.4")
+
+
+def compare_show_ipv6_vrf(rname, expected):
+ """
+ Calls 'show ipv6 route' for router `rname` and compare the obtained
+ result with the expected output.
+ """
+ tgen = get_topogen()
+
+ # Use the vtysh output, with some masking to make comparison easy
+ vrf_name = "{0}-cust1".format(rname)
+ current = topotest.ip6_route_zebra(tgen.gears[rname], vrf_name)
+
+ # Use just the 'O'spf lines of the output
+ linearr = []
+ for line in current.splitlines():
+ if re.match("^O", line):
+ linearr.append(line)
+
+ current = "\n".join(linearr)
+
+ return topotest.difflines(
+ topotest.normalize_text(current),
+ topotest.normalize_text(expected),
+ title1="Current output",
+ title2="Expected output",
+ )
+
+
+def test_ospfv3_routingTable():
+
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip("skipped because of router(s) failure")
+
+ # For debugging, uncomment the next line
+ # tgen.mininet_cli()
+ # Verify OSPFv3 Routing Table
+ for router, rnode in tgen.routers().iteritems():
+ logger.info('Waiting for router "%s" convergence', router)
+
+ # Load expected results from the command
+ reffile = os.path.join(CWD, "{}/show_ipv6_vrf_route.ref".format(router))
+ expected = open(reffile).read()
+
+ # Run test function until we get an result. Wait at most 60 seconds.
+ test_func = partial(compare_show_ipv6_vrf, router, expected)
+ result, diff = topotest.run_and_expect(test_func, "", count=120, wait=0.5)
+ assert result, "OSPFv3 did not converge on {}:\n{}".format(router, diff)
+
+
+def test_linux_ipv6_kernel_routingTable():
+
+ # Required linux kernel version for this suite to run.
+ result = required_linux_kernel_version("4.15")
+ if result is not True:
+ pytest.skip("Kernel requirements are not met")
+
+ # iproute2 needs to support VRFs for this suite to run.
+ if not iproute2_is_vrf_capable():
+ pytest.skip("Installed iproute2 version does not support VRFs")
+
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip("skipped because of router(s) failure")
+
+ # Verify Linux Kernel Routing Table
+ logger.info("Verifying Linux IPv6 Kernel Routing Table")
+
+ failures = 0
+
+ # Get a list of all current link-local addresses first as they change for
+ # each run and we need to translate them
+ linklocals = []
+ for i in range(1, 5):
+ linklocals += tgen.net["r{}".format(i)].get_ipv6_linklocal()
+
+ # Now compare the routing tables (after substituting link-local addresses)
+
+ for i in range(1, 5):
+ # Actual output from router
+ actual = tgen.gears["r{}".format(i)].run("ip -6 route show vrf r{}-cust1".format(i)).rstrip()
+ if "nhid" in actual:
+ refTableFile = os.path.join(CWD, "r{}/ip_6_address.nhg.ref".format(i))
+ else:
+ refTableFile = os.path.join(CWD, "r{}/ip_6_address.ref".format(i))
+
+ if os.path.isfile(refTableFile):
+ expected = open(refTableFile).read().rstrip()
+ # Fix newlines (make them all the same)
+ expected = ("\n".join(expected.splitlines())).splitlines(1)
+
+ # Mask out Link-Local mac addresses
+ for ll in linklocals:
+ actual = actual.replace(ll[1], "fe80::__(%s)__" % ll[0])
+ # Mask out protocol name or number
+ actual = re.sub(r"[ ]+proto [0-9a-z]+ +", " proto XXXX ", actual)
+ actual = re.sub(r"[ ]+nhid [0-9]+ +", " nhid XXXX ", actual)
+ # Remove ff00::/8 routes (seen on some kernels - not from FRR)
+ actual = re.sub(r"ff00::/8.*", "", actual)
+
+ # Strip empty lines
+ actual = actual.lstrip()
+ actual = actual.rstrip()
+ actual = re.sub(r" +", " ", actual)
+
+ filtered_lines = []
+ for line in sorted(actual.splitlines()):
+ if line.startswith("fe80::/64 ") or line.startswith(
+ "unreachable fe80::/64 "
+ ):
+ continue
+ if 'anycast' in line:
+ continue
+ if 'multicast' in line:
+ continue
+ filtered_lines.append(line)
+ actual = "\n".join(filtered_lines).splitlines(1)
+
+ # Print Actual table
+ # logger.info("Router r%s table" % i)
+ # for line in actual:
+ # logger.info(line.rstrip())
+
+ # Generate Diff
+ diff = topotest.get_textdiff(
+ actual,
+ expected,
+ title1="actual OSPFv3 IPv6 routing table",
+ title2="expected OSPFv3 IPv6 routing table",
+ )
+
+ # Empty string if it matches, otherwise diff contains unified diff
+ if diff:
+ sys.stderr.write(
+ "r%s failed Linux IPv6 Kernel Routing Table Check:\n%s\n"
+ % (i, diff)
+ )
+ failures += 1
+ else:
+ logger.info("r%s ok" % i)
+
+ assert failures == 0, (
+ "Linux Kernel IPv6 Routing Table verification failed for router r%s:\n%s"
+ % (i, diff)
+ )
+
+
+def test_shutdown_check_stderr():
+
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip("skipped because of router(s) failure")
+
+ if os.environ.get("TOPOTESTS_CHECK_STDERR") is None:
+ logger.info(
+ "SKIPPED final check on StdErr output: Disabled (TOPOTESTS_CHECK_STDERR undefined)\n"
+ )
+ pytest.skip("Skipping test for Stderr output")
+
+ net = tgen.net
+
+ logger.info("\n\n** Verifying unexpected STDERR output from daemons")
+ logger.info("******************************************")
+
+ for i in range(1, 5):
+ net["r%s" % i].stopRouter()
+ log = net["r%s" % i].getStdErr("ospf6d")
+ if log:
+ logger.info("\nRouter r%s OSPF6d StdErr Log:\n%s" % (i, log))
+ log = net["r%s" % i].getStdErr("zebra")
+ if log:
+ logger.info("\nRouter r%s Zebra StdErr Log:\n%s" % (i, log))
+
+
+def test_shutdown_check_memleak():
+ "Run the memory leak test and report results."
+
+ if os.environ.get("TOPOTESTS_CHECK_MEMLEAK") is None:
+ logger.info(
+ "SKIPPED final check on Memory leaks: Disabled (TOPOTESTS_CHECK_MEMLEAK undefined)"
+ )
+ pytest.skip("Skipping test for memory leaks")
+
+ tgen = get_topogen()
+
+ net = tgen.net
+
+ for i in range(1, 5):
+ net["r%s" % i].stopRouter()
+ net["r%s" % i].report_memory_leaks(
+ os.environ.get("TOPOTESTS_CHECK_MEMLEAK"), os.path.basename(__file__)
+ )
+
+
+if __name__ == "__main__":
+
+ # To suppress tracebacks, either use the following pytest call or
+ # add "--tb=no" to cli
+ # retval = pytest.main(["-s", "--tb=no"])
+
+ retval = pytest.main(["-s"])
+ sys.exit(retval)
diff --git a/tests/topotests/ospf6-topo2/r1/ospf6d.conf b/tests/topotests/ospf6_topo2/r1/ospf6d.conf
index c403fcd8dc..c403fcd8dc 100644
--- a/tests/topotests/ospf6-topo2/r1/ospf6d.conf
+++ b/tests/topotests/ospf6_topo2/r1/ospf6d.conf
diff --git a/tests/topotests/ospf6-topo2/r1/zebra.conf b/tests/topotests/ospf6_topo2/r1/zebra.conf
index 7fee2da8ba..7fee2da8ba 100644
--- a/tests/topotests/ospf6-topo2/r1/zebra.conf
+++ b/tests/topotests/ospf6_topo2/r1/zebra.conf
diff --git a/tests/topotests/ospf6-topo2/r2/ospf6d.conf b/tests/topotests/ospf6_topo2/r2/ospf6d.conf
index d4bb0e2a41..d4bb0e2a41 100644
--- a/tests/topotests/ospf6-topo2/r2/ospf6d.conf
+++ b/tests/topotests/ospf6_topo2/r2/ospf6d.conf
diff --git a/tests/topotests/ospf6-topo2/r2/zebra.conf b/tests/topotests/ospf6_topo2/r2/zebra.conf
index 891945a4e7..891945a4e7 100644
--- a/tests/topotests/ospf6-topo2/r2/zebra.conf
+++ b/tests/topotests/ospf6_topo2/r2/zebra.conf
diff --git a/tests/topotests/ospf6-topo2/r3/ospf6d.conf b/tests/topotests/ospf6_topo2/r3/ospf6d.conf
index aaef00d5bb..aaef00d5bb 100644
--- a/tests/topotests/ospf6-topo2/r3/ospf6d.conf
+++ b/tests/topotests/ospf6_topo2/r3/ospf6d.conf
diff --git a/tests/topotests/ospf6-topo2/r3/zebra.conf b/tests/topotests/ospf6_topo2/r3/zebra.conf
index dea2fe4778..dea2fe4778 100644
--- a/tests/topotests/ospf6-topo2/r3/zebra.conf
+++ b/tests/topotests/ospf6_topo2/r3/zebra.conf
diff --git a/tests/topotests/ospf6-topo2/test_ospf6_topo2.dot b/tests/topotests/ospf6_topo2/test_ospf6_topo2.dot
index ba7a36f2b5..ba7a36f2b5 100644
--- a/tests/topotests/ospf6-topo2/test_ospf6_topo2.dot
+++ b/tests/topotests/ospf6_topo2/test_ospf6_topo2.dot
diff --git a/tests/topotests/ospf6-topo2/test_ospf6_topo2.png b/tests/topotests/ospf6_topo2/test_ospf6_topo2.png
index ee1de60736..ee1de60736 100644
--- a/tests/topotests/ospf6-topo2/test_ospf6_topo2.png
+++ b/tests/topotests/ospf6_topo2/test_ospf6_topo2.png
Binary files differ
diff --git a/tests/topotests/ospf6-topo2/test_ospf6_topo2.py b/tests/topotests/ospf6_topo2/test_ospf6_topo2.py
index efc8565bb3..efc8565bb3 100644
--- a/tests/topotests/ospf6-topo2/test_ospf6_topo2.py
+++ b/tests/topotests/ospf6_topo2/test_ospf6_topo2.py
diff --git a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.dot b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.dot
index 2c6d0aab16..2c6d0aab16 100644
--- a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.dot
+++ b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.dot
diff --git a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.jpg b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.jpg
index 44efda8390..44efda8390 100644
--- a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.jpg
+++ b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.jpg
Binary files differ
diff --git a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.json b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.json
index c8a3ce783b..c8a3ce783b 100644
--- a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.json
+++ b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.json
diff --git a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.py
index 5e7802fa04..5e7802fa04 100644
--- a/tests/topotests/ospf-dual-stack/test_ospf_dual_stack.py
+++ b/tests/topotests/ospf_dual_stack/test_ospf_dual_stack.py
diff --git a/tests/topotests/ospf-tilfa-topo1/__init__.py b/tests/topotests/ospf_sr_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644
--- a/tests/topotests/ospf-tilfa-topo1/__init__.py
+++ b/tests/topotests/ospf_sr_topo1/__init__.py
diff --git a/tests/topotests/ospf-sr-topo1/rt1/ospfd.conf b/tests/topotests/ospf_sr_topo1/rt1/ospfd.conf
index 94dba7c061..94dba7c061 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/ospfd.conf
+++ b/tests/topotests/ospf_sr_topo1/rt1/ospfd.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step1/show_ip_route.ref
index 374184e60a..374184e60a 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step1/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step1/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step1/show_mpls_table.ref
index de906c270d..de906c270d 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step1/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step1/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step10/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step10/show_ip_route.ref
index 37f73629fd..37f73629fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step10/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step10/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step10/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step10/show_mpls_table.ref
index 2006392564..2006392564 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step10/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step10/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step2/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step2/show_ip_route.ref
index 37f73629fd..37f73629fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step2/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step2/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step2/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step2/show_mpls_table.ref
index de906c270d..de906c270d 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step2/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step2/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step3/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step3/show_ip_route.ref
index f6ead5cb91..f6ead5cb91 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step3/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step3/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step3/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step3/show_mpls_table.ref
index 96e05913ed..96e05913ed 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step3/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step3/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step4/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step4/show_ip_route.ref
index 37f73629fd..37f73629fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step4/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step4/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step4/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step4/show_mpls_table.ref
index de906c270d..de906c270d 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step4/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step4/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step5/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step5/show_ip_route.ref
index f2b8924b85..f2b8924b85 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step5/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step5/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step5/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step5/show_mpls_table.ref
index 96e05913ed..96e05913ed 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step5/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step5/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step6/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step6/show_ip_route.ref
index 37f73629fd..37f73629fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step6/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step6/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step6/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step6/show_mpls_table.ref
index de906c270d..de906c270d 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step6/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step6/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step7/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step7/show_ip_route.ref
index 37f73629fd..37f73629fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step7/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step7/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step7/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step7/show_mpls_table.ref
index de906c270d..de906c270d 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step7/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step7/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step8/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step8/show_ip_route.ref
index 37f73629fd..37f73629fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step8/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step8/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step8/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step8/show_mpls_table.ref
index de906c270d..de906c270d 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step8/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step8/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step9/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt1/step9/show_ip_route.ref
index 37f73629fd..37f73629fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step9/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step9/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/step9/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt1/step9/show_mpls_table.ref
index 2006392564..2006392564 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/step9/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt1/step9/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt1/zebra.conf b/tests/topotests/ospf_sr_topo1/rt1/zebra.conf
index 7d3139a80e..7d3139a80e 100644
--- a/tests/topotests/ospf-sr-topo1/rt1/zebra.conf
+++ b/tests/topotests/ospf_sr_topo1/rt1/zebra.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt2/ospfd.conf b/tests/topotests/ospf_sr_topo1/rt2/ospfd.conf
index b47e788062..b47e788062 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/ospfd.conf
+++ b/tests/topotests/ospf_sr_topo1/rt2/ospfd.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step1/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step1/show_ip_route.ref
index 3dde042b51..3dde042b51 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step1/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step1/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step1/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step1/show_mpls_table.ref
index eba7c403d3..eba7c403d3 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step1/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step1/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step10/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step10/show_ip_route.ref
index 9a06059df2..9a06059df2 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step10/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step10/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step10/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step10/show_mpls_table.ref
index be44a7521d..be44a7521d 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step10/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step10/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step2/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step2/show_ip_route.ref
index 384aac032d..384aac032d 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step2/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step2/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step2/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step2/show_mpls_table.ref
index 5088aa2f7a..5088aa2f7a 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step2/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step2/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step3/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step3/show_ip_route.ref
index 879cd1e0c5..879cd1e0c5 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step3/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step3/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step3/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step3/show_mpls_table.ref
index 6333e7f7f9..6333e7f7f9 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step3/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step3/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step4/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step4/show_ip_route.ref
index 384aac032d..384aac032d 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step4/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step4/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step4/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step4/show_mpls_table.ref
index 5088aa2f7a..5088aa2f7a 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step4/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step4/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step5/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step5/show_ip_route.ref
index 07edd42dc8..07edd42dc8 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step5/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step5/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step5/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step5/show_mpls_table.ref
index 6333e7f7f9..6333e7f7f9 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step5/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step5/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step6/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step6/show_ip_route.ref
index 384aac032d..384aac032d 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step6/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step6/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step6/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step6/show_mpls_table.ref
index 5088aa2f7a..5088aa2f7a 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step6/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step6/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step7/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step7/show_ip_route.ref
index 274931bef7..274931bef7 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step7/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step7/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step7/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step7/show_mpls_table.ref
index cd23725a80..cd23725a80 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step7/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step7/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step8/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step8/show_ip_route.ref
index 384aac032d..384aac032d 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step8/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step8/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step8/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step8/show_mpls_table.ref
index 5088aa2f7a..5088aa2f7a 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step8/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step8/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step9/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt2/step9/show_ip_route.ref
index c71515f3ff..c71515f3ff 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step9/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step9/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/step9/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt2/step9/show_mpls_table.ref
index 2f06641f7f..2f06641f7f 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/step9/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt2/step9/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt2/zebra.conf b/tests/topotests/ospf_sr_topo1/rt2/zebra.conf
index c4ed4276d9..c4ed4276d9 100644
--- a/tests/topotests/ospf-sr-topo1/rt2/zebra.conf
+++ b/tests/topotests/ospf_sr_topo1/rt2/zebra.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt3/ospfd.conf b/tests/topotests/ospf_sr_topo1/rt3/ospfd.conf
index 238d82ff97..238d82ff97 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/ospfd.conf
+++ b/tests/topotests/ospf_sr_topo1/rt3/ospfd.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step1/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step1/show_ip_route.ref
index 4b1500ef97..4b1500ef97 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step1/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step1/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step1/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step1/show_mpls_table.ref
index 39cc3e8ffd..39cc3e8ffd 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step1/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step1/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step10/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step10/show_ip_route.ref
index 14a2ac1e8a..14a2ac1e8a 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step10/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step10/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step10/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step10/show_mpls_table.ref
index a0f7c790a0..a0f7c790a0 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step10/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step10/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step2/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step2/show_ip_route.ref
index 63c6a1845f..63c6a1845f 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step2/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step2/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step2/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step2/show_mpls_table.ref
index 1ab2242b7e..1ab2242b7e 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step2/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step2/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step3/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step3/show_ip_route.ref
index 0894c51cf2..0894c51cf2 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step3/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step3/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step3/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step3/show_mpls_table.ref
index 4dcaedeca1..4dcaedeca1 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step3/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step3/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step4/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step4/show_ip_route.ref
index 63c6a1845f..63c6a1845f 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step4/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step4/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step4/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step4/show_mpls_table.ref
index 1ab2242b7e..1ab2242b7e 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step4/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step4/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step5/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step5/show_ip_route.ref
index 3e74ff039c..3e74ff039c 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step5/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step5/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step5/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step5/show_mpls_table.ref
index 4dcaedeca1..4dcaedeca1 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step5/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step5/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step6/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step6/show_ip_route.ref
index 63c6a1845f..63c6a1845f 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step6/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step6/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step6/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step6/show_mpls_table.ref
index 1ab2242b7e..1ab2242b7e 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step6/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step6/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step7/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step7/show_ip_route.ref
index 41544d4296..41544d4296 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step7/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step7/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step7/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step7/show_mpls_table.ref
index bf055bad78..bf055bad78 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step7/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step7/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step8/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step8/show_ip_route.ref
index 63c6a1845f..63c6a1845f 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step8/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step8/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step8/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step8/show_mpls_table.ref
index 1ab2242b7e..1ab2242b7e 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step8/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step8/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step9/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt3/step9/show_ip_route.ref
index 14a2ac1e8a..14a2ac1e8a 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step9/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step9/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/step9/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt3/step9/show_mpls_table.ref
index a0f7c790a0..a0f7c790a0 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/step9/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt3/step9/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt3/zebra.conf b/tests/topotests/ospf_sr_topo1/rt3/zebra.conf
index 89a781fe3c..89a781fe3c 100644
--- a/tests/topotests/ospf-sr-topo1/rt3/zebra.conf
+++ b/tests/topotests/ospf_sr_topo1/rt3/zebra.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt4/ospfd.conf b/tests/topotests/ospf_sr_topo1/rt4/ospfd.conf
index b12e0729ad..b12e0729ad 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/ospfd.conf
+++ b/tests/topotests/ospf_sr_topo1/rt4/ospfd.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step1/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step1/show_ip_route.ref
index 4a2d3aa10f..4a2d3aa10f 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step1/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step1/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step1/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step1/show_mpls_table.ref
index 3246d22842..3246d22842 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step1/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step1/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step10/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step10/show_ip_route.ref
index db4cf5b3f5..db4cf5b3f5 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step10/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step10/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step10/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step10/show_mpls_table.ref
index 58cf526a83..58cf526a83 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step10/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step10/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step2/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step2/show_ip_route.ref
index c44b3eef30..c44b3eef30 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step2/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step2/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step2/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step2/show_mpls_table.ref
index 05f9f28cbd..05f9f28cbd 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step2/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step2/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step3/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step3/show_ip_route.ref
index a078dd2daf..a078dd2daf 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step3/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step3/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step3/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step3/show_mpls_table.ref
index f5515636d2..f5515636d2 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step3/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step3/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step4/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step4/show_ip_route.ref
index b63812ab1d..b63812ab1d 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step4/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step4/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step4/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step4/show_mpls_table.ref
index f2e56c2e19..f2e56c2e19 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step4/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step4/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step5/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step5/show_ip_route.ref
index 3157ae1ea1..3157ae1ea1 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step5/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step5/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step5/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step5/show_mpls_table.ref
index 8213840652..8213840652 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step5/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step5/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step6/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step6/show_ip_route.ref
index b63812ab1d..b63812ab1d 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step6/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step6/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step6/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step6/show_mpls_table.ref
index f2e56c2e19..f2e56c2e19 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step6/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step6/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step7/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step7/show_ip_route.ref
index 775d8c4034..775d8c4034 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step7/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step7/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step7/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step7/show_mpls_table.ref
index 8a5fdef806..8a5fdef806 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step7/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step7/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step8/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step8/show_ip_route.ref
index b63812ab1d..b63812ab1d 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step8/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step8/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step8/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step8/show_mpls_table.ref
index f2e56c2e19..f2e56c2e19 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step8/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step8/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step9/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt4/step9/show_ip_route.ref
index 48e306d393..48e306d393 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step9/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step9/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/step9/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt4/step9/show_mpls_table.ref
index 275abab715..275abab715 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/step9/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt4/step9/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt4/zebra.conf b/tests/topotests/ospf_sr_topo1/rt4/zebra.conf
index 13c621eb31..13c621eb31 100644
--- a/tests/topotests/ospf-sr-topo1/rt4/zebra.conf
+++ b/tests/topotests/ospf_sr_topo1/rt4/zebra.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt5/ospfd.conf b/tests/topotests/ospf_sr_topo1/rt5/ospfd.conf
index 4e7b24c03a..4e7b24c03a 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/ospfd.conf
+++ b/tests/topotests/ospf_sr_topo1/rt5/ospfd.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step1/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step1/show_ip_route.ref
index 0a43788a18..0a43788a18 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step1/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step1/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step1/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step1/show_mpls_table.ref
index e8c46085be..e8c46085be 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step1/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step1/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step10/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step10/show_ip_route.ref
index 2bad2eb7bf..2bad2eb7bf 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step10/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step10/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step10/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step10/show_mpls_table.ref
index c5ed18d76f..c5ed18d76f 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step10/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step10/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step2/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step2/show_ip_route.ref
index 3572ec713f..3572ec713f 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step2/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step2/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step2/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step2/show_mpls_table.ref
index d9cadeb513..d9cadeb513 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step2/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step2/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step3/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step3/show_ip_route.ref
index 2f7b0cc242..2f7b0cc242 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step3/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step3/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step3/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step3/show_mpls_table.ref
index 7c78d2ce53..7c78d2ce53 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step3/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step3/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step4/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step4/show_ip_route.ref
index 1a12715086..1a12715086 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step4/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step4/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step4/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step4/show_mpls_table.ref
index 42e476e9d1..42e476e9d1 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step4/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step4/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step5/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step5/show_ip_route.ref
index e50fa10ccb..e50fa10ccb 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step5/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step5/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step5/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step5/show_mpls_table.ref
index bb95379228..bb95379228 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step5/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step5/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step6/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step6/show_ip_route.ref
index 1a12715086..1a12715086 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step6/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step6/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step6/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step6/show_mpls_table.ref
index 42e476e9d1..42e476e9d1 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step6/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step6/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step7/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step7/show_ip_route.ref
index 15a024d18b..15a024d18b 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step7/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step7/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step7/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step7/show_mpls_table.ref
index cff0d25e25..cff0d25e25 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step7/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step7/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step8/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step8/show_ip_route.ref
index 1a12715086..1a12715086 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step8/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step8/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step8/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step8/show_mpls_table.ref
index 42e476e9d1..42e476e9d1 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step8/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step8/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step9/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt5/step9/show_ip_route.ref
index d9ddad2462..d9ddad2462 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step9/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step9/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/step9/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt5/step9/show_mpls_table.ref
index c5ed18d76f..c5ed18d76f 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/step9/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt5/step9/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt5/zebra.conf b/tests/topotests/ospf_sr_topo1/rt5/zebra.conf
index ca2d6df665..ca2d6df665 100644
--- a/tests/topotests/ospf-sr-topo1/rt5/zebra.conf
+++ b/tests/topotests/ospf_sr_topo1/rt5/zebra.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt6/ospfd.conf b/tests/topotests/ospf_sr_topo1/rt6/ospfd.conf
index c6d07d169e..c6d07d169e 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/ospfd.conf
+++ b/tests/topotests/ospf_sr_topo1/rt6/ospfd.conf
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step1/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step1/show_ip_route.ref
index 9f05ec7688..9f05ec7688 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step1/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step1/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step1/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step1/show_mpls_table.ref
index baa2314454..baa2314454 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step1/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step1/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step10/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step10/show_ip_route.ref
index 6abb3805a2..6abb3805a2 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step10/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step10/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step10/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step10/show_mpls_table.ref
index 09ecec29d9..09ecec29d9 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step10/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step10/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step2/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step2/show_ip_route.ref
index 80b3c426d4..80b3c426d4 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step2/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step2/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step2/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step2/show_mpls_table.ref
index baa2314454..baa2314454 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step2/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step2/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step3/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step3/show_ip_route.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step3/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step3/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step3/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step3/show_mpls_table.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step3/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step3/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step4/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step4/show_ip_route.ref
index 80b3c426d4..80b3c426d4 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step4/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step4/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step4/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step4/show_mpls_table.ref
index 09ecec29d9..09ecec29d9 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step4/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step4/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step5/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step5/show_ip_route.ref
index 0e4b3eba12..0e4b3eba12 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step5/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step5/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step5/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step5/show_mpls_table.ref
index 2c63c08510..2c63c08510 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step5/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step5/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step6/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step6/show_ip_route.ref
index 80b3c426d4..80b3c426d4 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step6/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step6/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step6/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step6/show_mpls_table.ref
index 09ecec29d9..09ecec29d9 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step6/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step6/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step7/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step7/show_ip_route.ref
index aa2329a04a..aa2329a04a 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step7/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step7/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step7/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step7/show_mpls_table.ref
index 800b1ae2fd..800b1ae2fd 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step7/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step7/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step8/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step8/show_ip_route.ref
index 80b3c426d4..80b3c426d4 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step8/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step8/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step8/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step8/show_mpls_table.ref
index 09ecec29d9..09ecec29d9 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step8/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step8/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step9/show_ip_route.ref b/tests/topotests/ospf_sr_topo1/rt6/step9/show_ip_route.ref
index 80b3c426d4..80b3c426d4 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step9/show_ip_route.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step9/show_ip_route.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/step9/show_mpls_table.ref b/tests/topotests/ospf_sr_topo1/rt6/step9/show_mpls_table.ref
index 09ecec29d9..09ecec29d9 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/step9/show_mpls_table.ref
+++ b/tests/topotests/ospf_sr_topo1/rt6/step9/show_mpls_table.ref
diff --git a/tests/topotests/ospf-sr-topo1/rt6/zebra.conf b/tests/topotests/ospf_sr_topo1/rt6/zebra.conf
index 4b739d0bca..4b739d0bca 100644
--- a/tests/topotests/ospf-sr-topo1/rt6/zebra.conf
+++ b/tests/topotests/ospf_sr_topo1/rt6/zebra.conf
diff --git a/tests/topotests/ospf-sr-topo1/test_ospf_sr_topo1.py b/tests/topotests/ospf_sr_topo1/test_ospf_sr_topo1.py
index b6e5e14830..b6e5e14830 100644
--- a/tests/topotests/ospf-sr-topo1/test_ospf_sr_topo1.py
+++ b/tests/topotests/ospf_sr_topo1/test_ospf_sr_topo1.py
diff --git a/tests/topotests/ospf-topo1-vrf/__init__.py b/tests/topotests/ospf_te_topo1/__init__.py
index e69de29bb2..e69de29bb2 100755
--- a/tests/topotests/ospf-topo1-vrf/__init__.py
+++ b/tests/topotests/ospf_te_topo1/__init__.py
diff --git a/tests/topotests/ospf-te-topo1/r1/ospfd.conf b/tests/topotests/ospf_te_topo1/r1/ospfd.conf
index 312dd2697e..312dd2697e 100644
--- a/tests/topotests/ospf-te-topo1/r1/ospfd.conf
+++ b/tests/topotests/ospf_te_topo1/r1/ospfd.conf
diff --git a/tests/topotests/ospf-te-topo1/r1/zebra.conf b/tests/topotests/ospf_te_topo1/r1/zebra.conf
index 7c5dc3ffe0..7c5dc3ffe0 100644
--- a/tests/topotests/ospf-te-topo1/r1/zebra.conf
+++ b/tests/topotests/ospf_te_topo1/r1/zebra.conf
diff --git a/tests/topotests/ospf-te-topo1/r2/ospfd.conf b/tests/topotests/ospf_te_topo1/r2/ospfd.conf
index e9c3f65bc2..e9c3f65bc2 100644
--- a/tests/topotests/ospf-te-topo1/r2/ospfd.conf
+++ b/tests/topotests/ospf_te_topo1/r2/ospfd.conf
diff --git a/tests/topotests/ospf-te-topo1/r2/zebra.conf b/tests/topotests/ospf_te_topo1/r2/zebra.conf
index 69e10191f3..69e10191f3 100644
--- a/tests/topotests/ospf-te-topo1/r2/zebra.conf
+++ b/tests/topotests/ospf_te_topo1/r2/zebra.conf
diff --git a/tests/topotests/ospf-te-topo1/r3/ospfd.conf b/tests/topotests/ospf_te_topo1/r3/ospfd.conf
index caa5f1e1eb..caa5f1e1eb 100644
--- a/tests/topotests/ospf-te-topo1/r3/ospfd.conf
+++ b/tests/topotests/ospf_te_topo1/r3/ospfd.conf
diff --git a/tests/topotests/ospf-te-topo1/r3/zebra.conf b/tests/topotests/ospf_te_topo1/r3/zebra.conf
index 4cf9077085..4cf9077085 100644
--- a/tests/topotests/ospf-te-topo1/r3/zebra.conf
+++ b/tests/topotests/ospf_te_topo1/r3/zebra.conf
diff --git a/tests/topotests/ospf-te-topo1/r4/ospfd.conf b/tests/topotests/ospf_te_topo1/r4/ospfd.conf
index e454673153..e454673153 100644
--- a/tests/topotests/ospf-te-topo1/r4/ospfd.conf
+++ b/tests/topotests/ospf_te_topo1/r4/ospfd.conf
diff --git a/tests/topotests/ospf-te-topo1/r4/zebra.conf b/tests/topotests/ospf_te_topo1/r4/zebra.conf
index 18c003b230..18c003b230 100644
--- a/tests/topotests/ospf-te-topo1/r4/zebra.conf
+++ b/tests/topotests/ospf_te_topo1/r4/zebra.conf
diff --git a/tests/topotests/ospf-te-topo1/reference/ted_step1.json b/tests/topotests/ospf_te_topo1/reference/ted_step1.json
index 9624292ccd..9624292ccd 100644
--- a/tests/topotests/ospf-te-topo1/reference/ted_step1.json
+++ b/tests/topotests/ospf_te_topo1/reference/ted_step1.json
diff --git a/tests/topotests/ospf-te-topo1/reference/ted_step2.json b/tests/topotests/ospf_te_topo1/reference/ted_step2.json
index 623d1dc7e0..623d1dc7e0 100644
--- a/tests/topotests/ospf-te-topo1/reference/ted_step2.json
+++ b/tests/topotests/ospf_te_topo1/reference/ted_step2.json
diff --git a/tests/topotests/ospf-te-topo1/reference/ted_step3.json b/tests/topotests/ospf_te_topo1/reference/ted_step3.json
index 117011a43a..117011a43a 100644
--- a/tests/topotests/ospf-te-topo1/reference/ted_step3.json
+++ b/tests/topotests/ospf_te_topo1/reference/ted_step3.json
diff --git a/tests/topotests/ospf-te-topo1/reference/ted_step4.json b/tests/topotests/ospf_te_topo1/reference/ted_step4.json
index 5c2dee1e4b..5c2dee1e4b 100644
--- a/tests/topotests/ospf-te-topo1/reference/ted_step4.json
+++ b/tests/topotests/ospf_te_topo1/reference/ted_step4.json
diff --git a/tests/topotests/ospf-te-topo1/reference/ted_step5.json b/tests/topotests/ospf_te_topo1/reference/ted_step5.json
index 47e747f3ca..47e747f3ca 100644
--- a/tests/topotests/ospf-te-topo1/reference/ted_step5.json
+++ b/tests/topotests/ospf_te_topo1/reference/ted_step5.json
diff --git a/tests/topotests/ospf-te-topo1/reference/ted_step6.json b/tests/topotests/ospf_te_topo1/reference/ted_step6.json
index 74bd83fbdb..74bd83fbdb 100644
--- a/tests/topotests/ospf-te-topo1/reference/ted_step6.json
+++ b/tests/topotests/ospf_te_topo1/reference/ted_step6.json
diff --git a/tests/topotests/ospf-te-topo1/reference/ted_step7.json b/tests/topotests/ospf_te_topo1/reference/ted_step7.json
index 1cea9f0455..1cea9f0455 100644
--- a/tests/topotests/ospf-te-topo1/reference/ted_step7.json
+++ b/tests/topotests/ospf_te_topo1/reference/ted_step7.json
diff --git a/tests/topotests/ospf-te-topo1/test_ospf_te_topo1.py b/tests/topotests/ospf_te_topo1/test_ospf_te_topo1.py
index 32f9b3453e..32f9b3453e 100644
--- a/tests/topotests/ospf-te-topo1/test_ospf_te_topo1.py
+++ b/tests/topotests/ospf_te_topo1/test_ospf_te_topo1.py
diff --git a/tests/topotests/ospf-topo1/__init__.py b/tests/topotests/ospf_tilfa_topo1/__init__.py
index e69de29bb2..e69de29bb2 100755..100644
--- a/tests/topotests/ospf-topo1/__init__.py
+++ b/tests/topotests/ospf_tilfa_topo1/__init__.py
diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt1/ospfd.conf
index eaef49225f..eaef49225f 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt1/ospfd.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt1/ospfd.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/step1/show_ip_route_initial.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step1/show_ip_route_initial.ref
index 0ad2aaeade..0ad2aaeade 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt1/step1/show_ip_route_initial.ref
+++ b/tests/topotests/ospf_tilfa_topo1/rt1/step1/show_ip_route_initial.ref
diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_initial.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_initial.ref
index 0ad2aaeade..0ad2aaeade 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_initial.ref
+++ b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_initial.ref
diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_link_protection.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_link_protection.ref
index 968570e193..968570e193 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt1/step2/show_ip_route_link_protection.ref
+++ b/tests/topotests/ospf_tilfa_topo1/rt1/step2/show_ip_route_link_protection.ref
diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/step3/show_ip_route_initial.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_initial.ref
index 0ad2aaeade..0ad2aaeade 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt1/step3/show_ip_route_initial.ref
+++ b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_initial.ref
diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/step3/show_ip_route_node_protection.ref b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_node_protection.ref
index 46a80d298e..46a80d298e 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt1/step3/show_ip_route_node_protection.ref
+++ b/tests/topotests/ospf_tilfa_topo1/rt1/step3/show_ip_route_node_protection.ref
diff --git a/tests/topotests/ospf-tilfa-topo1/rt1/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt1/zebra.conf
index bf0e77a17b..bf0e77a17b 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt1/zebra.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt1/zebra.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt2/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt2/ospfd.conf
index 7548aad7f8..7548aad7f8 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt2/ospfd.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt2/ospfd.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt2/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt2/zebra.conf
index add2933571..add2933571 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt2/zebra.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt2/zebra.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt3/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt3/ospfd.conf
index 6258295b6f..6258295b6f 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt3/ospfd.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt3/ospfd.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt3/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt3/zebra.conf
index 1bb64bc585..1bb64bc585 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt3/zebra.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt3/zebra.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt4/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt4/ospfd.conf
index ad02214017..ad02214017 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt4/ospfd.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt4/ospfd.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt4/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt4/zebra.conf
index 306f0d4925..306f0d4925 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt4/zebra.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt4/zebra.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt5/ospfd.conf b/tests/topotests/ospf_tilfa_topo1/rt5/ospfd.conf
index 1b95858f53..1b95858f53 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt5/ospfd.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt5/ospfd.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/rt5/zebra.conf b/tests/topotests/ospf_tilfa_topo1/rt5/zebra.conf
index 46f759580e..46f759580e 100644
--- a/tests/topotests/ospf-tilfa-topo1/rt5/zebra.conf
+++ b/tests/topotests/ospf_tilfa_topo1/rt5/zebra.conf
diff --git a/tests/topotests/ospf-tilfa-topo1/test_ospf_tilfa_topo1.py b/tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py
index 489690471c..489690471c 100644
--- a/tests/topotests/ospf-tilfa-topo1/test_ospf_tilfa_topo1.py
+++ b/tests/topotests/ospf_tilfa_topo1/test_ospf_tilfa_topo1.py
diff --git a/tests/topotests/pbr-topo1/__init__.py b/tests/topotests/ospf_topo1/__init__.py
index e69de29bb2..e69de29bb2 100644..100755
--- a/tests/topotests/pbr-topo1/__init__.py
+++ b/tests/topotests/ospf_topo1/__init__.py
diff --git a/tests/topotests/ospf-topo1/r1/ospf6d.conf b/tests/topotests/ospf_topo1/r1/ospf6d.conf
index ca3497b4a5..ca3497b4a5 100644
--- a/tests/topotests/ospf-topo1/r1/ospf6d.conf
+++ b/tests/topotests/ospf_topo1/r1/ospf6d.conf
diff --git a/tests/topotests/ospf-topo1/r1/ospf6route.txt b/tests/topotests/ospf_topo1/r1/ospf6route.txt
index 1bfd6942ea..1bfd6942ea 100644
--- a/tests/topotests/ospf-topo1/r1/ospf6route.txt
+++ b/tests/topotests/ospf_topo1/r1/ospf6route.txt
diff --git a/tests/topotests/ospf-topo1/r1/ospf6route_down.txt b/tests/topotests/ospf_topo1/r1/ospf6route_down.txt
index 1ce96c86c0..1ce96c86c0 100644
--- a/tests/topotests/ospf-topo1/r1/ospf6route_down.txt
+++ b/tests/topotests/ospf_topo1/r1/ospf6route_down.txt
diff --git a/tests/topotests/ospf-topo1/r1/ospf6route_ecmp.txt b/tests/topotests/ospf_topo1/r1/ospf6route_ecmp.txt
index 4df6e5ec00..4df6e5ec00 100644
--- a/tests/topotests/ospf-topo1/r1/ospf6route_ecmp.txt
+++ b/tests/topotests/ospf_topo1/r1/ospf6route_ecmp.txt
diff --git a/tests/topotests/ospf-topo1/r1/ospfd.conf b/tests/topotests/ospf_topo1/r1/ospfd.conf
index 3b5aa192c5..3b5aa192c5 100644
--- a/tests/topotests/ospf-topo1/r1/ospfd.conf
+++ b/tests/topotests/ospf_topo1/r1/ospfd.conf
diff --git a/tests/topotests/ospf-topo1/r1/ospfroute.txt b/tests/topotests/ospf_topo1/r1/ospfroute.txt
index db648722f5..db648722f5 100644
--- a/tests/topotests/ospf-topo1/r1/ospfroute.txt
+++ b/tests/topotests/ospf_topo1/r1/ospfroute.txt
diff --git a/tests/topotests/ospf-topo1/r1/ospfroute_down.txt b/tests/topotests/ospf_topo1/r1/ospfroute_down.txt
index 5c07d81334..5c07d81334 100644
--- a/tests/topotests/ospf-topo1/r1/ospfroute_down.txt
+++ b/tests/topotests/ospf_topo1/r1/ospfroute_down.txt
diff --git a/tests/topotests/ospf-topo1/r1/zebra.conf b/tests/topotests/ospf_topo1/r1/zebra.conf
index f6e8efe7f2..f6e8efe7f2 100644
--- a/tests/topotests/ospf-topo1/r1/zebra.conf
+++ b/tests/topotests/ospf_topo1/r1/zebra.conf
diff --git a/tests/topotests/ospf-topo1/r2/ospf6d.conf b/tests/topotests/ospf_topo1/r2/ospf6d.conf
index 44047e1a4e..44047e1a4e 100644
--- a/tests/topotests/ospf-topo1/r2/ospf6d.conf
+++ b/tests/topotests/ospf_topo1/r2/ospf6d.conf
diff --git a/tests/topotests/ospf-topo1/r2/ospf6route.txt b/tests/topotests/ospf_topo1/r2/ospf6route.txt
index 7d3ce5b207..7d3ce5b207 100644
--- a/tests/topotests/ospf-topo1/r2/ospf6route.txt
+++ b/tests/topotests/ospf_topo1/r2/ospf6route.txt
diff --git a/tests/topotests/ospf-topo1/r2/ospf6route_down.txt b/tests/topotests/ospf_topo1/r2/ospf6route_down.txt
index acfffc9f1c..acfffc9f1c 100644
--- a/tests/topotests/ospf-topo1/r2/ospf6route_down.txt
+++ b/tests/topotests/ospf_topo1/r2/ospf6route_down.txt
diff --git a/tests/topotests/ospf-topo1/r2/ospf6route_ecmp.txt b/tests/topotests/ospf_topo1/r2/ospf6route_ecmp.txt
index f58b501e31..f58b501e31 100644
--- a/tests/topotests/ospf-topo1/r2/ospf6route_ecmp.txt
+++ b/tests/topotests/ospf_topo1/r2/ospf6route_ecmp.txt
diff --git a/tests/topotests/ospf-topo1/r2/ospfd.conf b/tests/topotests/ospf_topo1/r2/ospfd.conf
index 1a7ccdf728..1a7ccdf728 100644
--- a/tests/topotests/ospf-topo1/r2/ospfd.conf
+++ b/tests/topotests/ospf_topo1/r2/ospfd.conf
diff --git a/tests/topotests/ospf-topo1/r2/ospfroute.txt b/tests/topotests/ospf_topo1/r2/ospfroute.txt
index 79b389baab..79b389baab 100644
--- a/tests/topotests/ospf-topo1/r2/ospfroute.txt
+++ b/tests/topotests/ospf_topo1/r2/ospfroute.txt
diff --git a/tests/topotests/ospf-topo1/r2/ospfroute_down.txt b/tests/topotests/ospf_topo1/r2/ospfroute_down.txt
index b8411e19f3..b8411e19f3 100644
--- a/tests/topotests/ospf-topo1/r2/ospfroute_down.txt
+++ b/tests/topotests/ospf_topo1/r2/ospfroute_down.txt
diff --git a/tests/topotests/ospf-topo1/r2/zebra.conf b/tests/topotests/ospf_topo1/r2/zebra.conf
index 407416cdc4..407416cdc4 100644
--- a/tests/topotests/ospf-topo1/r2/zebra.conf
+++ b/tests/topotests/ospf_topo1/r2/zebra.conf
diff --git a/tests/topotests/ospf-topo1/r3/ospf6d.conf b/tests/topotests/ospf_topo1/r3/ospf6d.conf
index 13ad9a7356..13ad9a7356 100644
--- a/tests/topotests/ospf-topo1/r3/ospf6d.conf
+++ b/tests/topotests/ospf_topo1/r3/ospf6d.conf
diff --git a/tests/topotests/ospf-topo1/r3/ospf6route.txt b/tests/topotests/ospf_topo1/r3/ospf6route.txt
index b123c42650..b123c42650 100644
--- a/tests/topotests/ospf-topo1/r3/ospf6route.txt
+++ b/tests/topotests/ospf_topo1/r3/ospf6route.txt
diff --git a/tests/topotests/ospf-topo1/r3/ospf6route_down.txt b/tests/topotests/ospf_topo1/r3/ospf6route_down.txt
index ed69a8376b..ed69a8376b 100644
--- a/tests/topotests/ospf-topo1/r3/ospf6route_down.txt
+++ b/tests/topotests/ospf_topo1/r3/ospf6route_down.txt
diff --git a/tests/topotests/ospf-topo1/r3/ospf6route_ecmp.txt b/tests/topotests/ospf_topo1/r3/ospf6route_ecmp.txt
index 54e575adcb..54e575adcb 100644
--- a/tests/topotests/ospf-topo1/r3/ospf6route_ecmp.txt
+++ b/tests/topotests/ospf_topo1/r3/ospf6route_ecmp.txt
diff --git a/tests/topotests/ospf-topo1/r3/ospfd.conf b/tests/topotests/ospf_topo1/r3/ospfd.conf
index 3b378c0f27..3b378c0f27 100644
--- a/tests/topotests/ospf-topo1/r3/ospfd.conf
+++ b/tests/topotests/ospf_topo1/r3/ospfd.conf
diff --git a/tests/topotests/ospf-topo1/r3/ospfroute.txt b/tests/topotests/ospf_topo1/r3/ospfroute.txt
index c7799065d9..c7799065d9 100644
--- a/tests/topotests/ospf-topo1/r3/ospfroute.txt
+++ b/tests/topotests/ospf_topo1/r3/ospfroute.txt
diff --git a/tests/topotests/ospf-topo1/r3/ospfroute_down.txt b/tests/topotests/ospf_topo1/r3/ospfroute_down.txt
index 692a74aa6c..692a74aa6c 100644
--- a/tests/topotests/ospf-topo1/r3/ospfroute_down.txt
+++ b/tests/topotests/ospf_topo1/r3/ospfroute_down.txt
diff --git a/tests/topotests/ospf-topo1/r3/zebra.conf b/tests/topotests/ospf_topo1/r3/zebra.conf
index a635a889bb..a635a889bb 100644
--- a/tests/topotests/ospf-topo1/r3/zebra.conf
+++ b/tests/topotests/ospf_topo1/r3/zebra.conf
diff --git a/tests/topotests/ospf-topo1/r4/ospf6d.conf b/tests/topotests/ospf_topo1/r4/ospf6d.conf
index f9bde0e83c..f9bde0e83c 100644
--- a/tests/topotests/ospf-topo1/r4/ospf6d.conf
+++ b/tests/topotests/ospf_topo1/r4/ospf6d.conf
diff --git a/tests/topotests/ospf-topo1/r4/ospf6route.txt b/tests/topotests/ospf_topo1/r4/ospf6route.txt
index ceeee2cac8..ceeee2cac8 100644
--- a/tests/topotests/ospf-topo1/r4/ospf6route.txt
+++ b/tests/topotests/ospf_topo1/r4/ospf6route.txt
diff --git a/tests/topotests/ospf-topo1/r4/ospf6route_down.txt b/tests/topotests/ospf_topo1/r4/ospf6route_down.txt
index 4ad636dd98..4ad636dd98 100644
--- a/tests/topotests/ospf-topo1/r4/ospf6route_down.txt
+++ b/tests/topotests/ospf_topo1/r4/ospf6route_down.txt
diff --git a/tests/topotests/ospf-topo1/r4/ospf6route_ecmp.txt b/tests/topotests/ospf_topo1/r4/ospf6route_ecmp.txt
index b5cb10b72b..b5cb10b72b 100644
--- a/tests/topotests/ospf-topo1/r4/ospf6route_ecmp.txt
+++ b/tests/topotests/ospf_topo1/r4/ospf6route_ecmp.txt
diff --git a/tests/topotests/ospf-topo1/r4/ospfd.conf b/tests/topotests/ospf_topo1/r4/ospfd.conf
index 52d29322f8..52d29322f8 100644
--- a/tests/topotests/ospf-topo1/r4/ospfd.conf
+++ b/tests/topotests/ospf_topo1/r4/ospfd.conf
diff --git a/tests/topotests/ospf-topo1/r4/ospfroute.txt b/tests/topotests/ospf_topo1/r4/ospfroute.txt
index b582ef043b..b582ef043b 100644
--- a/tests/topotests/ospf-topo1/r4/ospfroute.txt
+++ b/tests/topotests/ospf_topo1/r4/ospfroute.txt
diff --git a/tests/topotests/ospf-topo1/r4/ospfroute_down.txt b/tests/topotests/ospf_topo1/r4/ospfroute_down.txt
index b0bd0eec78..b0bd0eec78 100644
--- a/tests/topotests/ospf-topo1/r4/ospfroute_down.txt
+++ b/tests/topotests/ospf_topo1/r4/ospfroute_down.txt
diff --git a/tests/topotests/ospf-topo1/r4/zebra.conf b/tests/topotests/ospf_topo1/r4/zebra.conf
index 39ecbb2401..39ecbb2401 100644
--- a/tests/topotests/ospf-topo1/r4/zebra.conf
+++ b/tests/topotests/ospf_topo1/r4/zebra.conf
diff --git a/tests/topotests/ospf-topo1/test_ospf_topo1.dot b/tests/topotests/ospf_topo1/test_ospf_topo1.dot
index 469a7ea792..469a7ea792 100644
--- a/tests/topotests/ospf-topo1/test_ospf_topo1.dot
+++ b/tests/topotests/ospf_topo1/test_ospf_topo1.dot
diff --git a/tests/topotests/ospf-topo1/test_ospf_topo1.jpg b/tests/topotests/ospf_topo1/test_ospf_topo1.jpg
index 1e931709e0..1e931709e0 100644
--- a/tests/topotests/ospf-topo1/test_ospf_topo1.jpg
+++ b/tests/topotests/ospf_topo1/test_ospf_topo1.jpg
Binary files differ
diff --git a/tests/topotests/ospf-topo1/test_ospf_topo1.py b/tests/topotests/ospf_topo1/test_ospf_topo1.py
index 42634ce906..42634ce906 100644
--- a/tests/topotests/ospf-topo1/test_ospf_topo1.py
+++ b/tests/topotests/ospf_topo1/test_ospf_topo1.py
diff --git a/tests/topotests/pim-basic-topo2/__init__.py b/tests/topotests/ospf_topo1_vrf/__init__.py
index e69de29bb2..e69de29bb2 100644..100755
--- a/tests/topotests/pim-basic-topo2/__init__.py
+++ b/tests/topotests/ospf_topo1_vrf/__init__.py
diff --git a/tests/topotests/ospf-topo1-vrf/r1/ospfd.conf b/tests/topotests/ospf_topo1_vrf/r1/ospfd.conf
index 9a68635568..9a68635568 100644
--- a/tests/topotests/ospf-topo1-vrf/r1/ospfd.conf
+++ b/tests/topotests/ospf_topo1_vrf/r1/ospfd.conf
diff --git a/tests/topotests/ospf-topo1-vrf/r1/ospfroute.txt b/tests/topotests/ospf_topo1_vrf/r1/ospfroute.txt
index 134a10a454..134a10a454 100644
--- a/tests/topotests/ospf-topo1-vrf/r1/ospfroute.txt
+++ b/tests/topotests/ospf_topo1_vrf/r1/ospfroute.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r1/ospfroute_down.txt b/tests/topotests/ospf_topo1_vrf/r1/ospfroute_down.txt
index 083d77126c..083d77126c 100644
--- a/tests/topotests/ospf-topo1-vrf/r1/ospfroute_down.txt
+++ b/tests/topotests/ospf_topo1_vrf/r1/ospfroute_down.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r1/zebra.conf b/tests/topotests/ospf_topo1_vrf/r1/zebra.conf
index e826793657..e826793657 100644
--- a/tests/topotests/ospf-topo1-vrf/r1/zebra.conf
+++ b/tests/topotests/ospf_topo1_vrf/r1/zebra.conf
diff --git a/tests/topotests/ospf-topo1-vrf/r1/zebraroute.txt b/tests/topotests/ospf_topo1_vrf/r1/zebraroute.txt
index d72aa3b8e5..d72aa3b8e5 100644
--- a/tests/topotests/ospf-topo1-vrf/r1/zebraroute.txt
+++ b/tests/topotests/ospf_topo1_vrf/r1/zebraroute.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r1/zebraroutedown.txt b/tests/topotests/ospf_topo1_vrf/r1/zebraroutedown.txt
index 5ea6bdc04d..5ea6bdc04d 100644
--- a/tests/topotests/ospf-topo1-vrf/r1/zebraroutedown.txt
+++ b/tests/topotests/ospf_topo1_vrf/r1/zebraroutedown.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r2/ospfd.conf b/tests/topotests/ospf_topo1_vrf/r2/ospfd.conf
index ad481a996d..ad481a996d 100644
--- a/tests/topotests/ospf-topo1-vrf/r2/ospfd.conf
+++ b/tests/topotests/ospf_topo1_vrf/r2/ospfd.conf
diff --git a/tests/topotests/ospf-topo1-vrf/r2/ospfroute.txt b/tests/topotests/ospf_topo1_vrf/r2/ospfroute.txt
index a49cb77249..a49cb77249 100644
--- a/tests/topotests/ospf-topo1-vrf/r2/ospfroute.txt
+++ b/tests/topotests/ospf_topo1_vrf/r2/ospfroute.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r2/ospfroute_down.txt b/tests/topotests/ospf_topo1_vrf/r2/ospfroute_down.txt
index 2227bedf07..2227bedf07 100644
--- a/tests/topotests/ospf-topo1-vrf/r2/ospfroute_down.txt
+++ b/tests/topotests/ospf_topo1_vrf/r2/ospfroute_down.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r2/zebra.conf b/tests/topotests/ospf_topo1_vrf/r2/zebra.conf
index 8dcb713da6..8dcb713da6 100644
--- a/tests/topotests/ospf-topo1-vrf/r2/zebra.conf
+++ b/tests/topotests/ospf_topo1_vrf/r2/zebra.conf
diff --git a/tests/topotests/ospf-topo1-vrf/r2/zebraroute.txt b/tests/topotests/ospf_topo1_vrf/r2/zebraroute.txt
index ce5e5f3bab..ce5e5f3bab 100644
--- a/tests/topotests/ospf-topo1-vrf/r2/zebraroute.txt
+++ b/tests/topotests/ospf_topo1_vrf/r2/zebraroute.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r2/zebraroutedown.txt b/tests/topotests/ospf_topo1_vrf/r2/zebraroutedown.txt
index 157811ec77..157811ec77 100644
--- a/tests/topotests/ospf-topo1-vrf/r2/zebraroutedown.txt
+++ b/tests/topotests/ospf_topo1_vrf/r2/zebraroutedown.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r3/ospfd.conf b/tests/topotests/ospf_topo1_vrf/r3/ospfd.conf
index d5214f734e..d5214f734e 100644
--- a/tests/topotests/ospf-topo1-vrf/r3/ospfd.conf
+++ b/tests/topotests/ospf_topo1_vrf/r3/ospfd.conf
diff --git a/tests/topotests/ospf-topo1-vrf/r3/ospfroute.txt b/tests/topotests/ospf_topo1_vrf/r3/ospfroute.txt
index 3b16bfbd55..3b16bfbd55 100644
--- a/tests/topotests/ospf-topo1-vrf/r3/ospfroute.txt
+++ b/tests/topotests/ospf_topo1_vrf/r3/ospfroute.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r3/ospfroute_down.txt b/tests/topotests/ospf_topo1_vrf/r3/ospfroute_down.txt
index 39beac7a73..39beac7a73 100644
--- a/tests/topotests/ospf-topo1-vrf/r3/ospfroute_down.txt
+++ b/tests/topotests/ospf_topo1_vrf/r3/ospfroute_down.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r3/zebra.conf b/tests/topotests/ospf_topo1_vrf/r3/zebra.conf
index b548694330..b548694330 100644
--- a/tests/topotests/ospf-topo1-vrf/r3/zebra.conf
+++ b/tests/topotests/ospf_topo1_vrf/r3/zebra.conf
diff --git a/tests/topotests/ospf-topo1-vrf/r3/zebraroute.txt b/tests/topotests/ospf_topo1_vrf/r3/zebraroute.txt
index f40b7b09af..f40b7b09af 100644
--- a/tests/topotests/ospf-topo1-vrf/r3/zebraroute.txt
+++ b/tests/topotests/ospf_topo1_vrf/r3/zebraroute.txt
diff --git a/tests/topotests/ospf-topo1-vrf/r3/zebraroutedown.txt b/tests/topotests/ospf_topo1_vrf/r3/zebraroutedown.txt
index 89cd6f56c4..89cd6f56c4 100644
--- a/tests/topotests/ospf-topo1-vrf/r3/zebraroutedown.txt
+++ b/tests/topotests/ospf_topo1_vrf/r3/zebraroutedown.txt
diff --git a/tests/topotests/ospf-topo1-vrf/test_ospf_topo1-vrf.dot b/tests/topotests/ospf_topo1_vrf/test_ospf_topo1-vrf.dot
index 789fdd7c09..789fdd7c09 100644
--- a/tests/topotests/ospf-topo1-vrf/test_ospf_topo1-vrf.dot
+++ b/tests/topotests/ospf_topo1_vrf/test_ospf_topo1-vrf.dot
diff --git a/tests/topotests/ospf-topo1-vrf/test_ospf_topo1_vrf.jpg b/tests/topotests/ospf_topo1_vrf/test_ospf_topo1_vrf.jpg
index 85f2e52f8e..85f2e52f8e 100644
--- a/tests/topotests/ospf-topo1-vrf/test_ospf_topo1_vrf.jpg
+++ b/tests/topotests/ospf_topo1_vrf/test_ospf_topo1_vrf.jpg
Binary files differ
diff --git a/tests/topotests/ospf-topo1-vrf/test_ospf_topo1_vrf.py b/tests/topotests/ospf_topo1_vrf/test_ospf_topo1_vrf.py
index e2cb7bff03..e2cb7bff03 100644
--- a/tests/topotests/ospf-topo1-vrf/test_ospf_topo1_vrf.py
+++ b/tests/topotests/ospf_topo1_vrf/test_ospf_topo1_vrf.py
diff --git a/tests/topotests/ospf-topo2/r1/ospf-route.json b/tests/topotests/ospf_topo2/r1/ospf-route.json
index 6beb7e9bed..6beb7e9bed 100644
--- a/tests/topotests/ospf-topo2/r1/ospf-route.json
+++ b/tests/topotests/ospf_topo2/r1/ospf-route.json
diff --git a/tests/topotests/ospf-topo2/r1/ospfd.conf b/tests/topotests/ospf_topo2/r1/ospfd.conf
index 65843cbb83..65843cbb83 100644
--- a/tests/topotests/ospf-topo2/r1/ospfd.conf
+++ b/tests/topotests/ospf_topo2/r1/ospfd.conf
diff --git a/tests/topotests/ospf-topo2/r1/v4_route.json b/tests/topotests/ospf_topo2/r1/v4_route.json
index 76c6396169..76c6396169 100644
--- a/tests/topotests/ospf-topo2/r1/v4_route.json
+++ b/tests/topotests/ospf_topo2/r1/v4_route.json
diff --git a/tests/topotests/ospf-topo2/r1/zebra.conf b/tests/topotests/ospf_topo2/r1/zebra.conf
index d96d9707c1..d96d9707c1 100644
--- a/tests/topotests/ospf-topo2/r1/zebra.conf
+++ b/tests/topotests/ospf_topo2/r1/zebra.conf
diff --git a/tests/topotests/ospf-topo2/r2/ospf-route.json b/tests/topotests/ospf_topo2/r2/ospf-route.json
index 3cfd255bfd..3cfd255bfd 100644
--- a/tests/topotests/ospf-topo2/r2/ospf-route.json
+++ b/tests/topotests/ospf_topo2/r2/ospf-route.json
diff --git a/tests/topotests/ospf-topo2/r2/ospfd.conf b/tests/topotests/ospf_topo2/r2/ospfd.conf
index b032f1a8ac..b032f1a8ac 100644
--- a/tests/topotests/ospf-topo2/r2/ospfd.conf
+++ b/tests/topotests/ospf_topo2/r2/ospfd.conf
diff --git a/tests/topotests/ospf-topo2/r2/v4_route.json b/tests/topotests/ospf_topo2/r2/v4_route.json
index 1638536388..1638536388 100644
--- a/tests/topotests/ospf-topo2/r2/v4_route.json
+++ b/tests/topotests/ospf_topo2/r2/v4_route.json
diff --git a/tests/topotests/ospf-topo2/r2/zebra.conf b/tests/topotests/ospf_topo2/r2/zebra.conf
index f9dd2c4471..f9dd2c4471 100644
--- a/tests/topotests/ospf-topo2/r2/zebra.conf
+++ b/tests/topotests/ospf_topo2/r2/zebra.conf
diff --git a/tests/topotests/ospf-topo2/test_ospf_topo2.py b/tests/topotests/ospf_topo2/test_ospf_topo2.py
index 6451f5fb32..6451f5fb32 100644
--- a/tests/topotests/ospf-topo2/test_ospf_topo2.py
+++ b/tests/topotests/ospf_topo2/test_ospf_topo2.py
diff --git a/tests/topotests/pbr_topo1/__init__.py b/tests/topotests/pbr_topo1/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/topotests/pbr_topo1/__init__.py
diff --git a/tests/topotests/pbr-topo1/r1/linux-rules.json b/tests/topotests/pbr_topo1/r1/linux-rules.json
index 5af4363418..5af4363418 100644
--- a/tests/topotests/pbr-topo1/r1/linux-rules.json
+++ b/tests/topotests/pbr_topo1/r1/linux-rules.json
diff --git a/tests/topotests/pbr-topo1/r1/pbr-interface.json b/tests/topotests/pbr_topo1/r1/pbr-interface.json
index e28d9fb149..e28d9fb149 100644
--- a/tests/topotests/pbr-topo1/r1/pbr-interface.json
+++ b/tests/topotests/pbr_topo1/r1/pbr-interface.json
diff --git a/tests/topotests/pbr-topo1/r1/pbr-map.json b/tests/topotests/pbr_topo1/r1/pbr-map.json
index bfa0ecb849..bfa0ecb849 100644
--- a/tests/topotests/pbr-topo1/r1/pbr-map.json
+++ b/tests/topotests/pbr_topo1/r1/pbr-map.json
diff --git a/tests/topotests/pbr-topo1/r1/pbr-nexthop-groups.json b/tests/topotests/pbr_topo1/r1/pbr-nexthop-groups.json
index 540ea28158..540ea28158 100644
--- a/tests/topotests/pbr-topo1/r1/pbr-nexthop-groups.json
+++ b/tests/topotests/pbr_topo1/r1/pbr-nexthop-groups.json
diff --git a/tests/topotests/pbr-topo1/r1/pbrd.conf b/tests/topotests/pbr_topo1/r1/pbrd.conf
index 45cb7656ab..45cb7656ab 100644
--- a/tests/topotests/pbr-topo1/r1/pbrd.conf
+++ b/tests/topotests/pbr_topo1/r1/pbrd.conf
diff --git a/tests/topotests/pbr-topo1/r1/zebra.conf b/tests/topotests/pbr_topo1/r1/zebra.conf
index 2ec947c275..2ec947c275 100644
--- a/tests/topotests/pbr-topo1/r1/zebra.conf
+++ b/tests/topotests/pbr_topo1/r1/zebra.conf
diff --git a/tests/topotests/pbr-topo1/test_pbr_topo1.py b/tests/topotests/pbr_topo1/test_pbr_topo1.py
index 1a024063b8..1a024063b8 100644
--- a/tests/topotests/pbr-topo1/test_pbr_topo1.py
+++ b/tests/topotests/pbr_topo1/test_pbr_topo1.py
diff --git a/tests/topotests/pim-basic/mcast-rx.py b/tests/topotests/pim_basic/mcast-rx.py
index 862ad46af4..862ad46af4 100755
--- a/tests/topotests/pim-basic/mcast-rx.py
+++ b/tests/topotests/pim_basic/mcast-rx.py
diff --git a/tests/topotests/pim-basic/mcast-tx.py b/tests/topotests/pim_basic/mcast-tx.py
index 87038ad5cf..87038ad5cf 100755
--- a/tests/topotests/pim-basic/mcast-tx.py
+++ b/tests/topotests/pim_basic/mcast-tx.py
diff --git a/tests/topotests/pim-basic/r1/bgpd.conf b/tests/topotests/pim_basic/r1/bgpd.conf
index 84d9598bc6..84d9598bc6 100644
--- a/tests/topotests/pim-basic/r1/bgpd.conf
+++ b/tests/topotests/pim_basic/r1/bgpd.conf
diff --git a/tests/topotests/pim-basic/r1/pimd.conf b/tests/topotests/pim_basic/r1/pimd.conf
index f64a46deb3..f64a46deb3 100644
--- a/tests/topotests/pim-basic/r1/pimd.conf
+++ b/tests/topotests/pim_basic/r1/pimd.conf
diff --git a/tests/topotests/pim-basic/r1/rp-info.json b/tests/topotests/pim_basic/r1/rp-info.json
index 1f713c2d28..1f713c2d28 100644
--- a/tests/topotests/pim-basic/r1/rp-info.json
+++ b/tests/topotests/pim_basic/r1/rp-info.json
diff --git a/tests/topotests/pim-basic/r1/zebra.conf b/tests/topotests/pim_basic/r1/zebra.conf
index e43041758b..e43041758b 100644
--- a/tests/topotests/pim-basic/r1/zebra.conf
+++ b/tests/topotests/pim_basic/r1/zebra.conf
diff --git a/tests/topotests/pim-basic/r2/pimd.conf b/tests/topotests/pim_basic/r2/pimd.conf
index 932cff6f3b..932cff6f3b 100644
--- a/tests/topotests/pim-basic/r2/pimd.conf
+++ b/tests/topotests/pim_basic/r2/pimd.conf
diff --git a/tests/topotests/pim-basic/r2/zebra.conf b/tests/topotests/pim_basic/r2/zebra.conf
index cb30858f58..cb30858f58 100644
--- a/tests/topotests/pim-basic/r2/zebra.conf
+++ b/tests/topotests/pim_basic/r2/zebra.conf
diff --git a/tests/topotests/pim-basic/r3/pimd.conf b/tests/topotests/pim_basic/r3/pimd.conf
index f94ee99930..f94ee99930 100644
--- a/tests/topotests/pim-basic/r3/pimd.conf
+++ b/tests/topotests/pim_basic/r3/pimd.conf
diff --git a/tests/topotests/pim-basic/r3/zebra.conf b/tests/topotests/pim_basic/r3/zebra.conf
index 8e58e8c66a..8e58e8c66a 100644
--- a/tests/topotests/pim-basic/r3/zebra.conf
+++ b/tests/topotests/pim_basic/r3/zebra.conf
diff --git a/tests/topotests/pim-basic/rp/bgpd.conf b/tests/topotests/pim_basic/rp/bgpd.conf
index 1bfae6059b..1bfae6059b 100644
--- a/tests/topotests/pim-basic/rp/bgpd.conf
+++ b/tests/topotests/pim_basic/rp/bgpd.conf
diff --git a/tests/topotests/pim-basic/rp/pimd.conf b/tests/topotests/pim_basic/rp/pimd.conf
index 6e35c97971..6e35c97971 100644
--- a/tests/topotests/pim-basic/rp/pimd.conf
+++ b/tests/topotests/pim_basic/rp/pimd.conf
diff --git a/tests/topotests/pim-basic/rp/upstream.json b/tests/topotests/pim_basic/rp/upstream.json
index c33dea49e9..c33dea49e9 100644
--- a/tests/topotests/pim-basic/rp/upstream.json
+++ b/tests/topotests/pim_basic/rp/upstream.json
diff --git a/tests/topotests/pim-basic/rp/zebra.conf b/tests/topotests/pim_basic/rp/zebra.conf
index 0a1359ecd0..0a1359ecd0 100644
--- a/tests/topotests/pim-basic/rp/zebra.conf
+++ b/tests/topotests/pim_basic/rp/zebra.conf
diff --git a/tests/topotests/pim-basic/test_pim.py b/tests/topotests/pim_basic/test_pim.py
index 4debbeb851..4debbeb851 100644
--- a/tests/topotests/pim-basic/test_pim.py
+++ b/tests/topotests/pim_basic/test_pim.py
diff --git a/tests/topotests/pim_basic_topo2/__init__.py b/tests/topotests/pim_basic_topo2/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/topotests/pim_basic_topo2/__init__.py
diff --git a/tests/topotests/pim-basic-topo2/r1/bfdd.conf b/tests/topotests/pim_basic_topo2/r1/bfdd.conf
index 76c6f82190..76c6f82190 100644
--- a/tests/topotests/pim-basic-topo2/r1/bfdd.conf
+++ b/tests/topotests/pim_basic_topo2/r1/bfdd.conf
diff --git a/tests/topotests/pim-basic-topo2/r1/pimd.conf b/tests/topotests/pim_basic_topo2/r1/pimd.conf
index b895d7d573..b895d7d573 100644
--- a/tests/topotests/pim-basic-topo2/r1/pimd.conf
+++ b/tests/topotests/pim_basic_topo2/r1/pimd.conf
diff --git a/tests/topotests/pim-basic-topo2/r1/zebra.conf b/tests/topotests/pim_basic_topo2/r1/zebra.conf
index 6bf02a3ee8..6bf02a3ee8 100644
--- a/tests/topotests/pim-basic-topo2/r1/zebra.conf
+++ b/tests/topotests/pim_basic_topo2/r1/zebra.conf
diff --git a/tests/topotests/pim-basic-topo2/r2/bfdd.conf b/tests/topotests/pim_basic_topo2/r2/bfdd.conf
index ca61e467dc..ca61e467dc 100644
--- a/tests/topotests/pim-basic-topo2/r2/bfdd.conf
+++ b/tests/topotests/pim_basic_topo2/r2/bfdd.conf
diff --git a/tests/topotests/pim-basic-topo2/r2/pimd.conf b/tests/topotests/pim_basic_topo2/r2/pimd.conf
index 0b32ded19a..0b32ded19a 100644
--- a/tests/topotests/pim-basic-topo2/r2/pimd.conf
+++ b/tests/topotests/pim_basic_topo2/r2/pimd.conf
diff --git a/tests/topotests/pim-basic-topo2/r2/zebra.conf b/tests/topotests/pim_basic_topo2/r2/zebra.conf
index 3ceb5f0fc2..3ceb5f0fc2 100644
--- a/tests/topotests/pim-basic-topo2/r2/zebra.conf
+++ b/tests/topotests/pim_basic_topo2/r2/zebra.conf
diff --git a/tests/topotests/pim-basic-topo2/r3/bfdd.conf b/tests/topotests/pim_basic_topo2/r3/bfdd.conf
index ca61e467dc..ca61e467dc 100644
--- a/tests/topotests/pim-basic-topo2/r3/bfdd.conf
+++ b/tests/topotests/pim_basic_topo2/r3/bfdd.conf
diff --git a/tests/topotests/pim-basic-topo2/r3/pimd.conf b/tests/topotests/pim_basic_topo2/r3/pimd.conf
index 691a28ea27..691a28ea27 100644
--- a/tests/topotests/pim-basic-topo2/r3/pimd.conf
+++ b/tests/topotests/pim_basic_topo2/r3/pimd.conf
diff --git a/tests/topotests/pim-basic-topo2/r3/zebra.conf b/tests/topotests/pim_basic_topo2/r3/zebra.conf
index 3df218ee16..3df218ee16 100644
--- a/tests/topotests/pim-basic-topo2/r3/zebra.conf
+++ b/tests/topotests/pim_basic_topo2/r3/zebra.conf
diff --git a/tests/topotests/pim-basic-topo2/r4/bfdd.conf b/tests/topotests/pim_basic_topo2/r4/bfdd.conf
index ca61e467dc..ca61e467dc 100644
--- a/tests/topotests/pim-basic-topo2/r4/bfdd.conf
+++ b/tests/topotests/pim_basic_topo2/r4/bfdd.conf
diff --git a/tests/topotests/pim-basic-topo2/r4/pimd.conf b/tests/topotests/pim_basic_topo2/r4/pimd.conf
index 2277b3e1f1..2277b3e1f1 100644
--- a/tests/topotests/pim-basic-topo2/r4/pimd.conf
+++ b/tests/topotests/pim_basic_topo2/r4/pimd.conf
diff --git a/tests/topotests/pim-basic-topo2/r4/zebra.conf b/tests/topotests/pim_basic_topo2/r4/zebra.conf
index 6ac5c78fc3..6ac5c78fc3 100644
--- a/tests/topotests/pim-basic-topo2/r4/zebra.conf
+++ b/tests/topotests/pim_basic_topo2/r4/zebra.conf
diff --git a/tests/topotests/pim-basic-topo2/test_pim_basic_topo2.dot b/tests/topotests/pim_basic_topo2/test_pim_basic_topo2.dot
index 22fce27e22..22fce27e22 100644
--- a/tests/topotests/pim-basic-topo2/test_pim_basic_topo2.dot
+++ b/tests/topotests/pim_basic_topo2/test_pim_basic_topo2.dot
diff --git a/tests/topotests/pim-basic-topo2/test_pim_basic_topo2.png b/tests/topotests/pim_basic_topo2/test_pim_basic_topo2.png
index 39139a35b1..39139a35b1 100644
--- a/tests/topotests/pim-basic-topo2/test_pim_basic_topo2.png
+++ b/tests/topotests/pim_basic_topo2/test_pim_basic_topo2.png
Binary files differ
diff --git a/tests/topotests/pim-basic-topo2/test_pim_basic_topo2.py b/tests/topotests/pim_basic_topo2/test_pim_basic_topo2.py
index 883125cfc7..883125cfc7 100644
--- a/tests/topotests/pim-basic-topo2/test_pim_basic_topo2.py
+++ b/tests/topotests/pim_basic_topo2/test_pim_basic_topo2.py
diff --git a/tests/topotests/pytest.ini b/tests/topotests/pytest.ini
index 562e754f21..885c249b31 100644
--- a/tests/topotests/pytest.ini
+++ b/tests/topotests/pytest.ini
@@ -1,6 +1,6 @@
# Skip pytests example directory
[pytest]
-norecursedirs = .git example-test example-topojson-test lib docker
+norecursedirs = .git example_test example_topojson_test lib docker
# Markers
#
diff --git a/tests/topotests/rip-topo1/r1/rip_status.ref b/tests/topotests/rip_topo1/r1/rip_status.ref
index 31ad46ab2e..31ad46ab2e 100644
--- a/tests/topotests/rip-topo1/r1/rip_status.ref
+++ b/tests/topotests/rip_topo1/r1/rip_status.ref
diff --git a/tests/topotests/rip-topo1/r1/ripd.conf b/tests/topotests/rip_topo1/r1/ripd.conf
index 54f1774214..54f1774214 100644
--- a/tests/topotests/rip-topo1/r1/ripd.conf
+++ b/tests/topotests/rip_topo1/r1/ripd.conf
diff --git a/tests/topotests/rip-topo1/r1/show_ip_rip.ref b/tests/topotests/rip_topo1/r1/show_ip_rip.ref
index a0b77c886e..a0b77c886e 100644
--- a/tests/topotests/rip-topo1/r1/show_ip_rip.ref
+++ b/tests/topotests/rip_topo1/r1/show_ip_rip.ref
diff --git a/tests/topotests/rip-topo1/r1/show_ip_route.ref b/tests/topotests/rip_topo1/r1/show_ip_route.ref
index 2ff26045aa..2ff26045aa 100644
--- a/tests/topotests/rip-topo1/r1/show_ip_route.ref
+++ b/tests/topotests/rip_topo1/r1/show_ip_route.ref
diff --git a/tests/topotests/rip-topo1/r1/zebra.conf b/tests/topotests/rip_topo1/r1/zebra.conf
index 7c8f2c502b..7c8f2c502b 100644
--- a/tests/topotests/rip-topo1/r1/zebra.conf
+++ b/tests/topotests/rip_topo1/r1/zebra.conf
diff --git a/tests/topotests/rip-topo1/r2/rip_status.ref b/tests/topotests/rip_topo1/r2/rip_status.ref
index 99841a62b0..99841a62b0 100644
--- a/tests/topotests/rip-topo1/r2/rip_status.ref
+++ b/tests/topotests/rip_topo1/r2/rip_status.ref
diff --git a/tests/topotests/rip-topo1/r2/ripd.conf b/tests/topotests/rip_topo1/r2/ripd.conf
index 2e94cfa262..2e94cfa262 100644
--- a/tests/topotests/rip-topo1/r2/ripd.conf
+++ b/tests/topotests/rip_topo1/r2/ripd.conf
diff --git a/tests/topotests/rip-topo1/r2/show_ip_rip.ref b/tests/topotests/rip_topo1/r2/show_ip_rip.ref
index b61fb45eac..b61fb45eac 100644
--- a/tests/topotests/rip-topo1/r2/show_ip_rip.ref
+++ b/tests/topotests/rip_topo1/r2/show_ip_rip.ref
diff --git a/tests/topotests/rip-topo1/r2/show_ip_route.ref b/tests/topotests/rip_topo1/r2/show_ip_route.ref
index 80f51a92c7..80f51a92c7 100644
--- a/tests/topotests/rip-topo1/r2/show_ip_route.ref
+++ b/tests/topotests/rip_topo1/r2/show_ip_route.ref
diff --git a/tests/topotests/rip-topo1/r2/zebra.conf b/tests/topotests/rip_topo1/r2/zebra.conf
index c440f3a350..c440f3a350 100644
--- a/tests/topotests/rip-topo1/r2/zebra.conf
+++ b/tests/topotests/rip_topo1/r2/zebra.conf
diff --git a/tests/topotests/rip-topo1/r3/rip_status.ref b/tests/topotests/rip_topo1/r3/rip_status.ref
index 040d3c32a1..040d3c32a1 100644
--- a/tests/topotests/rip-topo1/r3/rip_status.ref
+++ b/tests/topotests/rip_topo1/r3/rip_status.ref
diff --git a/tests/topotests/rip-topo1/r3/ripd.conf b/tests/topotests/rip_topo1/r3/ripd.conf
index e27e67503f..e27e67503f 100644
--- a/tests/topotests/rip-topo1/r3/ripd.conf
+++ b/tests/topotests/rip_topo1/r3/ripd.conf
diff --git a/tests/topotests/rip-topo1/r3/show_ip_rip.ref b/tests/topotests/rip_topo1/r3/show_ip_rip.ref
index 1df299b5e6..1df299b5e6 100644
--- a/tests/topotests/rip-topo1/r3/show_ip_rip.ref
+++ b/tests/topotests/rip_topo1/r3/show_ip_rip.ref
diff --git a/tests/topotests/rip-topo1/r3/show_ip_route.ref b/tests/topotests/rip_topo1/r3/show_ip_route.ref
index 2b739f0489..2b739f0489 100644
--- a/tests/topotests/rip-topo1/r3/show_ip_route.ref
+++ b/tests/topotests/rip_topo1/r3/show_ip_route.ref
diff --git a/tests/topotests/rip-topo1/r3/zebra.conf b/tests/topotests/rip_topo1/r3/zebra.conf
index 7f145b4583..7f145b4583 100644
--- a/tests/topotests/rip-topo1/r3/zebra.conf
+++ b/tests/topotests/rip_topo1/r3/zebra.conf
diff --git a/tests/topotests/rip-topo1/test_rip_topo1.dot b/tests/topotests/rip_topo1/test_rip_topo1.dot
index f052b697ea..f052b697ea 100644
--- a/tests/topotests/rip-topo1/test_rip_topo1.dot
+++ b/tests/topotests/rip_topo1/test_rip_topo1.dot
diff --git a/tests/topotests/rip-topo1/test_rip_topo1.pdf b/tests/topotests/rip_topo1/test_rip_topo1.pdf
index c201ac1f07..c201ac1f07 100644
--- a/tests/topotests/rip-topo1/test_rip_topo1.pdf
+++ b/tests/topotests/rip_topo1/test_rip_topo1.pdf
Binary files differ
diff --git a/tests/topotests/rip-topo1/test_rip_topo1.py b/tests/topotests/rip_topo1/test_rip_topo1.py
index 78672ac871..78672ac871 100644
--- a/tests/topotests/rip-topo1/test_rip_topo1.py
+++ b/tests/topotests/rip_topo1/test_rip_topo1.py
diff --git a/tests/topotests/ripng-topo1/r1/ripng_status.ref b/tests/topotests/ripng_topo1/r1/ripng_status.ref
index b02cc69d0e..b02cc69d0e 100644
--- a/tests/topotests/ripng-topo1/r1/ripng_status.ref
+++ b/tests/topotests/ripng_topo1/r1/ripng_status.ref
diff --git a/tests/topotests/ripng-topo1/r1/ripngd.conf b/tests/topotests/ripng_topo1/r1/ripngd.conf
index 07ed7296d9..07ed7296d9 100644
--- a/tests/topotests/ripng-topo1/r1/ripngd.conf
+++ b/tests/topotests/ripng_topo1/r1/ripngd.conf
diff --git a/tests/topotests/ripng-topo1/r1/show_ipv6_ripng.ref b/tests/topotests/ripng_topo1/r1/show_ipv6_ripng.ref
index 30d0f31e18..30d0f31e18 100644
--- a/tests/topotests/ripng-topo1/r1/show_ipv6_ripng.ref
+++ b/tests/topotests/ripng_topo1/r1/show_ipv6_ripng.ref
diff --git a/tests/topotests/ripng-topo1/r1/show_ipv6_route.ref b/tests/topotests/ripng_topo1/r1/show_ipv6_route.ref
index 55fbbc34f3..55fbbc34f3 100644
--- a/tests/topotests/ripng-topo1/r1/show_ipv6_route.ref
+++ b/tests/topotests/ripng_topo1/r1/show_ipv6_route.ref
diff --git a/tests/topotests/ripng-topo1/r1/zebra.conf b/tests/topotests/ripng_topo1/r1/zebra.conf
index 11c1cdc5b9..11c1cdc5b9 100644
--- a/tests/topotests/ripng-topo1/r1/zebra.conf
+++ b/tests/topotests/ripng_topo1/r1/zebra.conf
diff --git a/tests/topotests/ripng-topo1/r2/ripng_status.ref b/tests/topotests/ripng_topo1/r2/ripng_status.ref
index 640df9a4a0..640df9a4a0 100644
--- a/tests/topotests/ripng-topo1/r2/ripng_status.ref
+++ b/tests/topotests/ripng_topo1/r2/ripng_status.ref
diff --git a/tests/topotests/ripng-topo1/r2/ripngd.conf b/tests/topotests/ripng_topo1/r2/ripngd.conf
index ef2c42195d..ef2c42195d 100644
--- a/tests/topotests/ripng-topo1/r2/ripngd.conf
+++ b/tests/topotests/ripng_topo1/r2/ripngd.conf
diff --git a/tests/topotests/ripng-topo1/r2/show_ipv6_ripng.ref b/tests/topotests/ripng_topo1/r2/show_ipv6_ripng.ref
index fe5bcc8b31..fe5bcc8b31 100644
--- a/tests/topotests/ripng-topo1/r2/show_ipv6_ripng.ref
+++ b/tests/topotests/ripng_topo1/r2/show_ipv6_ripng.ref
diff --git a/tests/topotests/ripng-topo1/r2/show_ipv6_route.ref b/tests/topotests/ripng_topo1/r2/show_ipv6_route.ref
index 72e1f926a2..72e1f926a2 100644
--- a/tests/topotests/ripng-topo1/r2/show_ipv6_route.ref
+++ b/tests/topotests/ripng_topo1/r2/show_ipv6_route.ref
diff --git a/tests/topotests/ripng-topo1/r2/zebra.conf b/tests/topotests/ripng_topo1/r2/zebra.conf
index 59006317d3..59006317d3 100644
--- a/tests/topotests/ripng-topo1/r2/zebra.conf
+++ b/tests/topotests/ripng_topo1/r2/zebra.conf
diff --git a/tests/topotests/ripng-topo1/r3/ripng_status.ref b/tests/topotests/ripng_topo1/r3/ripng_status.ref
index f4bfff0c59..f4bfff0c59 100644
--- a/tests/topotests/ripng-topo1/r3/ripng_status.ref
+++ b/tests/topotests/ripng_topo1/r3/ripng_status.ref
diff --git a/tests/topotests/ripng-topo1/r3/ripngd.conf b/tests/topotests/ripng_topo1/r3/ripngd.conf
index 506eaac442..506eaac442 100644
--- a/tests/topotests/ripng-topo1/r3/ripngd.conf
+++ b/tests/topotests/ripng_topo1/r3/ripngd.conf
diff --git a/tests/topotests/ripng-topo1/r3/show_ipv6_ripng.ref b/tests/topotests/ripng_topo1/r3/show_ipv6_ripng.ref
index 909ad663ba..909ad663ba 100644
--- a/tests/topotests/ripng-topo1/r3/show_ipv6_ripng.ref
+++ b/tests/topotests/ripng_topo1/r3/show_ipv6_ripng.ref
diff --git a/tests/topotests/ripng-topo1/r3/show_ipv6_route.ref b/tests/topotests/ripng_topo1/r3/show_ipv6_route.ref
index 25a7440111..25a7440111 100644
--- a/tests/topotests/ripng-topo1/r3/show_ipv6_route.ref
+++ b/tests/topotests/ripng_topo1/r3/show_ipv6_route.ref
diff --git a/tests/topotests/ripng-topo1/r3/zebra.conf b/tests/topotests/ripng_topo1/r3/zebra.conf
index b43ba69834..b43ba69834 100644
--- a/tests/topotests/ripng-topo1/r3/zebra.conf
+++ b/tests/topotests/ripng_topo1/r3/zebra.conf
diff --git a/tests/topotests/ripng-topo1/test_ripng_topo1.dot b/tests/topotests/ripng_topo1/test_ripng_topo1.dot
index 7d66a2a306..7d66a2a306 100644
--- a/tests/topotests/ripng-topo1/test_ripng_topo1.dot
+++ b/tests/topotests/ripng_topo1/test_ripng_topo1.dot
diff --git a/tests/topotests/ripng-topo1/test_ripng_topo1.pdf b/tests/topotests/ripng_topo1/test_ripng_topo1.pdf
index cb1adde239..cb1adde239 100644
--- a/tests/topotests/ripng-topo1/test_ripng_topo1.pdf
+++ b/tests/topotests/ripng_topo1/test_ripng_topo1.pdf
Binary files differ
diff --git a/tests/topotests/ripng-topo1/test_ripng_topo1.py b/tests/topotests/ripng_topo1/test_ripng_topo1.py
index 4a5a59cd75..4a5a59cd75 100644
--- a/tests/topotests/ripng-topo1/test_ripng_topo1.py
+++ b/tests/topotests/ripng_topo1/test_ripng_topo1.py
diff --git a/tests/topotests/route-scale/r1/installed.routes.json b/tests/topotests/route_scale/r1/installed.routes.json
index 25d209f9eb..25d209f9eb 100644
--- a/tests/topotests/route-scale/r1/installed.routes.json
+++ b/tests/topotests/route_scale/r1/installed.routes.json
diff --git a/tests/topotests/route-scale/r1/no.routes.json b/tests/topotests/route_scale/r1/no.routes.json
index abebd1b143..abebd1b143 100644
--- a/tests/topotests/route-scale/r1/no.routes.json
+++ b/tests/topotests/route_scale/r1/no.routes.json
diff --git a/tests/topotests/route-scale/r1/sharpd.conf b/tests/topotests/route_scale/r1/sharpd.conf
index 0848f34ddf..0848f34ddf 100644
--- a/tests/topotests/route-scale/r1/sharpd.conf
+++ b/tests/topotests/route_scale/r1/sharpd.conf
diff --git a/tests/topotests/route-scale/r1/zebra.conf b/tests/topotests/route_scale/r1/zebra.conf
index 48a01f48ab..48a01f48ab 100644
--- a/tests/topotests/route-scale/r1/zebra.conf
+++ b/tests/topotests/route_scale/r1/zebra.conf
diff --git a/tests/topotests/route-scale/test_route_scale.py b/tests/topotests/route_scale/test_route_scale.py
index bbd6ef8d60..bbd6ef8d60 100644
--- a/tests/topotests/route-scale/test_route_scale.py
+++ b/tests/topotests/route_scale/test_route_scale.py
diff --git a/tests/topotests/simple-snmp-test/r1/bgpd.conf b/tests/topotests/simple_snmp_test/r1/bgpd.conf
index 00d1e17670..00d1e17670 100644
--- a/tests/topotests/simple-snmp-test/r1/bgpd.conf
+++ b/tests/topotests/simple_snmp_test/r1/bgpd.conf
diff --git a/tests/topotests/simple-snmp-test/r1/isisd.conf b/tests/topotests/simple_snmp_test/r1/isisd.conf
index b5ca993da3..b5ca993da3 100644
--- a/tests/topotests/simple-snmp-test/r1/isisd.conf
+++ b/tests/topotests/simple_snmp_test/r1/isisd.conf
diff --git a/tests/topotests/simple-snmp-test/r1/snmpd.conf b/tests/topotests/simple_snmp_test/r1/snmpd.conf
index b37911da36..b37911da36 100644
--- a/tests/topotests/simple-snmp-test/r1/snmpd.conf
+++ b/tests/topotests/simple_snmp_test/r1/snmpd.conf
diff --git a/tests/topotests/simple-snmp-test/r1/zebra.conf b/tests/topotests/simple_snmp_test/r1/zebra.conf
index 5281d0055d..5281d0055d 100644
--- a/tests/topotests/simple-snmp-test/r1/zebra.conf
+++ b/tests/topotests/simple_snmp_test/r1/zebra.conf
diff --git a/tests/topotests/simple-snmp-test/test_simple_snmp.py b/tests/topotests/simple_snmp_test/test_simple_snmp.py
index 5647e2b663..5647e2b663 100755
--- a/tests/topotests/simple-snmp-test/test_simple_snmp.py
+++ b/tests/topotests/simple_snmp_test/test_simple_snmp.py
diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py
index a4cc8e8e7a..a16c4ae297 100644
--- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py
+++ b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo1_ebgp.py
@@ -40,10 +40,11 @@ import platform
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
sys.path.append(os.path.join(CWD, "../lib/"))
+
# pylint: disable=C0413
# Import topogen and topotest helpers
-from mininet.topo import Topo
from lib.topogen import Topogen, get_topogen
+from mininet.topo import Topo
from lib.topotest import version_cmp
# Import topoJson from lib, to create topology and initial configuration
@@ -68,15 +69,14 @@ from lib.topojson import build_topo_from_json, build_config_from_json
pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
# Reading the data from JSON File for topology creation
-jsonFile = "{}/static_routes_topo1_ebgp.json".format(CWD)
+JSONFILE = "{}/static_routes_topo1_ebgp.json".format(CWD)
try:
- with open(jsonFile, "r") as topoJson:
+ with open(JSONFILE, "r") as topoJson:
topo = json.load(topoJson)
except IOError:
- assert False, "Could not read file {}".format(jsonFile)
+ assert False, "Could not read file {}".format(JSONFILE)
# Global variables
-BGP_CONVERGENCE = False
ADDR_TYPES = check_address_types()
NETWORK = {"ipv4": ["11.0.20.1/32", "11.0.20.2/32"], "ipv6": ["2::1/128", "2::2/128"]}
NETWORK2 = {"ipv4": "11.0.20.1/32", "ipv6": "2::1/128"}
@@ -98,6 +98,10 @@ class CreateTopo(Topo):
# Building topology from json file
build_topo_from_json(tgen, topo)
+ def dumdum(self):
+ """ Dummy """
+ print("%s", self.name)
+
def setup_module(mod):
"""
@@ -105,7 +109,7 @@ def setup_module(mod):
* `mod`: module name
"""
- global topo
+
testsuite_run_time = time.asctime(time.localtime(time.time()))
logger.info("Testsuite start time: {}".format(testsuite_run_time))
logger.info("=" * 40)
@@ -131,16 +135,14 @@ def setup_module(mod):
pytest.skip(error_msg)
# Checking BGP convergence
- global BGP_CONVERGENCE
- global ADDR_TYPES
+
# Don't run this test if we have any failure.
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
+
# Api call verify whether BGP is converged
- BGP_CONVERGENCE = verify_bgp_convergence(tgen, topo)
- assert BGP_CONVERGENCE is True, "setup_module :Failed \n Error: {}".format(
- BGP_CONVERGENCE
- )
+ converged = verify_bgp_convergence(tgen, topo)
+ assert converged is True, "setup_module :Failed \n Error: {}".format(converged)
logger.info("Running setup_module() done")
@@ -152,7 +154,7 @@ def teardown_module(mod):
* `mod`: module name
"""
- logger.info("Running teardown_module to delete topology")
+ logger.info("Running teardown_module to delete topology: %s", mod)
tgen = get_topogen()
@@ -166,7 +168,11 @@ def teardown_module(mod):
def populate_nh():
- NEXT_HOP_IP = {
+ """
+ Populate nexthops.
+ """
+
+ next_hop_ip = {
"nh1": {
"ipv4": topo["routers"]["r1"]["links"]["r2-link0"]["ipv4"].split("/")[0],
"ipv6": topo["routers"]["r1"]["links"]["r2-link0"]["ipv6"].split("/")[0],
@@ -176,7 +182,7 @@ def populate_nh():
"ipv6": topo["routers"]["r1"]["links"]["r2-link1"]["ipv6"].split("/")[0],
},
}
- return NEXT_HOP_IP
+ return next_hop_ip
#####################################################
@@ -199,7 +205,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
pytest.skip(tgen.errors)
reset_config_on_routers(tgen)
- NEXT_HOP_IP = populate_nh()
+ next_hop_ip = populate_nh()
step(
"Configure IPv4 static route (10.1.1.1) in R2 with next hop N1"
@@ -213,11 +219,11 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
},
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
},
]
}
@@ -233,7 +239,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"On R2, static route installed in RIB using show ip route"
" with 2 ECMP next hop "
)
- nh = [NEXT_HOP_IP["nh1"][addr_type], NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type], next_hop_ip["nh2"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
@@ -268,7 +274,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"delete": True,
}
]
@@ -284,7 +290,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"On R2, after removing the static route with N1 , "
"route become active with nexthop N2 and vice versa."
)
- nh = NEXT_HOP_IP["nh1"][addr_type]
+ nh = next_hop_ip["nh1"][addr_type]
result = verify_rib(
tgen,
addr_type,
@@ -300,12 +306,13 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
tc_name
)
- nh = [NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Configure the static route with nexthop N1")
@@ -314,7 +321,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
}
]
}
@@ -333,7 +340,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"delete": True,
}
]
@@ -350,7 +357,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"On R2, after removing the static route with N2 , "
"route become active with nexthop N1 and vice versa."
)
- nh = NEXT_HOP_IP["nh2"][addr_type]
+ nh = next_hop_ip["nh2"][addr_type]
result = verify_rib(
tgen,
addr_type,
@@ -360,15 +367,19 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Configure the static route with nexthop N2")
input_dict_4 = {
@@ -376,7 +387,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
}
]
}
@@ -395,14 +406,15 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
step("Only one the nexthops should be active in RIB.")
- nh = NEXT_HOP_IP["nh2"][addr_type]
+ nh = next_hop_ip["nh2"][addr_type]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
- nh = NEXT_HOP_IP["nh1"][addr_type]
+ nh = next_hop_ip["nh1"][addr_type]
result = verify_rib(
tgen,
addr_type,
@@ -412,15 +424,21 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
dut = "r3"
result = verify_bgp_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
result = verify_rib(
tgen,
@@ -431,27 +449,35 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
next_hop=nh,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
dut = "r2"
- nh = [NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
dut = "r2"
step("No shut the nexthop interface N1")
@@ -461,13 +487,14 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"after shut of nexthop N1 , route become active "
"with nexthop N2 and vice versa."
)
- nh = [NEXT_HOP_IP["nh1"][addr_type], NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type], next_hop_ip["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Shut nexthop interface N2")
intf = topo["routers"]["r2"]["links"]["r1-link1"]["interface"]
@@ -478,7 +505,7 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
" after shut of nexthop N1 , route become active with "
"nexthop N2 and vice versa."
)
- nh = NEXT_HOP_IP["nh2"][addr_type]
+ nh = next_hop_ip["nh2"][addr_type]
result = verify_rib(
tgen,
@@ -489,28 +516,36 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
step("No shut nexthop interface N2")
dut = "r2"
@@ -520,24 +555,29 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
"after shut of nexthop N1 , route become active "
"with nexthop N2 and vice versa."
)
- nh = [NEXT_HOP_IP["nh1"][addr_type], NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type], next_hop_ip["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -553,19 +593,26 @@ def test_static_route_2nh_p0_tc_1_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
write_test_footer(tc_name)
@@ -583,7 +630,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
pytest.skip(tgen.errors)
reset_config_on_routers(tgen)
- NEXT_HOP_IP = populate_nh()
+
step(
"Configure IPv4 static route (10.1.1.1) in R2 with next hop N1"
"(28.1.1.2 ) AD 10 and N2 (29.1.1.2) AD 20 , Static route next-hop"
@@ -592,19 +639,19 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
)
reset_config_on_routers(tgen)
- NEXT_HOP_IP = populate_nh()
+ next_hop_ip = populate_nh()
for addr_type in ADDR_TYPES:
input_dict_4 = {
"r2": {
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"admin_distance": 10,
},
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"admin_distance": 20,
},
]
@@ -625,33 +672,34 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"admin_distance": 10,
}
]
}
}
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"admin_distance": 20,
}
]
}
}
- nh = [NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh2"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
@@ -664,8 +712,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
step("Configure IBGP IPv4 peering between R2 and R3 router.")
step("Explicit route is added in R3 for R2 nexthop rechability")
@@ -673,11 +722,11 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"r3": {
"static_routes": [
{
- "network": NEXT_HOP_IP["nh1"][addr_type] + "/32",
+ "network": next_hop_ip["nh1"][addr_type] + "/32",
"next_hop": topo["routers"]["r2"]["links"]["r3"][addr_type],
},
{
- "network": NEXT_HOP_IP["nh2"][addr_type] + "/32",
+ "network": next_hop_ip["nh2"][addr_type] + "/32",
"next_hop": topo["routers"]["r2"]["links"]["r3"][addr_type],
},
]
@@ -712,7 +761,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"admin_distance": 10,
"delete": True,
}
@@ -735,13 +784,13 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"admin_distance": 10,
}
]
}
}
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
@@ -754,26 +803,28 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"admin_distance": 20,
}
]
}
}
- nh = [NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte2_nh2, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
step("Configure the static route with nexthop N1")
rte1_nh1 = {
@@ -781,7 +832,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"admin_distance": 10,
}
]
@@ -799,7 +850,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"admin_distance": 20,
"delete": True,
}
@@ -816,7 +867,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"On R2, after removing the static route with N2 , "
"route become active with nexthop N1 and vice versa."
)
- nh = NEXT_HOP_IP["nh2"][addr_type]
+ nh = next_hop_ip["nh2"][addr_type]
result = verify_rib(
tgen,
addr_type,
@@ -826,15 +877,19 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Configure the static route with nexthop N2")
rte2_nh2 = {
@@ -842,7 +897,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"admin_distance": 20,
}
]
@@ -862,7 +917,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
step("after shut of nexthop N1 , route become active with nexthop N2")
- nh = NEXT_HOP_IP["nh1"][addr_type]
+ nh = next_hop_ip["nh1"][addr_type]
result = verify_rib(
tgen,
addr_type,
@@ -872,15 +927,19 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
- nh = [NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte2_nh2, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("No shut the nexthop interface N1")
shutdown_bringup_interface(tgen, dut, intf, True)
@@ -889,13 +948,14 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"after shut of nexthop N1 , route become active "
"with nexthop N2 and vice versa."
)
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Shut nexthop interface N2")
intf = topo["routers"]["r2"]["links"]["r1-link1"]["interface"]
@@ -906,7 +966,7 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
" after shut of nexthop N1 , route become active with "
"nexthop N2 and vice versa."
)
- nh = NEXT_HOP_IP["nh2"][addr_type]
+ nh = next_hop_ip["nh2"][addr_type]
result = verify_rib(
tgen,
@@ -917,15 +977,19 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("No shut nexthop interface N2")
shutdown_bringup_interface(tgen, dut, intf, True)
@@ -939,33 +1003,34 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"admin_distance": 10,
}
]
}
}
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"admin_distance": 20,
}
]
}
}
- nh = [NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh2"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
@@ -978,8 +1043,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
dut = "r3"
protocol = "bgp"
@@ -994,8 +1060,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
dut = "r2"
step("Reload the FRR router")
@@ -1013,39 +1080,41 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh1"][addr_type],
+ "next_hop": next_hop_ip["nh1"][addr_type],
"admin_distance": 10,
}
]
}
}
- nh = [NEXT_HOP_IP["nh1"][addr_type]]
+ nh = [next_hop_ip["nh1"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
dut = "r3"
protocol = "bgp"
result = verify_bgp_rib(tgen, addr_type, dut, rte1_nh1, next_hop=nh)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
"static_routes": [
{
"network": NETWORK2[addr_type],
- "next_hop": NEXT_HOP_IP["nh2"][addr_type],
+ "next_hop": next_hop_ip["nh2"][addr_type],
"admin_distance": 20,
}
]
}
}
- nh = [NEXT_HOP_IP["nh2"][addr_type]]
+ nh = [next_hop_ip["nh2"][addr_type]]
dut = "r2"
protocol = "static"
result = verify_rib(
@@ -1058,14 +1127,16 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
dut = "r3"
protocol = "bgp"
result = verify_bgp_rib(tgen, addr_type, dut, rte2_nh2, next_hop=nh)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
result = verify_rib(
tgen,
@@ -1077,8 +1148,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
write_test_footer(tc_name)
@@ -1148,14 +1220,20 @@ def test_same_rte_from_bgp_static_p0_tc5_ebgp(request):
step("Verify on R3 , route receive on R3 BGP table ")
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
step("Verify route installed in the RIB and FIB of R3")
protocol = "bgp"
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
step(
"Configure 2 links/interfaces between R1 and R3 , keep one"
@@ -1206,15 +1284,19 @@ def test_same_rte_from_bgp_static_p0_tc5_ebgp(request):
)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in BGP RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in BGP RIB".format(
+ tc_name
+ )
protocol = "bgp"
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
step("Remove the static route on R3 configured with active" "interface")
for addr_type in ADDR_TYPES:
@@ -1249,15 +1331,19 @@ def test_same_rte_from_bgp_static_p0_tc5_ebgp(request):
)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in BGP RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in BGP RIB".format(
+ tc_name
+ )
protocol = "bgp"
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
write_test_footer(tc_name)
diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py
index 6649915dec..bbb4370a93 100644
--- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py
+++ b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo2_ebgp.py
@@ -314,8 +314,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
next_hop=nh_all[addr_type],
protocol=protocol,
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -338,8 +339,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
dut = "r3"
protocol = "bgp"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -384,8 +386,11 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed\nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed\nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
for addr_type in ADDR_TYPES:
@@ -410,8 +415,11 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed\nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed\nError: Routes are" " missing in RIB".format(
+ tc_name
+ )
protocol = "static"
step("Random shut of the nexthop interfaces")
@@ -455,8 +463,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
next_hop=nh_all[addr_type],
protocol=protocol,
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Remove random static route with all the nexthop")
dut = "r2"
@@ -493,8 +502,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
for addr_type in ADDR_TYPES:
input_dict_4 = {
@@ -546,8 +556,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
next_hop=nh_all[addr_type],
protocol=protocol,
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Remove the redistribute static knob")
for addr_type in ADDR_TYPES:
@@ -580,8 +591,11 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
write_test_footer(tc_name)
@@ -661,8 +675,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
@@ -679,8 +694,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request):
wait=2,
attempts=3,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -723,8 +739,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
@@ -770,8 +789,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
nh.append(NEXT_HOP_IP["nh" + str(nhp)][addr_type])
@@ -787,8 +807,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request):
wait=2,
attempts=3,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -815,8 +836,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -826,8 +850,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
dut = "r2"
protocol = "static"
@@ -955,8 +980,9 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
@@ -971,8 +997,9 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -1015,8 +1042,11 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
@@ -1062,8 +1092,9 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
nh.append(NEXT_HOP_IP["nh" + str(nhp)][addr_type])
@@ -1077,8 +1108,9 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -1105,8 +1137,11 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -1116,8 +1151,9 @@ def test_static_route_8nh_diff_AD_ebgp_ecmp_p1_tc8_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
dut = "r2"
protocol = "static"
@@ -1230,8 +1266,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Verify that highest AD nexthop are inactive")
nh = []
@@ -1249,8 +1286,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
wait=2,
attempts=3,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -1312,8 +1350,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
for addr_type in ADDR_TYPES:
@@ -1355,8 +1396,10 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- "lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ "lowest AD is missing in RIB".format(tc_name)
+ )
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -1383,8 +1426,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -1394,8 +1440,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
step("Remove random static route with all the nexthop")
for addr_type in ADDR_TYPES:
@@ -1434,8 +1481,10 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Route "
- " is still present in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Route "
+ " is still present in RIB".format(tc_name)
+ )
step("Reconfigure the deleted routes and verify they are installed")
for nhp in range(1, 9):
@@ -1460,8 +1509,10 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ebgp(request):
protocol = "static"
nh = NEXT_HOP_IP["nh1"][addr_type]
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
- assert result is True, "Testcase {} : Failed \nError: Route "
- " is still present in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route "
+ " is still present in RIB".format(tc_name)
+ )
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -1577,8 +1628,9 @@ def test_static_route_delete_p0_tc11_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Verify that highest AD nexthop are inactive")
nh = []
@@ -1594,8 +1646,9 @@ def test_static_route_delete_p0_tc11_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -1647,8 +1700,11 @@ def test_static_route_delete_p0_tc11_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
for addr_type in ADDR_TYPES:
for nhp in range(1, 9):
@@ -1715,8 +1771,12 @@ def test_static_route_delete_p0_tc11_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still active in RIB".format(
+ tc_name
+ )
+
write_test_footer(tc_name)
diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py
index 175a1123d7..8525e3655c 100644
--- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py
+++ b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo3_ebgp.py
@@ -297,8 +297,9 @@ def test_staticroute_with_ecmp_p0_tc3_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
input_dict_2 = {
@@ -351,8 +352,11 @@ def test_staticroute_with_ecmp_p0_tc3_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by" "one")
@@ -379,8 +383,9 @@ def test_staticroute_with_ecmp_p0_tc3_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -407,8 +412,11 @@ def test_staticroute_with_ecmp_p0_tc3_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -418,8 +426,9 @@ def test_staticroute_with_ecmp_p0_tc3_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -429,8 +438,9 @@ def test_staticroute_with_ecmp_p0_tc3_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
write_test_footer(tc_name)
@@ -509,8 +519,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
nh = []
for nhp in range(2, 9):
@@ -525,8 +537,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " with high AD are active in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes "
+ " with high AD are active in RIB".format(tc_name)
+ )
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -569,8 +583,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -613,8 +629,11 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by" "one")
for addr_type in ADDR_TYPES:
@@ -655,8 +674,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
nh = []
for nhp in range(2, 9):
@@ -671,8 +692,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " with high AD are active in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes "
+ " with high AD are active in RIB".format(tc_name)
+ )
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -699,8 +722,11 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -710,8 +736,9 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -740,8 +767,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
nh = []
for nhp in range(2, 9):
@@ -756,8 +785,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ebgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " with high AD are active in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes "
+ " with high AD are active in RIB".format(tc_name)
+ )
write_test_footer(tc_name)
@@ -818,18 +849,25 @@ def test_bgp_local_nexthop_p1_tc14_ebgp(request):
step("Verify R2 BGP table has IPv4 route")
dut = "r2"
result = verify_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB of R2".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB of R2".format(
+ tc_name
+ )
step(" Verify route did not install in the R3 BGP table, RIB/FIB")
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4, expected=False)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in BGP RIB of R2".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes is"
+ " still present in BGP RIB of R2".format(tc_name)
+ )
result = verify_rib(tgen, addr_type, dut, input_dict_4, expected=False)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB of R2".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes is"
+ " still present in RIB of R2".format(tc_name)
+ )
write_test_footer(tc_name)
@@ -889,8 +927,9 @@ def test_frr_intf_name_as_gw_gap_tc4_ebgp_p0(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, next_hop=nh
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
input_dict_nh = {
"r1": {
@@ -902,8 +941,9 @@ def test_frr_intf_name_as_gw_gap_tc4_ebgp_p0(request):
}
}
result = verify_ip_nht(tgen, input_dict_nh)
- assert result is True, "Testcase {} : Failed \nError: Nexthop is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Nexthop is" " missing in RIB".format(tc_name)
step(
"Shut / no shut IPv4 and IPv6 static next hop interface from"
@@ -925,8 +965,9 @@ def test_frr_intf_name_as_gw_gap_tc4_ebgp_p0(request):
next_hop=nh,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
shutdown_bringup_interface(tgen, dut, intf, True)
@@ -970,8 +1011,11 @@ def test_frr_intf_name_as_gw_gap_tc4_ebgp_p0(request):
next_hop=nh,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes" " still present in RIB".format(
+ tc_name
+ )
write_test_footer(tc_name)
@@ -1034,8 +1078,9 @@ def test_static_route_with_tag_p0_tc_13_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Configure route-map on R2 with allow tag1 and deny tag2")
@@ -1116,8 +1161,10 @@ def test_static_route_with_tag_p0_tc_13_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_0, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route with "
- "tag 4002 is still present in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Route with "
+ "tag 4002 is still present in RIB".format(tc_name)
+ )
dut = "r2"
input_dict_1 = {
@@ -1125,8 +1172,10 @@ def test_static_route_with_tag_p0_tc_13_ebgp(request):
}
result = verify_rib(tgen, addr_type, dut, input_dict_0, protocol=protocol)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- "tag 4001 is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ "tag 4001 is missing in RIB".format(tc_name)
+ )
step("Modify the route-map to allow tag2 and deny tag1")
# Create route map
@@ -1164,8 +1213,10 @@ def test_static_route_with_tag_p0_tc_13_ebgp(request):
}
result = verify_rib(tgen, addr_type, dut, input_dict_0, protocol=protocol)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- "tag 4002 is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ "tag 4002 is missing in RIB".format(tc_name)
+ )
input_dict_1 = {
"r2": {"static_routes": [{"network": NETWORK[addr_type], "tag": 4001}]}
@@ -1173,8 +1224,10 @@ def test_static_route_with_tag_p0_tc_13_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_1, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route with "
- "tag 4001 is still present in RIB".format(tc_name, result)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Route with "
+ "tag 4001 is still present in RIB".format(tc_name)
+ )
step("Configure one static route with 2 ECMP nexthop N1 and N2")
step("For N1 configure tag 1 and for N2 configure tag 2")
@@ -1213,8 +1266,9 @@ def test_static_route_with_tag_p0_tc_13_ebgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("shut/no shut of tag1 and tag2 nexthop")
diff --git a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py
index 5d4950a70e..812b39797f 100644
--- a/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py
+++ b/tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py
@@ -109,7 +109,7 @@ def setup_module(mod):
Set up the pytest environment.
* `mod`: module name
"""
- global topo
+
testsuite_run_time = time.asctime(time.localtime(time.time()))
logger.info("Testsuite start time: {}".format(testsuite_run_time))
logger.info("=" * 40)
@@ -135,8 +135,7 @@ def setup_module(mod):
pytest.skip(error_msg)
# Checking BGP convergence
- global BGP_CONVERGENCE
- global ADDR_TYPES
+
# Don't run this test if we have any failure.
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
@@ -173,7 +172,7 @@ def teardown_module(mod):
# Tests starting
#
#####################################################
-def static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
+def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
"""
Verify static route are blocked from route-map & prefix-list applied in BGP
nbrs
@@ -200,7 +199,7 @@ def static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
)
for addr_type in ADDR_TYPES:
- # Api call to modfiy BGP timerse
+ # Api call to modify BGP timers
input_dict = {
"r2": {
"bgp": {
@@ -241,8 +240,11 @@ def static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
step(" All BGP nbrs are down as authentication is mismatch on both" " the sides")
bgp_convergence = verify_bgp_convergence(tgen, topo, expected=False)
- assert bgp_convergence is not True, "Testcase {} : "
- "Failed \n BGP nbrs must be down. Error: {}".format(tc_name, bgp_convergence)
+ assert (
+ bgp_convergence is not True
+ ), "Testcase {} : " "Failed \n BGP nbrs must be down. Error: {}".format(
+ tc_name, bgp_convergence
+ )
step(
"Configure 4 IPv4 and 4 IPv6 nbrs with macthing password "
@@ -337,8 +339,9 @@ def static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
"show ip prefix list"
)
result = verify_prefix_lists(tgen, input_dict_2)
- assert result is not True, "Testcase {} : Failed \n"
- " Error: {}".format(tc_name, result)
+ assert result is not True, "Testcase {} : Failed \n" " Error: {}".format(
+ tc_name, result
+ )
step("Redistribute all the routes (connected, static)")
input_dict_2_r1 = {
@@ -588,8 +591,10 @@ def static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
result4 = verify_rib(
tgen, addr_type, dut, input_dict, protocol=protocol, expected=False
)
- assert result4 is not True, "Testcase {} : Failed , VM1 route is "
- "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ assert result4 is not True, (
+ "Testcase {} : Failed , VM1 route is "
+ "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ )
step(
"VM4 and VM6 IPV4 and IPv6 address are present in local and "
@@ -964,8 +969,10 @@ def static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
result4 = verify_rib(tgen, addr_type, dut, input_dict)
- assert result4 is True, "Testcase {} : Failed , VM1 route is "
- "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ assert result4 is True, (
+ "Testcase {} : Failed , VM1 route is "
+ "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ )
step("vm4 should be present in FRR2")
dut = "r2"
@@ -976,8 +983,10 @@ def static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
result4 = verify_rib(tgen, addr_type, dut, input_dict)
- assert result4 is True, "Testcase {} : Failed , VM1 route is "
- "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ assert result4 is True, (
+ "Testcase {} : Failed , VM1 route is "
+ "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ )
dut = "r3"
protocol = "bgp"
diff --git a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo1_ibgp.py b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo1_ibgp.py
index 8c2fdfca13..4e23a72423 100644
--- a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo1_ibgp.py
+++ b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo1_ibgp.py
@@ -242,8 +242,9 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Configure IBGP IPv4 peering between R2 and R3 router.")
step("Configure redistribute static in BGP on R2 router")
@@ -296,15 +297,19 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
nh = [NEXT_HOP_IP["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Configure the static route with nexthop N1")
@@ -359,15 +364,19 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
nh = [NEXT_HOP_IP["nh1"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Configure the static route with nexthop N2")
input_dict_4 = {
@@ -398,8 +407,9 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
nh = NEXT_HOP_IP["nh1"][addr_type]
result = verify_rib(
@@ -411,15 +421,21 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
dut = "r3"
result = verify_bgp_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
result = verify_rib(
tgen,
@@ -430,27 +446,35 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
next_hop=nh,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
dut = "r2"
nh = [NEXT_HOP_IP["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
dut = "r2"
step("No shut the nexthop interface N1")
@@ -465,8 +489,9 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Shut nexthop interface N2")
intf = topo["routers"]["r2"]["links"]["r1-link1"]["interface"]
@@ -488,8 +513,11 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
nh = [NEXT_HOP_IP["nh1"][addr_type]]
dut = "r2"
@@ -497,19 +525,24 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
step("No shut nexthop interface N2")
dut = "r2"
@@ -524,19 +557,24 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " missing in RIB".format(tc_name)
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -552,19 +590,26 @@ def test_static_route_2nh_p0_tc_1_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Route is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Route is" " still present in RIB".format(
+ tc_name
+ )
write_test_footer(tc_name)
@@ -636,8 +681,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
@@ -663,8 +709,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
step("Configure IBGP IPv4 peering between R2 and R3 router.")
step("Explicit route is added in R3 for R2 nexthop rechability")
@@ -753,8 +800,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
@@ -771,8 +819,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, rte2_nh2, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
step("Configure the static route with nexthop N1")
rte1_nh1 = {
@@ -825,15 +874,19 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
nh = [NEXT_HOP_IP["nh1"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Configure the static route with nexthop N2")
rte2_nh2 = {
@@ -871,15 +924,19 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
nh = [NEXT_HOP_IP["nh2"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte2_nh2, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("No shut the nexthop interface N1")
shutdown_bringup_interface(tgen, dut, intf, True)
@@ -893,8 +950,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("Shut nexthop interface N2")
intf = topo["routers"]["r2"]["links"]["r1-link1"]["interface"]
@@ -916,15 +974,19 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
nh = [NEXT_HOP_IP["nh1"][addr_type]]
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB".format(tc_name)
step("No shut nexthop interface N2")
shutdown_bringup_interface(tgen, dut, intf, True)
@@ -950,8 +1012,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
@@ -977,8 +1040,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
dut = "r3"
protocol = "bgp"
@@ -993,8 +1057,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
dut = "r2"
step("Reload the FRR router")
@@ -1024,14 +1089,16 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, rte1_nh1, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
dut = "r3"
protocol = "bgp"
result = verify_bgp_rib(tgen, addr_type, dut, rte1_nh1, next_hop=nh)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "missing in RIB".format(tc_name)
rte2_nh2 = {
"r2": {
@@ -1057,14 +1124,16 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
dut = "r3"
protocol = "bgp"
result = verify_bgp_rib(tgen, addr_type, dut, rte2_nh2, next_hop=nh)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
result = verify_rib(
tgen,
@@ -1076,8 +1145,9 @@ def test_static_route_2nh_admin_dist_p0_tc_2_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- "not active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes is" "not active in RIB".format(tc_name)
write_test_footer(tc_name)
diff --git a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py
index 644ddc02d4..ee0e01b411 100644
--- a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py
+++ b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo2_ibgp.py
@@ -318,8 +318,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
next_hop=nh_all[addr_type],
protocol=protocol,
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -342,8 +343,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
dut = "r3"
protocol = "bgp"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -388,8 +390,11 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed\nError: Routes is"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed\nError: Routes is" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
for addr_type in ADDR_TYPES:
@@ -414,8 +419,11 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed\nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed\nError: Routes are" " missing in RIB".format(
+ tc_name
+ )
protocol = "static"
step("Random shut of the nexthop interfaces")
@@ -423,7 +431,7 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
# Shutdown interface
dut = "r2"
step(
- " interface which is about to be shut no shut between r1 and r2 is " "%s",
+ " interface which is about to be shut no shut between r1 and r2 is %s",
topo["routers"]["r2"]["links"]["r1-link{}".format(randnum)]["interface"],
)
intf = topo["routers"]["r2"]["links"]["r1-link{}".format(randnum)]["interface"]
@@ -459,8 +467,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
next_hop=nh_all[addr_type],
protocol=protocol,
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Remove random static route with all the nexthop")
dut = "r2"
@@ -497,8 +506,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
for addr_type in ADDR_TYPES:
input_dict_4 = {
@@ -550,8 +560,9 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
next_hop=nh_all[addr_type],
protocol=protocol,
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Remove the redistribute static knob")
for addr_type in ADDR_TYPES:
@@ -584,8 +595,11 @@ def test_static_rte_with_8ecmp_nh_p1_tc9_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
write_test_footer(tc_name)
@@ -665,8 +679,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
@@ -683,8 +698,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
wait=2,
attempts=3,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -727,8 +743,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
@@ -774,8 +793,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
nh.append(NEXT_HOP_IP["nh" + str(nhp)][addr_type])
@@ -791,8 +811,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
wait=2,
attempts=3,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -819,8 +840,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -830,8 +854,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
protocol = "bgp"
# this is next hop reachability route in r3 as we are using ibgp
@@ -856,8 +881,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
for addr_type in ADDR_TYPES:
input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}}
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
protocol = "static"
dut = "r2"
@@ -866,7 +892,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {}: Failed \n " "Error: Routes are missing in RIB".format(tc_name)
+ ), "Testcase {}: Failed \n Error: Routes are missing in RIB".format(tc_name)
protocol = "bgp"
dut = "r3"
@@ -875,7 +901,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {}: Failed \n " "Error: Routes are missing in RIB".format(tc_name)
+ ), "Testcase {}: Failed \n Error: Routes are missing in RIB".format(tc_name)
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -888,7 +914,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ ), "Testcase {} : Failed \nError: Routes are still present in RIB".format(
tc_name
)
@@ -912,7 +938,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ ), "Testcase {} : Failed \nError: Routes are still present in RIB".format(
tc_name
)
@@ -923,7 +949,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ ), "Testcase {} : Failed \nError: Routes are still present in RIB".format(
tc_name
)
@@ -964,8 +990,10 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc6_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " strill present in RIB of R3".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes are"
+ " strill present in RIB of R3".format(tc_name)
+ )
write_test_footer(tc_name)
@@ -1060,8 +1088,9 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
@@ -1076,8 +1105,9 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -1120,8 +1150,11 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
@@ -1167,8 +1200,9 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
nh = []
for nhp in range(2, 9):
nh.append(NEXT_HOP_IP["nh" + str(nhp)][addr_type])
@@ -1182,8 +1216,9 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -1210,8 +1245,11 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -1221,8 +1259,9 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
dut = "r2"
protocol = "bgp"
@@ -1249,8 +1288,9 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
for addr_type in ADDR_TYPES:
input_dict_4 = {"r2": {"static_routes": [{"network": PREFIX1[addr_type]}]}}
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
protocol = "static"
dut = "r2"
@@ -1259,7 +1299,7 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {}: Failed \n " "Error: Routes are missing in RIB".format(tc_name)
+ ), "Testcase {}: Failed \n Error: Routes are missing in RIB".format(tc_name)
protocol = "bgp"
dut = "r3"
@@ -1268,7 +1308,7 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {}: Failed \n " "Error: Routes are missing in RIB".format(tc_name)
+ ), "Testcase {}: Failed \n Error: Routes are missing in RIB".format(tc_name)
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -1281,7 +1321,7 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ ), "Testcase {} : Failed \n Error: Routes are still present in RIB".format(
tc_name
)
@@ -1305,7 +1345,7 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ ), "Testcase {} : Failed \n Error: Routes are still present in RIB".format(
tc_name
)
@@ -1316,7 +1356,7 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
assert (
result is True
- ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ ), "Testcase {} : Failed \n Error: Routes are still present in RIB".format(
tc_name
)
@@ -1357,8 +1397,10 @@ def test_static_route_8nh_diff_AD_ibgp_ecmp_p1_tc7_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB of R3".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes are"
+ " still present in RIB of R3".format(tc_name)
+ )
write_test_footer(tc_name)
@@ -1453,8 +1495,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Verify that highest AD nexthop are inactive")
nh = []
@@ -1472,8 +1515,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
wait=2,
attempts=3,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -1535,8 +1579,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by one")
for addr_type in ADDR_TYPES:
@@ -1578,8 +1625,10 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- "lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ "lowest AD is missing in RIB".format(tc_name)
+ )
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -1606,8 +1655,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -1617,8 +1669,9 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
step("Remove random static route with all the nexthop")
for addr_type in ADDR_TYPES:
@@ -1657,8 +1710,10 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Route "
- " is still present in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Route "
+ " is still present in RIB".format(tc_name)
+ )
step("Reconfigure the deleted routes and verify they are installed")
for nhp in range(1, 9):
@@ -1683,8 +1738,10 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
protocol = "static"
nh = NEXT_HOP_IP["nh1"][addr_type]
result = verify_rib(tgen, addr_type, dut, input_dict_4, protocol=protocol)
- assert result is True, "Testcase {} : Failed \nError: Route "
- " is still present in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route "
+ " is still present in RIB".format(tc_name)
+ )
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -1704,9 +1761,7 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
)
assert (
result is True
- ), "Testcase {} : Failed \nError: Route " " is missing in RIB".format(
- tc_name
- )
+ ), "Testcase {} : Failed \nError: Route is missing in RIB".format(tc_name)
step("Remove the redistribute static knob")
for addr_type in ADDR_TYPES:
@@ -1750,8 +1805,11 @@ def test_static_route_8nh_diff_AD_bgp_ecmp_p1_tc10_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
write_test_footer(tc_name)
@@ -1845,8 +1903,9 @@ def test_static_route_delete_p0_tc11_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Verify that highest AD nexthop are inactive")
nh = []
@@ -1862,8 +1921,9 @@ def test_static_route_delete_p0_tc11_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " are missing in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes " " are missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -1915,8 +1975,11 @@ def test_static_route_delete_p0_tc11_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, protocol=protocol, expected=False
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
for addr_type in ADDR_TYPES:
for nhp in range(1, 9):
@@ -1983,8 +2046,12 @@ def test_static_route_delete_p0_tc11_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still active in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still active in RIB".format(
+ tc_name
+ )
+
write_test_footer(tc_name)
diff --git a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo3_ibgp.py b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo3_ibgp.py
index 8f9d88a442..c84c88ac35 100644
--- a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo3_ibgp.py
+++ b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo3_ibgp.py
@@ -298,8 +298,9 @@ def test_staticroute_with_ecmp_p0_tc3_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
input_dict_2 = {
@@ -352,8 +353,11 @@ def test_staticroute_with_ecmp_p0_tc3_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by" "one")
@@ -380,8 +384,9 @@ def test_staticroute_with_ecmp_p0_tc3_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -408,8 +413,11 @@ def test_staticroute_with_ecmp_p0_tc3_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -419,8 +427,9 @@ def test_staticroute_with_ecmp_p0_tc3_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -430,8 +439,9 @@ def test_staticroute_with_ecmp_p0_tc3_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \nError: Routes are"
- " missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes are" " missing in RIB".format(tc_name)
write_test_footer(tc_name)
@@ -510,8 +520,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
nh = []
for nhp in range(2, 9):
@@ -526,8 +538,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " with high AD are active in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes "
+ " with high AD are active in RIB".format(tc_name)
+ )
step("Configure redistribute static in BGP on R2 router")
for addr_type in ADDR_TYPES:
@@ -570,8 +584,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
step(
"Remove the static route configured with nexthop N1 to N8, one"
@@ -614,8 +630,11 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \nError: Routes are" " still present in RIB".format(
+ tc_name
+ )
step("Configure the static route with nexthop N1 to N8, one by" "one")
for addr_type in ADDR_TYPES:
@@ -656,8 +675,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
nh = []
for nhp in range(2, 9):
@@ -672,8 +693,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " with high AD are active in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes "
+ " with high AD are active in RIB".format(tc_name)
+ )
step("Random shut of the nexthop interfaces")
randnum = random.randint(0, 7)
@@ -700,8 +723,11 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \n"
- "Error: Routes are still present in RIB".format(tc_name)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n" "Error: Routes are still present in RIB".format(
+ tc_name
+ )
step("Random no shut of the nexthop interfaces")
for addr_type in ADDR_TYPES:
@@ -711,8 +737,9 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_5, next_hop=nhip, protocol=protocol
)
- assert result is True, "Testcase {} : Failed \n"
- "Error: Routes are missing in RIB".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n" "Error: Routes are missing in RIB".format(tc_name)
step("Reload the FRR router")
# stop/start -> restart FRR router and verify
@@ -741,8 +768,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
result = verify_rib(
tgen, addr_type, dut, input_dict_4, next_hop=nh, protocol=protocol, fib=True
)
- assert result is True, "Testcase {} : Failed \nError: Route with "
- " lowest AD is missing in RIB".format(tc_name)
+ assert result is True, (
+ "Testcase {} : Failed \nError: Route with "
+ " lowest AD is missing in RIB".format(tc_name)
+ )
nh = []
for nhp in range(2, 9):
@@ -757,8 +786,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
fib=True,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes "
- " with high AD are active in RIB".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes "
+ " with high AD are active in RIB".format(tc_name)
+ )
step("Remove the redistribute static knob")
@@ -796,8 +827,10 @@ def test_staticroute_with_ecmp_with_diff_AD_p0_tc4_ibgp(request):
protocol=protocol,
expected=False,
)
- assert result is not True, "Testcase {} : Failed \nError: Routes are"
- " strill present in RIB of R3".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes are"
+ " still present in RIB of R3".format(tc_name)
+ )
write_test_footer(tc_name)
@@ -858,18 +891,25 @@ def test_bgp_local_nexthop_p1_tc14_ibgp(request):
step("Verify R2 BGP table has IPv4 route")
dut = "r2"
result = verify_rib(tgen, addr_type, dut, input_dict_4)
- assert result is True, "Testcase {} : Failed \nError: Routes is"
- " missing in RIB of R2".format(tc_name)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \nError: Routes is" " missing in RIB of R2".format(
+ tc_name
+ )
step(" Verify route did not install in the R3 BGP table, RIB/FIB")
dut = "r3"
result = verify_bgp_rib(tgen, addr_type, dut, input_dict_4, expected=False)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in BGP RIB of R2".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes is"
+ " still present in BGP RIB of R2".format(tc_name)
+ )
result = verify_rib(tgen, addr_type, dut, input_dict_4, expected=False)
- assert result is not True, "Testcase {} : Failed \nError: Routes is"
- " still present in RIB of R2".format(tc_name)
+ assert result is not True, (
+ "Testcase {} : Failed \nError: Routes is"
+ " still present in RIB of R2".format(tc_name)
+ )
write_test_footer(tc_name)
diff --git a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py
index 09c437c3c4..a82ee64538 100644
--- a/tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py
+++ b/tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py
@@ -239,8 +239,11 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
step(" All BGP nbrs are down as authentication is mismatch on both" " the sides")
bgp_convergence = verify_bgp_convergence(tgen, topo, expected=False)
- assert bgp_convergence is not True, "Testcase {} : "
- "Failed \n BGP nbrs must be down. Error: {}".format(tc_name, bgp_convergence)
+ assert (
+ bgp_convergence is not True
+ ), "Testcase {} : " "Failed \n BGP nbrs must be down. Error: {}".format(
+ tc_name, bgp_convergence
+ )
step(
"Configure 4 IPv4 and 4 IPv6 nbrs with macthing password "
@@ -335,8 +338,9 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
"show ip prefix list"
)
result = verify_prefix_lists(tgen, input_dict_2)
- assert result is not True, "Testcase {} : Failed \n"
- " Error: {}".format(tc_name, result)
+ assert result is not True, "Testcase {} : Failed \n" " Error: {}".format(
+ tc_name, result
+ )
step("Redistribute all the routes (connected, static)")
input_dict_2_r1 = {
@@ -586,8 +590,10 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
result4 = verify_rib(
tgen, addr_type, dut, input_dict, protocol=protocol, expected=False
)
- assert result4 is not True, "Testcase {} : Failed , VM1 route is "
- "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ assert result4 is not True, (
+ "Testcase {} : Failed , VM1 route is "
+ "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ )
step(
"VM4 and VM6 IPV4 and IPv6 address are present in local and "
@@ -962,8 +968,10 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
result4 = verify_rib(tgen, addr_type, dut, input_dict)
- assert result4 is True, "Testcase {} : Failed , VM1 route is "
- "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ assert result4 is True, (
+ "Testcase {} : Failed , VM1 route is "
+ "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ )
step("vm4 should be present in FRR2")
dut = "r2"
@@ -974,8 +982,10 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
result4 = verify_rib(tgen, addr_type, dut, input_dict)
- assert result4 is True, "Testcase {} : Failed , VM1 route is "
- "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ assert result4 is True, (
+ "Testcase {} : Failed , VM1 route is "
+ "not filtered out via prefix list. \n Error: {}".format(tc_name, result4)
+ )
dut = "r3"
protocol = "bgp"
diff --git a/tools/frr-reload.py b/tools/frr-reload.py
index a617c0a9c5..c28a971525 100755
--- a/tools/frr-reload.py
+++ b/tools/frr-reload.py
@@ -423,17 +423,6 @@ class Config(object):
re_lege.group(2),
re_lege.group(4),
)
- re_lege = re.search(r"(.*)ge\s+(\d+)\s+le\s+(\d+)(.*)", legestr)
-
- if re_lege and (
- (re_key_rt.group(1) == "ip" and re_lege.group(3) == "32")
- or (re_key_rt.group(1) == "ipv6" and re_lege.group(3) == "128")
- ):
- legestr = "%sge %s%s" % (
- re_lege.group(1),
- re_lege.group(2),
- re_lege.group(4),
- )
key[0] = "%s prefix-list%s%s %s%s" % (
re_key_rt.group(1),
diff --git a/tools/subdir.am b/tools/subdir.am
index e159d82d4c..6a03a23baa 100644
--- a/tools/subdir.am
+++ b/tools/subdir.am
@@ -34,9 +34,11 @@ tools_gen_yang_deviations_SOURCES = tools/gen_yang_deviations.c
tools_gen_yang_deviations_LDADD = lib/libfrr.la $(LIBYANG_LIBS)
tools_ssd_SOURCES = tools/start-stop-daemon.c
+tools_ssd_CPPFLAGS =
# don't bother autoconf'ing these for a simple optional tool
llvm_version = $(shell echo __clang_major__ | $(CC) -xc -P -E -)
+tools_frr_llvm_cg_CPPFLAGS = $(CPPFLAGS_BASE)
tools_frr_llvm_cg_CFLAGS = $(AM_CFLAGS) `llvm-config-$(llvm_version) --cflags`
tools_frr_llvm_cg_LDFLAGS = `llvm-config-$(llvm_version) --ldflags --libs`
tools_frr_llvm_cg_SOURCES = \
diff --git a/bgpd/valgrind.supp b/tools/valgrind.supp
index 31f2477a58..fbfb640b2a 100644
--- a/bgpd/valgrind.supp
+++ b/tools/valgrind.supp
@@ -16,3 +16,17 @@
obj:/usr/lib/x86_64-linux-gnu/libyang.so.1.9.2
fun:ly_load_plugins
}
+{
+ <zprivs_init leak in a function we do not control>
+ Memcheck:Leak
+ fun:calloc
+ fun:cap_init
+ fun:zprivs_caps_init
+}
+{
+ <sqlite3 leak in a function we do not control>
+ Memcheck:Leak
+ fun:malloc
+ ...
+ fun:sqlite3_step
+}
diff --git a/vtysh/extract.pl.in b/vtysh/extract.pl.in
index af974771cc..37ae0ab189 100755
--- a/vtysh/extract.pl.in
+++ b/vtysh/extract.pl.in
@@ -119,13 +119,6 @@ sub scan_file {
$protocol = "VTYSH_RIPD|VTYSH_OSPFD|VTYSH_BGPD|VTYSH_ZEBRA|VTYSH_PIMD|VTYSH_EIGRPD|VTYSH_BABELD|VTYSH_ISISD|VTYSH_FABRICD";
}
}
- elsif ($file =~ /lib\/distribute\.c$/) {
- if ($defun_array[1] =~ m/ipv6/) {
- $protocol = "VTYSH_RIPNGD";
- } else {
- $protocol = "VTYSH_RIPD";
- }
- }
elsif ($file =~ /lib\/if_rmap\.c$/) {
if ($defun_array[1] =~ m/ipv6/) {
$protocol = "VTYSH_RIPNGD";
diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c
index a1417430ec..336bd44a49 100644
--- a/vtysh/vtysh.c
+++ b/vtysh/vtysh.c
@@ -1976,8 +1976,8 @@ DEFUNSH(VTYSH_BABELD, router_babel, router_babel_cmd, "router babel",
#endif /* HAVE_BABELD */
#ifdef HAVE_OSPF6D
-DEFUNSH(VTYSH_OSPF6D, router_ospf6, router_ospf6_cmd, "router ospf6",
- ROUTER_STR OSPF6_STR)
+DEFUNSH(VTYSH_OSPF6D, router_ospf6, router_ospf6_cmd, "router ospf6 [vrf NAME]",
+ ROUTER_STR OSPF6_STR VRF_CMD_HELP_STR)
{
vty->node = OSPF6_NODE;
return CMD_SUCCESS;
diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c
index 3414c764ce..f92b0e920b 100644
--- a/vtysh/vtysh_config.c
+++ b/vtysh/vtysh_config.c
@@ -380,6 +380,9 @@ void vtysh_config_parse_line(void *arg, const char *line)
strlen("bgp large-community-list"))
== 0)
config = config_get(COMMUNITY_LIST_NODE, line);
+ else if (strncmp(line, "bgp community alias",
+ strlen("bgp community alias")) == 0)
+ config = config_get(COMMUNITY_ALIAS_NODE, line);
else if (strncmp(line, "ip route", strlen("ip route")) == 0)
config = config_get(IP_NODE, line);
else if (strncmp(line, "ipv6 route", strlen("ipv6 route")) == 0)
@@ -452,11 +455,12 @@ void vtysh_config_parse_line(void *arg, const char *line)
#define NO_DELIMITER(I) \
((I) == ACCESS_NODE || (I) == PREFIX_NODE || (I) == IP_NODE \
|| (I) == AS_LIST_NODE || (I) == COMMUNITY_LIST_NODE \
- || (I) == ACCESS_IPV6_NODE || (I) == ACCESS_MAC_NODE \
- || (I) == PREFIX_IPV6_NODE || (I) == FORWARDING_NODE \
- || (I) == DEBUG_NODE || (I) == AAA_NODE || (I) == VRF_DEBUG_NODE \
- || (I) == NORTHBOUND_DEBUG_NODE || (I) == RMAP_DEBUG_NODE \
- || (I) == RESOLVER_DEBUG_NODE || (I) == MPLS_NODE)
+ || (I) == COMMUNITY_ALIAS_NODE || (I) == ACCESS_IPV6_NODE \
+ || (I) == ACCESS_MAC_NODE || (I) == PREFIX_IPV6_NODE \
+ || (I) == FORWARDING_NODE || (I) == DEBUG_NODE || (I) == AAA_NODE \
+ || (I) == VRF_DEBUG_NODE || (I) == NORTHBOUND_DEBUG_NODE \
+ || (I) == RMAP_DEBUG_NODE || (I) == RESOLVER_DEBUG_NODE \
+ || (I) == MPLS_NODE)
/* Display configuration to file pointer. */
void vtysh_config_dump(void)
diff --git a/yang/frr-isisd.yang b/yang/frr-isisd.yang
index 46ad8d3971..4653e6f009 100644
--- a/yang/frr-isisd.yang
+++ b/yang/frr-isisd.yang
@@ -493,6 +493,13 @@ module frr-isisd {
description
"Node protection is provided by the alternate.";
}
+ leaf link-fallback {
+ type boolean;
+ must ". = 'false' or ../enable = 'true'";
+ default false;
+ description
+ "Fallback to link protection.";
+ }
}
}
diff --git a/yang/frr-pathd.yang b/yang/frr-pathd.yang
index 03f0d3b024..30f9875a6d 100644
--- a/yang/frr-pathd.yang
+++ b/yang/frr-pathd.yang
@@ -84,51 +84,71 @@ module frr-pathd {
leaf index {
type uint32;
description "Segment index";
- }
- leaf sid-value {
- type rt-types:mpls-label;
+ }
+ leaf sid-value {
+ type rt-types:mpls-label;
+ description "MPLS label value";
+ }
+ container nai {
+ presence "The segment has a Node or Adjacency Identifier";
+ leaf type {
+ description "NAI type";
mandatory true;
- description "MPLS label value";
- }
- container nai {
- presence "The segement has a Node or Adjacency Identifier";
- leaf type {
- description "NAI type";
- mandatory true;
- type enumeration {
- enum ipv4_node {
- value 1;
- description "IPv4 node identifier";
- }
- enum ipv6_node {
- value 2;
- description "IPv6 node identifier";
- }
- enum ipv4_adjacency {
- value 3;
- description "IPv4 adjacency";
- }
- enum ipv6_adjacency {
- value 4;
- description "IPv6 adjacency";
- }
- enum ipv4_unnumbered_adjacency {
- value 5;
- description "IPv4 unnumbered adjacency";
- }
+ type enumeration {
+ enum ipv4_node {
+ value 1;
+ description "IPv4 node identifier";
+ }
+ enum ipv6_node {
+ value 2;
+ description "IPv6 node identifier";
+ }
+ enum ipv4_adjacency {
+ value 3;
+ description "IPv4 adjacency";
+ }
+ enum ipv6_adjacency {
+ value 4;
+ description "IPv6 adjacency";
+ }
+ enum ipv4_unnumbered_adjacency {
+ value 5;
+ description "IPv4 unnumbered adjacency";
+ }
+ enum ipv4_local_iface {
+ value 7;
+ description "IPv4 prefix with local interface id";
+ }
+ enum ipv6_local_iface {
+ value 8;
+ description "IPv6 prefix with local interface id";
+ }
+ enum ipv4_algo {
+ value 9;
+ description "IPv4 prefix with optional algorithm";
+ }
+ enum ipv6_algo {
+ value 10;
+ description "IPv6 prefix with optional algorithm";
}
}
- leaf local-address {
- type inet:ip-address;
- mandatory true;
- }
- leaf local-interface {
- type uint32;
- mandatory true;
- when "../type = 'ipv4_unnumbered_adjacency'";
- }
- leaf remote-address {
- type inet:ip-address;
+ }
+ leaf local-address {
+ type inet:ip-address;
+ mandatory true;
+ }
+ leaf local-prefix-len {
+ type uint8;
+ mandatory true;
+ when "../type = 'ipv4_local_iface' or ../type = 'ipv6_local_iface' or ../type = 'ipv4_algo' or ../type = 'ipv6_algo'";
+ }
+ leaf local-interface {
+ type uint32;
+ mandatory true;
+ when "../type = 'ipv4_local_iface' or ../type = 'ipv6_local_iface' or ../type = 'ipv4_unnumbered_adjacency'";
+ }
+ leaf remote-address {
+ type inet:ip-address;
mandatory true;
when "../type = 'ipv4_adjacency' or ../type = 'ipv6_adjacency' or ../type = 'ipv4_unnumbered_adjacency'";
}
@@ -137,6 +157,11 @@ module frr-pathd {
mandatory true;
when "../type = 'ipv4_unnumbered_adjacency'";
}
+ leaf algorithm {
+ type uint8;
+ mandatory true;
+ when "../type = 'ipv4_algo' or ../type = 'ipv6_algo'";
+ }
}
}
}
diff --git a/zebra/connected.c b/zebra/connected.c
index 6f405ca1bb..883334d509 100644
--- a/zebra/connected.c
+++ b/zebra/connected.c
@@ -38,7 +38,6 @@
#include "zebra/connected.h"
#include "zebra/rtadv.h"
#include "zebra/zebra_mpls.h"
-#include "zebra/debug.h"
#include "zebra/zebra_errors.h"
#include "zebra/zebra_router.h"
@@ -208,6 +207,9 @@ void connected_up(struct interface *ifp, struct connected *ifc)
struct zebra_vrf *zvrf;
uint32_t metric;
uint32_t flags = 0;
+ uint32_t count = 0;
+ struct listnode *cnode;
+ struct connected *c;
zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
if (!zvrf) {
@@ -220,6 +222,9 @@ void connected_up(struct interface *ifp, struct connected *ifc)
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
return;
+ /* Ensure 'down' flag is cleared */
+ UNSET_FLAG(ifc->conf, ZEBRA_IFC_DOWN);
+
PREFIX_COPY(&p, CONNECTED_PREFIX(ifc));
/* Apply mask to the network. */
@@ -263,6 +268,28 @@ void connected_up(struct interface *ifp, struct connected *ifc)
if (zrouter.asic_offloaded)
flags |= ZEBRA_FLAG_OFFLOADED;
+ /*
+ * It's possible to add the same network and mask
+ * to an interface over and over. This would
+ * result in an equivalent number of connected
+ * routes. Just add one connected route in
+ * for all the addresses on an interface that
+ * resolve to the same network and mask
+ */
+ for (ALL_LIST_ELEMENTS_RO(ifp->connected, cnode, c)) {
+ struct prefix cp;
+
+ PREFIX_COPY(&cp, CONNECTED_PREFIX(c));
+ apply_mask(&cp);
+
+ if (prefix_same(&cp, &p) &&
+ !CHECK_FLAG(c->conf, ZEBRA_IFC_DOWN))
+ count++;
+
+ if (count >= 2)
+ return;
+ }
+
rib_add(afi, SAFI_UNICAST, zvrf->vrf->vrf_id, ZEBRA_ROUTE_CONNECT, 0,
flags, &p, NULL, &nh, 0, zvrf->table_id, metric, 0, 0, 0);
@@ -358,12 +385,15 @@ void connected_down(struct interface *ifp, struct connected *ifc)
.vrf_id = ifp->vrf_id,
};
struct zebra_vrf *zvrf;
+ uint32_t count = 0;
+ struct listnode *cnode;
+ struct connected *c;
zvrf = zebra_vrf_lookup_by_id(ifp->vrf_id);
if (!zvrf) {
flog_err(
EC_ZEBRA_VRF_NOT_FOUND,
- "%s: Received Up for interface but no associated zvrf: %d",
+ "%s: Received Down for interface but no associated zvrf: %d",
__func__, ifp->vrf_id);
return;
}
@@ -371,6 +401,17 @@ void connected_down(struct interface *ifp, struct connected *ifc)
if (!CHECK_FLAG(ifc->conf, ZEBRA_IFC_REAL))
return;
+ /* Skip if we've already done this; this can happen if we have a
+ * config change that takes an interface down, then we receive kernel
+ * notifications about the downed interface and its addresses.
+ */
+ if (CHECK_FLAG(ifc->conf, ZEBRA_IFC_DOWN)) {
+ if (IS_ZEBRA_DEBUG_RIB)
+ zlog_debug("%s: ifc %p, %pFX already DOWN",
+ __func__, ifc, ifc->address);
+ return;
+ }
+
PREFIX_COPY(&p, CONNECTED_PREFIX(ifc));
/* Apply mask to the network. */
@@ -396,6 +437,30 @@ void connected_down(struct interface *ifp, struct connected *ifc)
break;
}
+ /* Mark the address as 'down' */
+ SET_FLAG(ifc->conf, ZEBRA_IFC_DOWN);
+
+ /*
+ * It's possible to have X number of addresses
+ * on a interface that all resolve to the same
+ * network and mask. Find them and just
+ * allow the deletion when are removing the last
+ * one.
+ */
+ for (ALL_LIST_ELEMENTS_RO(ifp->connected, cnode, c)) {
+ struct prefix cp;
+
+ PREFIX_COPY(&cp, CONNECTED_PREFIX(c));
+ apply_mask(&cp);
+
+ if (prefix_same(&p, &cp) &&
+ !CHECK_FLAG(c->conf, ZEBRA_IFC_DOWN))
+ count++;
+
+ if (count >= 1)
+ return;
+ }
+
/*
* Same logic as for connected_up(): push the changes into the
* head.
diff --git a/zebra/debug.c b/zebra/debug.c
index a8ddf6ba64..88a3d98815 100644
--- a/zebra/debug.c
+++ b/zebra/debug.c
@@ -178,7 +178,7 @@ DEFPY (debug_zebra_mpls,
return CMD_SUCCESS;
}
-DEFUN (debug_zebra_vxlan,
+DEFPY (debug_zebra_vxlan,
debug_zebra_vxlan_cmd,
"debug zebra vxlan",
DEBUG_STR
diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c
index e7d8b318e0..c2b4dcc52f 100644
--- a/zebra/if_netlink.c
+++ b/zebra/if_netlink.c
@@ -29,10 +29,13 @@
* Reference - https://sourceware.org/ml/libc-alpha/2013-01/msg00599.html
*/
#define _LINUX_IN6_H
+#define _LINUX_IF_H
+#define _LINUX_IP_H
#include <netinet/if_ether.h>
#include <linux/if_bridge.h>
#include <linux/if_link.h>
+#include <linux/if_tunnel.h>
#include <net/if_arp.h>
#include <linux/sockios.h>
#include <linux/ethtool.h>
@@ -70,6 +73,7 @@
#include "zebra/zebra_errors.h"
#include "zebra/zebra_vxlan.h"
#include "zebra/zebra_evpn_mh.h"
+#include "zebra/zebra_l2.h"
extern struct zebra_privs_t zserv_privs;
@@ -289,11 +293,10 @@ static void netlink_determine_zebra_iftype(const char *kind,
*zif_type = ZEBRA_IF_BOND;
else if (strcmp(kind, "bond_slave") == 0)
*zif_type = ZEBRA_IF_BOND_SLAVE;
+ else if (strcmp(kind, "gre") == 0)
+ *zif_type = ZEBRA_IF_GRE;
}
-#define parse_rtattr_nested(tb, max, rta) \
- netlink_parse_rtattr((tb), (max), RTA_DATA(rta), RTA_PAYLOAD(rta))
-
static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb,
uint32_t ns_id, const char *name)
{
@@ -306,8 +309,7 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb,
ifi = NLMSG_DATA(h);
- memset(linkinfo, 0, sizeof(linkinfo));
- parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb);
+ netlink_parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb);
if (!linkinfo[IFLA_INFO_DATA]) {
if (IS_ZEBRA_DEBUG_KERNEL)
@@ -317,8 +319,8 @@ static void netlink_vrf_change(struct nlmsghdr *h, struct rtattr *tb,
return;
}
- memset(attr, 0, sizeof(attr));
- parse_rtattr_nested(attr, IFLA_VRF_MAX, linkinfo[IFLA_INFO_DATA]);
+ netlink_parse_rtattr_nested(attr, IFLA_VRF_MAX,
+ linkinfo[IFLA_INFO_DATA]);
if (!attr[IFLA_VRF_TABLE]) {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
@@ -458,14 +460,87 @@ uint32_t kernel_get_speed(struct interface *ifp, int *error)
return get_iflink_speed(ifp, error);
}
+static ssize_t
+netlink_gre_set_msg_encoder(struct zebra_dplane_ctx *ctx, void *buf,
+ size_t buflen)
+{
+ struct {
+ struct nlmsghdr n;
+ struct ifinfomsg ifi;
+ char buf[];
+ } *req = buf;
+ uint32_t link_idx;
+ unsigned int mtu;
+ struct rtattr *rta_info, *rta_data;
+ const struct zebra_l2info_gre *gre_info;
+
+ if (buflen < sizeof(*req))
+ return 0;
+ memset(req, 0, sizeof(*req));
+
+ req->n.nlmsg_type = RTM_NEWLINK;
+ req->n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg));
+ req->n.nlmsg_flags = NLM_F_REQUEST;
+
+ req->ifi.ifi_index = dplane_ctx_get_ifindex(ctx);
+
+ gre_info = dplane_ctx_gre_get_info(ctx);
+ if (!gre_info)
+ return 0;
+
+ req->ifi.ifi_change = 0xFFFFFFFF;
+ link_idx = dplane_ctx_gre_get_link_ifindex(ctx);
+ mtu = dplane_ctx_gre_get_mtu(ctx);
+
+ if (mtu && !nl_attr_put32(&req->n, buflen, IFLA_MTU, mtu))
+ return 0;
+
+ rta_info = nl_attr_nest(&req->n, buflen, IFLA_LINKINFO);
+ if (!rta_info)
+ return 0;
+
+ if (!nl_attr_put(&req->n, buflen, IFLA_INFO_KIND, "gre", 3))
+ return 0;
+
+ rta_data = nl_attr_nest(&req->n, buflen, IFLA_INFO_DATA);
+ if (!rta_data)
+ return 0;
+
+ if (!nl_attr_put32(&req->n, buflen, IFLA_GRE_LINK, link_idx))
+ return 0;
+
+ if (gre_info->vtep_ip.s_addr &&
+ !nl_attr_put32(&req->n, buflen, IFLA_GRE_LOCAL,
+ gre_info->vtep_ip.s_addr))
+ return 0;
+
+ if (gre_info->vtep_ip_remote.s_addr &&
+ !nl_attr_put32(&req->n, buflen, IFLA_GRE_REMOTE,
+ gre_info->vtep_ip_remote.s_addr))
+ return 0;
+
+ if (gre_info->ikey &&
+ !nl_attr_put32(&req->n, buflen, IFLA_GRE_IKEY,
+ gre_info->ikey))
+ return 0;
+ if (gre_info->okey &&
+ !nl_attr_put32(&req->n, buflen, IFLA_GRE_IKEY,
+ gre_info->okey))
+ return 0;
+
+ nl_attr_nest_end(&req->n, rta_data);
+ nl_attr_nest_end(&req->n, rta_info);
+
+ return NLMSG_ALIGN(req->n.nlmsg_len);
+}
+
static int netlink_extract_bridge_info(struct rtattr *link_data,
struct zebra_l2info_bridge *bridge_info)
{
struct rtattr *attr[IFLA_BR_MAX + 1];
memset(bridge_info, 0, sizeof(*bridge_info));
- memset(attr, 0, sizeof(attr));
- parse_rtattr_nested(attr, IFLA_BR_MAX, link_data);
+ netlink_parse_rtattr_nested(attr, IFLA_BR_MAX, link_data);
if (attr[IFLA_BR_VLAN_FILTERING])
bridge_info->vlan_aware =
*(uint8_t *)RTA_DATA(attr[IFLA_BR_VLAN_FILTERING]);
@@ -479,8 +554,7 @@ static int netlink_extract_vlan_info(struct rtattr *link_data,
vlanid_t vid_in_msg;
memset(vlan_info, 0, sizeof(*vlan_info));
- memset(attr, 0, sizeof(attr));
- parse_rtattr_nested(attr, IFLA_VLAN_MAX, link_data);
+ netlink_parse_rtattr_nested(attr, IFLA_VLAN_MAX, link_data);
if (!attr[IFLA_VLAN_ID]) {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug("IFLA_VLAN_ID missing from VLAN IF message");
@@ -492,6 +566,47 @@ static int netlink_extract_vlan_info(struct rtattr *link_data,
return 0;
}
+static int netlink_extract_gre_info(struct rtattr *link_data,
+ struct zebra_l2info_gre *gre_info)
+{
+ struct rtattr *attr[IFLA_GRE_MAX + 1];
+
+ memset(gre_info, 0, sizeof(*gre_info));
+ memset(attr, 0, sizeof(attr));
+ netlink_parse_rtattr_nested(attr, IFLA_GRE_MAX, link_data);
+
+ if (!attr[IFLA_GRE_LOCAL]) {
+ if (IS_ZEBRA_DEBUG_KERNEL)
+ zlog_debug(
+ "IFLA_GRE_LOCAL missing from GRE IF message");
+ } else
+ gre_info->vtep_ip =
+ *(struct in_addr *)RTA_DATA(attr[IFLA_GRE_LOCAL]);
+ if (!attr[IFLA_GRE_REMOTE]) {
+ if (IS_ZEBRA_DEBUG_KERNEL)
+ zlog_debug(
+ "IFLA_GRE_REMOTE missing from GRE IF message");
+ } else
+ gre_info->vtep_ip_remote =
+ *(struct in_addr *)RTA_DATA(attr[IFLA_GRE_REMOTE]);
+
+ if (!attr[IFLA_GRE_LINK]) {
+ if (IS_ZEBRA_DEBUG_KERNEL)
+ zlog_debug("IFLA_GRE_LINK missing from GRE IF message");
+ } else {
+ gre_info->ifindex_link =
+ *(ifindex_t *)RTA_DATA(attr[IFLA_GRE_LINK]);
+ if (IS_ZEBRA_DEBUG_KERNEL)
+ zlog_debug("IFLA_GRE_LINK obtained is %u",
+ gre_info->ifindex_link);
+ }
+ if (attr[IFLA_GRE_IKEY])
+ gre_info->ikey = *(uint32_t *)RTA_DATA(attr[IFLA_GRE_IKEY]);
+ if (attr[IFLA_GRE_OKEY])
+ gre_info->okey = *(uint32_t *)RTA_DATA(attr[IFLA_GRE_OKEY]);
+ return 0;
+}
+
static int netlink_extract_vxlan_info(struct rtattr *link_data,
struct zebra_l2info_vxlan *vxl_info)
{
@@ -501,8 +616,7 @@ static int netlink_extract_vxlan_info(struct rtattr *link_data,
ifindex_t ifindex_link;
memset(vxl_info, 0, sizeof(*vxl_info));
- memset(attr, 0, sizeof(attr));
- parse_rtattr_nested(attr, IFLA_VXLAN_MAX, link_data);
+ netlink_parse_rtattr_nested(attr, IFLA_VXLAN_MAX, link_data);
if (!attr[IFLA_VXLAN_ID]) {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(
@@ -572,6 +686,16 @@ static void netlink_interface_update_l2info(struct interface *ifp,
vxlan_info.ifindex_link)
zebra_if_update_link(ifp, vxlan_info.ifindex_link,
link_nsid);
+ } else if (IS_ZEBRA_IF_GRE(ifp)) {
+ struct zebra_l2info_gre gre_info;
+
+ netlink_extract_gre_info(link_data, &gre_info);
+ gre_info.link_nsid = link_nsid;
+ zebra_l2_greif_add_update(ifp, &gre_info, add);
+ if (link_nsid != NS_UNKNOWN &&
+ gre_info.ifindex_link)
+ zebra_if_update_link(ifp, gre_info.ifindex_link,
+ link_nsid);
}
}
@@ -585,8 +709,7 @@ static int netlink_bridge_vxlan_update(struct interface *ifp,
/* There is a 1-to-1 mapping of VLAN to VxLAN - hence
* only 1 access VLAN is accepted.
*/
- memset(aftb, 0, sizeof(aftb));
- parse_rtattr_nested(aftb, IFLA_BRIDGE_MAX, af_spec);
+ netlink_parse_rtattr_nested(aftb, IFLA_BRIDGE_MAX, af_spec);
if (!aftb[IFLA_BRIDGE_VLAN_INFO])
return 0;
@@ -655,7 +778,6 @@ static int netlink_bridge_interface(struct nlmsghdr *h, int len, ns_id_t ns_id,
/* Fetch name and ifindex */
ifi = NLMSG_DATA(h);
- memset(tb, 0, sizeof(tb));
netlink_parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifi), len);
if (tb[IFLA_IFNAME] == NULL)
@@ -723,9 +845,8 @@ static uint8_t netlink_parse_lacp_bypass(struct rtattr **linkinfo)
uint8_t bypass = 0;
struct rtattr *mbrinfo[IFLA_BOND_SLAVE_MAX + 1];
- memset(mbrinfo, 0, sizeof(mbrinfo));
- parse_rtattr_nested(mbrinfo, IFLA_BOND_SLAVE_MAX,
- linkinfo[IFLA_INFO_SLAVE_DATA]);
+ netlink_parse_rtattr_nested(mbrinfo, IFLA_BOND_SLAVE_MAX,
+ linkinfo[IFLA_INFO_SLAVE_DATA]);
if (mbrinfo[IFLA_BOND_SLAVE_AD_RX_BYPASS])
bypass = *(uint8_t *)RTA_DATA(
mbrinfo[IFLA_BOND_SLAVE_AD_RX_BYPASS]);
@@ -779,7 +900,6 @@ static int netlink_interface(struct nlmsghdr *h, ns_id_t ns_id, int startup)
return netlink_bridge_interface(h, len, ns_id, startup);
/* Looking up interface name. */
- memset(tb, 0, sizeof(tb));
memset(linkinfo, 0, sizeof(linkinfo));
netlink_parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifi), len);
@@ -799,7 +919,8 @@ static int netlink_interface(struct nlmsghdr *h, ns_id_t ns_id, int startup)
desc = (char *)RTA_DATA(tb[IFLA_IFALIAS]);
if (tb[IFLA_LINKINFO]) {
- parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb[IFLA_LINKINFO]);
+ netlink_parse_rtattr_nested(linkinfo, IFLA_INFO_MAX,
+ tb[IFLA_LINKINFO]);
if (linkinfo[IFLA_INFO_KIND])
kind = RTA_DATA(linkinfo[IFLA_INFO_KIND]);
@@ -934,6 +1055,20 @@ static int netlink_request_intf_addr(struct nlsock *netlink_cmd, int family,
return netlink_request(netlink_cmd, &req);
}
+enum netlink_msg_status
+netlink_put_gre_set_msg(struct nl_batch *bth, struct zebra_dplane_ctx *ctx)
+{
+ enum dplane_op_e op;
+ enum netlink_msg_status ret;
+
+ op = dplane_ctx_get_op(ctx);
+ assert(op == DPLANE_OP_GRE_SET);
+
+ ret = netlink_batch_add_msg(bth, ctx, netlink_gre_set_msg_encoder, false);
+
+ return ret;
+}
+
/* Interface lookup by netlink socket. */
int interface_lookup_netlink(struct zebra_ns *zns)
{
@@ -1158,7 +1293,6 @@ int netlink_interface_addr(struct nlmsghdr *h, ns_id_t ns_id, int startup)
return -1;
}
- memset(tb, 0, sizeof(tb));
netlink_parse_rtattr(tb, IFA_MAX, IFA_RTA(ifa), len);
ifp = if_lookup_by_index_per_ns(zns, ifa->ifa_index);
@@ -1374,7 +1508,6 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
return netlink_bridge_interface(h, len, ns_id, startup);
/* Looking up interface name. */
- memset(tb, 0, sizeof(tb));
memset(linkinfo, 0, sizeof(linkinfo));
netlink_parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifi), len);
@@ -1391,7 +1524,8 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
name = (char *)RTA_DATA(tb[IFLA_IFNAME]);
if (tb[IFLA_LINKINFO]) {
- parse_rtattr_nested(linkinfo, IFLA_INFO_MAX, tb[IFLA_LINKINFO]);
+ netlink_parse_rtattr_nested(linkinfo, IFLA_INFO_MAX,
+ tb[IFLA_LINKINFO]);
if (linkinfo[IFLA_INFO_KIND])
kind = RTA_DATA(linkinfo[IFLA_INFO_KIND]);
diff --git a/zebra/if_netlink.h b/zebra/if_netlink.h
index 0bbba81ca6..4f09b10b75 100644
--- a/zebra/if_netlink.h
+++ b/zebra/if_netlink.h
@@ -33,6 +33,9 @@ extern int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup);
extern int interface_lookup_netlink(struct zebra_ns *zns);
extern enum netlink_msg_status
+netlink_put_gre_set_msg(struct nl_batch *bth, struct zebra_dplane_ctx *ctx);
+
+extern enum netlink_msg_status
netlink_put_address_update_msg(struct nl_batch *bth,
struct zebra_dplane_ctx *ctx);
diff --git a/zebra/interface.c b/zebra/interface.c
index a3134d6647..7fd967dd8b 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -1066,14 +1066,18 @@ void if_up(struct interface *ifp)
zif->link_ifindex);
if (link_if)
zebra_vxlan_svi_up(ifp, link_if);
- } else if (IS_ZEBRA_IF_MACVLAN(ifp))
+ } else if (IS_ZEBRA_IF_MACVLAN(ifp)) {
zebra_vxlan_macvlan_up(ifp);
+ }
if (zif->es_info.es)
zebra_evpn_es_if_oper_state_change(zif, true /*up*/);
if (zif->flags & ZIF_FLAG_EVPN_MH_UPLINK)
zebra_evpn_mh_uplink_oper_update(zif);
+
+ thread_add_timer(zrouter.master, if_zebra_speed_update, ifp, 0,
+ &zif->speed_update);
}
/* Interface goes down. We have to manage different behavior of based
@@ -1105,8 +1109,9 @@ void if_down(struct interface *ifp)
zif->link_ifindex);
if (link_if)
zebra_vxlan_svi_down(ifp, link_if);
- } else if (IS_ZEBRA_IF_MACVLAN(ifp))
+ } else if (IS_ZEBRA_IF_MACVLAN(ifp)) {
zebra_vxlan_macvlan_down(ifp);
+ }
if (zif->es_info.es)
zebra_evpn_es_if_oper_state_change(zif, false /*up*/);
@@ -1302,6 +1307,9 @@ static const char *zebra_ziftype_2str(zebra_iftype_t zif_type)
case ZEBRA_IF_MACVLAN:
return "macvlan";
+ case ZEBRA_IF_GRE:
+ return "GRE";
+
default:
return "Unknown";
}
@@ -1574,6 +1582,28 @@ static void if_dump_vty(struct vty *vty, struct interface *ifp)
ifp->name);
}
vty_out(vty, "\n");
+ } else if (IS_ZEBRA_IF_GRE(ifp)) {
+ struct zebra_l2info_gre *gre_info;
+
+ gre_info = &zebra_if->l2info.gre;
+ if (gre_info->vtep_ip.s_addr != INADDR_ANY) {
+ vty_out(vty, " VTEP IP: %pI4", &gre_info->vtep_ip);
+ if (gre_info->vtep_ip_remote.s_addr != INADDR_ANY)
+ vty_out(vty, " , remote %pI4",
+ &gre_info->vtep_ip_remote);
+ vty_out(vty, "\n");
+ }
+ if (gre_info->ifindex_link &&
+ (gre_info->link_nsid != NS_UNKNOWN)) {
+ struct interface *ifp;
+
+ ifp = if_lookup_by_index_per_ns(
+ zebra_ns_lookup(gre_info->link_nsid),
+ gre_info->ifindex_link);
+ vty_out(vty, " Link Interface %s\n",
+ ifp == NULL ? "Unknown" :
+ ifp->name);
+ }
}
if (IS_ZEBRA_IF_BRIDGE_SLAVE(ifp)) {
diff --git a/zebra/interface.h b/zebra/interface.h
index 24bc70cb9b..df4872d48e 100644
--- a/zebra/interface.h
+++ b/zebra/interface.h
@@ -263,6 +263,7 @@ typedef enum {
ZEBRA_IF_VETH, /* VETH interface*/
ZEBRA_IF_BOND, /* Bond */
ZEBRA_IF_BOND_SLAVE, /* Bond */
+ ZEBRA_IF_GRE, /* GRE interface */
} zebra_iftype_t;
/* Zebra "slave" interface type */
@@ -442,6 +443,9 @@ DECLARE_HOOK(zebra_if_config_wr, (struct vty * vty, struct interface *ifp),
#define IS_ZEBRA_IF_BOND(ifp) \
(((struct zebra_if *)(ifp->info))->zif_type == ZEBRA_IF_BOND)
+#define IS_ZEBRA_IF_GRE(ifp) \
+ (((struct zebra_if *)(ifp->info))->zif_type == ZEBRA_IF_GRE)
+
#define IS_ZEBRA_IF_BRIDGE_SLAVE(ifp) \
(((struct zebra_if *)(ifp->info))->zif_slave_type \
== ZEBRA_IF_SLAVE_BRIDGE)
diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c
index adb61023c1..8b631a3726 100644
--- a/zebra/kernel_netlink.c
+++ b/zebra/kernel_netlink.c
@@ -493,6 +493,7 @@ void netlink_parse_rtattr_flags(struct rtattr **tb, int max,
{
unsigned short type;
+ memset(tb, 0, sizeof(struct rtattr *) * (max + 1));
while (RTA_OK(rta, len)) {
type = rta->rta_type & ~flags;
if ((type <= max) && (!tb[type]))
@@ -504,6 +505,7 @@ void netlink_parse_rtattr_flags(struct rtattr **tb, int max,
void netlink_parse_rtattr(struct rtattr **tb, int max, struct rtattr *rta,
int len)
{
+ memset(tb, 0, sizeof(struct rtattr *) * (max + 1));
while (RTA_OK(rta, len)) {
if (rta->rta_type <= max)
tb[rta->rta_type] = rta;
@@ -1360,6 +1362,9 @@ static enum netlink_msg_status nl_put_msg(struct nl_batch *bth,
case DPLANE_OP_IPSET_ENTRY_DELETE:
return FRR_NETLINK_ERROR;
+ case DPLANE_OP_GRE_SET:
+ return netlink_put_gre_set_msg(bth, ctx);
+
case DPLANE_OP_NONE:
return FRR_NETLINK_ERROR;
}
diff --git a/zebra/redistribute.c b/zebra/redistribute.c
index 6f24ec4225..89f46f9c97 100644
--- a/zebra/redistribute.c
+++ b/zebra/redistribute.c
@@ -91,8 +91,7 @@ static void zebra_redistribute_default(struct zserv *client, vrf_id_t vrf_id)
continue;
RNODE_FOREACH_RE (rn, newre) {
- if (CHECK_FLAG(newre->flags, ZEBRA_FLAG_SELECTED)
- && newre->distance != DISTANCE_INFINITY)
+ if (CHECK_FLAG(newre->flags, ZEBRA_FLAG_SELECTED))
zsend_redistribute_route(
ZEBRA_REDISTRIBUTE_ROUTE_ADD, client,
&rn->p, NULL, newre);
@@ -138,8 +137,6 @@ static void zebra_redistribute(struct zserv *client, int type,
&& (newre->type != type
|| newre->instance != instance)))
continue;
- if (newre->distance == DISTANCE_INFINITY)
- continue;
if (!zebra_check_addr(dst_p))
continue;
@@ -265,13 +262,6 @@ void redistribute_delete(const struct prefix *p, const struct prefix *src_p,
new_re ? zebra_route_string(new_re->type) : "None");
}
- /* Add DISTANCE_INFINITY check. */
- if (old_re && (old_re->distance == DISTANCE_INFINITY)) {
- if (IS_ZEBRA_DEBUG_RIB)
- zlog_debug(" Skipping due to Infinite Distance");
- return;
- }
-
afi = family2afi(p->family);
if (!afi) {
flog_warn(EC_ZEBRA_REDISTRIBUTE_UNKNOWN_AF,
@@ -347,12 +337,17 @@ void zebra_redistribute_add(ZAPI_HANDLER_ARGS)
zvrf_id(zvrf), afi);
}
} else {
- if (IS_ZEBRA_DEBUG_EVENT)
- zlog_debug("%s: setting vrf %s(%u) redist bitmap",
- __func__, VRF_LOGNAME(zvrf->vrf),
- zvrf_id(zvrf));
- vrf_bitmap_set(client->redist[afi][type], zvrf_id(zvrf));
- zebra_redistribute(client, type, 0, zvrf_id(zvrf), afi);
+ if (!vrf_bitmap_check(client->redist[afi][type],
+ zvrf_id(zvrf))) {
+ if (IS_ZEBRA_DEBUG_EVENT)
+ zlog_debug(
+ "%s: setting vrf %s(%u) redist bitmap",
+ __func__, VRF_LOGNAME(zvrf->vrf),
+ zvrf_id(zvrf));
+ vrf_bitmap_set(client->redist[afi][type],
+ zvrf_id(zvrf));
+ zebra_redistribute(client, type, 0, zvrf_id(zvrf), afi);
+ }
}
stream_failure:
diff --git a/zebra/rt.h b/zebra/rt.h
index daaa926a7d..f79ddbe958 100644
--- a/zebra/rt.h
+++ b/zebra/rt.h
@@ -81,9 +81,6 @@ extern int mpls_kernel_init(void);
extern uint32_t kernel_get_speed(struct interface *ifp, int *error);
extern int kernel_get_ipmr_sg_stats(struct zebra_vrf *zvrf, void *mroute);
-extern int kernel_configure_if_link(struct interface *ifp,
- struct interface *link_ifp, ns_id_t ns_id);
-
/*
* Southbound Initialization routines to get initial starting
* state.
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index d2ec7da57c..fbf37230c7 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -509,8 +509,6 @@ static uint8_t parse_multipath_nexthops_unicast(ns_id_t ns_id,
nh_vrf_id = vrf_id;
if (rtnh->rtnh_len > sizeof(*rtnh)) {
- memset(rtnh_tb, 0, sizeof(rtnh_tb));
-
netlink_parse_rtattr(rtnh_tb, RTA_MAX, RTNH_DATA(rtnh),
rtnh->rtnh_len - sizeof(*rtnh));
if (rtnh_tb[RTA_GATEWAY])
@@ -628,7 +626,6 @@ static int netlink_route_change_read_unicast(struct nlmsghdr *h, ns_id_t ns_id,
return -1;
}
- memset(tb, 0, sizeof(tb));
netlink_parse_rtattr(tb, RTA_MAX, RTM_RTA(rtm), len);
if (rtm->rtm_flags & RTM_F_CLONED)
@@ -713,7 +710,6 @@ static int netlink_route_change_read_unicast(struct nlmsghdr *h, ns_id_t ns_id,
if (tb[RTA_METRICS]) {
struct rtattr *mxrta[RTAX_MAX + 1];
- memset(mxrta, 0, sizeof(mxrta));
netlink_parse_rtattr(mxrta, RTAX_MAX, RTA_DATA(tb[RTA_METRICS]),
RTA_PAYLOAD(tb[RTA_METRICS]));
@@ -920,7 +916,6 @@ static int netlink_route_change_read_multicast(struct nlmsghdr *h,
len = h->nlmsg_len - NLMSG_LENGTH(sizeof(struct rtmsg));
- memset(tb, 0, sizeof(tb));
netlink_parse_rtattr(tb, RTA_MAX, RTM_RTA(rtm), len);
if (tb[RTA_TABLE])
@@ -2875,7 +2870,6 @@ static int netlink_macfdb_change(struct nlmsghdr *h, int len, ns_id_t ns_id)
/* Parse attributes and extract fields of interest. Do basic
* validation of the fields.
*/
- memset(tb, 0, sizeof tb);
netlink_parse_rtattr_flags(tb, NDA_MAX, NDA_RTA(ndm), len,
NLA_F_NESTED);
@@ -3348,7 +3342,6 @@ static int netlink_ipneigh_change(struct nlmsghdr *h, int len, ns_id_t ns_id)
zif = (struct zebra_if *)ifp->info;
/* Parse attributes and extract fields of interest. */
- memset(tb, 0, sizeof(tb));
netlink_parse_rtattr(tb, NDA_MAX, NDA_RTA(ndm), len);
if (!tb[NDA_DST]) {
diff --git a/zebra/rt_socket.c b/zebra/rt_socket.c
index ada828d016..006513ac9e 100644
--- a/zebra/rt_socket.c
+++ b/zebra/rt_socket.c
@@ -394,12 +394,6 @@ enum zebra_dplane_result kernel_mac_update_ctx(struct zebra_dplane_ctx *ctx)
return ZEBRA_DPLANE_REQUEST_SUCCESS;
}
-int kernel_configure_if_link(struct interface *ifp, struct interface *link_ifp,
- ns_id_t ns_id)
-{
- return 0;
-}
-
extern int kernel_interface_set_master(struct interface *master,
struct interface *slave)
{
diff --git a/zebra/zapi_msg.c b/zebra/zapi_msg.c
index 77a9188fe8..544bb07fbe 100644
--- a/zebra/zapi_msg.c
+++ b/zebra/zapi_msg.c
@@ -985,8 +985,7 @@ void zsend_nhrp_neighbor_notify(int cmd, struct interface *ifp,
union sockunion ip;
if (IS_ZEBRA_DEBUG_PACKET)
- zlog_debug("%s: Notifying Neighbor entry (%u)",
- __PRETTY_FUNCTION__, cmd);
+ zlog_debug("%s: Notifying Neighbor entry (%u)", __func__, cmd);
sockunion_family(&ip) = ipaddr_family(ipaddr);
afi = family2afi(sockunion_family(&ip));
@@ -2509,7 +2508,7 @@ static void zread_sr_policy_set(ZAPI_HANDLER_ARGS)
if (zapi_sr_policy_decode(s, &zp) < 0) {
if (IS_ZEBRA_DEBUG_RECV)
zlog_debug("%s: Unable to decode zapi_sr_policy sent",
- __PRETTY_FUNCTION__);
+ __func__);
return;
}
zt = &zp.segment_list;
@@ -2517,7 +2516,7 @@ static void zread_sr_policy_set(ZAPI_HANDLER_ARGS)
if (IS_ZEBRA_DEBUG_RECV)
zlog_debug(
"%s: SR-TE tunnel must contain at least one label",
- __PRETTY_FUNCTION__);
+ __func__);
return;
}
@@ -2544,7 +2543,7 @@ static void zread_sr_policy_delete(ZAPI_HANDLER_ARGS)
if (zapi_sr_policy_decode(s, &zp) < 0) {
if (IS_ZEBRA_DEBUG_RECV)
zlog_debug("%s: Unable to decode zapi_sr_policy sent",
- __PRETTY_FUNCTION__);
+ __func__);
return;
}
@@ -2554,8 +2553,7 @@ static void zread_sr_policy_delete(ZAPI_HANDLER_ARGS)
policy = zebra_sr_policy_find(zp.color, &zp.endpoint);
if (!policy) {
if (IS_ZEBRA_DEBUG_RECV)
- zlog_debug("%s: Unable to find SR-TE policy",
- __PRETTY_FUNCTION__);
+ zlog_debug("%s: Unable to find SR-TE policy", __func__);
return;
}
@@ -3240,6 +3238,61 @@ stream_failure:
return;
}
+static inline void zebra_gre_get(ZAPI_HANDLER_ARGS)
+{
+ struct stream *s;
+ ifindex_t idx;
+ struct interface *ifp;
+ struct zebra_if *zebra_if = NULL;
+ struct zebra_l2info_gre *gre_info;
+ struct interface *ifp_link = NULL;
+ vrf_id_t vrf_id_link = VRF_UNKNOWN;
+ vrf_id_t vrf_id = zvrf->vrf->vrf_id;
+
+ s = msg;
+ STREAM_GETL(s, idx);
+ ifp = if_lookup_by_index(idx, vrf_id);
+
+ if (ifp)
+ zebra_if = ifp->info;
+
+ s = stream_new(ZEBRA_MAX_PACKET_SIZ);
+
+ zclient_create_header(s, ZEBRA_GRE_UPDATE, vrf_id);
+
+ if (ifp && IS_ZEBRA_IF_GRE(ifp) && zebra_if) {
+ gre_info = &zebra_if->l2info.gre;
+
+ stream_putl(s, idx);
+ stream_putl(s, gre_info->ikey);
+ stream_putl(s, gre_info->ikey);
+ stream_putl(s, gre_info->ifindex_link);
+
+ ifp_link = if_lookup_by_index_per_ns(
+ zebra_ns_lookup(gre_info->link_nsid),
+ gre_info->ifindex_link);
+ if (ifp_link)
+ vrf_id_link = ifp_link->vrf_id;
+ stream_putl(s, vrf_id_link);
+ stream_putl(s, gre_info->vtep_ip.s_addr);
+ stream_putl(s, gre_info->vtep_ip_remote.s_addr);
+ } else {
+ stream_putl(s, idx);
+ stream_putl(s, 0);
+ stream_putl(s, 0);
+ stream_putl(s, IFINDEX_INTERNAL);
+ stream_putl(s, VRF_UNKNOWN);
+ stream_putl(s, 0);
+ }
+ /* Write packet size. */
+ stream_putw_at(s, 0, stream_get_endp(s));
+ zserv_send_message(client, s);
+
+ return;
+ stream_failure:
+ return;
+}
+
static inline void zebra_configure_arp(ZAPI_HANDLER_ARGS)
{
struct stream *s;
@@ -3373,6 +3426,57 @@ stream_failure:
return;
}
+static inline void zebra_gre_source_set(ZAPI_HANDLER_ARGS)
+{
+ struct stream *s;
+ ifindex_t idx, link_idx;
+ vrf_id_t link_vrf_id;
+ struct interface *ifp;
+ struct interface *ifp_link;
+ vrf_id_t vrf_id = zvrf->vrf->vrf_id;
+ struct zebra_if *zif, *gre_zif;
+ struct zebra_l2info_gre *gre_info;
+ unsigned int mtu;
+
+ s = msg;
+ STREAM_GETL(s, idx);
+ ifp = if_lookup_by_index(idx, vrf_id);
+ STREAM_GETL(s, link_idx);
+ STREAM_GETL(s, link_vrf_id);
+ STREAM_GETL(s, mtu);
+
+ ifp_link = if_lookup_by_index(link_idx, link_vrf_id);
+ if (!ifp_link || !ifp) {
+ zlog_warn("GRE (index %u, VRF %u) or GRE link interface (index %u, VRF %u) not found, when setting GRE params",
+ idx, vrf_id, link_idx, link_vrf_id);
+ return;
+ }
+
+ if (!IS_ZEBRA_IF_GRE(ifp))
+ return;
+
+ gre_zif = (struct zebra_if *)ifp->info;
+ zif = (struct zebra_if *)ifp_link->info;
+ if (!zif || !gre_zif)
+ return;
+
+ gre_info = &zif->l2info.gre;
+ if (!gre_info)
+ return;
+
+ if (!mtu)
+ mtu = ifp->mtu;
+
+ /* if gre link already set or mtu did not change, do not set it */
+ if (gre_zif->link && gre_zif->link == ifp_link && mtu == ifp->mtu)
+ return;
+
+ dplane_gre_set(ifp, ifp_link, mtu, gre_info);
+
+ stream_failure:
+ return;
+}
+
static void zsend_error_msg(struct zserv *client, enum zebra_error_types error,
struct zmsghdr *bad_hdr)
{
@@ -3488,6 +3592,8 @@ void (*const zserv_handlers[])(ZAPI_HANDLER_ARGS) = {
[ZEBRA_NHRP_NEIGH_REGISTER] = zebra_neigh_register,
[ZEBRA_NHRP_NEIGH_UNREGISTER] = zebra_neigh_unregister,
[ZEBRA_CONFIGURE_ARP] = zebra_configure_arp,
+ [ZEBRA_GRE_GET] = zebra_gre_get,
+ [ZEBRA_GRE_SOURCE_SET] = zebra_gre_source_set,
};
/*
diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
index c8ee8f9051..a8df0c56ce 100644
--- a/zebra/zebra_dplane.c
+++ b/zebra/zebra_dplane.c
@@ -271,6 +271,11 @@ struct dplane_rule_info {
struct dplane_ctx_rule old;
};
+struct dplane_gre_ctx {
+ uint32_t link_ifindex;
+ unsigned int mtu;
+ struct zebra_l2info_gre info;
+};
/*
* The context block used to exchange info about route updates across
* the boundary between the zebra main context (and pthread) and the
@@ -327,6 +332,7 @@ struct zebra_dplane_ctx {
struct zebra_pbr_ipset_info info;
} ipset_entry;
struct dplane_neigh_table neightable;
+ struct dplane_gre_ctx gre;
} u;
/* Namespace info, used especially for netlink kernel communication */
@@ -469,6 +475,9 @@ static struct zebra_dplane_globals {
_Atomic uint32_t dg_neightable_in;
_Atomic uint32_t dg_neightable_errors;
+ _Atomic uint32_t dg_gre_set_in;
+ _Atomic uint32_t dg_gre_set_errors;
+
/* Dataplane pthread */
struct frr_pthread *dg_pthread;
@@ -713,6 +722,9 @@ static void dplane_ctx_free_internal(struct zebra_dplane_ctx *ctx)
}
list_delete(&ctx->u.iptable.interface_name_list);
}
+ break;
+ case DPLANE_OP_GRE_SET:
+ break;
}
}
@@ -979,6 +991,10 @@ const char *dplane_op2str(enum dplane_op_e op)
case DPLANE_OP_NEIGH_TABLE_UPDATE:
ret = "NEIGH_TABLE_UPDATE";
break;
+
+ case DPLANE_OP_GRE_SET:
+ ret = "GRE_SET";
+ break;
}
return ret;
@@ -1772,6 +1788,31 @@ uint32_t dplane_ctx_neigh_get_update_flags(const struct zebra_dplane_ctx *ctx)
return ctx->u.neigh.update_flags;
}
+/* Accessor for GRE set */
+uint32_t
+dplane_ctx_gre_get_link_ifindex(const struct zebra_dplane_ctx *ctx)
+{
+ DPLANE_CTX_VALID(ctx);
+
+ return ctx->u.gre.link_ifindex;
+}
+
+unsigned int
+dplane_ctx_gre_get_mtu(const struct zebra_dplane_ctx *ctx)
+{
+ DPLANE_CTX_VALID(ctx);
+
+ return ctx->u.gre.mtu;
+}
+
+const struct zebra_l2info_gre *
+dplane_ctx_gre_get_info(const struct zebra_dplane_ctx *ctx)
+{
+ DPLANE_CTX_VALID(ctx);
+
+ return &ctx->u.gre.info;
+}
+
/* Accessors for PBR rule information */
int dplane_ctx_rule_get_sock(const struct zebra_dplane_ctx *ctx)
{
@@ -4126,6 +4167,71 @@ dplane_pbr_ipset_entry_delete(struct zebra_pbr_ipset_entry *ipset)
}
/*
+ * Common helper api for GRE set
+ */
+enum zebra_dplane_result
+dplane_gre_set(struct interface *ifp, struct interface *ifp_link,
+ unsigned int mtu, const struct zebra_l2info_gre *gre_info)
+{
+ enum zebra_dplane_result result = ZEBRA_DPLANE_REQUEST_FAILURE;
+ struct zebra_dplane_ctx *ctx;
+ enum dplane_op_e op = DPLANE_OP_GRE_SET;
+ int ret;
+ struct zebra_ns *zns;
+
+ ctx = dplane_ctx_alloc();
+
+ if (!ifp)
+ return result;
+
+ if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) {
+ zlog_debug("init dplane ctx %s: if %s link %s%s",
+ dplane_op2str(op), ifp->name,
+ ifp_link ? "set" : "unset", ifp_link ?
+ ifp_link->name : "");
+ }
+
+ ctx->zd_op = op;
+ ctx->zd_status = ZEBRA_DPLANE_REQUEST_SUCCESS;
+ zns = zebra_ns_lookup(ifp->vrf_id);
+ if (!zns)
+ return result;
+ dplane_ctx_ns_init(ctx, zns, false);
+
+ dplane_ctx_set_ifname(ctx, ifp->name);
+ ctx->zd_vrf_id = ifp->vrf_id;
+ ctx->zd_ifindex = ifp->ifindex;
+ if (ifp_link)
+ ctx->u.gre.link_ifindex = ifp_link->ifindex;
+ else
+ ctx->u.gre.link_ifindex = 0;
+ if (gre_info)
+ memcpy(&ctx->u.gre.info, gre_info, sizeof(ctx->u.gre.info));
+ ctx->u.gre.mtu = mtu;
+
+ ctx->zd_status = ZEBRA_DPLANE_REQUEST_SUCCESS;
+
+ /* Enqueue context for processing */
+ ret = dplane_update_enqueue(ctx);
+
+ /* Update counter */
+ atomic_fetch_add_explicit(&zdplane_info.dg_gre_set_in, 1,
+ memory_order_relaxed);
+
+ if (ret == AOK)
+ result = ZEBRA_DPLANE_REQUEST_QUEUED;
+ else {
+ atomic_fetch_add_explicit(
+ &zdplane_info.dg_gre_set_errors, 1,
+ memory_order_relaxed);
+ if (ctx)
+ dplane_ctx_free(&ctx);
+ result = ZEBRA_DPLANE_REQUEST_FAILURE;
+ }
+ return result;
+}
+
+/*
* Handler for 'show dplane'
*/
int dplane_show_helper(struct vty *vty, bool detailed)
@@ -4234,6 +4340,13 @@ int dplane_show_helper(struct vty *vty, bool detailed)
memory_order_relaxed);
vty_out(vty, "Neighbor Table updates: %"PRIu64"\n", incoming);
vty_out(vty, "Neighbor Table errors: %"PRIu64"\n", errs);
+
+ incoming = atomic_load_explicit(&zdplane_info.dg_gre_set_in,
+ memory_order_relaxed);
+ errs = atomic_load_explicit(&zdplane_info.dg_gre_set_errors,
+ memory_order_relaxed);
+ vty_out(vty, "GRE set updates: %"PRIu64"\n", incoming);
+ vty_out(vty, "GRE set errors: %"PRIu64"\n", errs);
return CMD_SUCCESS;
}
@@ -4680,6 +4793,12 @@ static void kernel_dplane_log_detail(struct zebra_dplane_ctx *ctx)
dplane_ctx_get_ifname(ctx),
family2str(dplane_ctx_neightable_get_family(ctx)));
break;
+ case DPLANE_OP_GRE_SET:
+ zlog_debug("Dplane gre set op %s, ifp %s, link %u",
+ dplane_op2str(dplane_ctx_get_op(ctx)),
+ dplane_ctx_get_ifname(ctx),
+ ctx->u.gre.link_ifindex);
+ break;
}
}
@@ -4808,6 +4927,12 @@ static void kernel_dplane_handle_result(struct zebra_dplane_ctx *ctx)
memory_order_relaxed);
break;
+ case DPLANE_OP_GRE_SET:
+ if (res != ZEBRA_DPLANE_REQUEST_SUCCESS)
+ atomic_fetch_add_explicit(
+ &zdplane_info.dg_gre_set_errors, 1,
+ memory_order_relaxed);
+ break;
/* Ignore 'notifications' - no-op */
case DPLANE_OP_SYS_ROUTE_ADD:
case DPLANE_OP_SYS_ROUTE_DELETE:
diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h
index 8d51d93cd4..3a8536dda5 100644
--- a/zebra/zebra_dplane.h
+++ b/zebra/zebra_dplane.h
@@ -171,6 +171,7 @@ enum dplane_op_e {
DPLANE_OP_NEIGH_IP_DELETE,
DPLANE_OP_NEIGH_TABLE_UPDATE,
+ DPLANE_OP_GRE_SET,
};
/*
@@ -527,6 +528,14 @@ dplane_ctx_neightable_get_mcast_probes(const struct zebra_dplane_ctx *ctx);
uint32_t
dplane_ctx_neightable_get_ucast_probes(const struct zebra_dplane_ctx *ctx);
+/* Accessor for GRE set */
+uint32_t
+dplane_ctx_gre_get_link_ifindex(const struct zebra_dplane_ctx *ctx);
+unsigned int
+dplane_ctx_gre_get_mtu(const struct zebra_dplane_ctx *ctx);
+const struct zebra_l2info_gre *
+dplane_ctx_gre_get_info(const struct zebra_dplane_ctx *ctx);
+
/* Namespace info - esp. for netlink communication */
const struct zebra_dplane_info *dplane_ctx_get_ns(
const struct zebra_dplane_ctx *ctx);
@@ -695,6 +704,13 @@ enum zebra_dplane_result dplane_neigh_table_update(const struct interface *ifp,
const uint32_t ucast_probes,
const uint32_t mcast_probes);
+/*
+ * Enqueue a GRE set
+ */
+enum zebra_dplane_result
+dplane_gre_set(struct interface *ifp, struct interface *ifp_link,
+ unsigned int mtu, const struct zebra_l2info_gre *gre_info);
+
/* Forward ref of zebra_pbr_rule */
struct zebra_pbr_rule;
diff --git a/zebra/zebra_errors.h b/zebra/zebra_errors.h
index fc0382a6cd..200a977a69 100644
--- a/zebra/zebra_errors.h
+++ b/zebra/zebra_errors.h
@@ -134,6 +134,7 @@ enum zebra_log_refs {
EC_ZEBRA_DUPLICATE_NHG_MESSAGE,
EC_ZEBRA_VRF_MISCONFIGURED,
EC_ZEBRA_ES_CREATE,
+ EC_ZEBRA_GRE_SET_UPDATE,
};
void zebra_error_init(void);
diff --git a/zebra/zebra_evpn.c b/zebra/zebra_evpn.c
index 80e06d913d..30f4a44769 100644
--- a/zebra/zebra_evpn.c
+++ b/zebra/zebra_evpn.c
@@ -1011,6 +1011,7 @@ zebra_evpn_t *zebra_evpn_lookup(vni_t vni)
*/
zebra_evpn_t *zebra_evpn_add(vni_t vni)
{
+ char buffer[80];
struct zebra_vrf *zvrf;
zebra_evpn_t tmp_zevpn;
zebra_evpn_t *zevpn = NULL;
@@ -1024,11 +1025,14 @@ zebra_evpn_t *zebra_evpn_add(vni_t vni)
zebra_evpn_es_evi_init(zevpn);
+ snprintf(buffer, sizeof(buffer), "Zebra EVPN MAC Table vni: %u", vni);
/* Create hash table for MAC */
- zevpn->mac_table = zebra_mac_db_create("Zebra EVPN MAC Table");
+ zevpn->mac_table = zebra_mac_db_create(buffer);
+ snprintf(buffer, sizeof(buffer), "Zebra EVPN Neighbor Table vni: %u",
+ vni);
/* Create hash table for neighbors */
- zevpn->neigh_table = zebra_neigh_db_create("Zebra EVPN Neighbor Table");
+ zevpn->neigh_table = zebra_neigh_db_create(buffer);
return zevpn;
}
diff --git a/zebra/zebra_evpn_mac.c b/zebra/zebra_evpn_mac.c
index 7bbe092d8c..fe3167dc29 100644
--- a/zebra/zebra_evpn_mac.c
+++ b/zebra/zebra_evpn_mac.c
@@ -1323,7 +1323,7 @@ int zebra_evpn_mac_send_del_to_client(vni_t vni, struct ethaddr *macaddr,
*/
struct hash *zebra_mac_db_create(const char *desc)
{
- return hash_create(mac_hash_keymake, mac_cmp, desc);
+ return hash_create_size(8, mac_hash_keymake, mac_cmp, desc);
}
/* program sync mac flags in the dataplane */
diff --git a/zebra/zebra_evpn_mh.c b/zebra/zebra_evpn_mh.c
index 0038689e85..d6ae92a03d 100644
--- a/zebra/zebra_evpn_mh.c
+++ b/zebra/zebra_evpn_mh.c
@@ -2476,8 +2476,8 @@ void zebra_evpn_proc_remote_es(ZAPI_HANDLER_ARGS)
if (!is_evpn_enabled()) {
zlog_debug(
- "%s: EVPN not enabled yet we received a es_add zapi call",
- __PRETTY_FUNCTION__);
+ "%s: EVPN not enabled yet we received a es_add zapi call",
+ __func__);
return;
}
diff --git a/zebra/zebra_evpn_neigh.c b/zebra/zebra_evpn_neigh.c
index d1b93dbe8a..4c7a1542fc 100644
--- a/zebra/zebra_evpn_neigh.c
+++ b/zebra/zebra_evpn_neigh.c
@@ -85,7 +85,7 @@ int neigh_list_cmp(void *p1, void *p2)
struct hash *zebra_neigh_db_create(const char *desc)
{
- return hash_create(neigh_hash_keymake, neigh_cmp, desc);
+ return hash_create_size(8, neigh_hash_keymake, neigh_cmp, desc);
}
uint32_t num_dup_detected_neighs(zebra_evpn_t *zevpn)
diff --git a/zebra/zebra_l2.c b/zebra/zebra_l2.c
index c3fbff2723..71fac556e1 100644
--- a/zebra/zebra_l2.c
+++ b/zebra/zebra_l2.c
@@ -290,6 +290,32 @@ void zebra_l2_vlanif_update(struct interface *ifp,
}
/*
+ * Update L2 info for a GRE interface. This is called upon interface
+ * addition as well as update. Upon add/update, need to inform
+ * clients about GRE information.
+ */
+void zebra_l2_greif_add_update(struct interface *ifp,
+ struct zebra_l2info_gre *gre_info, int add)
+{
+ struct zebra_if *zif;
+ struct in_addr old_vtep_ip;
+
+ zif = ifp->info;
+ assert(zif);
+
+ if (add) {
+ memcpy(&zif->l2info.gre, gre_info, sizeof(*gre_info));
+ return;
+ }
+
+ old_vtep_ip = zif->l2info.gre.vtep_ip;
+ if (IPV4_ADDR_SAME(&old_vtep_ip, &gre_info->vtep_ip))
+ return;
+
+ zif->l2info.gre.vtep_ip = gre_info->vtep_ip;
+}
+
+/*
* Update L2 info for a VxLAN interface. This is called upon interface
* addition as well as update. Upon add, need to invoke the VNI create
* function. Upon update, the params of interest are the local tunnel
diff --git a/zebra/zebra_l2.h b/zebra/zebra_l2.h
index 1834430287..6572f344c4 100644
--- a/zebra/zebra_l2.h
+++ b/zebra/zebra_l2.h
@@ -54,6 +54,18 @@ struct zebra_l2info_vlan {
vlanid_t vid; /* VLAN id */
};
+/* zebra L2 interface information - GRE interface */
+struct zebra_l2info_gre {
+ struct in_addr vtep_ip; /* IFLA_GRE_LOCAL */
+ struct in_addr vtep_ip_remote; /* IFLA_GRE_REMOTE */
+ uint32_t ikey;
+ uint32_t okey;
+ ifindex_t ifindex_link; /* Interface index of interface
+ * linked with GRE
+ */
+ ns_id_t link_nsid;
+};
+
/* zebra L2 interface information - VXLAN interface */
struct zebra_l2info_vxlan {
vni_t vni; /* VNI */
@@ -75,6 +87,7 @@ union zebra_l2if_info {
struct zebra_l2info_bridge br;
struct zebra_l2info_vlan vl;
struct zebra_l2info_vxlan vxl;
+ struct zebra_l2info_gre gre;
};
/* NOTE: These macros are to be invoked only in the "correct" context.
@@ -96,11 +109,15 @@ extern void zebra_l2_bridge_add_update(struct interface *ifp,
extern void zebra_l2_bridge_del(struct interface *ifp);
extern void zebra_l2_vlanif_update(struct interface *ifp,
struct zebra_l2info_vlan *vlan_info);
+extern void zebra_l2_greif_add_update(struct interface *ifp,
+ struct zebra_l2info_gre *vxlan_info,
+ int add);
extern void zebra_l2_vxlanif_add_update(struct interface *ifp,
struct zebra_l2info_vxlan *vxlan_info,
int add);
extern void zebra_l2_vxlanif_update_access_vlan(struct interface *ifp,
vlanid_t access_vlan);
+extern void zebra_l2_greif_del(struct interface *ifp);
extern void zebra_l2_vxlanif_del(struct interface *ifp);
extern void zebra_l2if_update_bridge_slave(struct interface *ifp,
ifindex_t bridge_ifindex,
diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c
index a923782bfe..850ca17636 100644
--- a/zebra/zebra_mpls.c
+++ b/zebra/zebra_mpls.c
@@ -3952,11 +3952,18 @@ void zebra_mpls_close_tables(struct zebra_vrf *zvrf)
*/
void zebra_mpls_init_tables(struct zebra_vrf *zvrf)
{
+ char buffer[80];
+
if (!zvrf)
return;
- zvrf->slsp_table =
- hash_create(label_hash, label_cmp, "ZEBRA SLSP table");
- zvrf->lsp_table = hash_create(label_hash, label_cmp, "ZEBRA LSP table");
+
+ snprintf(buffer, sizeof(buffer), "ZEBRA SLSP table: %s",
+ zvrf->vrf->name);
+ zvrf->slsp_table = hash_create_size(8, label_hash, label_cmp, buffer);
+
+ snprintf(buffer, sizeof(buffer), "ZEBRA LSP table: %s",
+ zvrf->vrf->name);
+ zvrf->lsp_table = hash_create_size(8, label_hash, label_cmp, buffer);
zvrf->fec_table[AFI_IP] = route_table_init();
zvrf->fec_table[AFI_IP6] = route_table_init();
zvrf->mpls_flags = 0;
diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c
index 47651318a4..6b40eae5b7 100644
--- a/zebra/zebra_nhg.c
+++ b/zebra/zebra_nhg.c
@@ -2965,6 +2965,7 @@ void zebra_nhg_dplane_result(struct zebra_dplane_ctx *ctx)
case DPLANE_OP_IPSET_ENTRY_ADD:
case DPLANE_OP_IPSET_ENTRY_DELETE:
case DPLANE_OP_NEIGH_TABLE_UPDATE:
+ case DPLANE_OP_GRE_SET:
break;
}
diff --git a/zebra/zebra_pbr.c b/zebra/zebra_pbr.c
index c4004842e6..73c2c3dda3 100644
--- a/zebra/zebra_pbr.c
+++ b/zebra/zebra_pbr.c
@@ -512,7 +512,7 @@ void zebra_pbr_add_rule(struct zebra_pbr_rule *rule)
if (pbr_rule_release(found))
zlog_debug(
"%s: Rule being updated we know nothing about",
- __PRETTY_FUNCTION__);
+ __func__);
} else {
if (IS_ZEBRA_DEBUG_PBR)
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index bdacd411bd..dbc5c77fd9 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -4062,6 +4062,7 @@ static int rib_process_dplane_results(struct thread *thread)
case DPLANE_OP_NEIGH_DISCOVER:
case DPLANE_OP_BR_PORT_UPDATE:
case DPLANE_OP_NEIGH_TABLE_UPDATE:
+ case DPLANE_OP_GRE_SET:
case DPLANE_OP_NONE:
/* Don't expect this: just return the struct? */
dplane_ctx_fini(&ctx);
diff --git a/zebra/zebra_routemap_nb.c b/zebra/zebra_routemap_nb.c
index c82c34dd53..9da4589501 100644
--- a/zebra/zebra_routemap_nb.c
+++ b/zebra/zebra_routemap_nb.c
@@ -17,6 +17,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <zebra.h>
+
#include "northbound.h"
#include "libfrr.h"
#include "zebra_routemap_nb.h"
diff --git a/zebra/zebra_vrf.c b/zebra/zebra_vrf.c
index 212557423b..a0c63e4202 100644
--- a/zebra/zebra_vrf.c
+++ b/zebra/zebra_vrf.c
@@ -103,9 +103,7 @@ static int zebra_vrf_new(struct vrf *vrf)
if (IS_ZEBRA_DEBUG_EVENT)
zlog_debug("VRF %s created, id %u", vrf->name, vrf->vrf_id);
- zvrf = zebra_vrf_alloc();
- vrf->info = zvrf;
- zvrf->vrf = vrf;
+ zvrf = zebra_vrf_alloc(vrf);
if (!vrf_is_backend_netns())
zvrf->zns = zebra_ns_lookup(NS_DEFAULT);
@@ -427,12 +425,15 @@ static void zebra_vrf_table_create(struct zebra_vrf *zvrf, afi_t afi,
}
/* Allocate new zebra VRF. */
-struct zebra_vrf *zebra_vrf_alloc(void)
+struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf)
{
struct zebra_vrf *zvrf;
zvrf = XCALLOC(MTYPE_ZEBRA_VRF, sizeof(struct zebra_vrf));
+ zvrf->vrf = vrf;
+ vrf->info = zvrf;
+
zebra_vxlan_init_tables(zvrf);
zebra_mpls_init_tables(zvrf);
zebra_pw_init(zvrf);
diff --git a/zebra/zebra_vrf.h b/zebra/zebra_vrf.h
index 000b5a7238..b2b0fcfbb2 100644
--- a/zebra/zebra_vrf.h
+++ b/zebra/zebra_vrf.h
@@ -251,7 +251,7 @@ extern struct route_table *zebra_vrf_get_table_with_table_id(afi_t afi,
extern void zebra_vrf_update_all(struct zserv *client);
extern struct zebra_vrf *zebra_vrf_lookup_by_id(vrf_id_t vrf_id);
extern struct zebra_vrf *zebra_vrf_lookup_by_name(const char *);
-extern struct zebra_vrf *zebra_vrf_alloc(void);
+extern struct zebra_vrf *zebra_vrf_alloc(struct vrf *vrf);
extern struct route_table *zebra_vrf_table(afi_t, safi_t, vrf_id_t);
extern void zebra_vrf_init(void);
diff --git a/zebra/zebra_vxlan.c b/zebra/zebra_vxlan.c
index 3ac7ee8f4f..4e86ab3b4f 100644
--- a/zebra/zebra_vxlan.c
+++ b/zebra/zebra_vxlan.c
@@ -5752,13 +5752,20 @@ stream_failure:
*/
void zebra_vxlan_init_tables(struct zebra_vrf *zvrf)
{
+ char buffer[80];
+
if (!zvrf)
return;
- zvrf->evpn_table =
- hash_create(zebra_evpn_hash_keymake, zebra_evpn_hash_cmp,
- "Zebra VRF EVPN Table");
- zvrf->vxlan_sg_table = hash_create(zebra_vxlan_sg_hash_key_make,
- zebra_vxlan_sg_hash_eq, "Zebra VxLAN SG Table");
+
+ snprintf(buffer, sizeof(buffer), "Zebra VRF EVPN Table: %s",
+ zvrf->vrf->name);
+ zvrf->evpn_table = hash_create_size(8, zebra_evpn_hash_keymake,
+ zebra_evpn_hash_cmp, buffer);
+
+ snprintf(buffer, sizeof(buffer), "Zebra VxLAN SG Table: %s",
+ zvrf->vrf->name);
+ zvrf->vxlan_sg_table = hash_create_size(8, zebra_vxlan_sg_hash_key_make,
+ zebra_vxlan_sg_hash_eq, buffer);
}
/* Cleanup EVPN info, but don't free the table. */
diff --git a/zebra/zserv.c b/zebra/zserv.c
index f89b6fe478..0bf4d8ece2 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -50,7 +50,6 @@
#include "lib/thread.h" /* for thread (ptr only), THREAD_ARG, ... */
#include "lib/vrf.h" /* for vrf_info_lookup, VRF_DEFAULT */
#include "lib/vty.h" /* for vty_out, vty (ptr only) */
-#include "lib/zassert.h" /* for assert */
#include "lib/zclient.h" /* for zmsghdr, ZEBRA_HEADER_SIZE, ZEBRA... */
#include "lib/frr_pthread.h" /* for frr_pthread_new, frr_pthread_stop... */
#include "lib/frratomic.h" /* for atomic_load_explicit, atomic_stor... */