summaryrefslogtreecommitdiffstats
path: root/tests/topotests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/topotests')
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post4.1.ref6
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post5.0.ref6
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4-post6.1.ref6
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv4.ref6
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv6-post4.1.ref6
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv6.ref6
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_bgp_ipv6_post6.1.ref6
-rw-r--r--tests/topotests/all_protocol_startup/r1/show_ip_ospf_interface.ref4
-rw-r--r--tests/topotests/all_protocol_startup/test_all_protocol_startup.py409
-rwxr-xr-xtests/topotests/analyze.py10
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/bgp_ipv6_routes_down.json45
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/r1/ipv6_routes.json44
-rw-r--r--tests/topotests/bfd_bgp_cbit_topo3/test_bfd_bgp_cbit_topo3.py16
-rw-r--r--tests/topotests/bfd_topo3/test_bfd_topo3.py2
-rw-r--r--tests/topotests/bfd_vrflite_topo1/test_bfd_vrflite_topo1.py7
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step10/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/h1/zebra.conf4
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/h2/zebra.conf8
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_summary.json13
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_vrf_ipv6.json116
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgpd.conf32
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe1/ipv6_routes_vrf.json142
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe1/isisd.conf23
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe1/zebra.conf11
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_summary.json13
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_vrf_ipv6.json116
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgpd.conf31
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe2/isisd.conf22
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/pe2/zebra.conf15
-rw-r--r--tests/topotests/bgp_6vpe_ebgp_topo1/test_bgp_6vpe_ebgp_topo1.py179
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step10/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/r1/frr.conf13
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/r2/frr.conf37
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/r3/frr.conf16
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/r4/frr.conf16
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/r5/frr.conf16
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/r6/frr.conf16
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/r7/frr.conf13
-rw-r--r--tests/topotests/bgp_addpath_paths_limit/test_bgp_addpath_paths_limit.py128
-rw-r--r--tests/topotests/bgp_asdot_regex/test_bgp_asdot_regex.py2
-rw-r--r--tests/topotests/bgp_bmp/r1/bgpd.conf28
-rw-r--r--tests/topotests/bgp_bmp/r1/zebra.conf2
-rw-r--r--tests/topotests/bgp_bmp/r2/bgpd.conf27
-rw-r--r--tests/topotests/bgp_bmp/test_bgp_bmp.py73
-rw-r--r--tests/topotests/bgp_color_extcommunities/test_bgp_color_extcommunities.py4
-rw-r--r--tests/topotests/bgp_community_alias/test_bgp-community-alias.py2
-rw-r--r--tests/topotests/bgp_conditional_advertisement_static_route/test_bgp_conditional_advertisement_static_route.py4
-rw-r--r--tests/topotests/bgp_confed1/r2/bgpd.conf5
-rw-r--r--tests/topotests/bgp_confed1/test_bgp_confed1.py5
-rw-r--r--tests/topotests/bgp_confederation_astype/test_bgp_confederation_astype.py4
-rw-r--r--tests/topotests/bgp_dampening_per_peer/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step10/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/bgp_dampening_per_peer/r1/frr.conf15
-rw-r--r--tests/topotests/bgp_dampening_per_peer/r2/frr.conf17
-rw-r--r--tests/topotests/bgp_dampening_per_peer/test_bgp_dampening_per_peer.py177
-rw-r--r--tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py2
-rw-r--r--tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_1.py282
-rw-r--r--tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_2.py78
-rw-r--r--tests/topotests/bgp_default_originate/test_default_originate_conditional_routemap.py354
-rw-r--r--tests/topotests/bgp_dont_capability_negotiate/test_bgp_dont_capability_negotiate.py5
-rw-r--r--tests/topotests/bgp_dynamic_capability/r1/frr.conf1
-rw-r--r--tests/topotests/bgp_dynamic_capability/r2/frr.conf1
-rw-r--r--tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_addpath.py164
-rw-r--r--tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_fqdn.py4
-rw-r--r--tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_graceful_restart.py4
-rw-r--r--tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_orf.py4
-rw-r--r--tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_role.py4
-rw-r--r--tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_software_version.py4
-rw-r--r--tests/topotests/bgp_ebgp_common_subnet_nexthop_unchanged/test_bgp-ebgp-common-subnet-nexthop-unchanged.py2
-rw-r--r--tests/topotests/bgp_evpn_maximum_prefix/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step11/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_evpn_maximum_prefix/c1/frr.conf4
-rw-r--r--tests/topotests/bgp_evpn_maximum_prefix/c2/frr.conf4
-rw-r--r--tests/topotests/bgp_evpn_maximum_prefix/r1/frr.conf30
-rw-r--r--tests/topotests/bgp_evpn_maximum_prefix/r2/frr.conf25
-rw-r--r--tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py92
-rw-r--r--tests/topotests/bgp_evpn_mh/leaf1/evpn.conf1
-rw-r--r--tests/topotests/bgp_evpn_mh/leaf2/evpn.conf1
-rw-r--r--tests/topotests/bgp_evpn_mh/spine1/evpn.conf1
-rw-r--r--tests/topotests/bgp_evpn_mh/spine2/evpn.conf1
-rw-r--r--tests/topotests/bgp_evpn_mh/test_evpn_mh.py27
-rw-r--r--tests/topotests/bgp_evpn_mh/torm11/evpn.conf1
-rw-r--r--tests/topotests/bgp_evpn_mh/torm12/evpn.conf1
-rw-r--r--tests/topotests/bgp_evpn_mh/torm21/evpn.conf1
-rw-r--r--tests/topotests/bgp_evpn_mh/torm22/evpn.conf1
-rwxr-xr-xtests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py6
-rw-r--r--tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py4
-rw-r--r--tests/topotests/bgp_evpn_vxlan_svd_topo1/PE1/evpn.vni.json2
-rw-r--r--tests/topotests/bgp_evpn_vxlan_svd_topo1/PE2/evpn.vni.json2
-rw-r--r--tests/topotests/bgp_extcomm_list_delete/test_bgp_extcomm-list_delete.py9
-rw-r--r--tests/topotests/bgp_extended_link_bandwidth/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step11/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_extended_link_bandwidth/r1/frr.conf32
-rw-r--r--tests/topotests/bgp_extended_link_bandwidth/r2/frr.conf10
-rw-r--r--tests/topotests/bgp_extended_link_bandwidth/test_bgp_extended_link_bandwidth.py95
-rw-r--r--tests/topotests/bgp_extended_optional_parameters_length/test_bgp_extended_optional_parameters_length.py4
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/r1/frr.conf (renamed from tests/topotests/bgp_gr_restart_retain_routes/r1/bgpd.conf)7
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/r1/zebra.conf7
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/r2/frr.conf (renamed from tests/topotests/bgp_gr_restart_retain_routes/r2/bgpd.conf)5
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/r2/zebra.conf5
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/r3/frr.conf19
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/r4/frr.conf13
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_per_neighbor_restart_retain_routes.py108
-rw-r--r--tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_restart_retain_routes.py19
-rw-r--r--tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/add_routes.py36
-rw-r--r--tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/adjacencies.py24
-rw-r--r--tests/topotests/bgp_l3vpn_to_bgp_vrf/scripts/scale_up.py4
-rw-r--r--tests/topotests/bgp_large_comm_list_match/test_bgp_large_comm_list_match.py4
-rw-r--r--tests/topotests/bgp_link_bw_ip/r2/bgp-route-3.json2
-rw-r--r--tests/topotests/bgp_link_bw_ip/r5/bgpd.conf1
-rw-r--r--tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py34
-rw-r--r--tests/topotests/bgp_llgr/test_bgp_llgr.py2
-rw-r--r--tests/topotests/bgp_local_asn/test_bgp_local_asn_agg.py2
-rw-r--r--tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_agg.py10
-rw-r--r--tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_topo1.py73
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step11/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/h1/zebra.conf6
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/h2/zebra.conf6
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/h3/zebra.conf6
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv4.json70
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step1.json90
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step2.json90
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgpd.conf23
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r1/zebra.conf16
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv4.json46
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step1.json53
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step2.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgpd.conf11
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r2/isisd.conf24
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r2/zebra.conf12
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv4.json46
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step1.json53
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step2.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgpd.conf11
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r3/isisd.conf24
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r3/zebra.conf12
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv4.json46
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step1.json49
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step2.json49
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgpd.conf13
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r4/isisd.conf26
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r4/zebra.conf12
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv4.json46
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step1.json49
-rwxr-xr-xtests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step2.json49
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgpd.conf13
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r5/isisd.conf26
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r5/zebra.conf12
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv4.json46
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step1.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step2.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgpd.conf17
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r6/isisd.conf31
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r6/zebra.conf16
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv4.json46
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step1.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step2.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgpd.conf21
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r7/zebra.conf12
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv4.json46
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step1.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step2.json48
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgpd.conf21
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/r8/zebra.conf12
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv4.json58
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step1.json62
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step2.json62
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgpd.conf26
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/isisd.conf40
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/zebra.conf21
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/bgpd.conf21
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/isisd.conf36
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/zebra.conf8
-rw-r--r--tests/topotests/bgp_nexthop_mp_ipv4_6/test_nexthop_mp_ipv4_6.py283
-rw-r--r--tests/topotests/bgp_oad/test_bgp_oad.py4
-rw-r--r--tests/topotests/bgp_orf/test_bgp_orf.py4
-rw-r--r--tests/topotests/bgp_path_attributes_topo1/test_bgp_path_attributes.py1
-rw-r--r--tests/topotests/bgp_path_selection/test_bgp_path_selection.py27
-rw-r--r--tests/topotests/bgp_peer_graceful_shutdown/test_bgp_peer_graceful_shutdown.py4
-rw-r--r--tests/topotests/bgp_peer_group/r1/bgpd.conf4
-rw-r--r--tests/topotests/bgp_peer_group/r1/zebra.conf3
-rw-r--r--tests/topotests/bgp_peer_group/r2/bgpd.conf4
-rw-r--r--tests/topotests/bgp_peer_group/r2/zebra.conf3
-rw-r--r--tests/topotests/bgp_peer_group/test_bgp_peer-group.py49
-rwxr-xr-xtests/topotests/bgp_peer_type_multipath_relax/test_bgp_peer-type_multipath-relax.py1
-rw-r--r--tests/topotests/bgp_prefix_list_any/test_bgp_prefix_list_any.py4
-rw-r--r--tests/topotests/bgp_remove_private_as_route_map/test_bgp_remove_private_as_route_map.py4
-rw-r--r--tests/topotests/bgp_rmap_extcommunity_none/test_bgp_rmap_extcommunity_none.py4
-rw-r--r--tests/topotests/bgp_route_aggregation/test_bgp_aggregation.py7
-rw-r--r--tests/topotests/bgp_route_map_delay_timer/test_bgp_route_map_delay_timer.py4
-rw-r--r--tests/topotests/bgp_route_map_match_ipv6_nexthop/test_bgp_route_map_match_ipv6_nexthop.py4
-rw-r--r--tests/topotests/bgp_route_map_match_tag_untagged/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_route_map_match_tag_untagged/r1/frr.conf19
-rw-r--r--tests/topotests/bgp_route_map_match_tag_untagged/test_bgp_route_map_match_tag_untagged.py83
-rw-r--r--tests/topotests/bgp_route_server_client/test_bgp_route_server_client.py4
-rw-r--r--tests/topotests/bgp_rpki_topo1/r2/bgpd.conf2
-rw-r--r--tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py6
-rw-r--r--tests/topotests/bgp_sender_as_path_loop_detection/test_bgp_sender-as-path-loop-detection.py77
-rw-r--r--tests/topotests/bgp_set_aspath_exclude/r1/bgpd.conf9
-rw-r--r--tests/topotests/bgp_set_aspath_exclude/r3/zebra.conf1
-rw-r--r--tests/topotests/bgp_set_aspath_exclude/test_bgp_set_aspath_exclude.py70
-rw-r--r--tests/topotests/bgp_software_version/test_bgp_software_version.py4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c11/bgpd.conf (renamed from tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c11/staticd.conf4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c11/zebra.conf6
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c12/bgpd.conf (renamed from tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c12/staticd.conf4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c12/zebra.conf6
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c21/bgpd.conf (renamed from tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c21/staticd.conf4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c21/zebra.conf6
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c22/bgpd.conf (renamed from tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c22/staticd.conf5
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c22/zebra.conf9
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c31/bgpd.conf (renamed from tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c31/staticd.conf4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c31/zebra.conf6
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c32/bgpd.conf (renamed from tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c32/staticd.conf4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/c32/zebra.conf6
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r1/bgpd.conf61
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r1/staticd.conf4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r1/zebra.conf32
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r2/bgpd.conf50
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r2/staticd.conf4
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r2/zebra.conf29
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r3/bgpd.conf50
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r3/staticd.conf6
-rw-r--r--tests/topotests/bgp_srv6_sid_reachability/r3/zebra.conf29
-rwxr-xr-xtests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py169
-rwxr-xr-xtests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py20
-rw-r--r--tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py3
-rw-r--r--tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py2
-rw-r--r--tests/topotests/bgp_tcp_mss/test_bgp_vrf_tcp_mss.py135
-rw-r--r--tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json50
-rw-r--r--tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py168
-rw-r--r--tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py49
-rw-r--r--tests/topotests/bgp_vrf_different_asn/__init__.py (renamed from tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/bgp_vrf_different_asn/r1/frr.conf18
-rw-r--r--tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py107
-rw-r--r--tests/topotests/bgp_vrf_dynamic_route_leak_topo3/test_bgp_vrf_dynamic_route_leak_topo3.py104
-rw-r--r--tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-1.py27
-rw-r--r--tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-2.py52
-rw-r--r--tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-3.py78
-rw-r--r--tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf10_ipv4_unicast.json7
-rw-r--r--tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf20_ipv4_unicast.json7
-rwxr-xr-xtests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py18
-rw-r--r--tests/topotests/bgp_vrf_lite_best_path_test/test_bgp_vrf_lite_best_path_topo2.py334
-rw-r--r--tests/topotests/bgp_vrf_route_leak_basic/r1/bgpd.conf6
-rw-r--r--tests/topotests/bgp_vrf_route_leak_basic/test_bgp-vrf-route-leak-basic.py237
-rw-r--r--tests/topotests/config_timing/test_config_timing.py8
-rwxr-xr-xtests/topotests/conftest.py111
-rw-r--r--tests/topotests/eigrp_topo1/test_eigrp_topo1.py1
-rw-r--r--tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py6
-rw-r--r--tests/topotests/example_test/test_template.py1
-rw-r--r--tests/topotests/fpm_testing_topo1/r1/fpm_counters.json8
-rw-r--r--tests/topotests/fpm_testing_topo1/r1/fpm_stub.conf (renamed from tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref.diff)0
-rw-r--r--tests/topotests/fpm_testing_topo1/r1/routes_summ.json27
-rw-r--r--tests/topotests/fpm_testing_topo1/r1/routes_summ_removed.json20
-rw-r--r--tests/topotests/fpm_testing_topo1/r1/sharpd.conf (renamed from tests/topotests/isis_tilfa_topo1/rt2/step10/show_ip_route.ref.diff)0
-rw-r--r--tests/topotests/fpm_testing_topo1/r1/zebra.conf5
-rw-r--r--tests/topotests/fpm_testing_topo1/test_fpm_topo1.py135
-rw-r--r--tests/topotests/grpc_basic/test_basic_grpc.py94
-rwxr-xr-xtests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py19
-rw-r--r--tests/topotests/isis_srv6_topo1/test_isis_srv6_topo1.py105
-rw-r--r--tests/topotests/isis_te_topo1/test_isis_te_topo1.py36
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step1/show_mpls_table.ref18
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step1/show_yang_interface_isis_adjacencies.ref4
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step12/show_ip_route.ref.diff19
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step12/show_ipv6_route.ref.diff18
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step12/show_mpls_table.ref.diff28
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref294
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref121
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref140
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref294
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref121
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref140
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref291
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref118
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref115
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref.diff33
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref294
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref121
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref140
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref.diff33
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref294
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref121
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref140
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref291
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref118
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref115
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref.diff33
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref294
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref121
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref.diff14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref140
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref.diff33
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref294
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref121
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref140
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref.diff64
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step1/show_ipv6_route.ref4
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step1/show_mpls_table.ref39
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step10/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step11/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step11/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step11/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step12/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step12/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step12/show_mpls_table.ref.diff20
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref447
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref.diff169
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref181
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref.diff72
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref233
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref.diff102
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref.diff169
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref.diff72
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref.diff102
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref464
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref.diff192
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref162
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref.diff146
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref142
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref.diff200
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref.diff192
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref.diff146
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref.diff200
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref405
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref.diff288
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref155
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref.diff139
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref155
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref.diff207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref.diff288
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref.diff139
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref.diff207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref.diff119
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref.diff74
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref.diff182
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step1/show_ipv6_route.ref14
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step1/show_mpls_table.ref39
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step1/show_yang_interface_isis_adjacencies.ref8
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step10/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step10/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step10/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step11/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step11/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step11/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step12/show_ip_route.ref.diff58
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step12/show_ipv6_route.ref.diff45
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step12/show_mpls_table.ref.diff60
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref405
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref.diff288
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref155
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref.diff139
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref155
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref.diff206
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref.diff288
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref.diff139
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref.diff206
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref.diff101
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref.diff83
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref.diff130
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref556
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref.diff32
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref222
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref.diff32
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref236
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref.diff71
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref.diff32
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref.diff32
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref.diff71
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref563
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref.diff133
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step1/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step1/show_mpls_table.ref27
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step10/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step10/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step10/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step11/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step11/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step11/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step12/show_ip_route.ref.diff144
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step12/show_ipv6_route.ref.diff50
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step12/show_mpls_table.ref.diff78
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref296
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref.diff367
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref121
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref.diff161
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref1
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref.diff265
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref.diff367
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref.diff161
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref.diff265
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref.diff56
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref.diff38
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref.diff74
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref500
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref201
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref229
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref.diff53
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref.diff53
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref.diff110
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step1/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step1/show_mpls_table.ref27
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref485
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref194
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref301
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step11/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step11/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step11/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step12/show_ip_route.ref.diff151
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step12/show_ipv6_route.ref.diff53
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step12/show_mpls_table.ref.diff80
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref439
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref.diff161
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref175
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref.diff95
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref189
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref.diff166
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref.diff161
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref.diff95
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref.diff166
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref.diff146
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref506
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref207
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref275
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step1/show_ipv6_route.ref4
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step1/show_mpls_table.ref22
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_down.ref6
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_up.ref6
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref354
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref147
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref127
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step11/show_ip_route.ref.diff125
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step11/show_ipv6_route.ref.diff56
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step11/show_mpls_table.ref.diff106
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step12/show_ip_route.ref.diff153
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step12/show_ipv6_route.ref.diff66
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step12/show_mpls_table.ref.diff78
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref413
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref173
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref224
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref413
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref173
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref224
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref.diff0
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref395
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref.diff70
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref155
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref.diff70
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref165
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref.diff109
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref413
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref.diff70
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref173
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref.diff70
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref224
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref.diff112
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref413
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref.diff38
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref173
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref.diff38
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref224
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref.diff74
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref407
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref167
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref178
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref.diff52
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref413
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref173
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref.diff24
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref224
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref.diff52
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref413
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref173
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref.diff11
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref224
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref.diff39
-rw-r--r--tests/topotests/isis_tilfa_topo1/rt6/zebra.conf1
-rwxr-xr-xtests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py613
-rw-r--r--tests/topotests/isis_topo1/test_isis_topo1.py2
-rw-r--r--tests/topotests/key_sendaccept/r1/frr.conf31
-rw-r--r--tests/topotests/key_sendaccept/r2/frr.conf20
-rw-r--r--tests/topotests/key_sendaccept/test_keychain.py150
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync.ref4
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r1_eth1_shutdown.ref4
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r2/show_ospf_ldp_sync_r2_eth1_shutdown.ref4
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync.ref4
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r1_eth1_shutdown.ref4
-rw-r--r--tests/topotests/ldp_sync_ospf_topo1/r3/show_ospf_ldp_sync_r2_eth1_shutdown.ref4
-rw-r--r--tests/topotests/lib/bmp_collector/bgp/open/__init__.py32
-rw-r--r--tests/topotests/lib/bmp_collector/bgp/update/__init__.py30
-rw-r--r--tests/topotests/lib/bmp_collector/bgp/update/af.py6
-rw-r--r--tests/topotests/lib/bmp_collector/bgp/update/nlri.py62
-rw-r--r--tests/topotests/lib/bmp_collector/bgp/update/path_attributes.py119
-rw-r--r--tests/topotests/lib/bmp_collector/bgp/update/rd.py24
-rw-r--r--tests/topotests/lib/bmp_collector/bmp.py173
-rwxr-xr-xtests/topotests/lib/bmp_collector/bmpserver4
-rw-r--r--tests/topotests/lib/checkping.py12
-rw-r--r--tests/topotests/lib/common_config.py16
-rwxr-xr-xtests/topotests/lib/fe_client.py2
-rwxr-xr-xtests/topotests/lib/grpc-query.py96
-rw-r--r--tests/topotests/lib/snmptest.py13
-rw-r--r--tests/topotests/lib/topogen.py25
-rw-r--r--tests/topotests/lib/topojson.py8
-rw-r--r--tests/topotests/lib/topotest.py64
-rw-r--r--tests/topotests/mgmt_fe_client/mgmt_pb2.py5035
-rw-r--r--tests/topotests/mgmt_oper/oper.py92
-rw-r--r--tests/topotests/mgmt_oper/simple-results/result-intf-eth0-exact.json3
-rw-r--r--tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json3
-rw-r--r--tests/topotests/mgmt_oper/test_oper.py1
-rw-r--r--tests/topotests/mgmt_oper/test_scale.py1
-rw-r--r--tests/topotests/mgmt_rpc/r1/frr.conf (renamed from tests/topotests/isis_tilfa_topo1/rt2/step10/show_ipv6_route.ref.diff)0
-rw-r--r--tests/topotests/mgmt_rpc/test_rpc.py74
-rw-r--r--tests/topotests/mgmt_tests/test_yang_mgmt.py239
-rwxr-xr-xtests/topotests/msdp_topo1/test_msdp_topo1.py4
-rw-r--r--tests/topotests/multicast_pim_bsm_topo1/test_mcast_pim_bsmp_01.py2
-rw-r--r--tests/topotests/multicast_pim_bsm_topo2/test_mcast_pim_bsmp_02.py2
-rwxr-xr-xtests/topotests/multicast_pim_sm_topo1/test_multicast_pim_sm_topo1.py4
-rwxr-xr-xtests/topotests/multicast_pim_sm_topo2/test_multicast_pim_sm_topo2.py4
-rwxr-xr-xtests/topotests/multicast_pim_sm_topo3/test_multicast_pim_sm_topo3.py17
-rw-r--r--tests/topotests/munet/__main__.py63
-rw-r--r--tests/topotests/munet/args.py89
-rw-r--r--tests/topotests/munet/base.py66
-rw-r--r--tests/topotests/munet/cleanup.py34
-rw-r--r--tests/topotests/munet/cli.py12
-rw-r--r--tests/topotests/munet/logconf-mutest.yaml5
-rw-r--r--tests/topotests/munet/mucmd.py16
-rw-r--r--tests/topotests/munet/mulog.py26
-rw-r--r--tests/topotests/munet/munet-schema.json51
-rw-r--r--tests/topotests/munet/mutest/__main__.py89
-rw-r--r--tests/topotests/munet/mutest/userapi.py102
-rw-r--r--tests/topotests/munet/native.py467
-rw-r--r--tests/topotests/munet/parser.py10
-rw-r--r--tests/topotests/munet/testing/fixtures.py36
-rw-r--r--tests/topotests/munet/testing/hooks.py93
-rw-r--r--tests/topotests/nb_config/test_nb_config.py22
-rw-r--r--tests/topotests/nhrp_topo/test_nhrp_topo.py2
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r5/ospf6d.conf22
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r6/ospf6d.conf15
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r7/ospf6d.conf15
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r7/zebra.conf3
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r8/ospf6d.conf13
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r8/zebra.conf3
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r9/ospf6d.conf11
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/r9/zebra.conf5
-rw-r--r--tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py117
-rw-r--r--tests/topotests/ospf_basic_functionality/test_ospf_flood_reduction.py33
-rw-r--r--tests/topotests/ospf_basic_functionality/test_ospf_nssa.py2
-rw-r--r--tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py6
-rw-r--r--tests/topotests/ospf_basic_functionality/test_ospf_single_area.py4
-rw-r--r--tests/topotests/ospf_gr_helper/test_ospf_gr_helper2.py6
-rw-r--r--tests/topotests/ospf_instance_redistribute/test_ospf_instance_redistribute.py28
-rw-r--r--tests/topotests/ospf_metric_propagation/r1/frr.conf6
-rw-r--r--tests/topotests/ospf_metric_propagation/r1/show_ip_route-1.json19
-rw-r--r--tests/topotests/ospf_metric_propagation/r1/show_ip_route-2.json19
-rw-r--r--tests/topotests/ospf_metric_propagation/r1/show_ip_route-3.json19
-rw-r--r--tests/topotests/ospf_metric_propagation/r1/show_ip_route-4.json19
-rw-r--r--tests/topotests/ospf_metric_propagation/r1/show_ip_route-5.json19
-rw-r--r--tests/topotests/ospf_metric_propagation/r1/show_ip_route-6.json19
-rw-r--r--tests/topotests/ospf_metric_propagation/r2/frr.conf6
-rw-r--r--tests/topotests/ospf_metric_propagation/r3/frr.conf6
-rw-r--r--tests/topotests/ospf_metric_propagation/r4/frr.conf6
-rw-r--r--tests/topotests/ospf_metric_propagation/ra/frr.conf6
-rw-r--r--tests/topotests/ospf_metric_propagation/rb/frr.conf6
-rw-r--r--tests/topotests/ospf_metric_propagation/rc/frr.conf4
-rw-r--r--tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py12
-rw-r--r--tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py8
-rw-r--r--tests/topotests/ospf_nssa_topo1/test_ospf_nssa_topo1.py4
-rw-r--r--tests/topotests/ospf_p2mp/r1/frr-p2mp-non-broadcast.conf26
-rw-r--r--tests/topotests/ospf_p2mp/r1/frr-p2mp.conf23
-rw-r--r--tests/topotests/ospf_p2mp/r2/frr-p2mp-non-broadcast.conf29
-rw-r--r--tests/topotests/ospf_p2mp/r2/frr-p2mp.conf26
-rw-r--r--tests/topotests/ospf_p2mp/r3/frr-p2mp-non-broadcast.conf28
-rw-r--r--tests/topotests/ospf_p2mp/r3/frr-p2mp.conf25
-rw-r--r--tests/topotests/ospf_p2mp/r4/frr-p2mp-non-broadcast.conf28
-rw-r--r--tests/topotests/ospf_p2mp/r4/frr-p2mp.conf25
-rw-r--r--tests/topotests/ospf_p2mp/test_ospf_p2mp_broadcast.py472
-rw-r--r--tests/topotests/ospf_p2mp/test_ospf_p2mp_non_broadcast.py467
-rw-r--r--tests/topotests/ospf_single_switch/r1_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/r2_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/r3_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/r4_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/r5_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/r6_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/r7_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/r8_frr.conf18
-rw-r--r--tests/topotests/ospf_single_switch/test_ospf_single_switch.py199
-rw-r--r--tests/topotests/ospf_suppress_fa/r2/ospfd.conf1
-rw-r--r--tests/topotests/ospfapi/test_ospf_clientapi.py24
-rw-r--r--tests/topotests/ospfv3_basic_functionality/test_ospfv3_authentication.py131
-rw-r--r--tests/topotests/ospfv3_basic_functionality/test_ospfv3_nssa2.py2
-rw-r--r--tests/topotests/ospfv3_basic_functionality/test_ospfv3_rte_calc.py4
-rw-r--r--tests/topotests/ospfv3_basic_functionality/test_ospfv3_single_area.py2
-rw-r--r--tests/topotests/pim_basic/test_pim.py5
-rw-r--r--tests/topotests/pim_igmp_vrf/r1/ospf_blue_route.json54
-rw-r--r--tests/topotests/pim_igmp_vrf/r1/ospf_red_route.json54
-rw-r--r--tests/topotests/pim_igmp_vrf/r1/ospfd.conf2
-rw-r--r--tests/topotests/pim_igmp_vrf/r1/pimd.conf1
-rw-r--r--tests/topotests/pim_igmp_vrf/r11/ospfd.conf2
-rw-r--r--tests/topotests/pim_igmp_vrf/r12/ospfd.conf2
-rwxr-xr-xtests/topotests/pim_igmp_vrf/test_pim_vrf.py76
-rw-r--r--tests/topotests/pytest.ini1
-rw-r--r--tests/topotests/rip_bfd_topo1/test_rip_bfd_topo1.py222
-rw-r--r--tests/topotests/route_scale/scale_test_common.py2
-rw-r--r--tests/topotests/route_scale/test_route_scale1.py18
-rw-r--r--tests/topotests/route_scale/test_route_scale2.py18
-rwxr-xr-xtests/topotests/srv6_encap_src_addr/test_srv6_encap_src_addr.py24
-rw-r--r--tests/topotests/static_routing_with_ebgp/test_static_routes_topo4_ebgp.py14
-rw-r--r--tests/topotests/static_routing_with_ibgp/test_static_routes_topo4_ibgp.py12
-rwxr-xr-xtests/topotests/tc_basic/test_tc_basic.py17
-rw-r--r--tests/topotests/zebra_netlink/test_zebra_netlink.py2
-rw-r--r--tests/topotests/zebra_nht_resolution/test_verify_nh_resolution.py49
-rw-r--r--tests/topotests/zebra_seg6_route/r1/routes_setup.json28
-rwxr-xr-xtests/topotests/zebra_seg6_route/test_zebra_seg6_route.py10
746 files changed, 58513 insertions, 15894 deletions
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 b2e8de5..eb4e51a 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
@@ -1,9 +1,9 @@
BGP table version is 1, local router ID is 192.168.0.1, vrf id 0
-Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
+Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
- Network Next Hop Metric LocPrf Weight Path
- *> 192.168.0.0 0.0.0.0 0 32768 i
+ Network Next Hop Metric LocPrf Weight Path
+ *> 192.168.0.0 0.0.0.0 0 32768 i
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 7bee704..8fe3ea4 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
@@ -1,9 +1,9 @@
BGP table version is 1, local router ID is 192.168.0.1, vrf id 0
-Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
+Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
- Network Next Hop Metric LocPrf Weight Path
- *> 192.168.0.0/24 0.0.0.0 0 32768 i
+ Network Next Hop Metric LocPrf Weight Path
+ *> 192.168.0.0/24 0.0.0.0 0 32768 i
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 31071e7..67b9071 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
@@ -1,10 +1,10 @@
BGP table version is 1, local router ID is 192.168.0.1, vrf id 0
Default local pref 100, local AS 100
-Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
+Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
- Network Next Hop Metric LocPrf Weight Path
- *> 192.168.0.0/24 0.0.0.0 0 32768 i
+ Network Next Hop Metric LocPrf Weight Path
+ *> 192.168.0.0/24 0.0.0.0 0 32768 i
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 53c4793..4f21a57 100644
--- a/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv4.ref
@@ -1,7 +1,7 @@
BGP table version is 1, local router ID is 192.168.0.1
-Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
+Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
- Network Next Hop Metric LocPrf Weight Path
- *> 192.168.0.0 0.0.0.0 0 32768 i
+ Network Next Hop Metric LocPrf Weight Path
+ *> 192.168.0.0 0.0.0.0 0 32768 i
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 fe3f072..69e44e7 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
@@ -1,9 +1,9 @@
BGP table version is 1, local router ID is 192.168.0.1, vrf id 0
-Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
+Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
- Network Next Hop Metric LocPrf Weight Path
- *> fc00::/64 :: 0 32768 i
+ Network Next Hop Metric LocPrf Weight Path
+ *> fc00::/64 :: 0 32768 i
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 363b4f5..77aab38 100644
--- a/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6.ref
+++ b/tests/topotests/all_protocol_startup/r1/show_bgp_ipv6.ref
@@ -1,7 +1,7 @@
BGP table version is 1, local router ID is 192.168.0.1
-Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
+Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Origin codes: i - IGP, e - EGP, ? - incomplete
- Network Next Hop Metric LocPrf Weight Path
- *> fc00::/64 :: 0 32768 i
+ Network Next Hop Metric LocPrf Weight Path
+ *> fc00::/64 :: 0 32768 i
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 8c3229b..a99400a 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
@@ -1,10 +1,10 @@
BGP table version is 1, local router ID is 192.168.0.1, vrf id 0
Default local pref 100, local AS 100
-Status codes: s suppressed, d damped, h history, * valid, > best, = multipath,
+Status codes: s suppressed, d damped, h history, u unsorted, * valid, > best, = multipath,
i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes: i - IGP, e - EGP, ? - incomplete
RPKI validation codes: V valid, I invalid, N Not found
- Network Next Hop Metric LocPrf Weight Path
- *> fc00::/64 :: 0 32768 i
+ Network Next Hop Metric LocPrf Weight Path
+ *> fc00::/64 :: 0 32768 i
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 7e28f04..f52b51d 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
@@ -1,5 +1,5 @@
r1-eth0 is up
- ifindex X, MTU 1500 bytes, BW XX Mbit <UP,BROADCAST,RUNNING,MULTICAST>
+ ifindex X, MTU 1500 bytes, BW XX Mbit <UP,LOWER_UP,BROADCAST,RUNNING,MULTICAST>
Internet Address 192.168.0.1/24, Broadcast 192.168.0.255, Area 0.0.0.0
MTU mismatch detection: enabled
Router ID 192.168.0.1, Network Type BROADCAST, Cost: 10
@@ -12,7 +12,7 @@ r1-eth0 is up
Neighbor Count is 0, Adjacent neighbor count is 0
Graceful Restart hello delay: 10s
r1-eth3 is up
- ifindex X, MTU 1500 bytes, BW XX Mbit <UP,BROADCAST,RUNNING,MULTICAST>
+ ifindex X, MTU 1500 bytes, BW XX Mbit <UP,LOWER_UP,BROADCAST,RUNNING,MULTICAST>
Internet Address 192.168.3.1/26, Broadcast 192.168.3.63, Area 0.0.0.0
MTU mismatch detection: enabled
Router ID 192.168.0.1, Network Type BROADCAST, Cost: 10
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 e067cdb..b4bc1e1 100644
--- a/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
+++ b/tests/topotests/all_protocol_startup/test_all_protocol_startup.py
@@ -54,7 +54,7 @@ fatal_error = ""
def build_topo(tgen):
router = tgen.add_router("r1")
for i in range(0, 10):
- tgen.add_switch("sw%d" % i).add_link(router)
+ tgen.add_switch("sw{}".format(i)).add_link(router)
#####################################################
@@ -67,7 +67,7 @@ def build_topo(tgen):
def setup_module(module):
global fatal_error
- print("\n\n** %s: Setup Topology" % module.__name__)
+ print("\n\n** {}: Setup Topology".format(module.__name__))
print("******************************************\n")
thisDir = os.path.dirname(os.path.realpath(__file__))
@@ -85,34 +85,36 @@ def setup_module(module):
#
# Main router
for i in range(1, 2):
- net["r%s" % i].loadConf("mgmtd", "%s/r%s/zebra.conf" % (thisDir, i))
- net["r%s" % i].loadConf("zebra", "%s/r%s/zebra.conf" % (thisDir, i))
- net["r%s" % i].loadConf("ripd", "%s/r%s/ripd.conf" % (thisDir, i))
- net["r%s" % i].loadConf("ripngd", "%s/r%s/ripngd.conf" % (thisDir, i))
- net["r%s" % i].loadConf("ospfd", "%s/r%s/ospfd.conf" % (thisDir, i))
+ net["r{}".format(i)].loadConf("mgmtd", "{}/r{}/zebra.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("zebra", "{}/r{}/zebra.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("ripd", "{}/r{}/ripd.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("ripngd", "{}/r{}/ripngd.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("ospfd", "{}/r{}/ospfd.conf".format(thisDir, i))
if net["r1"].checkRouterVersion("<", "4.0"):
- net["r%s" % i].loadConf(
- "ospf6d", "%s/r%s/ospf6d.conf-pre-v4" % (thisDir, i)
+ net["r{}".format(i)].loadConf(
+ "ospf6d", "{}/r{}/ospf6d.conf-pre-v4".format(thisDir, i)
)
else:
- net["r%s" % i].loadConf("ospf6d", "%s/r%s/ospf6d.conf" % (thisDir, i))
- net["r%s" % i].loadConf("isisd", "%s/r%s/isisd.conf" % (thisDir, i))
- net["r%s" % i].loadConf("bgpd", "%s/r%s/bgpd.conf" % (thisDir, i))
- if net["r%s" % i].daemon_available("ldpd"):
+ net["r{}".format(i)].loadConf(
+ "ospf6d", "{}/r{}/ospf6d.conf".format(thisDir, i)
+ )
+ net["r{}".format(i)].loadConf("isisd", "{}/r{}/isisd.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("bgpd", "{}/r{}/bgpd.conf".format(thisDir, i))
+ if net["r{}".format(i)].daemon_available("ldpd"):
# Only test LDPd if it's installed and Kernel >= 4.5
- net["r%s" % i].loadConf("ldpd", "%s/r%s/ldpd.conf" % (thisDir, i))
- net["r%s" % i].loadConf("sharpd")
- net["r%s" % i].loadConf("nhrpd", "%s/r%s/nhrpd.conf" % (thisDir, i))
- net["r%s" % i].loadConf("babeld", "%s/r%s/babeld.conf" % (thisDir, i))
- net["r%s" % i].loadConf("pbrd", "%s/r%s/pbrd.conf" % (thisDir, i))
- tgen.gears["r%s" % i].start()
+ net["r{}".format(i)].loadConf("ldpd", "{}/r{}/ldpd.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("sharpd")
+ net["r{}".format(i)].loadConf("nhrpd", "{}/r{}/nhrpd.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("babeld", "{}/r{}/babeld.conf".format(thisDir, i))
+ net["r{}".format(i)].loadConf("pbrd", "{}/r{}/pbrd.conf".format(thisDir, i))
+ tgen.gears["r{}".format(i)].start()
# For debugging after starting FRR daemons, uncomment the next line
# tgen.mininet_cli()
def teardown_module(module):
- print("\n\n** %s: Shutdown Topology" % module.__name__)
+ print("\n\n** {}: Shutdown Topology".format(module.__name__))
print("******************************************\n")
tgen = get_topogen()
tgen.stop_topology()
@@ -133,7 +135,7 @@ def test_router_running():
# Starting Routers
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
# For debugging after starting FRR daemons, uncomment the next line
@@ -158,7 +160,9 @@ def test_error_messages_vtysh():
#
# VTYSH output from router
- vtystdout = net["r%s" % i].cmd('vtysh -c "show version" 2> /dev/null').rstrip()
+ vtystdout = (
+ net["r{}".format(i)].cmd('vtysh -c "show version" 2> /dev/null').rstrip()
+ )
# Fix newlines (make them all the same)
vtystdout = ("\n".join(vtystdout.splitlines()) + "\n").rstrip()
@@ -166,16 +170,20 @@ def test_error_messages_vtysh():
vtystdout = re.sub(r"FRRouting [0-9]+.*", "", vtystdout, flags=re.DOTALL)
if vtystdout == "":
- print("r%s StdOut ok" % i)
+ print("r{} StdOut ok".format(i))
- assert vtystdout == "", "Vtysh StdOut Output check failed for router r%s" % i
+ assert (
+ vtystdout == ""
+ ), "Vtysh StdOut Output check failed for router r{}".format(i)
#
# Second checking Standard Error
#
# VTYSH StdErr output from router
- vtystderr = net["r%s" % i].cmd('vtysh -c "show version" > /dev/null').rstrip()
+ vtystderr = (
+ net["r{}".format(i)].cmd('vtysh -c "show version" > /dev/null').rstrip()
+ )
# Fix newlines (make them all the same)
vtystderr = ("\n".join(vtystderr.splitlines()) + "\n").rstrip()
@@ -183,13 +191,15 @@ def test_error_messages_vtysh():
# vtystderr = re.sub(r"FRRouting [0-9]+.*", "", vtystderr, flags=re.DOTALL)
if vtystderr == "":
- print("r%s StdErr ok" % i)
+ print("r{} StdErr ok".format(i))
- assert vtystderr == "", "Vtysh StdErr Output check failed for router r%s" % i
+ assert (
+ vtystderr == ""
+ ), "Vtysh StdErr Output check failed for router r{}".format(i)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -213,37 +223,37 @@ def test_error_messages_daemons():
error_logs = ""
for i in range(1, 2):
- log = net["r%s" % i].getStdErr("ripd")
+ log = net["r{}".format(i)].getStdErr("ripd")
if log:
- error_logs += "r%s RIPd StdErr Output:\n" % i
+ error_logs += "r{} RIPd StdErr Output:\n".format(i)
error_logs += log
- log = net["r%s" % i].getStdErr("ripngd")
+ log = net["r{}".format(i)].getStdErr("ripngd")
if log:
- error_logs += "r%s RIPngd StdErr Output:\n" % i
+ error_logs += "r{} RIPngd StdErr Output:\n".format(i)
error_logs += log
- log = net["r%s" % i].getStdErr("ospfd")
+ log = net["r{}".format(i)].getStdErr("ospfd")
if log:
- error_logs += "r%s OSPFd StdErr Output:\n" % i
+ error_logs += "r{} OSPFd StdErr Output:\n".format(i)
error_logs += log
- log = net["r%s" % i].getStdErr("ospf6d")
+ log = net["r{}".format(i)].getStdErr("ospf6d")
if log:
- error_logs += "r%s OSPF6d StdErr Output:\n" % i
+ error_logs += "r{} OSPF6d StdErr Output:\n".format(i)
error_logs += log
- log = net["r%s" % i].getStdErr("isisd")
+ log = net["r{}".format(i)].getStdErr("isisd")
# ISIS shows debugging enabled status on StdErr
# Remove these messages
log = re.sub(r"^IS-IS .* debugging is on.*", "", log).rstrip()
if log:
- error_logs += "r%s ISISd StdErr Output:\n" % i
+ error_logs += "r{} ISISd StdErr Output:\n".format(i)
error_logs += log
- log = net["r%s" % i].getStdErr("bgpd")
+ log = net["r{}".format(i)].getStdErr("bgpd")
if log:
- error_logs += "r%s BGPd StdErr Output:\n" % i
+ error_logs += "r{} BGPd StdErr Output:\n".format(i)
error_logs += log
- if net["r%s" % i].daemon_available("ldpd"):
- log = net["r%s" % i].getStdErr("ldpd")
+ if net["r{}".format(i)].daemon_available("ldpd"):
+ log = net["r{}".format(i)].getStdErr("ldpd")
if log:
- error_logs += "r%s LDPd StdErr Output:\n" % i
+ error_logs += "r{} LDPd StdErr Output:\n".format(i)
error_logs += log
log = net["r1"].getStdErr("nhrpd")
@@ -251,27 +261,27 @@ def test_error_messages_daemons():
# Ignore these
log = re.sub(r".*YANG model.*not embedded.*", "", log).rstrip()
if log:
- error_logs += "r%s NHRPd StdErr Output:\n" % i
+ error_logs += "r{} NHRPd StdErr Output:\n".format(i)
error_logs += log
log = net["r1"].getStdErr("babeld")
if log:
- error_logs += "r%s BABELd StdErr Output:\n" % i
+ error_logs += "r{} BABELd StdErr Output:\n".format(i)
error_logs += log
log = net["r1"].getStdErr("pbrd")
if log:
- error_logs += "r%s PBRd StdErr Output:\n" % i
+ error_logs += "r{} PBRd StdErr Output:\n".format(i)
error_logs += log
- log = net["r%s" % i].getStdErr("zebra")
+ log = net["r{}".format(i)].getStdErr("zebra")
if log:
- error_logs += "r%s Zebra StdErr Output:\n" % i
+ error_logs += "r{} Zebra StdErr Output:\n".format(i)
error_logs += log
if error_logs:
sys.stderr.write(
- "Failed check for StdErr Output on daemons:\n%s\n" % error_logs
+ "Failed check for StdErr Output on daemons:\n{}\n".format(error_logs)
)
# Ignoring the issue if told to ignore (ie not yet fixed)
@@ -317,18 +327,20 @@ def test_converge_protocols():
# Make sure that all daemons are running
failures = 0
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
print("Show that v4 routes are right\n")
- v4_routesFile = "%s/r%s/ipv4_routes.ref" % (thisDir, i)
+ v4_routesFile = "{}/r{}/ipv4_routes.ref".format(thisDir, i)
expected = (
- net["r%s" % i].cmd("sort {} 2> /dev/null".format(v4_routesFile)).rstrip()
+ net["r{}".format(i)]
+ .cmd("sort {} 2> /dev/null".format(v4_routesFile))
+ .rstrip()
)
expected = ("\n".join(expected.splitlines()) + "\n").splitlines(1)
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd(
"vtysh -c \"show ip route\" | sed -e '/^Codes: /,/^\\s*$/d' | sort 2> /dev/null"
)
@@ -344,24 +356,26 @@ def test_converge_protocols():
title2="Expected IP RoutingTable",
)
if diff:
- sys.stderr.write("r%s failed IP Routing table check:\n%s\n" % (i, diff))
+ sys.stderr.write("r{} failed IP Routing table check:\n{}\n".format(i, diff))
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
- assert failures == 0, "IP Routing table failed for r%s\n%s" % (i, diff)
+ assert failures == 0, "IP Routing table failed for r{}\n{}".format(i, diff)
failures = 0
print("Show that v6 routes are right\n")
- v6_routesFile = "%s/r%s/ipv6_routes.ref" % (thisDir, i)
+ v6_routesFile = "{}/r{}/ipv6_routes.ref".format(thisDir, i)
expected = (
- net["r%s" % i].cmd("sort {} 2> /dev/null".format(v6_routesFile)).rstrip()
+ net["r{}".format(i)]
+ .cmd("sort {} 2> /dev/null".format(v6_routesFile))
+ .rstrip()
)
expected = ("\n".join(expected.splitlines()) + "\n").splitlines(1)
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd(
"vtysh -c \"show ipv6 route\" | sed -e '/^Codes: /,/^\\s*$/d' | sort 2> /dev/null"
)
@@ -377,20 +391,24 @@ def test_converge_protocols():
title2="Expected IPv6 RoutingTable",
)
if diff:
- sys.stderr.write("r%s failed IPv6 Routing table check:\n%s\n" % (i, diff))
+ sys.stderr.write(
+ "r{} failed IPv6 Routing table check:\n{}\n".format(i, diff)
+ )
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
- assert failures == 0, "IPv6 Routing table failed for r%s\n%s" % (i, diff)
+ assert failures == 0, "IPv6 Routing table failed for r{}\n{}".format(i, diff)
def route_get_nhg_id(route_str):
net = get_topogen().net
- output = net["r1"].cmd('vtysh -c "show ip route %s nexthop-group"' % route_str)
+ output = net["r1"].cmd(
+ 'vtysh -c "show ip route {} nexthop-group"'.format(route_str)
+ )
match = re.search(r"Nexthop Group ID: (\d+)", output)
- assert match is not None, (
- "Nexthop Group ID not found for sharpd route %s" % route_str
+ assert match is not None, "Nexthop Group ID not found for sharpd route {}".format(
+ route_str
)
nhg_id = int(match.group(1))
@@ -410,7 +428,7 @@ def verify_nexthop_group(nhg_id, recursive=False, ecmp=0):
while not found and count < 10:
count += 1
# Verify NHG is valid/installed
- output = net["r1"].cmd('vtysh -c "show nexthop-group rib %d"' % nhg_id)
+ output = net["r1"].cmd('vtysh -c "show nexthop-group rib {}"'.format(nhg_id))
valid = re.search(r"Valid", output)
if valid is None:
found = False
@@ -449,20 +467,24 @@ def verify_nexthop_group(nhg_id, recursive=False, ecmp=0):
continue
found = True
- assert valid is not None, "Nexthop Group ID=%d not marked Valid" % nhg_id
+ assert valid is not None, "Nexthop Group ID={} not marked Valid".format(nhg_id)
if ecmp or recursive:
- assert ecmpcount is not None, "Nexthop Group ID=%d has no depends" % nhg_id
+ assert ecmpcount is not None, "Nexthop Group ID={} has no depends".format(
+ nhg_id
+ )
if ecmp:
- assert len(depends) == ecmp, (
- "Nexthop Group ID=%d doesn't match ecmp size" % nhg_id
- )
+ assert (
+ len(depends) == ecmp
+ ), "Nexthop Group ID={} doesn't match ecmp size".format(nhg_id)
else:
- assert len(depends) == 1, (
- "Nexthop Group ID=%d should only have one recursive depend" % nhg_id
+ assert (
+ len(depends) == 1
+ ), "Nexthop Group ID={} should only have one recursive depend".format(
+ nhg_id
)
else:
- assert installed is not None, (
- "Nexthop Group ID=%d not marked Installed" % nhg_id
+ assert installed is not None, "Nexthop Group ID={} not marked Installed".format(
+ nhg_id
)
@@ -600,7 +622,7 @@ def test_nexthop_groups():
dups = []
nhg_id = route_get_nhg_id("6.6.6.1/32")
while (len(dups) != 4) and count < 10:
- output = net["r1"].cmd('vtysh -c "show nexthop-group rib %d"' % nhg_id)
+ output = net["r1"].cmd('vtysh -c "show nexthop-group rib {}"'.format(nhg_id))
dups = re.findall(r"(via 1\.1\.1\.1)", output)
if len(dups) != 4:
@@ -608,9 +630,10 @@ def test_nexthop_groups():
sleep(1)
# Should find 3, itself is inactive
- assert len(dups) == 4, (
- "Route 6.6.6.1/32 with Nexthop Group ID=%d has wrong number of resolved nexthops"
- % nhg_id
+ assert (
+ len(dups) == 4
+ ), "Route 6.6.6.1/32 with Nexthop Group ID={} has wrong number of resolved nexthops".format(
+ nhg_id
)
## Remove all NHG routes
@@ -640,7 +663,7 @@ def test_rip_status():
print("******************************************\n")
failures = 0
for i in range(1, 2):
- refTableFile = "%s/r%s/rip_status.ref" % (thisDir, i)
+ refTableFile = "{}/r{}/rip_status.ref".format(thisDir, i)
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -649,7 +672,7 @@ def test_rip_status():
# Actual output from router
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd('vtysh -c "show ip rip status" 2> /dev/null')
.rstrip()
)
@@ -670,16 +693,20 @@ def test_rip_status():
# Empty string if it matches, otherwise diff contains unified diff
if diff:
- sys.stderr.write("r%s failed IP RIP status check:\n%s\n" % (i, diff))
+ sys.stderr.write(
+ "r{} failed IP RIP status check:\n{}\n".format(i, diff)
+ )
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
- assert failures == 0, "IP RIP status failed for router r%s:\n%s" % (i, diff)
+ assert failures == 0, "IP RIP status failed for router r{}:\n{}".format(
+ i, diff
+ )
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -697,7 +724,7 @@ def test_ripng_status():
print("******************************************\n")
failures = 0
for i in range(1, 2):
- refTableFile = "%s/r%s/ripng_status.ref" % (thisDir, i)
+ refTableFile = "{}/r{}/ripng_status.ref".format(thisDir, i)
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -706,7 +733,7 @@ def test_ripng_status():
# Actual output from router
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd('vtysh -c "show ipv6 ripng status" 2> /dev/null')
.rstrip()
)
@@ -730,20 +757,19 @@ def test_ripng_status():
# Empty string if it matches, otherwise diff contains unified diff
if diff:
sys.stderr.write(
- "r%s failed IPv6 RIPng status check:\n%s\n" % (i, diff)
+ "r{} failed IPv6 RIPng status check:\n{}\n".format(i, diff)
)
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
- assert failures == 0, "IPv6 RIPng status failed for router r%s:\n%s" % (
- i,
- diff,
+ assert failures == 0, "IPv6 RIPng status failed for router r{}:\n{}".format(
+ i, diff
)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -761,7 +787,7 @@ def test_ospfv2_interfaces():
print("******************************************\n")
failures = 0
for i in range(1, 2):
- refTableFile = "%s/r%s/show_ip_ospf_interface.ref" % (thisDir, i)
+ refTableFile = "{}/r{}/show_ip_ospf_interface.ref".format(thisDir, i)
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -770,7 +796,7 @@ def test_ospfv2_interfaces():
# Actual output from router
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd('vtysh -c "show ip ospf interface" 2> /dev/null')
.rstrip()
)
@@ -803,11 +829,11 @@ def test_ospfv2_interfaces():
# Empty string if it matches, otherwise diff contains unified diff
if diff:
sys.stderr.write(
- "r%s failed SHOW IP OSPF INTERFACE check:\n%s\n" % (i, diff)
+ "r{} failed SHOW IP OSPF INTERFACE check:\n{}\n".format(i, diff)
)
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
# Ignoring the issue if told to ignore (ie not yet fixed)
if failures != 0:
@@ -821,11 +847,11 @@ def test_ospfv2_interfaces():
assert (
failures == 0
- ), "SHOW IP OSPF INTERFACE failed for router r%s:\n%s" % (i, diff)
+ ), "SHOW IP OSPF INTERFACE failed for router r{}:\n{}".format(i, diff)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -843,7 +869,7 @@ def test_isis_interfaces():
print("******************************************\n")
failures = 0
for i in range(1, 2):
- refTableFile = "%s/r%s/show_isis_interface_detail.ref" % (thisDir, i)
+ refTableFile = "{}/r{}/show_isis_interface_detail.ref".format(thisDir, i)
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -852,7 +878,7 @@ def test_isis_interfaces():
# Actual output from router
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd('vtysh -c "show isis interface detail" 2> /dev/null')
.rstrip()
)
@@ -876,19 +902,19 @@ def test_isis_interfaces():
# Empty string if it matches, otherwise diff contains unified diff
if diff:
sys.stderr.write(
- "r%s failed SHOW ISIS INTERFACE DETAIL check:\n%s\n" % (i, diff)
+ "r{} failed SHOW ISIS INTERFACE DETAIL check:\n{}\n".format(i, diff)
)
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
assert (
failures == 0
- ), "SHOW ISIS INTERFACE DETAIL failed for router r%s:\n%s" % (i, diff)
+ ), "SHOW ISIS INTERFACE DETAIL failed for router r{}:\n{}".format(i, diff)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -906,7 +932,7 @@ def test_bgp_summary():
print("******************************************\n")
failures = 0
for i in range(1, 2):
- refTableFile = "%s/r%s/show_ip_bgp_summary.ref" % (thisDir, i)
+ refTableFile = "{}/r{}/show_ip_bgp_summary.ref".format(thisDir, i)
if os.path.isfile(refTableFile):
# Read expected result from file
expected_original = open(refTableFile).read().rstrip()
@@ -933,7 +959,7 @@ def test_bgp_summary():
]:
# Actual output from router
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd(
'vtysh -c "show ip bgp summary ' + arguments + '" 2> /dev/null'
)
@@ -1049,22 +1075,19 @@ def test_bgp_summary():
# Empty string if it matches, otherwise diff contains unified diff
if diff:
sys.stderr.write(
- "r%s failed SHOW IP BGP SUMMARY check:\n%s\n" % (i, diff)
+ "r{} failed SHOW IP BGP SUMMARY check:\n{}\n".format(i, diff)
)
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
assert (
failures == 0
- ), "SHOW IP BGP SUMMARY failed for router r%s:\n%s" % (
- i,
- diff,
- )
+ ), "SHOW IP BGP SUMMARY failed for router r{}:\n{}".format(i, diff)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -1082,7 +1105,7 @@ def test_bgp_ipv6_summary():
print("******************************************\n")
failures = 0
for i in range(1, 2):
- refTableFile = "%s/r%s/show_bgp_ipv6_summary.ref" % (thisDir, i)
+ refTableFile = "{}/r{}/show_bgp_ipv6_summary.ref".format(thisDir, i)
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -1091,7 +1114,7 @@ def test_bgp_ipv6_summary():
# Actual output from router
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd('vtysh -c "show bgp ipv6 summary" 2> /dev/null')
.rstrip()
)
@@ -1147,20 +1170,19 @@ def test_bgp_ipv6_summary():
# Empty string if it matches, otherwise diff contains unified diff
if diff:
sys.stderr.write(
- "r%s failed SHOW BGP IPv6 SUMMARY check:\n%s\n" % (i, diff)
+ "r{} failed SHOW BGP IPv6 SUMMARY check:\n{}\n".format(i, diff)
)
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
- assert failures == 0, "SHOW BGP IPv6 SUMMARY failed for router r%s:\n%s" % (
- i,
- diff,
- )
+ assert (
+ failures == 0
+ ), "SHOW BGP IPv6 SUMMARY failed for router r{}:\n{}".format(i, diff)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -1177,11 +1199,13 @@ def test_nht():
thisDir = os.path.dirname(os.path.realpath(__file__))
for i in range(1, 2):
- nhtFile = "%s/r%s/ip_nht.ref" % (thisDir, i)
+ nhtFile = "{}/r{}/ip_nht.ref".format(thisDir, i)
expected = open(nhtFile).read().rstrip()
expected = ("\n".join(expected.splitlines()) + "\n").splitlines(1)
- actual = net["r%s" % i].cmd('vtysh -c "show ip nht" 2> /dev/null').rstrip()
+ actual = (
+ net["r{}".format(i)].cmd('vtysh -c "show ip nht" 2> /dev/null').rstrip()
+ )
actual = re.sub(r"fd [0-9]+", "fd XX", actual)
actual = ("\n".join(actual.splitlines()) + "\n").splitlines(1)
@@ -1193,15 +1217,17 @@ def test_nht():
)
if diff:
- assert 0, "r%s failed ip nht check:\n%s\n" % (i, diff)
+ assert 0, "r{} failed ip nht check:\n{}\n".format(i, diff)
else:
print("show ip nht is ok\n")
- nhtFile = "%s/r%s/ipv6_nht.ref" % (thisDir, i)
+ nhtFile = "{}/r{}/ipv6_nht.ref".format(thisDir, i)
expected = open(nhtFile).read().rstrip()
expected = ("\n".join(expected.splitlines()) + "\n").splitlines(1)
- actual = net["r%s" % i].cmd('vtysh -c "show ipv6 nht" 2> /dev/null').rstrip()
+ actual = (
+ net["r{}".format(i)].cmd('vtysh -c "show ipv6 nht" 2> /dev/null').rstrip()
+ )
actual = re.sub(r"fd [0-9]+", "fd XX", actual)
actual = ("\n".join(actual.splitlines()) + "\n").splitlines(1)
@@ -1213,7 +1239,7 @@ def test_nht():
)
if diff:
- assert 0, "r%s failed ipv6 nht check:\n%s\n" % (i, diff)
+ assert 0, "r{} failed ipv6 nht check:\n{}\n".format(i, diff)
else:
print("show ipv6 nht is ok\n")
@@ -1233,7 +1259,7 @@ def test_bgp_ipv4():
diffresult = {}
for i in range(1, 2):
success = 0
- for refTableFile in glob.glob("%s/r%s/show_bgp_ipv4*.ref" % (thisDir, i)):
+ for refTableFile in glob.glob("{}/r{}/show_bgp_ipv4*.ref".format(thisDir, i)):
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -1242,7 +1268,9 @@ def test_bgp_ipv4():
# Actual output from router
actual = (
- net["r%s" % i].cmd('vtysh -c "show bgp ipv4" 2> /dev/null').rstrip()
+ net["r{}".format(i)]
+ .cmd('vtysh -c "show bgp ipv4" 2> /dev/null')
+ .rstrip()
)
# Remove summary line (changed recently)
actual = re.sub(r"Total number.*", "", actual)
@@ -1264,24 +1292,26 @@ def test_bgp_ipv4():
diffresult[refTableFile] = diff
else:
success = 1
- print("template %s matched: r%s ok" % (refTableFile, i))
+ print("template {} matched: r{} ok".format(refTableFile, i))
break
if not success:
resultstr = "No template matched.\n"
for f in diffresult.keys():
- resultstr += "template %s: r%s failed SHOW BGP IPv4 check:\n%s\n" % (
- f,
- i,
- diffresult[f],
+ resultstr += (
+ "template {}: r{} failed SHOW BGP IPv4 check:\n{}\n".format(
+ f,
+ i,
+ diffresult[f],
+ )
)
raise AssertionError(
- "SHOW BGP IPv4 failed for router r%s:\n%s" % (i, resultstr)
+ "SHOW BGP IPv4 failed for router r{}:\n{}".format(i, resultstr)
)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -1300,7 +1330,7 @@ def test_bgp_ipv6():
diffresult = {}
for i in range(1, 2):
success = 0
- for refTableFile in glob.glob("%s/r%s/show_bgp_ipv6*.ref" % (thisDir, i)):
+ for refTableFile in glob.glob("{}/r{}/show_bgp_ipv6*.ref".format(thisDir, i)):
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -1309,7 +1339,9 @@ def test_bgp_ipv6():
# Actual output from router
actual = (
- net["r%s" % i].cmd('vtysh -c "show bgp ipv6" 2> /dev/null').rstrip()
+ net["r{}".format(i)]
+ .cmd('vtysh -c "show bgp ipv6" 2> /dev/null')
+ .rstrip()
)
# Remove summary line (changed recently)
actual = re.sub(r"Total number.*", "", actual)
@@ -1331,23 +1363,25 @@ def test_bgp_ipv6():
diffresult[refTableFile] = diff
else:
success = 1
- print("template %s matched: r%s ok" % (refTableFile, i))
+ print("template {} matched: r{} ok".format(refTableFile, i))
if not success:
resultstr = "No template matched.\n"
for f in diffresult.keys():
- resultstr += "template %s: r%s failed SHOW BGP IPv6 check:\n%s\n" % (
- f,
- i,
- diffresult[f],
+ resultstr += (
+ "template {}: r{} failed SHOW BGP IPv6 check:\n{}\n".format(
+ f,
+ i,
+ diffresult[f],
+ )
)
raise AssertionError(
- "SHOW BGP IPv6 failed for router r%s:\n%s" % (i, resultstr)
+ "SHOW BGP IPv6 failed for router r{}:\n{}".format(i, resultstr)
)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -1364,13 +1398,15 @@ def test_route_map():
print("*******************************************************\n")
failures = 0
for i in range(1, 2):
- refroutemap = "%s/r%s/show_route_map.ref" % (thisDir, i)
+ refroutemap = "{}/r{}/show_route_map.ref".format(thisDir, i)
if os.path.isfile(refroutemap):
expected = open(refroutemap).read().rstrip()
expected = ("\n".join(expected.splitlines()) + "\n").splitlines(1)
actual = (
- net["r%s" % i].cmd('vtysh -c "show route-map" 2> /dev/null').rstrip()
+ net["r{}".format(i)]
+ .cmd('vtysh -c "show route-map" 2> /dev/null')
+ .rstrip()
)
actual = ("\n".join(actual.splitlines()) + "\n").splitlines(1)
@@ -1383,15 +1419,15 @@ def test_route_map():
if diff:
sys.stderr.write(
- "r%s failed show route-map command Check:\n%s\n" % (i, diff)
+ "r{} failed show route-map command Check:\n{}\n".format(i, diff)
)
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
assert (
failures == 0
- ), "Show route-map command failed for router r%s:\n%s" % (i, diff)
+ ), "Show route-map command failed for router r{}:\n{}".format(i, diff)
def test_nexthop_groups_with_route_maps():
@@ -1418,28 +1454,34 @@ def test_nexthop_groups_with_route_maps():
src_str = "192.168.0.1"
net["r1"].cmd(
- 'vtysh -c "c t" -c "route-map NH-SRC permit 111" -c "set src %s"' % src_str
+ 'vtysh -c "c t" -c "route-map NH-SRC permit 111" -c "set src {}"'.format(
+ src_str
+ )
)
net["r1"].cmd('vtysh -c "c t" -c "ip protocol sharp route-map NH-SRC"')
- net["r1"].cmd('vtysh -c "sharp install routes %s nexthop-group test 1"' % route_str)
+ net["r1"].cmd(
+ 'vtysh -c "sharp install routes {} nexthop-group test 1"'.format(route_str)
+ )
- verify_route_nexthop_group("%s/32" % route_str)
+ verify_route_nexthop_group("{}/32".format(route_str))
# Only a valid test on linux using nexthop objects
if sys.platform.startswith("linux"):
- output = net["r1"].cmd("ip route show %s/32" % route_str)
- match = re.search(r"src %s" % src_str, output)
- assert match is not None, "Route %s/32 not installed with src %s" % (
+ output = net["r1"].cmd("ip route show {}/32".format(route_str))
+ match = re.search(r"src {}".format(src_str), output)
+ assert match is not None, "Route {}/32 not installed with src {}".format(
route_str,
src_str,
)
# Remove NHG routes and route-map
- net["r1"].cmd('vtysh -c "sharp remove routes %s 1"' % route_str)
+ net["r1"].cmd('vtysh -c "sharp remove routes {} 1"'.format(route_str))
net["r1"].cmd('vtysh -c "c t" -c "no ip protocol sharp route-map NH-SRC"')
net["r1"].cmd(
- 'vtysh -c "c t" -c "no route-map NH-SRC permit 111" # -c "set src %s"' % src_str
+ 'vtysh -c "c t" -c "no route-map NH-SRC permit 111" # -c "set src {}"'.format(
+ src_str
+ )
)
net["r1"].cmd('vtysh -c "c t" -c "no route-map NH-SRC"')
@@ -1449,7 +1491,9 @@ def test_nexthop_groups_with_route_maps():
deny_route_str = "3.3.3.2"
net["r1"].cmd(
- 'vtysh -c "c t" -c "ip prefix-list NOPE seq 5 permit %s/32"' % permit_route_str
+ 'vtysh -c "c t" -c "ip prefix-list NOPE seq 5 permit {}/32"'.format(
+ permit_route_str
+ )
)
net["r1"].cmd(
'vtysh -c "c t" -c "route-map NOPE permit 111" -c "match ip address prefix-list NOPE"'
@@ -1459,35 +1503,42 @@ def test_nexthop_groups_with_route_maps():
# This route should be permitted
net["r1"].cmd(
- 'vtysh -c "sharp install routes %s nexthop-group test 1"' % permit_route_str
+ 'vtysh -c "sharp install routes {} nexthop-group test 1"'.format(
+ permit_route_str
+ )
)
- verify_route_nexthop_group("%s/32" % permit_route_str)
+ verify_route_nexthop_group("{}/32".format(permit_route_str))
# This route should be denied
net["r1"].cmd(
- 'vtysh -c "sharp install routes %s nexthop-group test 1"' % deny_route_str
+ 'vtysh -c "sharp install routes {} nexthop-group test 1"'.format(deny_route_str)
)
nhg_id = route_get_nhg_id(deny_route_str)
- output = net["r1"].cmd('vtysh -c "show nexthop-group rib %d"' % nhg_id)
+ output = net["r1"].cmd('vtysh -c "show nexthop-group rib {}"'.format(nhg_id))
match = re.search(r"Valid", output)
- assert match is None, "Nexthop Group ID=%d should not be marked Valid" % nhg_id
+ assert match is None, "Nexthop Group ID={} should not be marked Valid".format(
+ nhg_id
+ )
match = re.search(r"Installed", output)
- assert match is None, "Nexthop Group ID=%d should not be marked Installed" % nhg_id
+ assert match is None, "Nexthop Group ID={} should not be marked Installed".format(
+ nhg_id
+ )
# Remove NHG routes and route-map
- net["r1"].cmd('vtysh -c "sharp remove routes %s 1"' % permit_route_str)
- net["r1"].cmd('vtysh -c "sharp remove routes %s 1"' % deny_route_str)
+ net["r1"].cmd('vtysh -c "sharp remove routes {} 1"'.format(permit_route_str))
+ net["r1"].cmd('vtysh -c "sharp remove routes {} 1"'.format(deny_route_str))
net["r1"].cmd('vtysh -c "c t" -c "no ip protocol sharp route-map NOPE"')
net["r1"].cmd('vtysh -c "c t" -c "no route-map NOPE permit 111"')
net["r1"].cmd('vtysh -c "c t" -c "no route-map NOPE deny 222"')
net["r1"].cmd('vtysh -c "c t" -c "no route-map NOPE"')
net["r1"].cmd(
- 'vtysh -c "c t" -c "no ip prefix-list NOPE seq 5 permit %s/32"'
- % permit_route_str
+ 'vtysh -c "c t" -c "no ip prefix-list NOPE seq 5 permit {}/32"'.format(
+ permit_route_str
+ )
)
@@ -1550,7 +1601,7 @@ def test_mpls_interfaces():
print("******************************************\n")
failures = 0
for i in range(1, 2):
- refTableFile = "%s/r%s/show_mpls_ldp_interface.ref" % (thisDir, i)
+ refTableFile = "{}/r{}/show_mpls_ldp_interface.ref".format(thisDir, i)
if os.path.isfile(refTableFile):
# Read expected result from file
expected = open(refTableFile).read().rstrip()
@@ -1559,7 +1610,7 @@ def test_mpls_interfaces():
# Actual output from router
actual = (
- net["r%s" % i]
+ net["r{}".format(i)]
.cmd('vtysh -c "show mpls ldp interface" 2> /dev/null')
.rstrip()
)
@@ -1579,22 +1630,22 @@ def test_mpls_interfaces():
# Empty string if it matches, otherwise diff contains unified diff
if diff:
sys.stderr.write(
- "r%s failed MPLS LDP Interface status Check:\n%s\n" % (i, diff)
+ "r{} failed MPLS LDP Interface status Check:\n{}\n".format(i, diff)
)
failures += 1
else:
- print("r%s ok" % i)
+ print("r{} ok".format(i))
if failures > 0:
fatal_error = "MPLS LDP Interface status failed"
assert (
failures == 0
- ), "MPLS LDP Interface status failed for router r%s:\n%s" % (i, diff)
+ ), "MPLS LDP Interface status failed for router r{}:\n{}".format(i, diff)
# Make sure that all daemons are running
for i in range(1, 2):
- fatal_error = net["r%s" % i].checkRouterRunning()
+ fatal_error = net["r{}".format(i)].checkRouterRunning()
assert fatal_error == "", fatal_error
@@ -1707,8 +1758,8 @@ def test_shutdown_check_memleak():
thisDir = os.path.dirname(os.path.realpath(__file__))
for i in range(1, 2):
- net["r%s" % i].stopRouter()
- net["r%s" % i].report_memory_leaks(
+ net["r{}".format(i)].stopRouter()
+ net["r{}".format(i)].report_memory_leaks(
os.environ.get("TOPOTESTS_CHECK_MEMLEAK"), os.path.basename(__file__)
)
diff --git a/tests/topotests/analyze.py b/tests/topotests/analyze.py
index 690786a..a1ac9a2 100755
--- a/tests/topotests/analyze.py
+++ b/tests/topotests/analyze.py
@@ -262,7 +262,7 @@ def main():
capture_output=True,
)
except subprocess.CalledProcessError:
- print(f"{docker_bin} container '{contid}' does not exist")
+ logging.critical(f"{docker_bin} container '{contid}' does not exist")
sys.exit(1)
# If you need container info someday...
# cont_info = json.loads(p.stdout)
@@ -278,7 +278,7 @@ def main():
if scount and args.results and not os.path.exists(args.results):
if not contid:
if not os.path.exists(cppath):
- print(f"'{cppath}' doesn't exist to save")
+ logging.critical(f"'{cppath}' doesn't exist to save")
sys.exit(1)
if args.save_xml:
subprocess.run(["cp", cppath, args.results])
@@ -294,7 +294,7 @@ def main():
capture_output=True,
)
except subprocess.CalledProcessError as error:
- print(f"Can't {docker_bin} cp '{cppath}': %s", str(error))
+ logging.critical(f"Can't {docker_bin} cp '{cppath}': %s", str(error))
sys.exit(1)
if "SUDO_USER" in os.environ:
@@ -303,7 +303,7 @@ def main():
# User doesn't want to save results just use them inplace
if not contid:
if not os.path.exists(cppath):
- print(f"'{cppath}' doesn't exist")
+ logging.critical(f"'{cppath}' doesn't exist")
sys.exit(1)
args.results = cppath
else:
@@ -321,7 +321,7 @@ def main():
capture_output=True,
)
except subprocess.CalledProcessError as error:
- print(f"Can't {docker_bin} cp '{cppath}': %s", str(error))
+ logging.critical(f"Can't {docker_bin} cp '{cppath}': %s", str(error))
sys.exit(1)
args.results = tresname
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 5cba71e..61be1df 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
@@ -4,51 +4,6 @@
"localAS": 101,
"routes":
{
- "2001:db8:6::/64": [
- {
- "stale": true,
- "valid": true,
- "bestpath": true,
- "pathFrom": "external",
- "prefix": "2001:db8:6::",
- "prefixLen": 64,
- "network": "2001:db8:6::\/64",
- "metric": 0,
- "weight": 0,
- "peerId": "2001:db8:4::1",
- "origin": "IGP",
- "nexthops": [
- { "ip": "2001:db8:4::1",
- "afi": "ipv6",
- "scope": "global",
- "used": true
- }
- ]
- }
- ],
- "2001:db8:7::/64": [
- {
- "stale": true,
- "valid": true,
- "bestpath": true,
- "pathFrom": "external",
- "prefix": "2001:db8:7::",
- "prefixLen": 64, "network":
- "2001:db8:7::\/64",
- "metric": 0,
- "weight": 0,
- "peerId": "2001:db8:4::1",
- "origin": "IGP",
- "nexthops": [
- {
- "ip": "2001:db8:4::1",
- "afi": "ipv6",
- "scope": "global",
- "used": true
- }
- ]
- }
- ],
"2001:db8:8::/64": [
{
"valid": true,
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 8eea183..36cdcc3 100644
--- a/tests/topotests/bfd_bgp_cbit_topo3/r1/ipv6_routes.json
+++ b/tests/topotests/bfd_bgp_cbit_topo3/r1/ipv6_routes.json
@@ -32,49 +32,5 @@
}
]
}
- ],
- "2001:db8:6::/64": [{
- "distance": 20,
- "protocol": "bgp",
- "metric": 0,
- "selected": true,
- "destSelected": true,
- "prefix": "2001:db8:6::/64",
- "nexthops": [{
- "ip":"2001:db8:4::1",
- "active": true,
- "afi": "ipv6",
- "recursive":true
- },
- {
- "fib":true,
- "ip":"2001:db8:1::2",
- "afi": "ipv6",
- "interfaceName": "r1-eth0"
- }
- ]
- }
- ],
- "2001:db8:7::/64": [{
- "distance": 20,
- "protocol": "bgp",
- "metric": 0,
- "selected": true,
- "destSelected": true,
- "prefix": "2001:db8:7::/64",
- "nexthops": [{
- "ip":"2001:db8:4::1",
- "active": true,
- "afi": "ipv6",
- "recursive": true
- },
- {
- "fib":true,
- "ip":"2001:db8:1::2",
- "afi": "ipv6",
- "interfaceName":"r1-eth0"
- }
- ]
- }
]
}
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 906687d..d478e99 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
@@ -122,21 +122,23 @@ def test_bfd_connection():
def test_bfd_loss_intermediate():
"""
- Assert that BFD notices the bfd link down failure.
- but BGP entries should still be present
+ Assert that BGP notices the BFD link down failure.
+ The BGP entries should be flushed as the C-bit is set in both directions.
"""
tgen = get_topogen()
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
r1 = tgen.gears["r1"]
- expected = { "as":101, "peers":{ "2001:db8:4::1": { "state":"Established" } } }
- test_func = partial(topotest.router_json_cmp, r1, "show bgp ipv6 uni summ json", expected)
+ expected = {"as": 101, "peers": {"2001:db8:4::1": {"state": "Established"}}}
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show bgp ipv6 uni summ json", expected
+ )
_, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
- assertmsg ='"r1" has not established bgp peering yet'
+ assertmsg = '"r1" has not established bgp peering yet'
assert result is None, assertmsg
- #assert False
+ # assert False
logger.info("removing IPv6 address from r2 to simulate loss of connectivity")
# Disable r2-eth0 ipv6 address
cmd = 'vtysh -c "configure terminal" -c "interface r2-eth1" -c "no ipv6 address 2001:db8:4::2/64"'
@@ -160,7 +162,7 @@ def test_bfd_loss_intermediate():
assertmsg = '"{}" JSON output mismatches'.format(router.name)
assert result is None, assertmsg
- logger.info("waiting for BGP entries to become stale")
+ logger.info("waiting for BGP entries to be removed")
for router in tgen.routers().values():
if router.name == "r2":
continue
diff --git a/tests/topotests/bfd_topo3/test_bfd_topo3.py b/tests/topotests/bfd_topo3/test_bfd_topo3.py
index f767b0e..d7b2542 100644
--- a/tests/topotests/bfd_topo3/test_bfd_topo3.py
+++ b/tests/topotests/bfd_topo3/test_bfd_topo3.py
@@ -189,7 +189,7 @@ def test_wait_bfd_convergence():
"show bfd peers json",
bfd_config,
)
- _, result = topotest.run_and_expect(test_func, None, count=130, wait=1)
+ _, result = topotest.run_and_expect(test_func, None, count=200, wait=1)
assertmsg = '"{}" BFD configuration failure'.format(router)
assert result is None, assertmsg
diff --git a/tests/topotests/bfd_vrflite_topo1/test_bfd_vrflite_topo1.py b/tests/topotests/bfd_vrflite_topo1/test_bfd_vrflite_topo1.py
index 30f4a2f..fee5f2d 100644
--- a/tests/topotests/bfd_vrflite_topo1/test_bfd_vrflite_topo1.py
+++ b/tests/topotests/bfd_vrflite_topo1/test_bfd_vrflite_topo1.py
@@ -81,8 +81,7 @@ def setup_module(mod):
for rname, router in router_list.items():
router.load_config(
- TopoRouter.RD_ZEBRA,
- os.path.join(CWD, "{}/zebra.conf".format(rname))
+ TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
)
router.load_config(
TopoRouter.RD_BFD, os.path.join(CWD, "{}/bfdd.conf".format(rname))
@@ -114,8 +113,8 @@ def test_bfd_connection():
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("waiting for bfd peers to go up")
- router = tgen.gears['r1']
- json_file = "{}/{}/bfd_peers_status.json".format(CWD, 'r1')
+ router = tgen.gears["r1"]
+ json_file = "{}/{}/bfd_peers_status.json".format(CWD, "r1")
expected = json.loads(open(json_file).read())
test_func = partial(
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step10/show_ip_route.ref.diff b/tests/topotests/bgp_6vpe_ebgp_topo1/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step10/show_ip_route.ref.diff
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/__init__.py
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/h1/zebra.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/h1/zebra.conf
new file mode 100644
index 0000000..06a23bb
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/h1/zebra.conf
@@ -0,0 +1,4 @@
+ipv6 route fd00:200::/64 fd00:100::2
+interface eth-pe1
+ ipv6 address fd00:100::1/64
+!
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/h2/zebra.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/h2/zebra.conf
new file mode 100644
index 0000000..2dadfc4
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/h2/zebra.conf
@@ -0,0 +1,8 @@
+ipv6 route fd00:100::/64 fd00:200::5
+interface eth-pe2
+ ipv6 address fd00:200::6/64
+ ipv6 address fd00:201::6/64
+ ipv6 address fd00:300::6/64
+ ipv6 address fd00:400::6/64
+ ipv6 address fd01:200::6/64
+!
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_summary.json b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_summary.json
new file mode 100644
index 0000000..c2100ad
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_summary.json
@@ -0,0 +1,13 @@
+{
+ "ipv6Vpn": {
+ "routerId": "198.51.100.2",
+ "as": 65500,
+ "peers": {
+ "192.0.2.5": {
+ "remoteAs": 65501,
+ "state": "Established",
+ "peerState": "OK"
+ }
+ }
+ }
+}
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_vrf_ipv6.json b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_vrf_ipv6.json
new file mode 100644
index 0000000..c6e776d
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgp_vrf_ipv6.json
@@ -0,0 +1,116 @@
+{
+ "vrfName": "vrf1",
+ "routerId": "198.51.100.2",
+ "defaultLocPrf": 100,
+ "localAS": 65500,
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:100::/64",
+ "metric": 0,
+ "weight": 32768,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:200::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:200::/64",
+ "metric": 0,
+ "weight": 0,
+ "path": "65501",
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:201::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:201::/64",
+ "metric": 0,
+ "weight": 0,
+ "path": "65501",
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:300::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:300::/64",
+ "metric": 0,
+ "weight": 0,
+ "path": "65501",
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:400::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:400::/64",
+ "metric": 0,
+ "weight": 0,
+ "path": "65501",
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd01:200::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd01:200::/64",
+ "metric": 0,
+ "weight": 0,
+ "path": "65501",
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgpd.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgpd.conf
new file mode 100644
index 0000000..26e94d4
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/bgpd.conf
@@ -0,0 +1,32 @@
+!
+!debug bgp zebra
+router bgp 65500
+ bgp router-id 198.51.100.2
+ no bgp ebgp-requires-policy
+ neighbor 192.0.2.5 remote-as 65501
+ neighbor 192.0.2.5 capability extended-nexthop
+ address-family ipv4 unicast
+ no neighbor 192.0.2.5 activate
+ exit-address-family
+ address-family ipv6 vpn
+ neighbor 192.0.2.5 activate
+ neighbor 192.0.2.5 route-map rmap in
+ exit-address-family
+exit
+router bgp 65500 vrf vrf1
+ bgp router-id 198.51.100.2
+ address-family ipv6 unicast
+ redistribute connected
+ label vpn export 101
+ rd vpn export 444:1
+ rt vpn both 52:100
+ export vpn
+ import vpn
+ exit-address-family
+!
+interface eth-pe2
+ mpls bgp forwarding
+!
+route-map rmap permit 1
+ set ipv6 next-hop prefer-global
+!
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/ipv6_routes_vrf.json b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/ipv6_routes_vrf.json
new file mode 100644
index 0000000..1545749
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/ipv6_routes_vrf.json
@@ -0,0 +1,142 @@
+{
+ "fd00:100::/64": [
+ {
+ "prefix": "fd00:100::/64",
+ "protocol": "connected",
+ "vrfName": "vrf1",
+ "selected": true,
+ "destSelected": true,
+ "distance": 0,
+ "metric": 0,
+ "installed": true,
+ "nexthops": [
+ {
+ "fib": true,
+ "directlyConnected": true,
+ "interfaceName": "eth-h1",
+ "active": true
+ }
+ ]
+ }
+ ],
+ "fd00:200::/64": [
+ {
+ "prefix": "fd00:200::/64",
+ "protocol": "bgp",
+ "vrfName": "vrf1",
+ "selected": true,
+ "destSelected": true,
+ "distance": 20,
+ "metric": 0,
+ "installed": true,
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "vrf": "default",
+ "active": true,
+ "labels": [
+ 102
+ ],
+ "weight": 1
+ }
+ ]
+ }
+ ],
+ "fd00:201::/64": [
+ {
+ "prefix": "fd00:201::/64",
+ "protocol": "bgp",
+ "vrfName": "vrf1",
+ "selected": true,
+ "destSelected": true,
+ "distance": 20,
+ "metric": 0,
+ "installed": true,
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "vrf": "default",
+ "active": true,
+ "labels": [
+ 102
+ ],
+ "weight": 1
+ }
+ ]
+ }
+ ],
+ "fd00:300::/64": [
+ {
+ "prefix": "fd00:300::/64",
+ "protocol": "bgp",
+ "vrfName": "vrf1",
+ "selected": true,
+ "destSelected": true,
+ "distance": 20,
+ "metric": 0,
+ "installed": true,
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "vrf": "default",
+ "active": true,
+ "labels": [
+ 102
+ ],
+ "weight": 1
+ }
+ ]
+ }
+ ],
+ "fd00:400::/64": [
+ {
+ "prefix": "fd00:400::/64",
+ "protocol": "bgp",
+ "vrfName": "vrf1",
+ "selected": true,
+ "destSelected": true,
+ "distance": 20,
+ "metric": 0,
+ "installed": true,
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "vrf": "default",
+ "active": true,
+ "labels": [
+ 102
+ ],
+ "weight": 1
+ }
+ ]
+ }
+ ],
+ "fd01:200::/64": [
+ {
+ "prefix": "fd01:200::/64",
+ "protocol": "bgp",
+ "vrfName": "vrf1",
+ "selected": true,
+ "destSelected": true,
+ "distance": 20,
+ "metric": 0,
+ "installed": true,
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:205",
+ "afi": "ipv6",
+ "vrf": "default",
+ "active": true,
+ "labels": [
+ 102
+ ],
+ "weight": 1
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/isisd.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/isisd.conf
new file mode 100644
index 0000000..61f2fe7
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/isisd.conf
@@ -0,0 +1,23 @@
+!
+interface lo
+ ip router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+interface eth-pe2
+ ip router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+router isis 1
+ net 49.0000.0007.e901.2222.00
+ is-type level-1
+ lsp-gen-interval 1
+ mpls-te on
+ mpls-te router-address 198.51.100.2
+ segment-routing on
+ segment-routing node-msd 8
+ segment-routing global-block 1000 10000 local-block 30000 30999
+ segment-routing prefix 198.51.100.2/32 index 22
+!
+
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/zebra.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/zebra.conf
new file mode 100644
index 0000000..7ddd98f
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe1/zebra.conf
@@ -0,0 +1,11 @@
+!
+interface eth-h1
+ ipv6 address fd00:100::2/64
+!
+interface eth-pe2
+ ip address 192.0.2.2/24
+ ipv6 address ::ffff:192.0.2.2/120
+!
+interface lo
+ ip address 198.51.100.2/32
+!
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_summary.json b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_summary.json
new file mode 100644
index 0000000..d740794
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_summary.json
@@ -0,0 +1,13 @@
+{
+ "ipv6Vpn": {
+ "routerId": "198.51.100.5",
+ "as": 65501,
+ "peers": {
+ "192.0.2.2": {
+ "remoteAs": 65500,
+ "state": "Established",
+ "peerState": "OK"
+ }
+ }
+ }
+}
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_vrf_ipv6.json b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_vrf_ipv6.json
new file mode 100644
index 0000000..ec42999
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgp_vrf_ipv6.json
@@ -0,0 +1,116 @@
+{
+ "vrfName": "vrf1",
+ "routerId": "198.51.100.5",
+ "defaultLocPrf": 100,
+ "localAS": 65501,
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:100::/64",
+ "metric": 0,
+ "weight": 0,
+ "path": "65500",
+ "nexthops": [
+ {
+ "ip": "::ffff:c000:202",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:200::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:200::/64",
+ "metric": 0,
+ "weight": 32768,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:201::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:201::/64",
+ "metric": 0,
+ "weight": 32768,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:300::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:300::/64",
+ "metric": 0,
+ "weight": 32768,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:400::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd00:400::/64",
+ "metric": 0,
+ "weight": 32768,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd01:200::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "network": "fd01:200::/64",
+ "metric": 0,
+ "weight": 32768,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgpd.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgpd.conf
new file mode 100644
index 0000000..03b63af
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/bgpd.conf
@@ -0,0 +1,31 @@
+!
+router bgp 65501
+ bgp router-id 198.51.100.5
+ no bgp ebgp-requires-policy
+ neighbor 192.0.2.2 remote-as 65500
+ neighbor 192.0.2.2 capability extended-nexthop
+ address-family ipv4 unicast
+ no neighbor 192.0.2.2 activate
+ exit-address-family
+ address-family ipv6 vpn
+ neighbor 192.0.2.2 activate
+ neighbor 192.0.2.2 route-map rmap in
+ exit-address-family
+exit
+router bgp 65501 vrf vrf1
+ bgp router-id 198.51.100.5
+ address-family ipv6 unicast
+ redistribute connected
+ label vpn export 102
+ rd vpn export 444:2
+ rt vpn both 52:100
+ export vpn
+ import vpn
+exit-address-family
+!
+interface eth-pe1
+ mpls bgp forwarding
+!
+route-map rmap permit 1
+ set ipv6 next-hop prefer-global
+! \ No newline at end of file
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/isisd.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/isisd.conf
new file mode 100644
index 0000000..f210554
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/isisd.conf
@@ -0,0 +1,22 @@
+!
+interface lo
+ ip router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+interface eth-pe1
+ ip router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+router isis 1
+ net 49.0000.0007.e901.5555.00
+ is-type level-1
+ lsp-gen-interval 1
+ mpls-te on
+ mpls-te router-address 198.51.100.5
+ segment-routing on
+ segment-routing node-msd 8
+ segment-routing global-block 1000 10000 local-block 33000 33999
+ segment-routing prefix 198.51.100.5/32 index 55
+!
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/zebra.conf b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/zebra.conf
new file mode 100644
index 0000000..bf20638
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/pe2/zebra.conf
@@ -0,0 +1,15 @@
+!
+interface eth-h2
+ ipv6 address fd00:200::5/64
+ ipv6 address fd00:201::5/64
+ ipv6 address fd00:300::5/64
+ ipv6 address fd00:400::5/64
+ ipv6 address fd01:200::5/64
+!
+interface eth-pe1
+ ip address 192.0.2.5/24
+ ipv6 address ::ffff:192.0.2.5/120
+!
+interface lo
+ ip address 198.51.100.5/32
+!
diff --git a/tests/topotests/bgp_6vpe_ebgp_topo1/test_bgp_6vpe_ebgp_topo1.py b/tests/topotests/bgp_6vpe_ebgp_topo1/test_bgp_6vpe_ebgp_topo1.py
new file mode 100644
index 0000000..cbed8f0
--- /dev/null
+++ b/tests/topotests/bgp_6vpe_ebgp_topo1/test_bgp_6vpe_ebgp_topo1.py
@@ -0,0 +1,179 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Copyright (c) 2023 by 6WIND
+#
+
+"""
+Test the FRR BGP 6VPE functionality
+"""
+
+import os
+import sys
+import json
+import functools
+from functools import partial
+import pytest
+
+# 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
+from lib.checkping import check_ping
+
+pytestmark = [pytest.mark.bgpd, pytest.mark.isisd]
+
+
+def build_topo(tgen):
+ """
+ +---+ +---+ +---+ +---+
+ | h1|----|pe1|----|pe2|----| h2|
+ +---+ +---+ +---+ +---+
+ """
+
+ def connect_routers(tgen, left, right):
+ pe = None
+ host = None
+ for rname in [left, right]:
+ if rname not in tgen.routers().keys():
+ tgen.add_router(rname)
+ if "pe" in rname:
+ pe = tgen.gears[rname]
+ if "h" in rname:
+ host = tgen.gears[rname]
+
+ switch = tgen.add_switch("s-{}-{}".format(left, right))
+ switch.add_link(tgen.gears[left], nodeif="eth-{}".format(right))
+ switch.add_link(tgen.gears[right], nodeif="eth-{}".format(left))
+
+ if pe and host:
+ pe.cmd("ip link add vrf1 type vrf table 10")
+ pe.cmd("ip link set vrf1 up")
+ pe.cmd("ip link set dev eth-{} master vrf1".format(host.name))
+
+ if "p" in left and "p" in right:
+ # PE <-> P or P <-> P
+ tgen.gears[left].run("sysctl -w net.mpls.conf.eth-{}.input=1".format(right))
+ tgen.gears[right].run("sysctl -w net.mpls.conf.eth-{}.input=1".format(left))
+
+ connect_routers(tgen, "h1", "pe1")
+ connect_routers(tgen, "pe1", "pe2")
+ connect_routers(tgen, "pe2", "h2")
+
+
+def setup_module(mod):
+ "Sets up the pytest environment"
+
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+ logger.info("setup_module")
+
+ for rname, router in tgen.routers().items():
+ router.load_config(
+ TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+ )
+ if "h" in rname:
+ # hosts
+ continue
+
+ router.load_config(
+ TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
+ )
+
+ router.load_config(
+ TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
+ )
+
+ # Initialize all routers.
+ tgen.start_router()
+
+
+def teardown_module(_mod):
+ "Teardown the pytest environment"
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_convergence():
+ "Assert that BGP is converging."
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("waiting for bgp peers to go up")
+
+ router_list = ["pe1", "pe2"]
+
+ for name in router_list:
+ router = tgen.gears[name]
+ ref_file = "{}/{}/bgp_summary.json".format(CWD, router.name)
+ expected = json.loads(open(ref_file).read())
+ test_func = partial(
+ topotest.router_json_cmp, router, "show bgp summary json", expected
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=90, wait=1)
+ assertmsg = "{}: bgp did not converge".format(router.name)
+ assert res is None, assertmsg
+
+
+def test_bgp_ipv6_vpn():
+ "Assert that BGP is exchanging BGP route."
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("waiting for bgp peers exchanging UPDATES")
+
+ router_list = ["pe1", "pe2"]
+
+ for name in router_list:
+ router = tgen.gears[name]
+ ref_file = "{}/{}/bgp_vrf_ipv6.json".format(CWD, router.name)
+ expected = json.loads(open(ref_file).read())
+ test_func = partial(
+ topotest.router_json_cmp,
+ router,
+ "show bgp vrf vrf1 ipv6 unicast json",
+ expected,
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assertmsg = "{}: BGP UPDATE exchange failure".format(router.name)
+ assert res is None, assertmsg
+
+
+def test_zebra_ipv6_installed():
+ "Assert that routes are installed."
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+ pe1 = tgen.gears["pe1"]
+ logger.info("check ipv6 routes installed on pe1")
+
+ ref_file = "{}/{}/ipv6_routes_vrf.json".format(CWD, pe1.name)
+ expected = json.loads(open(ref_file).read())
+ test_func = partial(
+ topotest.router_json_cmp, pe1, "show ipv6 route vrf vrf1 json", expected
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assertmsg = "{}: Zebra Installation failure on vrf vrf1".format(pe1.name)
+ assert res is None, assertmsg
+
+
+def test_bgp_ping6_ok():
+ "Check that h1 pings h2"
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ check_ping("h1", "fd00:200::6", True, 5, 1)
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step10/show_ipv6_route.ref.diff b/tests/topotests/bgp_addpath_paths_limit/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step10/show_ipv6_route.ref.diff
+++ b/tests/topotests/bgp_addpath_paths_limit/__init__.py
diff --git a/tests/topotests/bgp_addpath_paths_limit/r1/frr.conf b/tests/topotests/bgp_addpath_paths_limit/r1/frr.conf
new file mode 100644
index 0000000..65beb7f
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/r1/frr.conf
@@ -0,0 +1,13 @@
+!
+int r1-eth0
+ ip address 192.168.1.1/24
+!
+router bgp 65001
+ timers bgp 3 10
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.2 remote-as external
+ neighbor 192.168.1.2 timers connect 5
+ address-family ipv4 unicast
+ neighbor 192.168.1.2 addpath-rx-paths-limit 2
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_addpath_paths_limit/r2/frr.conf b/tests/topotests/bgp_addpath_paths_limit/r2/frr.conf
new file mode 100644
index 0000000..796b4d0
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/r2/frr.conf
@@ -0,0 +1,37 @@
+!
+int r2-eth0
+ ip address 192.168.1.2/24
+!
+int r2-eth1
+ ip address 192.168.2.2/24
+!
+int r2-eth2
+ ip address 192.168.7.2/24
+!
+router bgp 65002
+ timers bgp 3 10
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.1 remote-as external
+ neighbor 192.168.7.7 remote-as external
+ neighbor 192.168.7.7 timers connect 5
+ neighbor 192.168.2.3 remote-as external
+ neighbor 192.168.2.3 timers connect 5
+ neighbor 192.168.2.3 weight 3
+ neighbor 192.168.2.4 remote-as external
+ neighbor 192.168.2.4 timers connect 5
+ neighbor 192.168.2.4 weight 4
+ neighbor 192.168.2.5 remote-as external
+ neighbor 192.168.2.5 timers connect 5
+ neighbor 192.168.2.5 weight 5
+ neighbor 192.168.2.6 remote-as external
+ neighbor 192.168.2.6 timers connect 5
+ neighbor 192.168.2.6 weight 6
+ address-family ipv4 unicast
+ neighbor 192.168.1.1 addpath-tx-all-paths
+ neighbor 192.168.1.1 prefix-list announce out
+ neighbor 192.168.7.7 addpath-tx-all-paths
+ neighbor 192.168.7.7 prefix-list announce out
+ exit-address-family
+!
+ip prefix-list announce seq 5 permit 172.16.16.254/32
+!
diff --git a/tests/topotests/bgp_addpath_paths_limit/r3/frr.conf b/tests/topotests/bgp_addpath_paths_limit/r3/frr.conf
new file mode 100644
index 0000000..4d834d3
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/r3/frr.conf
@@ -0,0 +1,16 @@
+!
+int lo
+ ip address 172.16.16.254/32
+!
+int r3-eth0
+ ip address 192.168.2.3/24
+!
+router bgp 65003
+ timers bgp 3 10
+ no bgp ebgp-requires-policy
+ neighbor 192.168.2.2 remote-as external
+ neighbor 192.168.2.2 timers connect 5
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_addpath_paths_limit/r4/frr.conf b/tests/topotests/bgp_addpath_paths_limit/r4/frr.conf
new file mode 100644
index 0000000..01e0aa9
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/r4/frr.conf
@@ -0,0 +1,16 @@
+!
+int lo
+ ip address 172.16.16.254/32
+!
+int r4-eth0
+ ip address 192.168.2.4/24
+!
+router bgp 65004
+ timers bgp 3 10
+ no bgp ebgp-requires-policy
+ neighbor 192.168.2.2 remote-as external
+ neighbor 192.168.2.2 timers connect 5
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_addpath_paths_limit/r5/frr.conf b/tests/topotests/bgp_addpath_paths_limit/r5/frr.conf
new file mode 100644
index 0000000..02bb847
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/r5/frr.conf
@@ -0,0 +1,16 @@
+!
+int lo
+ ip address 172.16.16.254/32
+!
+int r5-eth0
+ ip address 192.168.2.5/24
+!
+router bgp 65005
+ timers bgp 3 10
+ no bgp ebgp-requires-policy
+ neighbor 192.168.2.2 remote-as external
+ neighbor 192.168.2.2 timers connect 5
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_addpath_paths_limit/r6/frr.conf b/tests/topotests/bgp_addpath_paths_limit/r6/frr.conf
new file mode 100644
index 0000000..39fdbcc
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/r6/frr.conf
@@ -0,0 +1,16 @@
+!
+int lo
+ ip address 172.16.16.254/32
+!
+int r6-eth0
+ ip address 192.168.2.6/24
+!
+router bgp 65006
+ timers bgp 3 10
+ no bgp ebgp-requires-policy
+ neighbor 192.168.2.2 remote-as external
+ neighbor 192.168.2.2 timers connect 5
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_addpath_paths_limit/r7/frr.conf b/tests/topotests/bgp_addpath_paths_limit/r7/frr.conf
new file mode 100644
index 0000000..8c44566
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/r7/frr.conf
@@ -0,0 +1,13 @@
+!
+int r7-eth0
+ ip address 192.168.7.7/24
+!
+router bgp 65007
+ timers bgp 3 10
+ no bgp ebgp-requires-policy
+ neighbor 192.168.7.2 remote-as external
+ neighbor 192.168.7.2 timers connect 5
+ address-family ipv4 unicast
+ neighbor 192.168.7.2 addpath-rx-paths-limit 3
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_addpath_paths_limit/test_bgp_addpath_paths_limit.py b/tests/topotests/bgp_addpath_paths_limit/test_bgp_addpath_paths_limit.py
new file mode 100644
index 0000000..b7a1cfb
--- /dev/null
+++ b/tests/topotests/bgp_addpath_paths_limit/test_bgp_addpath_paths_limit.py
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+# Copyright (c) 2024 by
+# Donatas Abraitis <donatas@opensourcerouting.org>
+#
+
+"""
+Test if Paths-Limit capability works as expected.
+"""
+
+import os
+import sys
+import json
+import pytest
+import functools
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+
+pytestmark = [pytest.mark.bgpd]
+
+
+def build_topo(tgen):
+ for routern in range(1, 8):
+ tgen.add_router("r{}".format(routern))
+
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["r1"])
+ switch.add_link(tgen.gears["r2"])
+
+ switch = tgen.add_switch("s2")
+ switch.add_link(tgen.gears["r2"])
+ switch.add_link(tgen.gears["r3"])
+ switch.add_link(tgen.gears["r4"])
+ switch.add_link(tgen.gears["r5"])
+ switch.add_link(tgen.gears["r6"])
+
+ switch = tgen.add_switch("s3")
+ switch.add_link(tgen.gears["r7"])
+ switch.add_link(tgen.gears["r2"])
+
+
+def setup_module(mod):
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_addpath_paths_limit():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ r2 = tgen.gears["r2"]
+ r7 = tgen.gears["r7"]
+
+ def _bgp_converge():
+ output = json.loads(r2.vtysh_cmd("show bgp neighbor json"))
+ expected = {
+ "192.168.7.7": {
+ "neighborCapabilities": {
+ "pathsLimit": {
+ "ipv4Unicast": {
+ "advertisedAndReceived": True,
+ "advertisedPathsLimit": 0,
+ "receivedPathsLimit": 3,
+ }
+ }
+ }
+ },
+ "192.168.1.1": {
+ "neighborCapabilities": {
+ "pathsLimit": {
+ "ipv4Unicast": {
+ "advertisedAndReceived": True,
+ "advertisedPathsLimit": 0,
+ "receivedPathsLimit": 2,
+ }
+ }
+ }
+ },
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_converge)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Can't converge initially"
+
+ def _bgp_check_received_routes(router, expected):
+ output = json.loads(
+ router.vtysh_cmd("show bgp ipv4 unicast 172.16.16.254/32 json")
+ )
+
+ if "paths" not in output:
+ return "No paths received"
+
+ return topotest.json_cmp(len(output["paths"]), expected)
+
+ test_func = functools.partial(_bgp_check_received_routes, r1, 2)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Received routes count is not as expected"
+
+ test_func = functools.partial(_bgp_check_received_routes, r7, 3)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Received routes count is not as expected"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_asdot_regex/test_bgp_asdot_regex.py b/tests/topotests/bgp_asdot_regex/test_bgp_asdot_regex.py
index 5d5f165..4883e84 100644
--- a/tests/topotests/bgp_asdot_regex/test_bgp_asdot_regex.py
+++ b/tests/topotests/bgp_asdot_regex/test_bgp_asdot_regex.py
@@ -44,8 +44,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 3):
diff --git a/tests/topotests/bgp_bmp/r1/bgpd.conf b/tests/topotests/bgp_bmp/r1/bgpd.conf
index 69acf6e..24505de 100644
--- a/tests/topotests/bgp_bmp/r1/bgpd.conf
+++ b/tests/topotests/bgp_bmp/r1/bgpd.conf
@@ -6,9 +6,17 @@ router bgp 65501
neighbor 192:168::2 remote-as 65502
!
bmp targets bmp1
- bmp connect 192.0.178.10 port 1789 min-retry 100 max-retry 10000
+ bmp connect 192.0.2.10 port 1789 min-retry 100 max-retry 10000
exit
!
+ address-family ipv4 vpn
+ neighbor 192.168.0.2 activate
+ neighbor 192.168.0.2 soft-reconfiguration inbound
+ exit-address-family
+ address-family ipv6 vpn
+ neighbor 192:168::2 activate
+ neighbor 192:168::2 soft-reconfiguration inbound
+ exit-address-family
address-family ipv4 unicast
neighbor 192.168.0.2 activate
neighbor 192.168.0.2 soft-reconfiguration inbound
@@ -20,3 +28,21 @@ router bgp 65501
neighbor 192:168::2 soft-reconfiguration inbound
exit-address-family
!
+router bgp 65502 vrf vrf1
+ bgp router_id 192.168.0.1
+ bgp log-neighbor-changes
+ address-family ipv4 unicast
+ label vpn export 101
+ rd vpn export 444:1
+ rt vpn both 52:100
+ export vpn
+ import vpn
+ exit-address-family
+ address-family ipv6 unicast
+ label vpn export 103
+ rd vpn export 555:1
+ rt vpn both 54:200
+ export vpn
+ import vpn
+ exit-address-family
+exit
diff --git a/tests/topotests/bgp_bmp/r1/zebra.conf b/tests/topotests/bgp_bmp/r1/zebra.conf
index 6a25a6f..0b523c9 100644
--- a/tests/topotests/bgp_bmp/r1/zebra.conf
+++ b/tests/topotests/bgp_bmp/r1/zebra.conf
@@ -1,5 +1,5 @@
interface r1-eth0
- ip address 192.0.178.1/24
+ ip address 192.0.2.1/24
!
interface r1-eth1
ip address 192.168.0.1/24
diff --git a/tests/topotests/bgp_bmp/r2/bgpd.conf b/tests/topotests/bgp_bmp/r2/bgpd.conf
index 7c8255a..40e2cd5 100644
--- a/tests/topotests/bgp_bmp/r2/bgpd.conf
+++ b/tests/topotests/bgp_bmp/r2/bgpd.conf
@@ -12,8 +12,35 @@ router bgp 65502
redistribute connected
exit-address-family
!
+ address-family ipv4 vpn
+ neighbor 192.168.0.1 activate
+ exit-address-family
+!
+ address-family ipv6 vpn
+ neighbor 192:168::1 activate
+ exit-address-family
+!
address-family ipv6 unicast
neighbor 192:168::1 activate
redistribute connected
exit-address-family
!
+router bgp 65502 vrf vrf1
+ bgp router-id 192.168.0.2
+ bgp log-neighbor-changes
+ no bgp network import-check
+ address-family ipv4 unicast
+ label vpn export 102
+ rd vpn export 444:2
+ rt vpn both 52:100
+ export vpn
+ import vpn
+ exit-address-family
+ address-family ipv6 unicast
+ label vpn export 105
+ rd vpn export 555:2
+ rt vpn both 54:200
+ export vpn
+ import vpn
+ exit-address-family
+exit
diff --git a/tests/topotests/bgp_bmp/test_bgp_bmp.py b/tests/topotests/bgp_bmp/test_bgp_bmp.py
index 250f1cb..02de805 100644
--- a/tests/topotests/bgp_bmp/test_bgp_bmp.py
+++ b/tests/topotests/bgp_bmp/test_bgp_bmp.py
@@ -55,7 +55,7 @@ LOC_RIB = "loc-rib"
def build_topo(tgen):
tgen.add_router("r1")
tgen.add_router("r2")
- tgen.add_bmp_server("bmp1", ip="192.0.178.10", defaultRoute="via 192.0.178.1")
+ tgen.add_bmp_server("bmp1", ip="192.0.2.10", defaultRoute="via 192.0.2.1")
switch = tgen.add_switch("s1")
switch.add_link(tgen.gears["r1"])
@@ -81,8 +81,8 @@ def setup_module(mod):
tgen.start_router()
logger.info("starting BMP servers")
- for _, server in tgen.get_bmp_servers().items():
- server.start()
+ for bmp_name, server in tgen.get_bmp_servers().items():
+ server.start(log_file=os.path.join(tgen.logdir, bmp_name, "bmp.log"))
def teardown_module(_mod):
@@ -105,7 +105,9 @@ def get_bmp_messages():
"""
messages = []
tgen = get_topogen()
- text_output = tgen.gears["bmp1"].run("cat /var/log/bmp.log")
+ text_output = tgen.gears["bmp1"].run(
+ "cat {}".format(os.path.join(tgen.logdir, "bmp1", "bmp.log"))
+ )
for m in text_output.splitlines():
# some output in the bash can break the message decoding
@@ -121,7 +123,7 @@ def get_bmp_messages():
return messages
-def check_for_prefixes(expected_prefixes, bmp_log_type, policy):
+def check_for_prefixes(expected_prefixes, bmp_log_type, policy, labels=None):
"""
Check for the presence of the given prefixes in the BMP server logs with
the given message type and the set policy.
@@ -140,6 +142,12 @@ def check_for_prefixes(expected_prefixes, bmp_log_type, policy):
and "bmp_log_type" in m.keys()
and m["bmp_log_type"] == bmp_log_type
and m["policy"] == policy
+ and (
+ labels is None
+ or (
+ m["ip_prefix"] in labels.keys() and m["label"] == labels[m["ip_prefix"]]
+ )
+ )
]
# check for prefixes
@@ -174,7 +182,7 @@ def configure_prefixes(tgen, node, asn, safi, prefixes, vrf=None, update=True):
Configure the bgp prefixes.
"""
withdraw = "no " if not update else ""
- vrf = " vrf {}" if vrf else ""
+ vrf = " vrf {}".format(vrf) if vrf else ""
for p in prefixes:
ip = ip_network(p)
cmd = [
@@ -216,6 +224,45 @@ def unicast_prefixes(policy):
assert success, "Checking the withdrawed prefixes has been failed !."
+def vpn_prefixes(policy):
+ """
+ Setup the BMP monitor policy, Add and withdraw ipv4/v6 prefixes.
+ Check if the previous actions are logged in the BMP server with the right
+ message type and the right policy.
+ """
+ tgen = get_topogen()
+ set_bmp_policy(tgen, "r1", 65501, "bmp1", "vpn", policy)
+
+ prefixes = ["172.31.10.1/32", "2001::2222/128"]
+
+ if policy == PRE_POLICY:
+ # labels are not yet supported in adj-RIB-in. Do not test for the moment
+ labels = None
+ else:
+ # "label vpn export" value in r2/bgpd.conf
+ labels = {
+ "172.31.10.1/32": 102,
+ "2001::2222/128": 105,
+ }
+
+ # add prefixes
+ configure_prefixes(tgen, "r2", 65502, "unicast", prefixes, vrf="vrf1")
+
+ logger.info("checking for updated prefixes")
+ # check
+ test_func = partial(check_for_prefixes, prefixes, "update", policy, labels=labels)
+ success, _ = topotest.run_and_expect(test_func, True, wait=0.5)
+ assert success, "Checking the updated prefixes has been failed !."
+
+ # withdraw prefixes
+ configure_prefixes(tgen, "r2", 65502, "unicast", prefixes, vrf="vrf1", update=False)
+ logger.info("checking for withdrawed prefixes")
+ # check
+ test_func = partial(check_for_prefixes, prefixes, "withdraw", policy)
+ success, _ = topotest.run_and_expect(test_func, True, wait=0.5)
+ assert success, "Checking the withdrawed prefixes has been failed !."
+
+
def test_bmp_server_logging():
"""
Assert the logging of the bmp server.
@@ -223,7 +270,9 @@ def test_bmp_server_logging():
def check_for_log_file():
tgen = get_topogen()
- output = tgen.gears["bmp1"].run("ls /var/log/")
+ output = tgen.gears["bmp1"].run(
+ "ls {}".format(os.path.join(tgen.logdir, "bmp1"))
+ )
if "bmp.log" not in output:
return False
return True
@@ -244,6 +293,16 @@ def test_bmp_bgp_unicast():
unicast_prefixes(LOC_RIB)
+def test_bmp_bgp_vpn():
+ # check for the prefixes in the BMP server logging file
+ logger.info("***** VPN prefixes pre-policy logging *****")
+ vpn_prefixes(PRE_POLICY)
+ logger.info("***** VPN prefixes post-policy logging *****")
+ vpn_prefixes(POST_POLICY)
+ logger.info("***** VPN prefixes loc-rib logging *****")
+ vpn_prefixes(LOC_RIB)
+
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_color_extcommunities/test_bgp_color_extcommunities.py b/tests/topotests/bgp_color_extcommunities/test_bgp_color_extcommunities.py
index 6d17cdb..e0c1b49 100644
--- a/tests/topotests/bgp_color_extcommunities/test_bgp_color_extcommunities.py
+++ b/tests/topotests/bgp_color_extcommunities/test_bgp_color_extcommunities.py
@@ -117,7 +117,9 @@ def test_bgp_color_extended_communities():
test_func = functools.partial(_bgp_check_route, r2, True)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
- assert result is None, "10.10.10.0/24 ext community is correctly not installed, but SHOULD be"
+ assert (
+ result is None
+ ), "10.10.10.0/24 ext community is correctly not installed, but SHOULD be"
if __name__ == "__main__":
diff --git a/tests/topotests/bgp_community_alias/test_bgp-community-alias.py b/tests/topotests/bgp_community_alias/test_bgp-community-alias.py
index 000ea60..fdae9a3 100644
--- a/tests/topotests/bgp_community_alias/test_bgp-community-alias.py
+++ b/tests/topotests/bgp_community_alias/test_bgp-community-alias.py
@@ -24,8 +24,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 3):
diff --git a/tests/topotests/bgp_conditional_advertisement_static_route/test_bgp_conditional_advertisement_static_route.py b/tests/topotests/bgp_conditional_advertisement_static_route/test_bgp_conditional_advertisement_static_route.py
index 4180bfc..e9114bd 100644
--- a/tests/topotests/bgp_conditional_advertisement_static_route/test_bgp_conditional_advertisement_static_route.py
+++ b/tests/topotests/bgp_conditional_advertisement_static_route/test_bgp_conditional_advertisement_static_route.py
@@ -17,7 +17,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -27,8 +27,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2"), "s2": ("r2", "r3")}
diff --git a/tests/topotests/bgp_confed1/r2/bgpd.conf b/tests/topotests/bgp_confed1/r2/bgpd.conf
index fe13dfe..ba2da41 100644
--- a/tests/topotests/bgp_confed1/r2/bgpd.conf
+++ b/tests/topotests/bgp_confed1/r2/bgpd.conf
@@ -4,7 +4,6 @@
!debug bgp updates out
!
router bgp 200
- no bgp ebgp-requires-policy
bgp confederation identifier 300
bgp confederation peers 300
neighbor 192.0.2.1 remote-as 100
@@ -12,7 +11,9 @@ router bgp 200
!
address-family ipv4 unicast
network 203.0.113.16/28
+ neighbor 192.0.2.1 route-map any in
+ neighbor 192.0.2.1 route-map any out
neighbor 192.0.2.18 default-originate
exit-address-family
!
-
+route-map any permit 10
diff --git a/tests/topotests/bgp_confed1/test_bgp_confed1.py b/tests/topotests/bgp_confed1/test_bgp_confed1.py
index 57a8522..7b37f4f 100644
--- a/tests/topotests/bgp_confed1/test_bgp_confed1.py
+++ b/tests/topotests/bgp_confed1/test_bgp_confed1.py
@@ -32,7 +32,7 @@ pytestmark = [pytest.mark.bgpd]
def build_topo(tgen):
- for routern in range(1, 5):
+ for routern in range(1, 5):
tgen.add_router("r{}".format(routern))
switch = tgen.add_switch("s1")
@@ -47,8 +47,8 @@ def build_topo(tgen):
switch.add_link(tgen.gears["r2"])
switch.add_link(tgen.gears["r3"])
-def setup_module(mod):
+def setup_module(mod):
tgen = Topogen(build_topo, mod.__name__)
tgen.start_topology()
@@ -67,6 +67,7 @@ def setup_module(mod):
# Initialize all routers.
tgen.start_router()
+
def teardown_module(_mod):
"Teardown the pytest environment"
tgen = get_topogen()
diff --git a/tests/topotests/bgp_confederation_astype/test_bgp_confederation_astype.py b/tests/topotests/bgp_confederation_astype/test_bgp_confederation_astype.py
index 5310d3b..7bc0050 100644
--- a/tests/topotests/bgp_confederation_astype/test_bgp_confederation_astype.py
+++ b/tests/topotests/bgp_confederation_astype/test_bgp_confederation_astype.py
@@ -18,7 +18,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -27,8 +27,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2"), "s2": ("r1", "r3")}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step10/show_mpls_table.ref.diff b/tests/topotests/bgp_dampening_per_peer/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step10/show_mpls_table.ref.diff
+++ b/tests/topotests/bgp_dampening_per_peer/__init__.py
diff --git a/tests/topotests/bgp_dampening_per_peer/r1/frr.conf b/tests/topotests/bgp_dampening_per_peer/r1/frr.conf
new file mode 100644
index 0000000..4589955
--- /dev/null
+++ b/tests/topotests/bgp_dampening_per_peer/r1/frr.conf
@@ -0,0 +1,15 @@
+!
+int r1-eth0
+ ip address 192.168.1.1/24
+!
+router bgp 65001
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.2 remote-as external
+ neighbor 192.168.1.2 timers 1 3
+ neighbor 192.168.1.2 timers connect 1
+ neighbor 192.168.1.2 capability dynamic
+ !
+ address-family ipv4 unicast
+ neighbor 192.168.1.2 dampening 1 1 1 1
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_dampening_per_peer/r2/frr.conf b/tests/topotests/bgp_dampening_per_peer/r2/frr.conf
new file mode 100644
index 0000000..d68d13d
--- /dev/null
+++ b/tests/topotests/bgp_dampening_per_peer/r2/frr.conf
@@ -0,0 +1,17 @@
+!
+int lo
+ ip address 10.10.10.10/32
+!
+int r2-eth0
+ ip address 192.168.1.2/24
+!
+router bgp 65002
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.1 remote-as external
+ neighbor 192.168.1.1 timers 1 3
+ neighbor 192.168.1.1 timers connect 1
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_dampening_per_peer/test_bgp_dampening_per_peer.py b/tests/topotests/bgp_dampening_per_peer/test_bgp_dampening_per_peer.py
new file mode 100644
index 0000000..2066d84
--- /dev/null
+++ b/tests/topotests/bgp_dampening_per_peer/test_bgp_dampening_per_peer.py
@@ -0,0 +1,177 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+# Copyright (c) 2024 by
+# Donatas Abraitis <donatas@opensourcerouting.org>
+#
+
+import os
+import re
+import sys
+import json
+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, get_topogen
+
+
+def setup_module(mod):
+ topodef = {"s1": ("r1", "r2")}
+ tgen = Topogen(topodef, mod.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_dampening_per_peer():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ r2 = tgen.gears["r2"]
+
+ def _converge():
+ output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.10.10.10/32 json"))
+ expected = {
+ "paths": [
+ {
+ "valid": True,
+ "nexthops": [
+ {
+ "hostname": "r2",
+ "accessible": True,
+ }
+ ],
+ }
+ ]
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(
+ _converge,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Can't converge"
+
+ ####
+ # Withdraw 10.10.10.10/32, and check if it's flagged as history.
+ ####
+ r2.vtysh_cmd(
+ """
+ configure terminal
+ router bgp
+ address-family ipv4 unicast
+ no redistribute connected
+ """
+ )
+
+ def _check_bgp_dampening_history():
+ output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.10.10.10/32 json"))
+ expected = {
+ "paths": [
+ {
+ "dampeningHistoryEntry": True,
+ "nexthops": [
+ {
+ "hostname": "r2",
+ "accessible": True,
+ }
+ ],
+ }
+ ],
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(
+ _check_bgp_dampening_history,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "10.10.10.10/32 is not flagged as history entry"
+
+ ####
+ # Reannounce 10.10.10.10/32, and check if it's flagged as dampened.
+ ####
+ r2.vtysh_cmd(
+ """
+ configure terminal
+ router bgp
+ address-family ipv4 unicast
+ redistribute connected
+ """
+ )
+
+ def _check_bgp_dampening_dampened():
+ output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.10.10.10/32 json"))
+ expected = {
+ "paths": [
+ {
+ "valid": True,
+ "dampeningSuppressed": True,
+ "nexthops": [
+ {
+ "hostname": "r2",
+ "accessible": True,
+ }
+ ],
+ }
+ ],
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(
+ _check_bgp_dampening_dampened,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "10.10.10.10/32 is not flagged as dampened entry"
+
+ ####
+ # Check if the route becomes non-dampened again after some time.
+ ####
+ def _check_bgp_dampening_undampened():
+ output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.10.10.10/32 json"))
+ expected = {
+ "paths": [
+ {
+ "valid": True,
+ "dampeningHistoryEntry": None,
+ "dampeningSuppressed": None,
+ "nexthops": [
+ {
+ "hostname": "r2",
+ "accessible": True,
+ }
+ ],
+ }
+ ],
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(
+ _check_bgp_dampening_undampened,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=120, wait=10)
+ assert result is None, "10.10.10.10/32 is flagged as history/dampened"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py b/tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py
index a0014c7..05e0748 100644
--- a/tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py
+++ b/tests/topotests/bgp_default_afi_safi/test_bgp-default-afi-safi.py
@@ -30,8 +30,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 5):
diff --git a/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_1.py b/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_1.py
index 6156968..50a1938 100644
--- a/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_1.py
+++ b/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_1.py
@@ -325,12 +325,14 @@ def teardown_module():
)
logger.info("=" * 40)
+
#####################################################
#
# Testcases
#
#####################################################
+
def test_verify_bgp_default_originate_in_IBGP_p0(request):
"""
Verify BGP default-originate route with IBGP peer
@@ -396,7 +398,9 @@ def test_verify_bgp_default_originate_in_IBGP_p0(request):
step("After changing the BGP AS Path Verify the BGP Convergence")
BGP_CONVERGENCE = verify_bgp_convergence(tgen, topo)
- assert BGP_CONVERGENCE is True, " Complete Convergence is expected after changing the ASN but failed to converge --> :Failed \n Error: {}".format(
+ assert (
+ BGP_CONVERGENCE is True
+ ), " Complete Convergence is expected after changing the ASN but failed to converge --> :Failed \n Error: {}".format(
BGP_CONVERGENCE
)
@@ -413,8 +417,10 @@ def test_verify_bgp_default_originate_in_IBGP_p0(request):
}
}
result = create_static_routes(tgen, static_routes_input)
- assert result is True, "Testcase {} : Failed to configure the static routes {} on router R1 \n Error: {}".format(
- tc_name,static_routes_input, result
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the static routes {} on router R1 \n Error: {}".format(
+ tc_name, static_routes_input, result
)
step("verify IPv4 and IPv6 static route are configured and up on R1")
for addr_type in ADDR_TYPES:
@@ -429,8 +435,10 @@ def test_verify_bgp_default_originate_in_IBGP_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r1", static_routes_input)
- assert result is True, "Testcase {} : Failed \n After configuring the static routes {} , the routes are not found in FIB \n Error: {}".format(
- tc_name,static_routes_input, result
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n After configuring the static routes {} , the routes are not found in FIB \n Error: {}".format(
+ tc_name, static_routes_input, result
)
step(
@@ -483,7 +491,11 @@ def test_verify_bgp_default_originate_in_IBGP_p0(request):
},
}
result = create_router_bgp(tgen, topo, redistribute_static)
- assert result is True, "Testcase {} : Failed to configure the redistribute static configuration \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the redistribute static configuration \n Error: {}".format(
+ tc_name, result
+ )
step(
"After configuring redistribute command , verify static and connected routes ( loopback connected routes) are advertised on R2"
@@ -517,13 +529,17 @@ def test_verify_bgp_default_originate_in_IBGP_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : After redistributing static routes the routes {} expected in FIB but NOT FOUND ......! \n Error: {}".format(
- tc_name, static_routes_input,result
+ assert (
+ result is True
+ ), "Testcase {} : After redistributing static routes the routes {} expected in FIB but NOT FOUND ......! \n Error: {}".format(
+ tc_name, static_routes_input, result
)
result = verify_bgp_rib(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : After redistributing static routes the routes {} expected in RIB but NOT FOUND ......! \n Error: {}".format(
- tc_name, static_routes_input , result
+ assert (
+ result is True
+ ), "Testcase {} : After redistributing static routes the routes {} expected in RIB but NOT FOUND ......! \n Error: {}".format(
+ tc_name, static_routes_input, result
)
step(
@@ -547,7 +563,11 @@ def test_verify_bgp_default_originate_in_IBGP_p0(request):
}
}
result = create_router_bgp(tgen, topo, default_originate_config)
- assert result is True, "Testcase {} : Failed Configuring default originate configuration. \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed Configuring default originate configuration. \n Error: {}".format(
+ tc_name, result
+ )
step(
"After configuring default-originate command , verify default routes are advertised on R2 "
@@ -574,12 +594,16 @@ def test_verify_bgp_default_originate_in_IBGP_p0(request):
}
result = verify_fib_routes(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : post configuring the BGP Default originate configuration static and connected routes should not be effected but impacted on FIB .......! FAILED \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : post configuring the BGP Default originate configuration static and connected routes should not be effected but impacted on FIB .......! FAILED \n Error: {}".format(
tc_name, result
)
result = verify_bgp_rib(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : Failedpost configuring the BGP Default originate configuration static and connected routes should not be effected but impacted on RIB......! FAILED \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failedpost configuring the BGP Default originate configuration static and connected routes should not be effected but impacted on RIB......! FAILED \n Error: {}".format(
tc_name, result
)
step(
@@ -686,7 +710,9 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
step("After changing the BGP AS Path Verify the BGP Convergence")
BGP_CONVERGENCE = verify_bgp_convergence(tgen, topo)
- assert BGP_CONVERGENCE is True, "Complete convergence is expeceted after changing the ASN os the routes ..! :Failed \n Error: {}".format(
+ assert (
+ BGP_CONVERGENCE is True
+ ), "Complete convergence is expeceted after changing the ASN os the routes ..! :Failed \n Error: {}".format(
BGP_CONVERGENCE
)
@@ -703,7 +729,9 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
}
}
result = create_static_routes(tgen, static_routes_input)
- assert result is True, "Testcase {} : Failed to configure the static routes ....! Failed \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the static routes ....! Failed \n Error: {}".format(
tc_name, result
)
step("verify IPv4 and IPv6 static route are configured and up on R1")
@@ -719,8 +747,10 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r3", static_routes_input)
- assert result is True, "Testcase {} : Route is not found in {} in FIB ......! Failed \n Error: {}".format(
- tc_name, static_routes_input,result
+ assert (
+ result is True
+ ), "Testcase {} : Route is not found in {} in FIB ......! Failed \n Error: {}".format(
+ tc_name, static_routes_input, result
)
step(
@@ -773,7 +803,11 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
},
}
result = create_router_bgp(tgen, topo, redistribute_static)
- assert result is True, "Testcase {} : Failed to configure redistribute configuratin \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure redistribute configuratin \n Error: {}".format(
+ tc_name, result
+ )
step(
"After configuring redistribute command , verify static and connected routes ( loopback connected routes) are advertised on R2"
@@ -806,11 +840,15 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : static & and connected routes are expected but not found in FIB .... ! \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : static & and connected routes are expected but not found in FIB .... ! \n Error: {}".format(
tc_name, result
)
result = verify_bgp_rib(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : static & and connected routes are expected but not found in RIB .... ! \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : static & and connected routes are expected but not found in RIB .... ! \n Error: {}".format(
tc_name, result
)
snapshot1 = get_prefix_count_route(tgen, topo, dut="r2", peer="r3")
@@ -830,7 +868,11 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
}
}
result = create_router_bgp(tgen, topo, default_originate_config)
- assert result is True, "Testcase {} : Failed to configure the default originate configuration \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the default originate configuration \n Error: {}".format(
+ tc_name, result
+ )
step(
"After configuring default-originate command , verify default routes are advertised on R2 on both BGP RIB and FIB"
@@ -853,13 +895,17 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
}
result = verify_fib_routes(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : static route from R1 {} and default route from R3 is expected in R2 FIB .....! NOT FOUND \n Error: {}".format(
- tc_name, NETWORK1_1,result
+ assert (
+ result is True
+ ), "Testcase {} : static route from R1 {} and default route from R3 is expected in R2 FIB .....! NOT FOUND \n Error: {}".format(
+ tc_name, NETWORK1_1, result
)
result = verify_bgp_rib(tgen, addr_type, "r2", static_routes_input)
- assert result is True, "Testcase {} : static route from R1 {} and default route from R3 is expected in R2 RIB .....! NOT FOUND \n Error: {}".format(
- tc_name,NETWORK1_1, result
+ assert (
+ result is True
+ ), "Testcase {} : static route from R1 {} and default route from R3 is expected in R2 RIB .....! NOT FOUND \n Error: {}".format(
+ tc_name, NETWORK1_1, result
)
step(
@@ -875,7 +921,11 @@ def test_verify_bgp_default_originate_in_EBGP_p0(request):
metric=0,
expected_aspath="4000",
)
- assert result is True, "Testcase {} : Default route from R3 is expected with attributes in R2 RIB .....! NOT FOUND Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Default route from R3 is expected with attributes in R2 RIB .....! NOT FOUND Error: {}".format(
+ tc_name, result
+ )
step(
"Taking the snapshot2 of the prefix count after configuring the default originate"
@@ -968,7 +1018,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
step("After changing the BGP AS Path Verify the BGP Convergence")
BGP_CONVERGENCE = verify_bgp_convergence(tgen, topo)
- assert BGP_CONVERGENCE is True, "Complete convergence is expected after changing ASN ....! ERROR :Failed \n Error: {}".format(
+ assert (
+ BGP_CONVERGENCE is True
+ ), "Complete convergence is expected after changing ASN ....! ERROR :Failed \n Error: {}".format(
BGP_CONVERGENCE
)
@@ -989,7 +1041,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_static_routes(tgen, static_routes_input)
- assert result is True, "Testcase {} : Static Configuration is Failed \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Static Configuration is Failed \n Error: {}".format(
tc_name, result
)
@@ -1010,8 +1064,10 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r0", static_routes_input)
- assert result is True, "Testcase {} : routes {} unable is not found in R0 FIB \n Error: {}".format(
- tc_name, static_routes_input,result
+ assert (
+ result is True
+ ), "Testcase {} : routes {} unable is not found in R0 FIB \n Error: {}".format(
+ tc_name, static_routes_input, result
)
step(
@@ -1028,7 +1084,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_router_bgp(tgen, topo, redistribute_static)
- assert result is True, "Testcase {} : Failed to configure redistribute static configuration....! \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure redistribute static configuration....! \n Error: {}".format(
+ tc_name, result
+ )
step("verify IPv4 and IPv6 static route are configured and up on R1")
for addr_type in ADDR_TYPES:
@@ -1047,13 +1107,17 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r1", static_routes_input)
- assert result is True, "Testcase {} : Failed... Routes {} expected in r0 FIB after configuring the redistribute config \n Error: {}".format(
- tc_name,static_routes_input, result
+ assert (
+ result is True
+ ), "Testcase {} : Failed... Routes {} expected in r0 FIB after configuring the redistribute config \n Error: {}".format(
+ tc_name, static_routes_input, result
)
result = verify_bgp_rib(tgen, addr_type, "r1", static_routes_input)
- assert result is True, "Testcase {} : Failed... Routes {} expected in r0 RIB after configuring the redistribute config \n Error: {}".format(
- tc_name, static_routes_input,result
+ assert (
+ result is True
+ ), "Testcase {} : Failed... Routes {} expected in r0 RIB after configuring the redistribute config \n Error: {}".format(
+ tc_name, static_routes_input, result
)
step(
@@ -1094,7 +1158,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_prefix_lists(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to configure the prefix list \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the prefix list \n Error: {}".format(
+ tc_name, result
+ )
step(
"Configure IPV4 and IPv6 route-map (RMv4 and RMv6 ) matching prefix-list (Pv4 and Pv6) respectively on R1"
@@ -1120,7 +1188,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_route_maps(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to configure the route map \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the route map \n Error: {}".format(
+ tc_name, result
+ )
step(
"Configure default-originate with route-map (RMv4 and RMv6) on R1, on BGP IPv4 and IPv6 address family "
@@ -1142,7 +1214,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_router_bgp(tgen, topo, default_originate_config)
- assert result is True, "Testcase {} : Failed to configure the default originate \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the default originate \n Error: {}".format(
+ tc_name, result
+ )
step("Verify the default route is received in BGP RIB and FIB")
step(
@@ -1167,7 +1243,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
)
- assert result is True, "Testcase {} : Failed...! Expected default route from R1 not found in FIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed...! Expected default route from R1 not found in FIB \n Error: {}".format(
tc_name, result
)
@@ -1178,7 +1256,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
)
- assert result is True, "Testcase {} : Failed...! Expected default route from R1 not found in RIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed...! Expected default route from R1 not found in RIB \n Error: {}".format(
tc_name, result
)
step("Remove route-map RMv4 and RMv6 from default-originate command in R1")
@@ -1196,7 +1276,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_router_bgp(tgen, topo, default_originate_config)
- assert result is True, "Testcase {} : Failed to remove the default originate conditional route-map \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to remove the default originate conditional route-map \n Error: {}".format(
+ tc_name, result
+ )
step(
"Verify BGP RIB and FIB After removing route-map , default route still present on R2"
@@ -1221,7 +1305,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
)
- assert result is True, "Testcase {} : Failed Default route from R1 is not found in FIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default route from R1 is not found in FIB \n Error: {}".format(
tc_name, result
)
@@ -1232,7 +1318,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
)
- assert result is True, "Testcase {} : Failed Default route from R1 is not found in RIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default route from R1 is not found in RIB \n Error: {}".format(
tc_name, result
)
@@ -1266,7 +1354,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_router_bgp(tgen, topo, default_originate_config)
- assert result is True, "Testcase {} : Failed to configure the Default originate route-map \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the Default originate route-map \n Error: {}".format(
+ tc_name, result
+ )
step(
"After configuring default-originate command , verify default routes are advertised on R2 "
@@ -1290,7 +1382,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
)
- assert result is True, "Testcase {} : Failed Default Route from R1 is not found in FIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default Route from R1 is not found in FIB \n Error: {}".format(
tc_name, result
)
@@ -1301,7 +1395,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
)
- assert result is True, "Testcase {} : Failed Default Route from R1 is not found in RIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default Route from R1 is not found in RIB \n Error: {}".format(
tc_name, result
)
@@ -1345,7 +1441,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_prefix_lists(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to delete the prefix list Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to delete the prefix list Error: {}".format(
+ tc_name, result
+ )
step(
"Verify BGP RIB and FIB After deleting prefix-list , verify IPv4 and IPv6 default route got removed from DUT "
@@ -1426,7 +1526,11 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
}
}
result = create_prefix_lists(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to configure the prefix lists Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the prefix lists Error: {}".format(
+ tc_name, result
+ )
step(
"After configuring the Prefixlist cross checking the BGP Default route is configured again , before deleting the route map"
@@ -1452,7 +1556,9 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
expected=True,
)
- assert result is True, "Testcase {} : Failed Default route from R1 is expected in FIB but not found \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default route from R1 is expected in FIB but not found \n Error: {}".format(
tc_name, result
)
@@ -1464,14 +1570,20 @@ def test_verify_bgp_default_originate_in_IBGP_with_route_map_p0(request):
next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
expected=True,
)
- assert result is True, "Testcase {} : Failed Default route from R1 is expected in RIB but not found \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default route from R1 is expected in RIB but not found \n Error: {}".format(
tc_name, result
)
step("Deleting the routemap")
input_dict = {"r1": {"route_maps": ["RMv4", "RMv6"]}}
result = delete_route_maps(tgen, input_dict)
- assert result is True, "Testcase {} : Failed to delete the Route-map \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to delete the Route-map \n Error: {}".format(
+ tc_name, result
+ )
step(
"Verify BGP RIB and FIB ,After deleting route-map , verify IPv4 and IPv6 default route got removed from DUT"
@@ -1605,7 +1717,9 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = create_static_routes(tgen, static_routes_input)
- assert result is True, "Testcase {} : Failed to configure the static routes \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the static routes \n Error: {}".format(
tc_name, result
)
step("verify IPv4 and IPv6 static route are configured and up on R4")
@@ -1625,8 +1739,10 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r4", static_routes_input)
- assert result is True, "Testcase {} : Failed Static route {} is not found in R4 FIB \n Error: {}".format(
- tc_name, static_routes_input,result
+ assert (
+ result is True
+ ), "Testcase {} : Failed Static route {} is not found in R4 FIB \n Error: {}".format(
+ tc_name, static_routes_input, result
)
step(
@@ -1643,7 +1759,11 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = create_router_bgp(tgen, topo, redistribute_static)
- assert result is True, "Testcase {} : Failed to configure the redistribute static \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the redistribute static \n Error: {}".format(
+ tc_name, result
+ )
step("verify IPv4 and IPv6 static route are configured and up on R3")
for addr_type in ADDR_TYPES:
@@ -1662,11 +1782,15 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = verify_fib_routes(tgen, addr_type, "r3", static_routes_input)
- assert result is True, "Testcase {} : Failed static routes from R1 and R3 is not found in FIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed static routes from R1 and R3 is not found in FIB \n Error: {}".format(
tc_name, result
)
result = verify_bgp_rib(tgen, addr_type, "r3", static_routes_input)
- assert result is True, "Testcase {} : Failed static routes from R1 and R3 is not found in RIB \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed static routes from R1 and R3 is not found in RIB \n Error: {}".format(
tc_name, result
)
@@ -1698,12 +1822,20 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = create_prefix_lists(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to configure the prefix lists \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the prefix lists \n Error: {}".format(
+ tc_name, result
+ )
step("verify IPv4 and IPv6 Prefix list got configured on R3")
input_dict = {"r3": {"prefix_lists": ["Pv4", "Pv6"]}}
result = verify_prefix_lists(tgen, input_dict)
- assert result is True, "Testcase {} : Failed ..! configured prefix lists {} are not found \n Error: {}".format(tc_name,input_dict, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed ..! configured prefix lists {} are not found \n Error: {}".format(
+ tc_name, input_dict, result
+ )
step(
"Configure IPv4 and IPv6 route-map ( RMv4 and RMv6 ) matching prefix-list (Pv4 and Pv6 ) respectively on R3"
@@ -1729,7 +1861,11 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = create_route_maps(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to configure the route-map \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the route-map \n Error: {}".format(
+ tc_name, result
+ )
step(
"Taking the snapshot of the prefix count before configuring the default originate"
)
@@ -1754,7 +1890,11 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = create_router_bgp(tgen, topo, default_originate_config)
- assert result is True, "Testcase {} : Failed to configure default-originate \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure default-originate \n Error: {}".format(
+ tc_name, result
+ )
step("Verify the default route is NOT received in BGP RIB and FIB on R2 ")
step(
@@ -1836,7 +1976,11 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = create_prefix_lists(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to configure the prefix lists Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to configure the prefix lists Error: {}".format(
+ tc_name, result
+ )
step("Verify BGP default route for IPv4 and IPv6 is received on R2")
@@ -1859,7 +2003,9 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R3[addr_type],
)
- assert result is True, "Testcase {} : Failed Default routes are expected in R2 FIB from R3 but not found ....! \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default routes are expected in R2 FIB from R3 but not found ....! \n Error: {}".format(
tc_name, result
)
@@ -1870,7 +2016,9 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
static_routes_input,
next_hop=DEFAULT_ROUTE_NXT_HOP_R3[addr_type],
)
- assert result is True, "Testcase {} : Failed Default routes are expected in R2 RIB from R3 but not found ....! \n Error: {}".format(
+ assert (
+ result is True
+ ), "Testcase {} : Failed Default routes are expected in R2 RIB from R3 but not found ....! \n Error: {}".format(
tc_name, result
)
@@ -1914,7 +2062,11 @@ def test_verify_bgp_default_originate_in_EBGP_with_route_map_p0(request):
}
}
result = create_prefix_lists(tgen, input_dict_3)
- assert result is True, "Testcase {} : Failed to remove prefix-lists from R3 Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Failed to remove prefix-lists from R3 Error: {}".format(
+ tc_name, result
+ )
step(
"After Removing route BGP default route for IPv4 and IPv6 is NOT received on R2"
diff --git a/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_2.py b/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_2.py
index 59f833b..4e8bda5 100644
--- a/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_2.py
+++ b/tests/topotests/bgp_default_originate/test_bgp_default_originate_topo1_2.py
@@ -955,6 +955,7 @@ def test_verify_bgp_default_originate_route_map_in_OUT_p1(request):
write_test_footer(tc_name)
+
def test_verify_bgp_default_originate_route_map_in_IN_p1(request):
"""Verify BGP default originate route-map with IN route-map"""
tgen = get_topogen()
@@ -1472,6 +1473,7 @@ def test_verify_bgp_default_originate_route_map_in_IN_p1(request):
)
write_test_footer(tc_name)
+
def test_verify_default_originate_after_removing_default_originate_p1(request):
"""Verify BGP default route after removing default-originate"""
@@ -2232,9 +2234,9 @@ def test_verify_default_originate_after_removing_default_originate_p1(request):
)
write_test_footer(tc_name)
+
def test_verify_default_originate_route_with_GR_p1(request):
- """ "Verify default-originate route with GR "
- """
+ """ "Verify default-originate route with GR " """
tgen = get_topogen()
global BGP_CONVERGENCE
global topo
@@ -2250,14 +2252,13 @@ def test_verify_default_originate_route_with_GR_p1(request):
if BGP_CONVERGENCE != True:
pytest.skip("skipped because of BGP Convergence failure")
-
step("Configure IPV4 and IPV6 IBGP between R1 and R2 ")
step("Configure IPV4 and IPV6 EBGP between R2 to R3 ")
- r0_local_as = topo['routers']['r0']['bgp']['local_as']
- r1_local_as = topo['routers']['r1']['bgp']['local_as']
- r2_local_as = topo['routers']['r2']['bgp']['local_as']
- r3_local_as = topo['routers']['r3']['bgp']['local_as']
- r4_local_as = topo['routers']['r4']['bgp']['local_as']
+ r0_local_as = topo["routers"]["r0"]["bgp"]["local_as"]
+ r1_local_as = topo["routers"]["r1"]["bgp"]["local_as"]
+ r2_local_as = topo["routers"]["r2"]["bgp"]["local_as"]
+ r3_local_as = topo["routers"]["r3"]["bgp"]["local_as"]
+ r4_local_as = topo["routers"]["r4"]["bgp"]["local_as"]
input_dict = {
"r0": {
"bgp": {
@@ -2336,33 +2337,14 @@ def test_verify_default_originate_route_with_GR_p1(request):
"bgp": {
"local_as": local_as,
"address_family": {
- "ipv4": {
- "unicast": {
- "default_originate":{
- "r2":{
-
- }
-
- }
-
- }
- }, "ipv6": {
- "unicast": {
- "default_originate":{
- "r2":{
-
- }
-
- }
- }
- }
- }
+ "ipv4": {"unicast": {"default_originate": {"r2": {}}}},
+ "ipv6": {"unicast": {"default_originate": {"r2": {}}}},
+ },
}
}
}
result = create_router_bgp(tgen, topo, default_originate_config)
- assert result is True, "Testcase {} : Failed \n Error: {}".format(
- tc_name, result)
+ assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
step(
"R2 received default-originate routes and advertised it to R3 , verify on R2 and R3"
@@ -2383,17 +2365,28 @@ def test_verify_default_originate_route_with_GR_p1(request):
}
}
- result = verify_fib_routes(tgen, addr_type, "r2", static_routes_input,next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type])
+ result = verify_fib_routes(
+ tgen,
+ addr_type,
+ "r2",
+ static_routes_input,
+ next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
+ )
assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
- result = verify_bgp_rib(tgen, addr_type, "r2", static_routes_input,next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type])
+ result = verify_bgp_rib(
+ tgen,
+ addr_type,
+ "r2",
+ static_routes_input,
+ next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
+ )
assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
-
step(" Kill BGPd session on R2")
kill_router_daemons(tgen, "r2", ["bgpd"])
start_router_daemons(tgen, "r2", ["bgpd"])
@@ -2411,17 +2404,30 @@ def test_verify_default_originate_route_with_GR_p1(request):
}
}
- result = verify_fib_routes(tgen, addr_type, "r2", static_routes_input,next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type])
+ result = verify_fib_routes(
+ tgen,
+ addr_type,
+ "r2",
+ static_routes_input,
+ next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
+ )
assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
- result = verify_bgp_rib(tgen, addr_type, "r2", static_routes_input,next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type])
+ result = verify_bgp_rib(
+ tgen,
+ addr_type,
+ "r2",
+ static_routes_input,
+ next_hop=DEFAULT_ROUTE_NXT_HOP_R1[addr_type],
+ )
assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
write_test_footer(tc_name)
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_default_originate/test_default_originate_conditional_routemap.py b/tests/topotests/bgp_default_originate/test_default_originate_conditional_routemap.py
index 82c4e7e..f67a431 100644
--- a/tests/topotests/bgp_default_originate/test_default_originate_conditional_routemap.py
+++ b/tests/topotests/bgp_default_originate/test_default_originate_conditional_routemap.py
@@ -75,6 +75,7 @@ NETWORK1_1 = {"ipv4": "198.51.1.1/32", "ipv6": "2001:DB8::1:1/128"}
DEFAULT_ROUTES = {"ipv4": "0.0.0.0/0", "ipv6": "0::0/0"}
NEXT_HOP_IP = {"ipv4": "Null0", "ipv6": "Null0"}
+
def setup_module(mod):
"""
Sets up the pytest environment
@@ -818,11 +819,11 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
step("Configure IPv4 and IPv6 , EBGP neighbor between R3 and R2")
step("Configure IPv4 and IPv6 IBGP neighbor between R3 and R4")
- r0_local_as = topo['routers']['r0']['bgp']['local_as']
- r1_local_as = topo['routers']['r1']['bgp']['local_as']
- r2_local_as = topo['routers']['r2']['bgp']['local_as']
- r3_local_as = topo['routers']['r3']['bgp']['local_as']
- r4_local_as = topo['routers']['r4']['bgp']['local_as']
+ r0_local_as = topo["routers"]["r0"]["bgp"]["local_as"]
+ r1_local_as = topo["routers"]["r1"]["bgp"]["local_as"]
+ r2_local_as = topo["routers"]["r2"]["bgp"]["local_as"]
+ r3_local_as = topo["routers"]["r3"]["bgp"]["local_as"]
+ r4_local_as = topo["routers"]["r4"]["bgp"]["local_as"]
input_dict = {
"r0": {
"bgp": {
@@ -1026,22 +1027,21 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"action": "permit",
"seq_id": "1",
"set": {
- "path": {
- "as_num": "200",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "200",
+ "as_action": "prepend",
}
-
+ },
},
{
"action": "permit",
"seq_id": "2",
"set": {
- "path": {
- "as_num": "300",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "300",
+ "as_action": "prepend",
}
+ },
},
],
"RMv6": [
@@ -1049,21 +1049,21 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"action": "permit",
"seq_id": "1",
"set": {
- "path": {
- "as_num": "200",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "200",
+ "as_action": "prepend",
}
+ },
},
{
"action": "permit",
"seq_id": "2",
"set": {
- "path": {
- "as_num": "300",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "300",
+ "as_action": "prepend",
}
+ },
},
],
}
@@ -1122,22 +1122,21 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"action": "permit",
"seq_id": "1",
"set": {
- "path": {
- "as_num": "500",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "500",
+ "as_action": "prepend",
}
-
+ },
},
{
"action": "permit",
"seq_id": "2",
"set": {
- "path": {
- "as_num": "600",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "600",
+ "as_action": "prepend",
}
+ },
},
],
"RMv6": [
@@ -1145,21 +1144,21 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"action": "permit",
"seq_id": "1",
"set": {
- "path": {
- "as_num": "500",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "500",
+ "as_action": "prepend",
}
+ },
},
{
"action": "permit",
"seq_id": "2",
"set": {
- "path": {
- "as_num": "600",
- "as_action": "prepend",
- }
+ "path": {
+ "as_num": "600",
+ "as_action": "prepend",
}
+ },
},
],
}
@@ -1170,7 +1169,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
assert result is True, "Test case {} : Failed \n Error: {}".format(tc_name, result)
assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
-
step("As path 500 added to IPv4 and IPv6 default -originate route received on R2")
result = verify_rib_default_route(
tgen,
@@ -1232,7 +1230,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"Verify Configured metric value received on R2 along with as-path for IPv4 and IPv6 default routes "
)
-
DEFAULT_ROUTES = {"ipv4": "0.0.0.0/0", "ipv6": "::/0"}
result = verify_rib_default_route(
tgen,
@@ -1244,7 +1241,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
expected_aspath="4000 500",
)
-
step(
"Modify route-map seq1 configure metric 50 and route-map seq2 configure metric 100 IPv4 and IPv6 route-map "
)
@@ -1294,7 +1290,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"Verify Configured metric value received on R2 along with as-path for IPv4 and IPv6 default routes "
)
-
result = verify_rib_default_route(
tgen,
topo,
@@ -1314,7 +1309,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
{
"action": "permit",
"seq_id": "1",
-
"set": {
"path": {
"as_num": "500",
@@ -1374,9 +1368,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"Verify AS-prepend is deleted from default originate route and metric value only present on R2 for IPv4 and IPv6 default routes "
)
-
-
-
result = verify_rib_default_route(
tgen,
topo,
@@ -1388,7 +1379,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
)
assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
-
step("Delete metric value from IP4 and IPv6 route-map configured on R3 ")
route_map = {
"r3": {
@@ -1428,8 +1418,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"Verify Metric value deleted from IPv4 and IPv6 default route on R2 ,verify default routes "
)
-
-
result = verify_rib_default_route(
tgen,
topo,
@@ -1443,11 +1431,11 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
step("Change IPv4 and IPv6 , EBGP to IBGP neighbor between R3 and R2")
step("Change IPv4 and IPv6 IBGP to EBGP neighbor between R3 and R4")
- r0_local_as = topo['routers']['r0']['bgp']['local_as']
- r1_local_as = topo['routers']['r1']['bgp']['local_as']
- r2_local_as = topo['routers']['r2']['bgp']['local_as']
- r3_local_as = topo['routers']['r3']['bgp']['local_as']
- r4_local_as = topo['routers']['r4']['bgp']['local_as']
+ r0_local_as = topo["routers"]["r0"]["bgp"]["local_as"]
+ r1_local_as = topo["routers"]["r1"]["bgp"]["local_as"]
+ r2_local_as = topo["routers"]["r2"]["bgp"]["local_as"]
+ r3_local_as = topo["routers"]["r3"]["bgp"]["local_as"]
+ r4_local_as = topo["routers"]["r4"]["bgp"]["local_as"]
input_dict = {
"r0": {
"bgp": {
@@ -1459,7 +1447,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"local_as": r1_local_as,
}
},
-
"r2": {
"bgp": {
"local_as": 1111,
@@ -1645,8 +1632,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"Verify Configured metric value received on R2 along with as-path for IPv4 and IPv6 default routes "
)
-
-
result = verify_rib_default_route(
tgen,
topo,
@@ -1656,7 +1641,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
locPrf=50,
)
-
assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
step(
@@ -1708,9 +1692,6 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"Verify Modified local-preference value received on R2 for IPv4 and IPv6 default routes "
)
-
-
-
DEFAULT_ROUTES = {"ipv4": "0.0.0.0/0", "ipv6": "::/0"}
result = verify_rib_default_route(
tgen,
@@ -1724,13 +1705,15 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
# updating the topology with the updated AS-Number to avoid conflict in con configuring the AS
updated_topo = topo
- updated_topo['routers']['r0']['bgp']['local_as']=get_dut_as_number(tgen,"r0")
- updated_topo['routers']['r1']['bgp']['local_as']=get_dut_as_number(tgen,"r1")
- updated_topo['routers']['r2']['bgp']['local_as']=get_dut_as_number(tgen,"r2")
- updated_topo['routers']['r3']['bgp']['local_as']=get_dut_as_number(tgen,"r3")
- updated_topo['routers']['r4']['bgp']['local_as']=get_dut_as_number(tgen,"r4")
+ updated_topo["routers"]["r0"]["bgp"]["local_as"] = get_dut_as_number(tgen, "r0")
+ updated_topo["routers"]["r1"]["bgp"]["local_as"] = get_dut_as_number(tgen, "r1")
+ updated_topo["routers"]["r2"]["bgp"]["local_as"] = get_dut_as_number(tgen, "r2")
+ updated_topo["routers"]["r3"]["bgp"]["local_as"] = get_dut_as_number(tgen, "r3")
+ updated_topo["routers"]["r4"]["bgp"]["local_as"] = get_dut_as_number(tgen, "r4")
- step("Shut IPv4/IPv6 BGP neighbor from R4 ( R4-R3) using 'neighbor x.x.x.x shut' command ")
+ step(
+ "Shut IPv4/IPv6 BGP neighbor from R4 ( R4-R3) using 'neighbor x.x.x.x shut' command "
+ )
local_as = get_dut_as_number(tgen, dut="r4")
shut_neighbor = {
"r4": {
@@ -1740,46 +1723,41 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"ipv4": {
"unicast": {
"neighbor": {
- "r3": {
- "dest_link": {
- "r4": {"shutdown":True}
- }
- }
+ "r3": {"dest_link": {"r4": {"shutdown": True}}}
}
}
},
"ipv6": {
"unicast": {
"neighbor": {
- "r3": {
- "dest_link": {
- "r4": {"shutdown":True}
- }
- }
+ "r3": {"dest_link": {"r4": {"shutdown": True}}}
}
}
- }
- }
+ },
+ },
}
}
}
result = create_router_bgp(tgen, updated_topo, shut_neighbor)
assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
- interface = topo['routers']['r3']['links']['r4']['interface']
- input_dict = {
- "r1": {
- "interface_list": [interface],
- "status": "down"
- }
- }
+ interface = topo["routers"]["r3"]["links"]["r4"]["interface"]
+ input_dict = {"r1": {"interface_list": [interface], "status": "down"}}
result = interface_status(tgen, topo, input_dict)
- assert result is True, "Testcase {} : Shut down the interface failed ! \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Shut down the interface failed ! \n Error: {}".format(
+ tc_name, result
+ )
step("After shutting the interface verify the BGP convergence")
- result = verify_bgp_convergence(tgen,topo,expected=False)
- assert result is not True, "Testcase {} : Failed \n After shutting Down BGP convergence should Fail and return False \n Error: {}".format(tc_name, result)
+ result = verify_bgp_convergence(tgen, topo, expected=False)
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n After shutting Down BGP convergence should Fail and return False \n Error: {}".format(
+ tc_name, result
+ )
step("verify default route deleted from R2 ")
result = verify_rib_default_route(
@@ -1788,8 +1766,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected=False)
- assert result is not True, "Testcase {} : Failed \n Error: After Shut down interface the default route is NOT expected but found in RIB -> {}".format( tc_name, result)
+ expected=False,
+ )
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n Error: After Shut down interface the default route is NOT expected but found in RIB -> {}".format(
+ tc_name, result
+ )
result = verify_fib_default_route(
tgen,
@@ -1797,11 +1780,17 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected=False)
- assert result is not True, "Testcase {} : Failed \n Error: After Shut down interface the default route is NOT expected but found in FIB -> {}".format( tc_name, result)
-
+ expected=False,
+ )
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n Error: After Shut down interface the default route is NOT expected but found in FIB -> {}".format(
+ tc_name, result
+ )
- step("no Shut IPv4/IPv6 BGP neighbor from R4 ( R4-R3) using 'neighbor x.x.x.x shut' command ")
+ step(
+ "no Shut IPv4/IPv6 BGP neighbor from R4 ( R4-R3) using 'neighbor x.x.x.x shut' command "
+ )
local_as = get_dut_as_number(tgen, dut="r4")
shut_neighbor = {
"r4": {
@@ -1811,46 +1800,39 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"ipv4": {
"unicast": {
"neighbor": {
- "r3": {
- "dest_link": {
- "r4": {"shutdown":False}
- }
- }
+ "r3": {"dest_link": {"r4": {"shutdown": False}}}
}
}
},
"ipv6": {
"unicast": {
"neighbor": {
- "r3": {
- "dest_link": {
- "r4": {"shutdown":False}
- }
- }
+ "r3": {"dest_link": {"r4": {"shutdown": False}}}
}
}
- }
- }
+ },
+ },
}
}
}
result = create_router_bgp(tgen, updated_topo, shut_neighbor)
assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
- interface = topo['routers']['r3']['links']['r4']['interface']
- input_dict = {
- "r1": {
- "interface_list": [interface],
- "status": "up"
- }
- }
+ interface = topo["routers"]["r3"]["links"]["r4"]["interface"]
+ input_dict = {"r1": {"interface_list": [interface], "status": "up"}}
result = interface_status(tgen, topo, input_dict)
- assert result is True, "Testcase {} : Bring up interface failed ! \n Error: {}".format(tc_name, result)
+ assert (
+ result is True
+ ), "Testcase {} : Bring up interface failed ! \n Error: {}".format(tc_name, result)
step("After no shutting the interface verify the BGP convergence")
- result = verify_bgp_convergence(tgen,topo,expected=True)
- assert result is True, "Testcase {} : Failed \n After shutting Down BGP convergence should Fail and return False \n Error: {}".format(tc_name, result)
+ result = verify_bgp_convergence(tgen, topo, expected=True)
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n After shutting Down BGP convergence should Fail and return False \n Error: {}".format(
+ tc_name, result
+ )
step("After no shut neighbor , verify default route relearn on R2")
result = verify_rib_default_route(
@@ -1859,8 +1841,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected=True)
- assert result is True, "Testcase {} : Failed \n Error: After no Shut down interface the default route is expected but found in RIB -> {}".format( tc_name, result)
+ expected=True,
+ )
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n Error: After no Shut down interface the default route is expected but found in RIB -> {}".format(
+ tc_name, result
+ )
result = verify_fib_default_route(
tgen,
@@ -1868,10 +1855,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected=True)
- assert result is True, "Testcase {} : Failed \n Error: After Shut down interface the default route is expected but found in FIB -> {}".format( tc_name, result)
-
-
+ expected=True,
+ )
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n Error: After Shut down interface the default route is expected but found in FIB -> {}".format(
+ tc_name, result
+ )
step("Remove IPv4/IPv6 static route configure on R4")
for addr_type in ADDR_TYPES:
@@ -1881,7 +1871,7 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
{
"network": [NETWORK1_1[addr_type]],
"next_hop": NEXT_HOP_IP[addr_type],
- "delete": True
+ "delete": True,
}
]
}
@@ -1902,12 +1892,16 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
]
}
}
- result = verify_fib_routes(tgen, addr_type, "r4", static_routes_input, expected=False)
- assert result is not True, "Testcase {} : Failed \n Error: {}".format(
+ result = verify_fib_routes(
+ tgen, addr_type, "r4", static_routes_input, expected=False
+ )
+ assert result is not True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
- result = verify_bgp_rib(tgen, addr_type, "r4", static_routes_input, expected=False)
- assert result is not True, "Testcase {} : Failed \n Error: {}".format(
+ result = verify_bgp_rib(
+ tgen, addr_type, "r4", static_routes_input, expected=False
+ )
+ assert result is not True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
@@ -1918,8 +1912,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= False)
- assert result is not True, "Testcase {} : Failed \n Error: After removing static the default route is NOT expected but found in RIB -> {}".format( tc_name, result)
+ expected=False,
+ )
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n Error: After removing static the default route is NOT expected but found in RIB -> {}".format(
+ tc_name, result
+ )
result = verify_fib_default_route(
tgen,
@@ -1927,9 +1926,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= False)
- assert result is not True, "Testcase {} : Failed \n Error: After removing static the default route is NOT expected but found in FIB -> {}".format( tc_name, result)
-
+ expected=False,
+ )
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n Error: After removing static the default route is NOT expected but found in FIB -> {}".format(
+ tc_name, result
+ )
step("Configuring the static route back in r4")
for addr_type in ADDR_TYPES:
@@ -1959,12 +1962,16 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
]
}
}
- result = verify_fib_routes(tgen, addr_type, "r4", static_routes_input, expected=True)
- assert result is True, "Testcase {} : Failed \n Error: {}".format(
+ result = verify_fib_routes(
+ tgen, addr_type, "r4", static_routes_input, expected=True
+ )
+ assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
- result = verify_bgp_rib(tgen, addr_type, "r4", static_routes_input, expected=True)
- assert result is True, "Testcase {} : Failed \n Error: {}".format(
+ result = verify_bgp_rib(
+ tgen, addr_type, "r4", static_routes_input, expected=True
+ )
+ assert result is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, result
)
@@ -1975,8 +1982,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= True)
- assert result is True, "Testcase {} : Failed \n Error: After removing static the default route is expected but found in RIB -> {}".format( tc_name, result)
+ expected=True,
+ )
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n Error: After removing static the default route is expected but found in RIB -> {}".format(
+ tc_name, result
+ )
result = verify_fib_default_route(
tgen,
@@ -1984,8 +1996,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= True)
- assert result is True, "Testcase {} : Failed \n Error: After removing static the default route is expected but found in FIB -> {}".format( tc_name, result)
+ expected=True,
+ )
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n Error: After removing static the default route is expected but found in FIB -> {}".format(
+ tc_name, result
+ )
step("Deactivate IPv4 and IPv6 neighbor configured from R4 ( R4-R3)")
@@ -1999,15 +2016,14 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"r3": {"dest_link": {"r4": {"deactivate": "ipv4"}}}
}
},
-
- },"ipv6": {
+ },
+ "ipv6": {
"unicast": {
"neighbor": {
"r3": {"dest_link": {"r4": {"deactivate": "ipv6"}}}
}
},
-
- }
+ },
}
}
}
@@ -2022,8 +2038,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= False)
- assert result is not True, "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is NOT expected but found in RIB -> {}".format( tc_name, result)
+ expected=False,
+ )
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is NOT expected but found in RIB -> {}".format(
+ tc_name, result
+ )
result = verify_fib_default_route(
tgen,
@@ -2031,8 +2052,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= False)
- assert result is not True, "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is NOT expected but found in FIB -> {}".format( tc_name, result)
+ expected=False,
+ )
+ assert (
+ result is not True
+ ), "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is NOT expected but found in FIB -> {}".format(
+ tc_name, result
+ )
step("Activate IPv4 and IPv6 neighbor configured from R4 ( R4-R3)")
@@ -2046,15 +2072,14 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
"r3": {"dest_link": {"r4": {"activate": "ipv4"}}}
}
},
-
- },"ipv6": {
+ },
+ "ipv6": {
"unicast": {
"neighbor": {
"r3": {"dest_link": {"r4": {"activate": "ipv6"}}}
}
},
-
- }
+ },
}
}
}
@@ -2064,7 +2089,7 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
step("Verify bgp convergence.")
bgp_convergence = verify_bgp_convergence(tgen, updated_topo)
- assert bgp_convergence is True, "Testcase {} : Failed \n Error: {}".format(
+ assert bgp_convergence is True, "Testcase {} : Failed \n Error: {}".format(
tc_name, bgp_convergence
)
step("After Activating the BGP neighbor , verify default route learned on R2")
@@ -2074,8 +2099,13 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= True)
- assert result is True, "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is expected but found in RIB -> {}".format( tc_name, result)
+ expected=True,
+ )
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is expected but found in RIB -> {}".format(
+ tc_name, result
+ )
result = verify_fib_default_route(
tgen,
@@ -2083,10 +2113,16 @@ def test_verify_default_originate_after_BGP_attributes_p1(request):
dut="r2",
routes=DEFAULT_ROUTES,
expected_nexthop=DEFAULT_ROUTE_NXT_HOP_R3,
- expected= True)
- assert result is True, "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is expected but found in FIB -> {}".format( tc_name, result)
+ expected=True,
+ )
+ assert (
+ result is True
+ ), "Testcase {} : Failed \n Error: After Deactivating the BGP neighbor the default route is expected but found in FIB -> {}".format(
+ tc_name, result
+ )
write_test_footer(tc_name)
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_dont_capability_negotiate/test_bgp_dont_capability_negotiate.py b/tests/topotests/bgp_dont_capability_negotiate/test_bgp_dont_capability_negotiate.py
index 9a0f562..8269322 100644
--- a/tests/topotests/bgp_dont_capability_negotiate/test_bgp_dont_capability_negotiate.py
+++ b/tests/topotests/bgp_dont_capability_negotiate/test_bgp_dont_capability_negotiate.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
@@ -194,6 +192,7 @@ def test_bgp_check_fqdn():
_, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
assert result is None, "FQDN capability disabled, but we still have a hostname"
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_dynamic_capability/r1/frr.conf b/tests/topotests/bgp_dynamic_capability/r1/frr.conf
index aa5c3db..c959462 100644
--- a/tests/topotests/bgp_dynamic_capability/r1/frr.conf
+++ b/tests/topotests/bgp_dynamic_capability/r1/frr.conf
@@ -15,6 +15,7 @@ router bgp 65001
!
address-family ipv4 unicast
neighbor 192.168.1.2 addpath-tx-all-paths
+ neighbor 192.168.1.2 addpath-rx-paths-limit 10
exit-address-family
!
ip prefix-list r2 seq 5 permit 10.10.10.10/32
diff --git a/tests/topotests/bgp_dynamic_capability/r2/frr.conf b/tests/topotests/bgp_dynamic_capability/r2/frr.conf
index 7f25665..3cc1f1f 100644
--- a/tests/topotests/bgp_dynamic_capability/r2/frr.conf
+++ b/tests/topotests/bgp_dynamic_capability/r2/frr.conf
@@ -16,6 +16,7 @@ router bgp 65002
neighbor 192.168.1.1 timers 1 3
neighbor 192.168.1.1 timers connect 1
neighbor 192.168.1.1 capability dynamic
+ neighbor 192.168.1.1 addpath-rx-paths-limit 20
!
address-family ipv4 unicast
redistribute connected
diff --git a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_addpath.py b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_addpath.py
index 5202f51..4d7d46c 100644
--- a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_addpath.py
+++ b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_addpath.py
@@ -6,7 +6,11 @@
#
"""
-Test if Addpath capability is adjusted dynamically.
+Test if Addpath/Paths-Limit capabilities are adjusted dynamically.
+T1: Enable Addpath/Paths-Limit capabilities and check if they are exchanged dynamically
+T2: Disable paths limit and check if it's exchanged dynamically
+T3: Disable Addpath capability RX and check if it's exchanged dynamically
+T4: Disable Addpath capability and check if it's exchanged dynamically
"""
import os
@@ -16,7 +20,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -24,9 +28,6 @@ sys.path.append(os.path.join(CWD, "../"))
# pylint: disable=C0413
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-from lib.common_config import step
-
-pytestmark = [pytest.mark.bgpd]
def setup_module(mod):
@@ -47,7 +48,7 @@ def teardown_module(mod):
tgen.stop_topology()
-def test_bgp_dynamic_capability_addpath():
+def test_bgp_addpath_paths_limit():
tgen = get_topogen()
if tgen.routers_have_failure():
@@ -56,7 +57,7 @@ def test_bgp_dynamic_capability_addpath():
r1 = tgen.gears["r1"]
r2 = tgen.gears["r2"]
- def _bgp_converge():
+ def _converge():
output = json.loads(r1.vtysh_cmd("show bgp neighbor json"))
expected = {
"192.168.1.2": {
@@ -65,8 +66,19 @@ def test_bgp_dynamic_capability_addpath():
"dynamic": "advertisedAndReceived",
"addPath": {
"ipv4Unicast": {
+ "txAdvertisedAndReceived": False,
"txAdvertised": True,
+ "txReceived": False,
"rxAdvertisedAndReceived": True,
+ "rxAdvertised": True,
+ "rxReceived": True,
+ }
+ },
+ "pathsLimit": {
+ "ipv4Unicast": {
+ "advertisedAndReceived": True,
+ "advertisedPathsLimit": 10,
+ "receivedPathsLimit": 20,
}
},
},
@@ -80,26 +92,26 @@ def test_bgp_dynamic_capability_addpath():
return topotest.json_cmp(output, expected)
test_func = functools.partial(
- _bgp_converge,
+ _converge,
)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
assert result is None, "Can't converge"
- step("Enable Addpath capability and check if it's exchanged dynamically")
-
- # Clear message stats to check if we receive a notification or not after we
- # change the settings fo LLGR.
+ ####
+ # T1: Enable Addpath/Paths-Limit capabilities and check if they are exchanged dynamically
+ ####
r1.vtysh_cmd("clear bgp 192.168.1.2 message-stats")
r2.vtysh_cmd(
"""
configure terminal
- router bgp
- address-family ipv4 unicast
- neighbor 192.168.1.1 addpath-tx-all-paths
+ router bgp
+ address-family ipv4 unicast
+ neighbor 192.168.1.1 addpath-tx-all-paths
+ neighbor 192.168.1.1 addpath-rx-paths-limit 21
"""
)
- def _bgp_check_if_addpath_rx_tx_and_session_not_reset():
+ def _enable_addpath_paths_limit():
output = json.loads(r1.vtysh_cmd("show bgp neighbor json"))
expected = {
"192.168.1.2": {
@@ -109,7 +121,18 @@ def test_bgp_dynamic_capability_addpath():
"addPath": {
"ipv4Unicast": {
"txAdvertisedAndReceived": True,
+ "txAdvertised": True,
+ "txReceived": True,
"rxAdvertisedAndReceived": True,
+ "rxAdvertised": True,
+ "rxReceived": True,
+ }
+ },
+ "pathsLimit": {
+ "ipv4Unicast": {
+ "advertisedAndReceived": True,
+ "advertisedPathsLimit": 10,
+ "receivedPathsLimit": 21,
}
},
},
@@ -120,23 +143,76 @@ def test_bgp_dynamic_capability_addpath():
},
"messageStats": {
"notificationsRecv": 0,
- "capabilityRecv": 1,
+ "notificationsSent": 0,
+ "capabilityRecv": 2,
},
}
}
return topotest.json_cmp(output, expected)
test_func = functools.partial(
- _bgp_check_if_addpath_rx_tx_and_session_not_reset,
+ _enable_addpath_paths_limit,
)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
- assert result is None, "Session was reset after enabling Addpath capability"
+ assert (
+ result is None
+ ), "Something went wrong when enabling Addpath/Paths-Limit capabilities"
- step("Disable Addpath capability RX and check if it's exchanged dynamically")
+ ###
+ # T2: Disable paths limit and check if it's exchanged dynamically
+ ###
+ r2.vtysh_cmd(
+ """
+ configure terminal
+ router bgp
+ address-family ipv4 unicast
+ no neighbor 192.168.1.1 addpath-rx-paths-limit
+ """
+ )
- # Clear message stats to check if we receive a notification or not after we
- # disable addpath-rx.
- r1.vtysh_cmd("clear bgp 192.168.1.2 message-stats")
+ def _disable_paths_limit():
+ output = json.loads(r1.vtysh_cmd("show bgp neighbor json"))
+ expected = {
+ "192.168.1.2": {
+ "bgpState": "Established",
+ "neighborCapabilities": {
+ "dynamic": "advertisedAndReceived",
+ "addPath": {
+ "ipv4Unicast": {
+ "txAdvertisedAndReceived": True,
+ "txAdvertised": True,
+ "txReceived": True,
+ "rxAdvertisedAndReceived": True,
+ "rxAdvertised": True,
+ "rxReceived": True,
+ }
+ },
+ "pathsLimit": {
+ "ipv4Unicast": {
+ "advertisedAndReceived": True,
+ "advertisedPathsLimit": 10,
+ "receivedPathsLimit": 0,
+ }
+ },
+ },
+ "messageStats": {
+ "notificationsRecv": 0,
+ "notificationsSent": 0,
+ "capabilityRecv": 3,
+ },
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(
+ _disable_paths_limit,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Something went wrong after disabling paths limit"
+
+ ###
+ # T3: Disable Addpath capability RX and check if it's exchanged dynamically
+ ###
r2.vtysh_cmd(
"""
configure terminal
@@ -146,7 +222,7 @@ def test_bgp_dynamic_capability_addpath():
"""
)
- def _bgp_check_if_addpath_tx_and_session_not_reset():
+ def _disable_addpath_rx():
output = json.loads(r1.vtysh_cmd("show bgp neighbor json"))
expected = {
"192.168.1.2": {
@@ -156,27 +232,39 @@ def test_bgp_dynamic_capability_addpath():
"addPath": {
"ipv4Unicast": {
"txAdvertisedAndReceived": True,
+ "txAdvertised": True,
+ "txReceived": True,
+ "rxAdvertisedAndReceived": False,
"rxAdvertised": True,
+ "rxReceived": False,
+ }
+ },
+ "pathsLimit": {
+ "ipv4Unicast": {
+ "advertisedAndReceived": True,
+ "advertisedPathsLimit": 10,
+ "receivedPathsLimit": 0,
}
},
},
"messageStats": {
"notificationsRecv": 0,
- "capabilityRecv": 1,
+ "notificationsSent": 0,
+ "capabilityRecv": 4,
},
}
}
return topotest.json_cmp(output, expected)
test_func = functools.partial(
- _bgp_check_if_addpath_tx_and_session_not_reset,
+ _disable_addpath_rx,
)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
- assert result is None, "Session was reset after disabling Addpath RX flags"
+ assert result is None, "Something went wrong after disabling Addpath RX flags"
- # Clear message stats to check if we receive a notification or not after we
- # disable Addpath capability.
- r1.vtysh_cmd("clear bgp 192.168.1.2 message-stats")
+ ###
+ # T4: Disable Addpath capability and check if it's exchanged dynamically
+ ###
r1.vtysh_cmd(
"""
configure terminal
@@ -186,7 +274,7 @@ def test_bgp_dynamic_capability_addpath():
"""
)
- def _bgp_check_if_addpath_capability_is_absent():
+ def _disable_addpath():
output = json.loads(r1.vtysh_cmd("show bgp neighbor json"))
expected = {
"192.168.1.2": {
@@ -195,24 +283,30 @@ def test_bgp_dynamic_capability_addpath():
"dynamic": "advertisedAndReceived",
"addPath": {
"ipv4Unicast": {
- "txAdvertisedAndReceived": None,
- "txAdvertised": None,
+ "txAdvertisedAndReceived": False,
+ "txAdvertised": False,
+ "txReceived": True,
+ "rxAdvertisedAndReceived": False,
"rxAdvertised": True,
+ "rxReceived": False,
}
},
},
"messageStats": {
"notificationsRecv": 0,
+ "notificationsSent": 0,
+ "capabilitySent": 1,
+ "capabilityRecv": 4,
},
}
}
return topotest.json_cmp(output, expected)
test_func = functools.partial(
- _bgp_check_if_addpath_capability_is_absent,
+ _disable_addpath,
)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
- assert result is None, "Failed to disable Addpath capability"
+ assert result is None, "Something went wrong when disabling Addpath capability"
if __name__ == "__main__":
diff --git a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_fqdn.py b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_fqdn.py
index 338886d..26fae17 100644
--- a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_fqdn.py
+++ b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_fqdn.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_graceful_restart.py b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_graceful_restart.py
index 4644ef3..d67bfea 100644
--- a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_graceful_restart.py
+++ b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_graceful_restart.py
@@ -18,7 +18,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -28,8 +28,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_orf.py b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_orf.py
index ba95bd1..9e1f26f 100644
--- a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_orf.py
+++ b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_orf.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_role.py b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_role.py
index aa9ad5f..f6c1e25 100644
--- a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_role.py
+++ b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_role.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_software_version.py b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_software_version.py
index 737e694..128283b 100644
--- a/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_software_version.py
+++ b/tests/topotests/bgp_dynamic_capability/test_bgp_dynamic_capability_software_version.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
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 34f7dc8..d9ccd69 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
@@ -35,8 +35,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 4):
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step11/show_ip_route.ref.diff b/tests/topotests/bgp_evpn_maximum_prefix/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step11/show_ip_route.ref.diff
+++ b/tests/topotests/bgp_evpn_maximum_prefix/__init__.py
diff --git a/tests/topotests/bgp_evpn_maximum_prefix/c1/frr.conf b/tests/topotests/bgp_evpn_maximum_prefix/c1/frr.conf
new file mode 100644
index 0000000..7476a37
--- /dev/null
+++ b/tests/topotests/bgp_evpn_maximum_prefix/c1/frr.conf
@@ -0,0 +1,4 @@
+!
+int c1-eth0
+ ip address 192.168.0.1/24
+!
diff --git a/tests/topotests/bgp_evpn_maximum_prefix/c2/frr.conf b/tests/topotests/bgp_evpn_maximum_prefix/c2/frr.conf
new file mode 100644
index 0000000..a203daa
--- /dev/null
+++ b/tests/topotests/bgp_evpn_maximum_prefix/c2/frr.conf
@@ -0,0 +1,4 @@
+!
+int c2-eth0
+ ip address 192.168.0.2/24
+!
diff --git a/tests/topotests/bgp_evpn_maximum_prefix/r1/frr.conf b/tests/topotests/bgp_evpn_maximum_prefix/r1/frr.conf
new file mode 100644
index 0000000..0534518
--- /dev/null
+++ b/tests/topotests/bgp_evpn_maximum_prefix/r1/frr.conf
@@ -0,0 +1,30 @@
+!
+!debug bgp neighbor
+!debug route-map detail
+!
+vni 10
+!
+int lo
+ ip address 10.10.10.1/32
+!
+int r1-eth1
+ ip address 192.168.1.1/24
+!
+router bgp 65001
+ no bgp ebgp-requires-policy
+ no bgp network import-check
+ neighbor 192.168.1.2 remote-as external
+ neighbor 192.168.1.2 timers 1 3
+ neighbor 192.168.1.2 timers connect 1
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ network 10.10.10.10/32
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ neighbor 192.168.1.2 activate
+ advertise-all-vni
+ advertise ipv4 unicast
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_evpn_maximum_prefix/r2/frr.conf b/tests/topotests/bgp_evpn_maximum_prefix/r2/frr.conf
new file mode 100644
index 0000000..353302b
--- /dev/null
+++ b/tests/topotests/bgp_evpn_maximum_prefix/r2/frr.conf
@@ -0,0 +1,25 @@
+!
+!debug bgp neighbor
+!
+int lo
+ ip address 10.10.10.2/32
+!
+int r2-eth0
+ ip address 192.168.1.2/24
+!
+router bgp 65002
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.1 remote-as external
+ neighbor 192.168.1.1 timers 1 3
+ neighbor 192.168.1.1 timers connect 1
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+ !
+ address-family l2vpn evpn
+ neighbor 192.168.1.1 activate
+ neighbor 192.168.1.1 maximum-prefix 2
+ advertise-all-vni
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py b/tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py
new file mode 100644
index 0000000..5469eff
--- /dev/null
+++ b/tests/topotests/bgp_evpn_maximum_prefix/test_bgp_evpn_maximum_prefix.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+# Copyright (c) 2024 by
+# Donatas Abraitis <donatas@opensourcerouting.org>
+#
+
+import os
+import re
+import sys
+import json
+import pytest
+import functools
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+
+pytestmark = [pytest.mark.bgpd]
+
+
+def setup_module(mod):
+ topodef = {"s1": ("c1", "r1"), "s2": ("r1", "r2"), "s3": ("r2", "c2")}
+ tgen = Topogen(topodef, mod.__name__)
+ tgen.start_topology()
+
+ tgen.net["r1"].cmd(
+ """
+ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.1 nolearning
+ip link add name br10 type bridge
+ip link set dev vxlan10 master br10
+ip link set dev r1-eth0 master br10
+ip link set up dev br10
+ip link set up dev vxlan10"""
+ )
+
+ tgen.net["r2"].cmd(
+ """
+ip link add vxlan10 type vxlan id 10 dstport 4789 local 10.10.10.2 nolearning
+ip link add name br10 type bridge
+ip link set dev vxlan10 master br10
+ip link set dev r2-eth1 master br10
+ip link set up dev br10
+ip link set up dev vxlan10"""
+ )
+
+ router_list = tgen.routers()
+
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_evpn_maximum_prefix():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r2 = tgen.gears["r2"]
+
+ def _bgp_converge():
+ output = json.loads(r2.vtysh_cmd("show bgp l2vpn evpn summary failed json"))
+ expected = {
+ "peers": {
+ "192.168.1.1": {
+ "lastNotificationReason": "Cease/Maximum Number of Prefixes Reached",
+ "lastResetDueTo": "BGP Notification send",
+ }
+ },
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(
+ _bgp_converge,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assert result is None, "Can't limit maximum-prefixes for EVPN routes"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_evpn_mh/leaf1/evpn.conf b/tests/topotests/bgp_evpn_mh/leaf1/evpn.conf
index 33b6d08..d246517 100644
--- a/tests/topotests/bgp_evpn_mh/leaf1/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/leaf1/evpn.conf
@@ -1,6 +1,7 @@
frr defaults datacenter
!
router bgp 65101
+ timers bgp 3 10
bgp router-id 192.168.100.13
no bgp ebgp-requires-policy
neighbor 192.168.50.1 remote-as external
diff --git a/tests/topotests/bgp_evpn_mh/leaf2/evpn.conf b/tests/topotests/bgp_evpn_mh/leaf2/evpn.conf
index 428998b..6855a43 100644
--- a/tests/topotests/bgp_evpn_mh/leaf2/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/leaf2/evpn.conf
@@ -1,6 +1,7 @@
frr defaults datacenter
!
router bgp 65101
+ timers bgp 3 10
bgp router-id 192.168.100.14
no bgp ebgp-requires-policy
neighbor 192.168.61.1 remote-as external
diff --git a/tests/topotests/bgp_evpn_mh/spine1/evpn.conf b/tests/topotests/bgp_evpn_mh/spine1/evpn.conf
index b9fce46..7d6fef6 100644
--- a/tests/topotests/bgp_evpn_mh/spine1/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/spine1/evpn.conf
@@ -1,6 +1,7 @@
frr defaults datacenter
!
router bgp 65001
+ timers bgp 3 10
bgp router-id 192.168.100.13
no bgp ebgp-requires-policy
neighbor 192.168.50.2 remote-as external
diff --git a/tests/topotests/bgp_evpn_mh/spine2/evpn.conf b/tests/topotests/bgp_evpn_mh/spine2/evpn.conf
index 1430e10..c651ada 100644
--- a/tests/topotests/bgp_evpn_mh/spine2/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/spine2/evpn.conf
@@ -1,6 +1,7 @@
frr defaults datacenter
!
router bgp 65001
+ timers bgp 3 10
bgp router-id 192.168.100.14
no bgp ebgp-requires-policy
neighbor 192.168.60.2 remote-as external
diff --git a/tests/topotests/bgp_evpn_mh/test_evpn_mh.py b/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
index 945c038..b033e9c 100644
--- a/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
+++ b/tests/topotests/bgp_evpn_mh/test_evpn_mh.py
@@ -37,8 +37,6 @@ from lib import topotest
# Required to instantiate the topology builder class.
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd, pytest.mark.pimd]
-
#####################################################
##
## Network Topology Definition
@@ -389,13 +387,6 @@ def setup_module(module):
tors.append("torm22")
config_tors(tgen, tors)
- hosts = []
- hosts.append("hostd11")
- hosts.append("hostd12")
- hosts.append("hostd21")
- hosts.append("hostd22")
- config_hosts(tgen, hosts)
-
# tgen.mininet_cli()
# This is a sample of configuration loading.
router_list = tgen.routers()
@@ -410,6 +401,13 @@ def setup_module(module):
TopoRouter.RD_BGP, os.path.join(CWD, "{}/evpn.conf".format(rname))
)
tgen.start_router()
+
+ hosts = []
+ hosts.append("hostd11")
+ hosts.append("hostd12")
+ hosts.append("hostd21")
+ hosts.append("hostd22")
+ config_hosts(tgen, hosts)
# tgen.mininet_cli()
@@ -634,6 +632,7 @@ def check_mac(dut, vni, mac, m_type, esi, intf, ping_gw=False, tgen=None):
out = dut.vtysh_cmd("show evpn mac vni %d mac %s json" % (vni, mac))
+ tmp_esi = None
mac_js = json.loads(out)
for mac, info in mac_js.items():
tmp_esi = info.get("esi", "")
@@ -642,7 +641,15 @@ def check_mac(dut, vni, mac, m_type, esi, intf, ping_gw=False, tgen=None):
if tmp_esi == esi and tmp_m_type == m_type and intf == intf:
return None
- return "invalid vni %d mac %s out %s" % (vni, mac, mac_js)
+ return "invalid vni %d mac %s expected esi %s, %s m_type %s and intf %s out %s" % (
+ vni,
+ mac,
+ tmp_esi,
+ esi,
+ m_type,
+ intf,
+ mac_js,
+ )
def test_evpn_mac():
diff --git a/tests/topotests/bgp_evpn_mh/torm11/evpn.conf b/tests/topotests/bgp_evpn_mh/torm11/evpn.conf
index 2c1c695..62b7ec5 100644
--- a/tests/topotests/bgp_evpn_mh/torm11/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm11/evpn.conf
@@ -7,6 +7,7 @@ frr defaults datacenter
!
!
router bgp 65002
+ timers bgp 3 10
bgp router-id 192.168.100.15
no bgp ebgp-requires-policy
neighbor 192.168.1.1 remote-as external
diff --git a/tests/topotests/bgp_evpn_mh/torm12/evpn.conf b/tests/topotests/bgp_evpn_mh/torm12/evpn.conf
index 8b0ce1d..3ceb974 100644
--- a/tests/topotests/bgp_evpn_mh/torm12/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm12/evpn.conf
@@ -7,6 +7,7 @@ frr defaults datacenter
!
!
router bgp 65003
+ timers bgp 3 10
bgp router-id 192.168.100.16
no bgp ebgp-requires-policy
neighbor 192.168.2.1 remote-as external
diff --git a/tests/topotests/bgp_evpn_mh/torm21/evpn.conf b/tests/topotests/bgp_evpn_mh/torm21/evpn.conf
index 5247dc1..ecaf85d 100644
--- a/tests/topotests/bgp_evpn_mh/torm21/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm21/evpn.conf
@@ -7,6 +7,7 @@ frr defaults datacenter
!
!
router bgp 65004
+ timers bgp 3 10
bgp router-id 192.168.100.17
no bgp ebgp-requires-policy
neighbor 192.168.3.1 remote-as external
diff --git a/tests/topotests/bgp_evpn_mh/torm22/evpn.conf b/tests/topotests/bgp_evpn_mh/torm22/evpn.conf
index ec56360..c7e1524 100644
--- a/tests/topotests/bgp_evpn_mh/torm22/evpn.conf
+++ b/tests/topotests/bgp_evpn_mh/torm22/evpn.conf
@@ -6,6 +6,7 @@ frr defaults datacenter
! debug bgp zebra
!
router bgp 65005
+ timers bgp 3 10
bgp router-id 192.168.100.18
no bgp ebgp-requires-policy
neighbor 192.168.4.1 remote-as external
diff --git a/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py b/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
index 2041a40..603f069 100755
--- a/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
+++ b/tests/topotests/bgp_evpn_overlay_index_gateway/test_bgp_evpn_overlay_index_gateway.py
@@ -179,7 +179,7 @@ def setup_module(mod):
pe.cmd_raises("sysctl -w net.ipv4.tcp_l3mdev_accept={}".format(l3mdev_accept))
# For all registered routers, load the zebra configuration file
- for (name, router) in tgen.routers().items():
+ for name, router in tgen.routers().items():
router.load_config(
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(name))
)
@@ -230,11 +230,11 @@ def evpn_gateway_ip_show_op_check(trigger=" "):
"zebra_vrf_ipv6": "show ipv6 route vrf vrf-blue json",
}
- for (name, pe) in tgen.gears.items():
+ for name, pe in tgen.gears.items():
if name not in PES:
continue
- for (cmd_key, command) in show_commands.items():
+ for cmd_key, command in show_commands.items():
expected_op_file = "{0}/{1}/{2}_{3}.json".format(
CWD, name, cmd_key, trigger
)
diff --git a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
index 5781684..2df0fd0 100644
--- a/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
+++ b/tests/topotests/bgp_evpn_route_map_match/test_bgp_evpn_route_map_match.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("c1", "r1"), "s2": ("r1", "r2"), "s3": ("r2", "c2")}
diff --git a/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE1/evpn.vni.json b/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE1/evpn.vni.json
index 98ae92c..45d00c6 100644
--- a/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE1/evpn.vni.json
+++ b/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE1/evpn.vni.json
@@ -1,7 +1,7 @@
{
"vni":101,
"type":"L2",
- "vrf":"default",
+ "tenantVrf":"default",
"vxlanInterface":"vxlan0",
"vtepIp":"10.10.10.10",
"mcastGroup":"0.0.0.0",
diff --git a/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE2/evpn.vni.json b/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE2/evpn.vni.json
index 5c05978..f480b56 100644
--- a/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE2/evpn.vni.json
+++ b/tests/topotests/bgp_evpn_vxlan_svd_topo1/PE2/evpn.vni.json
@@ -1,7 +1,7 @@
{
"vni":101,
"type":"L2",
- "vrf":"default",
+ "tenantVrf":"default",
"vxlanInterface":"vxlan0",
"vtepIp":"10.30.30.30",
"mcastGroup":"0.0.0.0",
diff --git a/tests/topotests/bgp_extcomm_list_delete/test_bgp_extcomm-list_delete.py b/tests/topotests/bgp_extcomm_list_delete/test_bgp_extcomm-list_delete.py
index eb05986..a5e5bdc 100644
--- a/tests/topotests/bgp_extcomm_list_delete/test_bgp_extcomm-list_delete.py
+++ b/tests/topotests/bgp_extcomm_list_delete/test_bgp_extcomm-list_delete.py
@@ -124,7 +124,8 @@ def test_rt_extcomm_list_delete():
# check for the deletion of the extended community
test_func = functools.partial(
- _bgp_extcomm_list_del_check, r2, "10.10.10.1/32", r"1.1.1.1:1")
+ _bgp_extcomm_list_del_check, r2, "10.10.10.1/32", r"1.1.1.1:1"
+ )
_, result = topotest.run_and_expect(test_func, True, count=60, wait=0.5)
assert result, "RT extended community 1.1.1.1:1 was not stripped."
@@ -138,7 +139,8 @@ def test_soo_extcomm_list_delete():
# check for the deletion of the extended community
test_func = functools.partial(
- _bgp_extcomm_list_del_check, r2, "10.10.10.2/32", r"2.2.2.2:2")
+ _bgp_extcomm_list_del_check, r2, "10.10.10.2/32", r"2.2.2.2:2"
+ )
_, result = topotest.run_and_expect(test_func, True, count=60, wait=0.5)
assert result, "SoO extended community 2.2.2.2:2 was not stripped."
@@ -152,7 +154,8 @@ def test_nt_extcomm_list_delete():
# check for the deletion of the extended community
test_func = functools.partial(
- _bgp_extcomm_list_del_check, r2, "10.10.10.3/32", r"3.3.3.3")
+ _bgp_extcomm_list_del_check, r2, "10.10.10.3/32", r"3.3.3.3"
+ )
_, result = topotest.run_and_expect(test_func, True, count=60, wait=0.5)
assert result, "NT extended community 3.3.3.3:0 was not stripped."
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step11/show_ipv6_route.ref.diff b/tests/topotests/bgp_extended_link_bandwidth/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step11/show_ipv6_route.ref.diff
+++ b/tests/topotests/bgp_extended_link_bandwidth/__init__.py
diff --git a/tests/topotests/bgp_extended_link_bandwidth/r1/frr.conf b/tests/topotests/bgp_extended_link_bandwidth/r1/frr.conf
new file mode 100644
index 0000000..d0c0813
--- /dev/null
+++ b/tests/topotests/bgp_extended_link_bandwidth/r1/frr.conf
@@ -0,0 +1,32 @@
+!
+int r1-eth0
+ ip address 192.168.1.1/24
+!
+router bgp 65000
+ no bgp ebgp-requires-policy
+ no bgp network import-check
+ neighbor 192.168.1.2 remote-as internal
+ neighbor 192.168.1.2 timers 1 3
+ neighbor 192.168.1.2 timers connect 1
+ neighbor 192.168.1.2 extended-link-bandwidth
+ address-family ipv4 unicast
+ network 10.10.10.40/32
+ network 10.10.10.100/32
+ network 10.10.10.200/32
+ neighbor 192.168.1.2 route-map r2 out
+ exit-address-family
+!
+ip prefix-list p40 seq 5 permit 10.10.10.40/32
+ip prefix-list p100 seq 5 permit 10.10.10.100/32
+ip prefix-list p200 seq 5 permit 10.10.10.200/32
+!
+route-map r2 permit 10
+ match ip address prefix-list p40
+ set extcommunity bandwidth 40000
+route-map r2 permit 20
+ match ip address prefix-list p100
+ set extcommunity bandwidth 100000
+route-map r2 permit 30
+ match ip address prefix-list p200
+ set extcommunity bandwidth 200000
+exit
diff --git a/tests/topotests/bgp_extended_link_bandwidth/r2/frr.conf b/tests/topotests/bgp_extended_link_bandwidth/r2/frr.conf
new file mode 100644
index 0000000..5cad150
--- /dev/null
+++ b/tests/topotests/bgp_extended_link_bandwidth/r2/frr.conf
@@ -0,0 +1,10 @@
+!
+int r2-eth0
+ ip address 192.168.1.2/24
+!
+router bgp 65000
+ no bgp ebgp-requires-policy
+ neighbor 192.168.1.1 remote-as internal
+ neighbor 192.168.1.1 timers 1 3
+ neighbor 192.168.1.1 timers connect 1
+!
diff --git a/tests/topotests/bgp_extended_link_bandwidth/test_bgp_extended_link_bandwidth.py b/tests/topotests/bgp_extended_link_bandwidth/test_bgp_extended_link_bandwidth.py
new file mode 100644
index 0000000..e7058f5
--- /dev/null
+++ b/tests/topotests/bgp_extended_link_bandwidth/test_bgp_extended_link_bandwidth.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+# Copyright (c) 2024 by
+# Donatas Abraitis <donatas@opensourcerouting.org>
+#
+
+import os
+import re
+import sys
+import json
+import pytest
+import functools
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+
+pytestmark = [pytest.mark.bgpd]
+
+
+def setup_module(mod):
+ topodef = {"s1": ("r1", "r2")}
+ tgen = Topogen(topodef, mod.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_dynamic_capability_role():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r2 = tgen.gears["r2"]
+
+ def _bgp_converge():
+ output = json.loads(r2.vtysh_cmd("show bgp ipv4 unicast json detail"))
+ expected = {
+ "routes": {
+ "10.10.10.40/32": {
+ "paths": [
+ {
+ "extendedIpv6Community": {
+ "string": "LB:65000:5000000000 (40.000 Gbps)",
+ }
+ }
+ ]
+ },
+ "10.10.10.100/32": {
+ "paths": [
+ {
+ "extendedIpv6Community": {
+ "string": "LB:65000:12500000000 (100.000 Gbps)",
+ }
+ }
+ ]
+ },
+ "10.10.10.200/32": {
+ "paths": [
+ {
+ "extendedIpv6Community": {
+ "string": "LB:65000:25000000000 (200.000 Gbps)",
+ }
+ }
+ ]
+ },
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(
+ _bgp_converge,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Can't see link bandwidths as expected"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_extended_optional_parameters_length/test_bgp_extended_optional_parameters_length.py b/tests/topotests/bgp_extended_optional_parameters_length/test_bgp_extended_optional_parameters_length.py
index eef122b..a5db20e 100644
--- a/tests/topotests/bgp_extended_optional_parameters_length/test_bgp_extended_optional_parameters_length.py
+++ b/tests/topotests/bgp_extended_optional_parameters_length/test_bgp_extended_optional_parameters_length.py
@@ -17,7 +17,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/r1/bgpd.conf b/tests/topotests/bgp_gr_restart_retain_routes/r1/frr.conf
index 50d1583..3d4d3a8 100644
--- a/tests/topotests/bgp_gr_restart_retain_routes/r1/bgpd.conf
+++ b/tests/topotests/bgp_gr_restart_retain_routes/r1/frr.conf
@@ -1,3 +1,10 @@
+!
+interface lo
+ ip address 172.16.255.1/32
+!
+interface r1-eth0
+ ip address 192.168.255.1/24
+!
router bgp 65001
no bgp ebgp-requires-policy
bgp graceful-restart
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/r1/zebra.conf b/tests/topotests/bgp_gr_restart_retain_routes/r1/zebra.conf
deleted file mode 100644
index e65bfb2..0000000
--- a/tests/topotests/bgp_gr_restart_retain_routes/r1/zebra.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-!
-interface lo
- ip address 172.16.255.1/32
-!
-interface r1-eth0
- ip address 192.168.255.1/24
-!
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/r2/bgpd.conf b/tests/topotests/bgp_gr_restart_retain_routes/r2/frr.conf
index 97418ca..f5ba4ea 100644
--- a/tests/topotests/bgp_gr_restart_retain_routes/r2/bgpd.conf
+++ b/tests/topotests/bgp_gr_restart_retain_routes/r2/frr.conf
@@ -1,3 +1,8 @@
+no zebra nexthop kernel enable
+!
+interface r2-eth0
+ ip address 192.168.255.2/24
+!
router bgp 65002
no bgp ebgp-requires-policy
bgp graceful-restart
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/r2/zebra.conf b/tests/topotests/bgp_gr_restart_retain_routes/r2/zebra.conf
deleted file mode 100644
index 758d797..0000000
--- a/tests/topotests/bgp_gr_restart_retain_routes/r2/zebra.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-no zebra nexthop kernel enable
-!
-interface r2-eth0
- ip address 192.168.255.2/24
-!
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/r3/frr.conf b/tests/topotests/bgp_gr_restart_retain_routes/r3/frr.conf
new file mode 100644
index 0000000..1d84ec6
--- /dev/null
+++ b/tests/topotests/bgp_gr_restart_retain_routes/r3/frr.conf
@@ -0,0 +1,19 @@
+no zebra nexthop kernel enable
+!
+interface lo
+ ip address 172.16.255.3/32
+!
+interface r3-eth0
+ ip address 192.168.34.3/24
+!
+router bgp 65003
+ no bgp ebgp-requires-policy
+ bgp graceful-restart preserve-fw-state
+ neighbor 192.168.34.4 remote-as external
+ neighbor 192.168.34.4 timers 1 3
+ neighbor 192.168.34.4 timers connect 1
+ neighbor 192.168.34.4 graceful-restart
+ address-family ipv4
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/r4/frr.conf b/tests/topotests/bgp_gr_restart_retain_routes/r4/frr.conf
new file mode 100644
index 0000000..5890791
--- /dev/null
+++ b/tests/topotests/bgp_gr_restart_retain_routes/r4/frr.conf
@@ -0,0 +1,13 @@
+no zebra nexthop kernel enable
+!
+interface r4-eth0
+ ip address 192.168.34.4/24
+!
+router bgp 65004
+ no bgp ebgp-requires-policy
+ bgp graceful-restart preserve-fw-state
+ neighbor 192.168.34.3 remote-as external
+ neighbor 192.168.34.3 timers 1 3
+ neighbor 192.168.34.3 timers connect 1
+ neighbor 192.168.34.3 graceful-restart
+!
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_per_neighbor_restart_retain_routes.py b/tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_per_neighbor_restart_retain_routes.py
new file mode 100644
index 0000000..2354c0c
--- /dev/null
+++ b/tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_per_neighbor_restart_retain_routes.py
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Copyright (c) 2024 by
+# Donatas Abraitis <donatas@opensourcerouting.org>
+#
+
+"""
+Test if routes are retained during BGP restarts using
+ Graceful Restart per-neighbor.
+"""
+
+import os
+import sys
+import json
+import pytest
+import functools
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.common_config import step, stop_router
+
+pytestmark = [pytest.mark.bgpd]
+
+
+def build_topo(tgen):
+ for routern in range(1, 5):
+ tgen.add_router("r{}".format(routern))
+
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["r3"])
+ switch.add_link(tgen.gears["r4"])
+
+
+def setup_module(mod):
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_gr_restart_retain_routes():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r4 = tgen.gears["r4"]
+
+ def _bgp_converge():
+ output = json.loads(r4.vtysh_cmd("show bgp ipv4 neighbors 192.168.34.3 json"))
+ expected = {
+ "192.168.34.3": {
+ "bgpState": "Established",
+ "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 2}},
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ def _bgp_check_bgp_retained_routes():
+ output = json.loads(r4.vtysh_cmd("show bgp ipv4 unicast 172.16.255.3/32 json"))
+ expected = {"paths": [{"stale": True}]}
+ return topotest.json_cmp(output, expected)
+
+ def _bgp_check_kernel_retained_routes():
+ output = json.loads(
+ r4.cmd("ip -j route show 172.16.255.3/32 proto bgp dev r4-eth0")
+ )
+ expected = [{"dst": "172.16.255.3", "gateway": "192.168.34.3", "metric": 20}]
+ return topotest.json_cmp(output, expected)
+
+ step("Initial BGP converge")
+ test_func = functools.partial(_bgp_converge)
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert result is None, "Failed to see BGP convergence on R4"
+
+ step("Restart R3")
+ stop_router(tgen, "r3")
+
+ step("Check if routes (BGP) are retained at R4")
+ test_func = functools.partial(_bgp_check_bgp_retained_routes)
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert result is None, "Failed to see BGP retained routes on R4"
+
+ step("Check if routes (Kernel) are retained at R4")
+ assert (
+ _bgp_check_kernel_retained_routes() is None
+ ), "Failed to retain BGP routes in kernel on R4"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_restart_retain_routes.py b/tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_restart_retain_routes.py
index a820b4b..abf737f 100644
--- a/tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_restart_retain_routes.py
+++ b/tests/topotests/bgp_gr_restart_retain_routes/test_bgp_gr_restart_retain_routes.py
@@ -42,13 +42,8 @@ def setup_module(mod):
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))
- )
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
tgen.start_router()
@@ -83,8 +78,10 @@ def test_bgp_gr_restart_retain_routes():
return topotest.json_cmp(output, expected)
def _bgp_check_kernel_retained_routes():
- output = json.loads(r2.cmd("ip -j route show 172.16.255.1/32 proto bgp dev r2-eth0"))
- expected = [{"dst":"172.16.255.1","gateway":"192.168.255.1","metric":20}]
+ output = json.loads(
+ r2.cmd("ip -j route show 172.16.255.1/32 proto bgp dev r2-eth0")
+ )
+ expected = [{"dst": "172.16.255.1", "gateway": "192.168.255.1", "metric": 20}]
return topotest.json_cmp(output, expected)
step("Initial BGP converge")
@@ -101,7 +98,9 @@ def test_bgp_gr_restart_retain_routes():
assert result is None, "Failed to see BGP retained routes on R2"
step("Check if routes (Kernel) are retained at R2")
- assert _bgp_check_kernel_retained_routes() is None, "Failed to retain BGP routes in kernel on R2"
+ assert (
+ _bgp_check_kernel_retained_routes() is None
+ ), "Failed to retain BGP routes in kernel on R2"
if __name__ == "__main__":
diff --git a/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/add_routes.py b/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/add_routes.py
index 0deb181..489c59f 100644
--- a/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/add_routes.py
+++ b/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/add_routes.py
@@ -1,17 +1,17 @@
from lib.lutil import luCommand
luCommand(
- "r1", 'vtysh -c "show bgp next"', "99.0.0.. valid", "wait", "See CE static NH"
+ "r1", 'vtysh -c "show bgp nexthop"', "99.0.0.. valid", "wait", "See CE static NH"
)
luCommand(
- "r3", 'vtysh -c "show bgp next"', "99.0.0.. valid", "wait", "See CE static NH"
+ "r3", 'vtysh -c "show bgp nexthop"', "99.0.0.. valid", "wait", "See CE static NH"
)
luCommand(
- "r4", 'vtysh -c "show bgp next"', "99.0.0.. valid", "wait", "See CE static NH"
+ "r4", 'vtysh -c "show bgp nexthop"', "99.0.0.. valid", "wait", "See CE static NH"
)
-luCommand("r1", 'vtysh -c "show bgp ipv4 uni"', "i5.*i5", "wait", "See CE routes")
-luCommand("r3", 'vtysh -c "show bgp ipv4 uni"', "i5.*i5", "wait", "See CE routes")
-luCommand("r4", 'vtysh -c "show bgp ipv4 uni"', "i5.*i5", "wait", "See CE routes")
+luCommand("r1", 'vtysh -c "show bgp ipv4 uni"', "i 5.*i 5", "wait", "See CE routes")
+luCommand("r3", 'vtysh -c "show bgp ipv4 uni"', "i 5.*i 5", "wait", "See CE routes")
+luCommand("r4", 'vtysh -c "show bgp ipv4 uni"', "i 5.*i 5", "wait", "See CE routes")
luCommand("ce1", 'vtysh -c "show bgp ipv4 uni 5.1.0.0/24"', "", "none", "See CE routes")
luCommand("r1", 'vtysh -c "show bgp ipv4 uni 5.1.0.0/24"', "", "none", "See CE routes")
luCommand("ce2", 'vtysh -c "show bgp ipv4 uni 5.1.0.0/24"', "", "none", "See CE routes")
@@ -39,22 +39,22 @@ luCommand(
luCommand(
"r3",
'vtysh -c "show bgp ipv4 vpn"',
- "i99.0.0.1/32",
+ "i 99.0.0.1/32",
"wait",
"See R1s static address",
)
luCommand(
"r4",
'vtysh -c "show bgp ipv4 vpn"',
- "i99.0.0.1/32",
+ "i 99.0.0.1/32",
"wait",
"See R1s static address",
)
luCommand(
- "r3", 'vtysh -c "show bgp ipv4 vpn rd 10:1"', "i5.*i5", "wait", "See R1s imports"
+ "r3", 'vtysh -c "show bgp ipv4 vpn rd 10:1"', "i 5.*i 5", "wait", "See R1s imports"
)
luCommand(
- "r4", 'vtysh -c "show bgp ipv4 vpn rd 10:1"', "i5.*i5", "wait", "See R1s imports"
+ "r4", 'vtysh -c "show bgp ipv4 vpn rd 10:1"', "i 5.*i 5", "wait", "See R1s imports"
)
luCommand(
@@ -86,14 +86,14 @@ if have2ndImports:
luCommand(
"r1",
'vtysh -c "show bgp ipv4 vpn"',
- "i99.0.0.2/32",
+ "i 99.0.0.2/32",
"wait",
"See R3s static address",
)
luCommand(
"r4",
'vtysh -c "show bgp ipv4 vpn"',
- "i99.0.0.2/32",
+ "i 99.0.0.2/32",
"wait",
"See R3s static address",
)
@@ -101,14 +101,14 @@ if have2ndImports:
luCommand(
"r1",
'vtysh -c "show bgp ipv4 vpn rd 10:3"',
- "i5.*i5",
+ "i 5.*i 5",
"none",
"See R3s imports",
)
luCommand(
"r4",
'vtysh -c "show bgp ipv4 vpn rd 10:3"',
- "i5.*i5",
+ "i 5.*i 5",
"none",
"See R3s imports",
)
@@ -133,22 +133,22 @@ luCommand(
luCommand(
"r1",
'vtysh -c "show bgp ipv4 vpn"',
- "i99.0.0.3/32",
+ "i 99.0.0.3/32",
"wait",
"See R4s static address",
)
luCommand(
"r3",
'vtysh -c "show bgp ipv4 vpn"',
- "i99.0.0.3/32",
+ "i 99.0.0.3/32",
"wait",
"See R4s static address",
)
luCommand(
- "r1", 'vtysh -c "show bgp ipv4 vpn rd 10:4"', "i5.*i5", "wait", "See R4s imports"
+ "r1", 'vtysh -c "show bgp ipv4 vpn rd 10:4"', "i 5.*i 5", "wait", "See R4s imports"
)
luCommand(
- "r3", 'vtysh -c "show bgp ipv4 vpn rd 10:4"', "i5.*i5", "wait", "See R4s imports"
+ "r3", 'vtysh -c "show bgp ipv4 vpn rd 10:4"', "i 5.*i 5", "wait", "See R4s imports"
)
diff --git a/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/adjacencies.py b/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/adjacencies.py
index 6cd92e2..c966660 100644
--- a/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/adjacencies.py
+++ b/tests/topotests/bgp_l3vpn_to_bgp_direct/scripts/adjacencies.py
@@ -7,18 +7,36 @@ luCommand("ce1", 'vtysh -c "show bgp summary"', " 00:0", "wait", "Adjacencies up
luCommand("ce2", 'vtysh -c "show bgp summary"', " 00:0", "wait", "Adjacencies up", 180)
luCommand("ce3", 'vtysh -c "show bgp summary"', " 00:0", "wait", "Adjacencies up", 180)
luCommand(
- "r1", 'vtysh -c "show ip route ospf"', "2.2.2.2", "wait", "OSPF Route has Arrived", 60)
+ "r1",
+ 'vtysh -c "show ip route ospf"',
+ "2.2.2.2",
+ "wait",
+ "OSPF Route has Arrived",
+ 60,
+)
luCommand(
"r1", "ping 2.2.2.2 -c 1", " 0. packet loss", "wait", "PE->P2 (loopback) ping", 60
)
luCommand(
- "r3", 'vtysh -c "show ip route ospf"', "2.2.2.2", "wait", "OSPF Route has Arrived", 60)
+ "r3",
+ 'vtysh -c "show ip route ospf"',
+ "2.2.2.2",
+ "wait",
+ "OSPF Route has Arrived",
+ 60,
+)
luCommand(
"r3", "ping 2.2.2.2 -c 1", " 0. packet loss", "wait", "PE->P2 (loopback) ping", 60
)
luCommand(
- "r4", 'vtysh -c "show ip route ospf"', "2.2.2.2", "wait", "OSPF Route has Arrived", 60)
+ "r4",
+ 'vtysh -c "show ip route ospf"',
+ "2.2.2.2",
+ "wait",
+ "OSPF Route has Arrived",
+ 60,
+)
luCommand(
"r4", "ping 2.2.2.2 -c 1", " 0. packet loss", "wait", "PE->P2 (loopback) ping", 60
)
diff --git a/tests/topotests/bgp_l3vpn_to_bgp_vrf/scripts/scale_up.py b/tests/topotests/bgp_l3vpn_to_bgp_vrf/scripts/scale_up.py
index e05bf21..2ce4bc5 100644
--- a/tests/topotests/bgp_l3vpn_to_bgp_vrf/scripts/scale_up.py
+++ b/tests/topotests/bgp_l3vpn_to_bgp_vrf/scripts/scale_up.py
@@ -70,7 +70,7 @@ else:
"See all sharp routes in rib on ce1",
wait,
wait_time=10,
- )
+ )
luCommand(
"ce2",
'vtysh -c "show ip route summ" | grep "sharp" | cut -d " " -f 33',
@@ -79,7 +79,7 @@ else:
"See all sharp routes in rib on ce2",
wait,
wait_time=10,
- )
+ )
rtrs = ["ce1", "ce2", "ce3"]
for rtr in rtrs:
diff --git a/tests/topotests/bgp_large_comm_list_match/test_bgp_large_comm_list_match.py b/tests/topotests/bgp_large_comm_list_match/test_bgp_large_comm_list_match.py
index 483c048..7023e3a 100644
--- a/tests/topotests/bgp_large_comm_list_match/test_bgp_large_comm_list_match.py
+++ b/tests/topotests/bgp_large_comm_list_match/test_bgp_large_comm_list_match.py
@@ -137,7 +137,9 @@ def test_bgp_large_comm_list_match_any():
step("BGP filtering check with large-community-list on R3")
test_func = functools.partial(_bgp_converge)
_, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
- assert result is None, "Failed to filter BGP UPDATES with large-community-list on R3"
+ assert (
+ result is None
+ ), "Failed to filter BGP UPDATES with large-community-list on R3"
if __name__ == "__main__":
diff --git a/tests/topotests/bgp_link_bw_ip/r2/bgp-route-3.json b/tests/topotests/bgp_link_bw_ip/r2/bgp-route-3.json
index dfc4171..6289a2e 100644
--- a/tests/topotests/bgp_link_bw_ip/r2/bgp-route-3.json
+++ b/tests/topotests/bgp_link_bw_ip/r2/bgp-route-3.json
@@ -4,7 +4,7 @@
{
"valid":true,
"multipath":true,
- "extendedCommunity":{
+ "extendedIpv6Community":{
"string":"LB:65302:125000 (1.000 Mbps)"
},
"nexthops":[
diff --git a/tests/topotests/bgp_link_bw_ip/r5/bgpd.conf b/tests/topotests/bgp_link_bw_ip/r5/bgpd.conf
index 4014bfb..e4ed92d 100644
--- a/tests/topotests/bgp_link_bw_ip/r5/bgpd.conf
+++ b/tests/topotests/bgp_link_bw_ip/r5/bgpd.conf
@@ -13,6 +13,7 @@ router bgp 65302
bgp bestpath as-path multipath-relax
no bgp ebgp-requires-policy
neighbor 11.1.2.5 remote-as external
+ neighbor 11.1.2.5 extended-link-bandwidth
neighbor 11.1.2.5 timers 3 10
neighbor 11.1.5.2 remote-as external
neighbor 11.1.5.2 timers 3 10
diff --git a/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py b/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
index af6976b..fd67b2e 100644
--- a/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
+++ b/tests/topotests/bgp_link_bw_ip/test_bgp_linkbw_ip.py
@@ -53,7 +53,39 @@ anycast IP (VIP) addresses via BGP.
def build_topo(tgen):
- "Build function"
+ """
+ Build function
+
+ +------+
+ | |
+ /| r7 |---
+ / | 65351|
+ / +------+
+ /
+ +------+ / +------+
+ | |/ | |
+ /| r4 | | r8 |---
+ / | 65301|------| 65352|
+ / +------+ +------+
+ /
+ +------+ / +------+ +------+
+ | |/ | | | |
+ | r2 | | r5 | | r9 |---
+ | 65201|------| 65302|------| 65353|
+ +------+ +------+ +------+
+ |
+ +------+ |
+ | |----------
+ | r1 |
+ | 65101|----------
+ +------+ |
+ |
+ +------+ +------+ +------+
+ | | | | | |
+ | r3 |------| r6 |------| r10 |---
+ | 65202| | 65303| | 65354|
+ +------+ +------+ +------+
+ """
# Create 10 routers - 1 super-spine, 2 spines, 3 leafs
# and 4 servers
diff --git a/tests/topotests/bgp_llgr/test_bgp_llgr.py b/tests/topotests/bgp_llgr/test_bgp_llgr.py
index d604871..d7897cf 100644
--- a/tests/topotests/bgp_llgr/test_bgp_llgr.py
+++ b/tests/topotests/bgp_llgr/test_bgp_llgr.py
@@ -36,8 +36,6 @@ from lib.common_config import (
step,
)
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(0, 6):
diff --git a/tests/topotests/bgp_local_asn/test_bgp_local_asn_agg.py b/tests/topotests/bgp_local_asn/test_bgp_local_asn_agg.py
index 26e8fe9..c84fce6 100644
--- a/tests/topotests/bgp_local_asn/test_bgp_local_asn_agg.py
+++ b/tests/topotests/bgp_local_asn/test_bgp_local_asn_agg.py
@@ -35,7 +35,7 @@ from lib.common_config import (
verify_rib,
step,
check_address_types,
- check_router_status
+ check_router_status,
)
from lib.topolog import logger
diff --git a/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_agg.py b/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_agg.py
index cb8fa1e..cfaab9b 100644
--- a/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_agg.py
+++ b/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_agg.py
@@ -48,7 +48,7 @@ from lib.common_config import (
verify_rib,
step,
check_address_types,
- check_router_status
+ check_router_status,
)
from lib.topolog import logger
@@ -163,7 +163,9 @@ def test_verify_bgp_local_as_agg_in_EBGP_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -190,7 +192,9 @@ def test_verify_bgp_local_as_agg_in_EBGP_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- dut: {"local_asn": {"remote_as": "1.110"}}
+ dut: {
+ "local_asn": {"remote_as": "1.110"}
+ }
}
}
}
diff --git a/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_topo1.py b/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_topo1.py
index e9234f5..bacef47 100644
--- a/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_topo1.py
+++ b/tests/topotests/bgp_local_asn_dot/test_bgp_local_asn_dot_topo1.py
@@ -229,7 +229,9 @@ def test_verify_bgp_local_as_in_EBGP_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -256,7 +258,9 @@ def test_verify_bgp_local_as_in_EBGP_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- dut: {"local_asn": {"remote_as": "1.110"}}
+ dut: {
+ "local_asn": {"remote_as": "1.110"}
+ }
}
}
}
@@ -832,7 +836,9 @@ def test_verify_bgp_local_as_GR_EBGP_p0(request):
"neighbor": {
"r2": {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -861,7 +867,9 @@ def test_verify_bgp_local_as_GR_EBGP_p0(request):
"neighbor": {
"r4": {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -1395,7 +1403,9 @@ def test_verify_bgp_local_as_in_EBGP_aspath_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -1422,7 +1432,9 @@ def test_verify_bgp_local_as_in_EBGP_aspath_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- dut: {"local_asn": {"remote_as": "1.110"}}
+ dut: {
+ "local_asn": {"remote_as": "1.110"}
+ }
}
}
}
@@ -1593,7 +1605,10 @@ def test_verify_bgp_local_as_in_EBGP_aspath_p0(request):
{
"action": "permit",
"set": {
- "path": {"as_num": "1.1000 1.1000", "as_action": "prepend"}
+ "path": {
+ "as_num": "1.1000 1.1000",
+ "as_action": "prepend",
+ }
},
}
]
@@ -1778,7 +1793,9 @@ def test_verify_bgp_local_as_in_iBGP_p0(request):
"neighbor": {
"r4": {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -2137,7 +2154,9 @@ def test_verify_bgp_local_as_allow_as_in_iBGP_p0(request):
"neighbor": {
"r2": {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -2166,7 +2185,9 @@ def test_verify_bgp_local_as_allow_as_in_iBGP_p0(request):
"neighbor": {
"r4": {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -2484,7 +2505,9 @@ def test_verify_bgp_local_as_in_EBGP_port_reset_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -2511,7 +2534,9 @@ def test_verify_bgp_local_as_in_EBGP_port_reset_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- dut: {"local_asn": {"remote_as": "1.110"}}
+ dut: {
+ "local_asn": {"remote_as": "1.110"}
+ }
}
}
}
@@ -2824,7 +2849,9 @@ def test_verify_bgp_local_as_in_EBGP_negative2_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -2851,7 +2878,9 @@ def test_verify_bgp_local_as_in_EBGP_negative2_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- dut: {"local_asn": {"remote_as": "1.110"}}
+ dut: {
+ "local_asn": {"remote_as": "1.110"}
+ }
}
}
}
@@ -3164,7 +3193,9 @@ def test_verify_bgp_local_as_in_EBGP_negative3_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -3191,7 +3222,9 @@ def test_verify_bgp_local_as_in_EBGP_negative3_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- dut: {"local_asn": {"remote_as": "1.110"}}
+ dut: {
+ "local_asn": {"remote_as": "1.110"}
+ }
}
}
}
@@ -3354,7 +3387,9 @@ def test_verify_bgp_local_as_in_EBGP_restart_daemons_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- "r3": {"local_asn": {"local_as": "1.110"}}
+ "r3": {
+ "local_asn": {"local_as": "1.110"}
+ }
}
}
}
@@ -3381,7 +3416,9 @@ def test_verify_bgp_local_as_in_EBGP_restart_daemons_p0(request):
"neighbor": {
neighbor: {
"dest_link": {
- dut: {"local_asn": {"remote_as": "1.110"}}
+ dut: {
+ "local_asn": {"remote_as": "1.110"}
+ }
}
}
}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step11/show_mpls_table.ref.diff b/tests/topotests/bgp_nexthop_mp_ipv4_6/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step11/show_mpls_table.ref.diff
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/__init__.py
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/h1/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/h1/zebra.conf
new file mode 100644
index 0000000..9b19b2c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/h1/zebra.conf
@@ -0,0 +1,6 @@
+ipv6 route ::/0 fd00:100::2
+ip route 0.0.0.0/0 192.168.1.2
+interface eth-r1
+ ip address 192.168.1.1/24
+ ipv6 address fd00:100::1/64
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/h2/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/h2/zebra.conf
new file mode 100644
index 0000000..2bf4a66
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/h2/zebra.conf
@@ -0,0 +1,6 @@
+ipv6 route ::/0 fd00:700::2
+ip route 0.0.0.0/0 192.168.7.2
+interface eth-r7
+ ip address 192.168.7.1/24
+ ipv6 address fd00:700::1/64
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/h3/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/h3/zebra.conf
new file mode 100644
index 0000000..e8b6ac6
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/h3/zebra.conf
@@ -0,0 +1,6 @@
+ipv6 route ::/0 fd00:800::2
+ip route 0.0.0.0/0 192.168.8.2
+interface eth-r8
+ ip address 192.168.8.1/24
+ ipv6 address fd00:800::1/64
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv4.json
new file mode 100755
index 0000000..12fecee
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv4.json
@@ -0,0 +1,70 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "0.0.0.0",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65000 65700",
+ "nexthops": [
+ {
+ "ip": "172.16.1.3",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65700",
+ "nexthops": [
+ {
+ "ip": "172.16.0.2",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65000 65800",
+ "nexthops": [
+ {
+ "ip": "172.16.1.3",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65800",
+ "nexthops": [
+ {
+ "ip": "172.16.0.2",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step1.json
new file mode 100755
index 0000000..f7c5c7c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step1.json
@@ -0,0 +1,90 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65000 65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:2::3",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::2",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65000 65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:2::3",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::2",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step2.json
new file mode 100755
index 0000000..f7c5c7c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgp_ipv6_step2.json
@@ -0,0 +1,90 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65000 65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:2::3",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::2",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65000 65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:2::3",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::2",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgpd.conf
new file mode 100644
index 0000000..23b986d
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/bgpd.conf
@@ -0,0 +1,23 @@
+router bgp 65100
+ no bgp ebgp-requires-policy
+ neighbor 172.16.0.2 remote-as external
+ neighbor 172.16.1.3 remote-as external
+ ! neighbor 172.16.0.2 capability extended-nexthop
+ !
+ address-family ipv4 unicast
+ redistribute connected route-map RMAP4
+ !
+ address-family ipv6 unicast
+ redistribute connected route-map RMAP6
+ neighbor 172.16.0.2 activate
+ neighbor 172.16.1.3 activate
+ !
+
+ip prefix-list RANGE4 seq 10 permit 192.168.0.0/16 le 24
+ipv6 prefix-list RANGE6 seq 10 permit fd00:100::0/64
+
+route-map RMAP4 permit 10
+ match ip address prefix-list RANGE4
+!
+route-map RMAP6 permit 10
+ match ipv6 address prefix-list RANGE6
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/zebra.conf
new file mode 100644
index 0000000..79cbafb
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r1/zebra.conf
@@ -0,0 +1,16 @@
+!
+interface eth-h1
+ ip address 192.168.1.2/24
+ ipv6 address fd00:100::2/64
+!
+interface eth-r2
+ ip address 172.16.0.1/24
+ ipv6 address fd00:0:1::1/64
+!
+interface eth-r3
+ ip address 172.16.1.1/24
+ ipv6 address fd00:0:2::1/64
+!
+interface lo
+ ip address 192.0.2.1/32
+ ipv6 address 2001:db8::1/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv4.json
new file mode 100755
index 0000000..64dadf6
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv4.json
@@ -0,0 +1,46 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "172.16.0.1",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "172.17.0.7",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "172.17.0.8",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step1.json
new file mode 100644
index 0000000..4f86a1a
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step1.json
@@ -0,0 +1,53 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::1",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step2.json
new file mode 100644
index 0000000..21f3608
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgp_ipv6_step2.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgpd.conf
new file mode 100644
index 0000000..badb11c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/bgpd.conf
@@ -0,0 +1,11 @@
+router bgp 65000
+ no bgp ebgp-requires-policy
+ neighbor 172.16.0.1 remote-as external
+ ! neighbor 172.16.0.1 capability extended-nexthop
+ neighbor 192.0.2.101 remote-as internal
+ neighbor 192.0.2.101 update-source 192.0.2.2
+ !
+ address-family ipv6 unicast
+ neighbor 172.16.0.1 activate
+ neighbor 192.0.2.101 activate
+ !
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/isisd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/isisd.conf
new file mode 100644
index 0000000..1696379
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/isisd.conf
@@ -0,0 +1,24 @@
+!
+interface lo
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+interface eth-rr1
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r1
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+router isis 1
+ net 49.0000.0000.0000.0002.00
+ is-type level-1
+ lsp-gen-interval 1
+ topology ipv6-unicast
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/zebra.conf
new file mode 100644
index 0000000..8997115
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r2/zebra.conf
@@ -0,0 +1,12 @@
+!
+interface eth-r1
+ ip address 172.16.0.2/24
+ ipv6 address fd00:0:1::2/64
+!
+interface eth-rr1
+ ip address 10.0.0.2/24
+ ipv6 address fd00:0:3::2/64
+!
+interface lo
+ ip address 192.0.2.2/32
+ ipv6 address 2001:db8::2/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv4.json
new file mode 100644
index 0000000..0f18a43
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv4.json
@@ -0,0 +1,46 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "172.16.1.1",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "172.17.0.7",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "172.17.0.8",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step1.json
new file mode 100644
index 0000000..f44121c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step1.json
@@ -0,0 +1,53 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:2::1",
+ "afi": "ipv6",
+ "scope": "global"
+ },
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step2.json
new file mode 100644
index 0000000..21f3608
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgp_ipv6_step2.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "afi": "ipv6",
+ "scope": "link-local",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgpd.conf
new file mode 100644
index 0000000..4dec311
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/bgpd.conf
@@ -0,0 +1,11 @@
+router bgp 65000
+ no bgp ebgp-requires-policy
+ neighbor 172.16.1.1 remote-as external
+ ! neighbor 172.16.1.1 capability extended-nexthop
+ neighbor 192.0.2.101 remote-as internal
+ neighbor 192.0.2.101 update-source 192.0.2.3
+ !
+ address-family ipv6 unicast
+ neighbor 172.16.1.1 activate
+ neighbor 192.0.2.101 activate
+ !
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/isisd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/isisd.conf
new file mode 100644
index 0000000..fe3e307
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/isisd.conf
@@ -0,0 +1,24 @@
+!
+interface lo
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+interface eth-rr1
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r1
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+router isis 1
+ net 49.0000.0000.0000.0003.00
+ is-type level-1
+ lsp-gen-interval 1
+ topology ipv6-unicast
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/zebra.conf
new file mode 100644
index 0000000..8074bbd
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r3/zebra.conf
@@ -0,0 +1,12 @@
+!
+interface eth-r1
+ ip address 172.16.1.3/24
+ ipv6 address fd00:0:2::3/64
+!
+interface eth-rr1
+ ip address 10.0.1.3/24
+ ipv6 address fd00:0:4::3/64
+!
+interface lo
+ ip address 192.0.2.3/32
+ ipv6 address 2001:db8::3/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv4.json
new file mode 100755
index 0000000..64dadf6
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv4.json
@@ -0,0 +1,46 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "172.16.0.1",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "172.17.0.7",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "172.17.0.8",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step1.json
new file mode 100755
index 0000000..756a78e
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step1.json
@@ -0,0 +1,49 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::1",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step2.json
new file mode 100755
index 0000000..7d0786c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgp_ipv6_step2.json
@@ -0,0 +1,49 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "2001:db8::2",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgpd.conf
new file mode 100644
index 0000000..2dbc4ac
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/bgpd.conf
@@ -0,0 +1,13 @@
+router bgp 65000
+ neighbor 192.0.2.5 remote-as internal
+ neighbor 192.0.2.6 remote-as internal
+ neighbor 192.0.2.101 remote-as internal
+ neighbor 192.0.2.5 update-source 192.0.2.4
+ neighbor 192.0.2.6 update-source 192.0.2.4
+ neighbor 192.0.2.101 update-source 192.0.2.4
+ !
+ address-family ipv6 unicast
+ neighbor 192.0.2.5 activate
+ neighbor 192.0.2.6 activate
+ neighbor 192.0.2.101 activate
+ !
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/isisd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/isisd.conf
new file mode 100644
index 0000000..21eb80f
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/isisd.conf
@@ -0,0 +1,26 @@
+!
+interface lo
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+interface eth-rr1
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r6
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+router isis 1
+ net 49.0000.0000.0000.0004.00
+ is-type level-1
+ lsp-gen-interval 1
+ topology ipv6-unicast
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/zebra.conf
new file mode 100644
index 0000000..c598b34
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r4/zebra.conf
@@ -0,0 +1,12 @@
+!
+interface eth-r6
+ ip address 10.0.4.4/24
+ ipv6 address fd00:0:7::4/64
+!
+interface eth-rr1
+ ip address 10.0.2.4/24
+ ipv6 address fd00:0:5::4/64
+!
+interface lo
+ ip address 192.0.2.4/32
+ ipv6 address 2001:db8::4/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv4.json
new file mode 100755
index 0000000..64dadf6
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv4.json
@@ -0,0 +1,46 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "172.16.0.1",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "172.17.0.7",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "172.17.0.8",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step1.json
new file mode 100755
index 0000000..756a78e
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step1.json
@@ -0,0 +1,49 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::1",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step2.json
new file mode 100755
index 0000000..7d0786c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgp_ipv6_step2.json
@@ -0,0 +1,49 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "2001:db8::2",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgpd.conf
new file mode 100644
index 0000000..101edbd
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/bgpd.conf
@@ -0,0 +1,13 @@
+router bgp 65000
+ neighbor 192.0.2.4 remote-as internal
+ neighbor 192.0.2.6 remote-as internal
+ neighbor 192.0.2.101 remote-as internal
+ neighbor 192.0.2.4 update-source 192.0.2.5
+ neighbor 192.0.2.6 update-source 192.0.2.5
+ neighbor 192.0.2.101 update-source 192.0.2.5
+ !
+ address-family ipv6 unicast
+ neighbor 192.0.2.4 activate
+ neighbor 192.0.2.6 activate
+ neighbor 192.0.2.101 activate
+ !
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/isisd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/isisd.conf
new file mode 100644
index 0000000..f998e80
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/isisd.conf
@@ -0,0 +1,26 @@
+!
+interface lo
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+interface eth-rr1
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r6
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+router isis 1
+ net 49.0000.0000.0000.0005.00
+ is-type level-1
+ lsp-gen-interval 1
+ topology ipv6-unicast
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/zebra.conf
new file mode 100644
index 0000000..7b43db0
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r5/zebra.conf
@@ -0,0 +1,12 @@
+!
+interface eth-r6
+ ip address 10.0.5.5/24
+ ipv6 address fd00:0:8::5/64
+!
+interface eth-rr1
+ ip address 10.0.3.5/24
+ ipv6 address fd00:0:6::5/64
+!
+interface lo
+ ip address 192.0.2.5/32
+ ipv6 address 2001:db8::5/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv4.json
new file mode 100644
index 0000000..64dadf6
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv4.json
@@ -0,0 +1,46 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "172.16.0.1",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "172.17.0.7",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "172.17.0.8",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step1.json
new file mode 100644
index 0000000..1a01ead
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step1.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::1",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step2.json
new file mode 100644
index 0000000..55912dd
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgp_ipv6_step2.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "nexthops": [
+ {
+ "ip": "2001:db8::2",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgpd.conf
new file mode 100644
index 0000000..e036a77
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/bgpd.conf
@@ -0,0 +1,17 @@
+router bgp 65000
+ no bgp ebgp-requires-policy
+ no bgp enforce-first-as
+ neighbor 192.0.2.4 remote-as internal
+ neighbor 192.0.2.5 remote-as internal
+ neighbor 192.0.2.101 remote-as internal
+ neighbor 172.17.0.201 remote-as external
+ neighbor 192.0.2.4 update-source 192.0.2.6
+ neighbor 192.0.2.5 update-source 192.0.2.6
+ neighbor 192.0.2.101 update-source 192.0.2.6
+ !
+ address-family ipv6 unicast
+ neighbor 192.0.2.4 activate
+ neighbor 192.0.2.5 activate
+ neighbor 192.0.2.101 activate
+ neighbor 172.17.0.201 activate
+ !
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/isisd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/isisd.conf
new file mode 100644
index 0000000..b575290
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/isisd.conf
@@ -0,0 +1,31 @@
+!
+interface lo
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+interface eth-r4
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r5
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-sw1
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+router isis 1
+ net 49.0000.0000.0000.0006.00
+ is-type level-1
+ lsp-gen-interval 1
+ topology ipv6-unicast
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/zebra.conf
new file mode 100644
index 0000000..fce74c1
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r6/zebra.conf
@@ -0,0 +1,16 @@
+!
+interface eth-r4
+ ip address 10.0.4.6/24
+ ipv6 address fd00:0:7::6/64
+!
+interface eth-r5
+ ip address 10.0.5.6/24
+ ipv6 address fd00:0:8::6/64
+!
+interface eth-sw1
+ ip address 172.17.0.6/24
+ ipv6 address fd00:0:9::6/64
+!
+interface lo
+ ip address 192.0.2.6/32
+ ipv6 address 2001:db8::6/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv4.json
new file mode 100644
index 0000000..72b0f03
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv4.json
@@ -0,0 +1,46 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65100",
+ "nexthops": [
+ {
+ "ip": "172.17.0.6",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "0.0.0.0",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "172.17.0.8",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step1.json
new file mode 100644
index 0000000..8fe5f7c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step1.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::6",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step2.json
new file mode 100644
index 0000000..8fe5f7c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgp_ipv6_step2.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::6",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgpd.conf
new file mode 100644
index 0000000..a707b23
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/bgpd.conf
@@ -0,0 +1,21 @@
+router bgp 65700
+ no bgp ebgp-requires-policy
+ no bgp enforce-first-as
+ neighbor 172.17.0.201 remote-as external
+ !
+ address-family ipv4 unicast
+ redistribute connected route-map RMAP4
+ !
+ address-family ipv6 unicast
+ redistribute connected route-map RMAP6
+ neighbor 172.17.0.201 activate
+ !
+
+ip prefix-list RANGE4 seq 10 permit 192.168.0.0/16 le 24
+ipv6 prefix-list RANGE6 seq 10 permit fd00:700::0/64
+
+route-map RMAP4 permit 10
+ match ip address prefix-list RANGE4
+!
+route-map RMAP6 permit 10
+ match ipv6 address prefix-list RANGE6
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/zebra.conf
new file mode 100644
index 0000000..7544829
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r7/zebra.conf
@@ -0,0 +1,12 @@
+!
+interface eth-h2
+ ip address 192.168.7.2/24
+ ipv6 address fd00:700::2/64
+!
+interface eth-sw1
+ ip address 172.17.0.7/24
+ ipv6 address fd00:0:9::7/64
+!
+interface lo
+ ip address 192.0.2.7/32
+ ipv6 address 2001:db8::7/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv4.json
new file mode 100644
index 0000000..596ee4b
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv4.json
@@ -0,0 +1,46 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65100",
+ "nexthops": [
+ {
+ "ip": "172.17.0.6",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "172.17.0.7",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "0.0.0.0",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step1.json
new file mode 100644
index 0000000..20f4940
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step1.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::6",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step2.json
new file mode 100644
index 0000000..20f4940
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgp_ipv6_step2.json
@@ -0,0 +1,48 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65000 65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::6",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "",
+ "nexthops": [
+ {
+ "ip": "::",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgpd.conf
new file mode 100644
index 0000000..d57712d
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/bgpd.conf
@@ -0,0 +1,21 @@
+router bgp 65800
+ no bgp ebgp-requires-policy
+ no bgp enforce-first-as
+ neighbor 172.17.0.201 remote-as external
+ !
+ address-family ipv4 unicast
+ redistribute connected route-map RMAP4
+ !
+ address-family ipv6 unicast
+ redistribute connected route-map RMAP6
+ neighbor 172.17.0.201 activate
+ !
+
+ip prefix-list RANGE4 seq 10 permit 192.168.0.0/16 le 24
+ipv6 prefix-list RANGE6 seq 10 permit fd00:800::0/64
+
+route-map RMAP4 permit 10
+ match ip address prefix-list RANGE4
+!
+route-map RMAP6 permit 10
+ match ipv6 address prefix-list RANGE6
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/zebra.conf
new file mode 100644
index 0000000..7e2479b
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/r8/zebra.conf
@@ -0,0 +1,12 @@
+!
+interface eth-h3
+ ip address 192.168.8.2/24
+ ipv6 address fd00:800::2/64
+!
+interface eth-sw1
+ ip address 172.17.0.8/24
+ ipv6 address fd00:0:9::8/64
+!
+interface lo
+ ip address 192.0.2.8/32
+ ipv6 address 2001:db8::8/128
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv4.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv4.json
new file mode 100644
index 0000000..ac67fe0
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv4.json
@@ -0,0 +1,58 @@
+{
+ "routes": {
+ "192.168.1.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "172.16.0.1",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "172.16.1.1",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.7.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "172.17.0.7",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "192.168.8.0/24": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "172.17.0.8",
+ "afi": "ipv4",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step1.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step1.json
new file mode 100644
index 0000000..4e359fd
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step1.json
@@ -0,0 +1,62 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:1::1",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "fd00:0:2::1",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "scope": "global",
+ "afi": "ipv6",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step2.json b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step2.json
new file mode 100644
index 0000000..4ab0e1c
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgp_ipv6_step2.json
@@ -0,0 +1,62 @@
+{
+ "routes": {
+ "fd00:100::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "2001:db8::2",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ },
+ {
+ "valid": true,
+ "multipath": true,
+ "path": "65100",
+ "nexthops": [
+ {
+ "ip": "2001:db8::3",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:700::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65700",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::7",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ],
+ "fd00:800::/64": [
+ {
+ "valid": true,
+ "bestpath": true,
+ "path": "65800",
+ "nexthops": [
+ {
+ "ip": "fd00:0:9::8",
+ "afi": "ipv6",
+ "scope": "global",
+ "used": true
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgpd.conf
new file mode 100644
index 0000000..9bbac8b
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/bgpd.conf
@@ -0,0 +1,26 @@
+router bgp 65000
+ neighbor 192.0.2.2 remote-as internal
+ neighbor 192.0.2.3 remote-as internal
+ neighbor 192.0.2.4 remote-as internal
+ neighbor 192.0.2.5 remote-as internal
+ neighbor 192.0.2.6 remote-as internal
+ neighbor 192.0.2.2 update-source 192.0.2.101
+ neighbor 192.0.2.3 update-source 192.0.2.101
+ neighbor 192.0.2.4 update-source 192.0.2.101
+ neighbor 192.0.2.5 update-source 192.0.2.101
+ neighbor 192.0.2.6 update-source 192.0.2.101
+ !
+ address-family ipv4 unicast
+ neighbor 192.0.2.2 route-reflector-client
+ neighbor 192.0.2.3 route-reflector-client
+
+ !
+ address-family ipv6 unicast
+ neighbor 192.0.2.2 activate
+ neighbor 192.0.2.3 activate
+ neighbor 192.0.2.4 activate
+ neighbor 192.0.2.5 activate
+ neighbor 192.0.2.6 activate
+ neighbor 192.0.2.2 route-reflector-client
+ neighbor 192.0.2.3 route-reflector-client
+ !
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/isisd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/isisd.conf
new file mode 100644
index 0000000..fe5bcfb
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/isisd.conf
@@ -0,0 +1,40 @@
+!
+interface lo
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+interface eth-r2
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r3
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r4
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+interface eth-r5
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+ isis network point-to-point
+!
+router isis 1
+ net 49.0000.0000.0000.0101.00
+ is-type level-1
+ lsp-gen-interval 1
+ topology ipv6-unicast
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/zebra.conf
new file mode 100644
index 0000000..7f5c8d1
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rr1/zebra.conf
@@ -0,0 +1,21 @@
+!
+interface eth-r2
+ ip address 10.0.0.101/24
+ ipv6 address fd00:0:3::101/64
+!
+interface eth-r3
+ ip address 10.0.1.101/24
+ ipv6 address fd00:0:4::101/64
+!
+interface eth-r4
+ ip address 10.0.2.101/24
+ ipv6 address fd00:0:5::101/64
+!
+interface eth-r5
+ ip address 10.0.3.101/24
+ ipv6 address fd00:0:6::101/64
+!
+interface lo
+ ip address 192.0.2.101/32
+ ipv6 address 2001:db8::101/128
+
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/bgpd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/bgpd.conf
new file mode 100644
index 0000000..596cc3e
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/bgpd.conf
@@ -0,0 +1,21 @@
+router bgp 65200 view RS
+ bgp router-id 192.0.2.201
+ no bgp ebgp-requires-policy
+ neighbor 172.17.0.6 remote-as external
+ neighbor 172.17.0.7 remote-as external
+ neighbor 172.17.0.8 remote-as external
+ !
+ address-family ipv4 unicast
+ neighbor 172.17.0.6 route-server-client
+ neighbor 172.17.0.7 route-server-client
+ neighbor 172.17.0.8 route-server-client
+
+ !
+ address-family ipv6 unicast
+ neighbor 172.17.0.6 activate
+ neighbor 172.17.0.7 activate
+ neighbor 172.17.0.8 activate
+ neighbor 172.17.0.6 route-server-client
+ neighbor 172.17.0.7 route-server-client
+ neighbor 172.17.0.8 route-server-client
+ !
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/isisd.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/isisd.conf
new file mode 100644
index 0000000..892b4e7
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/isisd.conf
@@ -0,0 +1,36 @@
+!
+interface lo
+ ip router isis 1
+ ipv6 router isis 1
+ isis passive
+!
+interface eth-r2
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+interface eth-r3
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+interface eth-r4
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+interface eth-r5
+ ip router isis 1
+ ipv6 router isis 1
+ isis hello-interval 1
+ isis hello-multiplier 3
+!
+router isis 1
+ net 49.0000.0000.0000.0101.00
+ is-type level-1
+ lsp-gen-interval 1
+ topology ipv6-unicast
+!
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/zebra.conf b/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/zebra.conf
new file mode 100644
index 0000000..75ee083
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/rs1/zebra.conf
@@ -0,0 +1,8 @@
+interface eth-sw1
+ ip address 172.17.0.201/24
+ ipv6 address fd00:0:9::201/64
+!
+interface lo
+ ip address 192.0.2.201/32
+ ipv6 address 2001:db8::201/128
+
diff --git a/tests/topotests/bgp_nexthop_mp_ipv4_6/test_nexthop_mp_ipv4_6.py b/tests/topotests/bgp_nexthop_mp_ipv4_6/test_nexthop_mp_ipv4_6.py
new file mode 100644
index 0000000..911a6d7
--- /dev/null
+++ b/tests/topotests/bgp_nexthop_mp_ipv4_6/test_nexthop_mp_ipv4_6.py
@@ -0,0 +1,283 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Copyright (c) 2024 by 6WIND
+#
+
+"""
+Test BGP nexthop conformity with IPv4,6 MP-BGP over IPv4 peering
+"""
+
+import os
+import sys
+import json
+import functools
+from functools import partial
+import pytest
+
+# 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
+from lib.checkping import check_ping
+from lib.bgp import verify_bgp_convergence_from_running_config
+
+pytestmark = [pytest.mark.bgpd, pytest.mark.isisd]
+
+
+def build_topo(tgen):
+ r"""
+ +---+
+ | h1|
+ +---+
+ |
+ +---+
+ | r1| AS 65100
+ +---+
+ / \ _____________
+ / \
+ +---+ +---+
+ | r2| | r3| rr1 is route-reflector
+ +---+ +---+ for r2 and r3
+ \ /
+ \ /
+ +---+
+ |rr1| AS 65000
+ +---+
+ / \
+ / \
+ +---+ +---+
+ | r4| | r5| iBGP full-mesh between
+ +---+ +---+ rr1, r4, r5 and r6
+ \ /
+ \ /
+ +---+
+ | r6|
+ +---+
+ | _____________
+ |
+ | +---+
+ [sw1]-----|rs1| AS 65200
+ /\ +---+ rs1: route-server
+ / \
+ / \ _____________
+ +---+ +---+
+ | r7| | r8| AS 65700 (r7)
+ +---+ +---+ AS 65800 (r8)
+ | |
+ +---+ +---+
+ | h2| | h3|
+ +---+ +---+
+ """
+
+ def connect_routers(tgen, left, right):
+ for rname in [left, right]:
+ if rname not in tgen.routers().keys():
+ tgen.add_router(rname)
+
+ switch = tgen.add_switch("s-{}-{}".format(left, right))
+ switch.add_link(tgen.gears[left], nodeif="eth-{}".format(right))
+ switch.add_link(tgen.gears[right], nodeif="eth-{}".format(left))
+
+ def connect_switchs(tgen, rname, switch):
+ if rname not in tgen.routers().keys():
+ tgen.add_router(rname)
+
+ switch.add_link(tgen.gears[rname], nodeif="eth-{}".format(switch.name))
+
+ connect_routers(tgen, "h1", "r1")
+ connect_routers(tgen, "r1", "r2")
+ connect_routers(tgen, "r1", "r3")
+ connect_routers(tgen, "r2", "rr1")
+ connect_routers(tgen, "r3", "rr1")
+ connect_routers(tgen, "rr1", "r4")
+ connect_routers(tgen, "rr1", "r5")
+ connect_routers(tgen, "r4", "r6")
+ connect_routers(tgen, "r5", "r6")
+
+ sw1 = tgen.add_switch("sw1")
+ connect_switchs(tgen, "r6", sw1)
+ connect_switchs(tgen, "rs1", sw1)
+ connect_switchs(tgen, "r7", sw1)
+ connect_switchs(tgen, "r8", sw1)
+
+ connect_routers(tgen, "r7", "h2")
+ connect_routers(tgen, "r8", "h3")
+
+
+def setup_module(mod):
+ "Sets up the pytest environment"
+
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+ logger.info("setup_module")
+
+ for rname, router in tgen.routers().items():
+ router.load_config(
+ TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+ )
+ if "h" in rname:
+ # hosts
+ continue
+
+ router.load_config(
+ TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
+ )
+
+ if rname in ["r1", "r7", "r8", "rs1"]:
+ # external routers
+ continue
+
+ router.load_config(
+ TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
+ )
+
+ # Initialize all routers.
+ tgen.start_router()
+
+
+def teardown_module(_mod):
+ "Teardown the pytest environment"
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_convergence():
+ "Assert that BGP is converging."
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("waiting for bgp peers to go up")
+
+ for rname in tgen.routers().keys():
+ if "h" in rname:
+ # hosts
+ continue
+ result = verify_bgp_convergence_from_running_config(tgen, dut=rname)
+ assert result is True, "BGP is not converging on {}".format(rname)
+
+
+def test_bgp_ipv4_nexthop_step1():
+ "Assert that BGP has correct ipv4 nexthops."
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ for rname, router in tgen.routers().items():
+ if "h" in rname:
+ # hosts
+ continue
+ if "rs1" in rname:
+ continue
+ ref_file = "{}/{}/bgp_ipv4.json".format(CWD, rname)
+ expected = json.loads(open(ref_file).read())
+ test_func = partial(
+ topotest.router_json_cmp,
+ router,
+ "show bgp ipv4 unicast json",
+ expected,
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assertmsg = "{}: BGP IPv4 Nexthop failure".format(rname)
+ assert res is None, assertmsg
+
+
+def test_bgp_ipv6_nexthop_step1():
+ "Assert that BGP has correct ipv6 nexthops."
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ for rname, router in tgen.routers().items():
+ if "h" in rname:
+ # hosts
+ continue
+ if "rs1" in rname:
+ continue
+ ref_file = "{}/{}/bgp_ipv6_step1.json".format(CWD, rname)
+ expected = json.loads(open(ref_file).read())
+ test_func = partial(
+ topotest.router_json_cmp,
+ router,
+ "show bgp ipv6 unicast json",
+ expected,
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assertmsg = "{}: BGP IPv6 Nexthop failure".format(rname)
+ assert res is None, assertmsg
+
+
+def test_bgp_ping_ok_step1():
+ "Check that h1 pings h2 and h3"
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ check_ping("h1", "192.168.7.1", True, 5, 1)
+ check_ping("h1", "fd00:700::1", True, 5, 1)
+ check_ping("h1", "192.168.8.1", True, 5, 1)
+ check_ping("h1", "fd00:800::1", True, 5, 1)
+
+
+def test_bgp_ipv6_nexthop_step2():
+ """
+ Remove IPv6 global on r1 and r7
+ Assert that BGP has correct ipv6 nexthops.
+ """
+
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ tgen.gears["r1"].vtysh_cmd(
+ """
+configure
+interface eth-r2
+ no ipv6 address fd00:0:1::1/64
+!
+interface eth-r3
+ no ipv6 address fd00:0:2::1/64
+"""
+ )
+
+ for rname, router in tgen.routers().items():
+ if "h" in rname:
+ # hosts
+ continue
+ if "rs1" in rname:
+ continue
+ ref_file = "{}/{}/bgp_ipv6_step2.json".format(CWD, rname)
+ expected = json.loads(open(ref_file).read())
+ test_func = partial(
+ topotest.router_json_cmp,
+ router,
+ "show bgp ipv6 unicast json",
+ expected,
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assertmsg = "{}: BGP IPv6 Nexthop failure".format(rname)
+ assert res is None, assertmsg
+
+
+def test_bgp_ping_ok_step2():
+ "Check that h1 pings h2 and h3"
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ check_ping("h1", "192.168.7.1", True, 5, 1)
+ check_ping("h1", "fd00:700::1", True, 5, 1)
+ check_ping("h1", "192.168.8.1", True, 5, 1)
+ check_ping("h1", "fd00:800::1", True, 5, 1)
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_oad/test_bgp_oad.py b/tests/topotests/bgp_oad/test_bgp_oad.py
index b26c548..a2ca37a 100644
--- a/tests/topotests/bgp_oad/test_bgp_oad.py
+++ b/tests/topotests/bgp_oad/test_bgp_oad.py
@@ -17,7 +17,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -27,8 +27,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2", "r4"), "s2": ("r2", "r3"), "s3": ("r4", "r5")}
diff --git a/tests/topotests/bgp_orf/test_bgp_orf.py b/tests/topotests/bgp_orf/test_bgp_orf.py
index 7f45a24..47c0556 100644
--- a/tests/topotests/bgp_orf/test_bgp_orf.py
+++ b/tests/topotests/bgp_orf/test_bgp_orf.py
@@ -20,7 +20,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -29,8 +29,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
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 df39032..8504737 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
@@ -78,6 +78,7 @@ pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
# Address read from env variables
ADDR_TYPES = check_address_types()
+
####
def setup_module(mod):
"""
diff --git a/tests/topotests/bgp_path_selection/test_bgp_path_selection.py b/tests/topotests/bgp_path_selection/test_bgp_path_selection.py
index bf5737b..30083b4 100644
--- a/tests/topotests/bgp_path_selection/test_bgp_path_selection.py
+++ b/tests/topotests/bgp_path_selection/test_bgp_path_selection.py
@@ -49,7 +49,11 @@ def setup_module(mod):
for routern in range(1, 4):
tgen.gears["r{}".format(routern)].cmd("ip link add vrf1 type vrf table 10")
tgen.gears["r{}".format(routern)].cmd("ip link set vrf1 up")
- tgen.gears["r{}".format(routern)].cmd("ip address add dev vrf1 {}.{}.{}.{}/32".format(routern, routern, routern,routern))
+ tgen.gears["r{}".format(routern)].cmd(
+ "ip address add dev vrf1 {}.{}.{}.{}/32".format(
+ routern, routern, routern, routern
+ )
+ )
tgen.gears["r2"].cmd("ip address add dev vrf1 192.0.2.8/32")
tgen.gears["r3"].cmd("ip address add dev vrf1 192.0.2.8/32")
@@ -74,6 +78,7 @@ def teardown_module(mod):
tgen = get_topogen()
tgen.stop_topology()
+
def test_bgp_path_selection_ecmp():
tgen = get_topogen()
@@ -97,7 +102,7 @@ def test_bgp_path_selection_ecmp():
"aspath": {"string": "65002"},
"multipath": True,
"nexthops": [{"ip": "192.0.2.3", "metric": 20}],
- }
+ },
]
}
@@ -117,7 +122,9 @@ def test_bgp_path_selection_vpn_ecmp():
def _bgp_check_path_selection_vpn_ecmp():
output = json.loads(
- tgen.gears["r1"].vtysh_cmd("show bgp vrf vrf1 ipv4 unicast 192.0.2.8/32 json")
+ tgen.gears["r1"].vtysh_cmd(
+ "show bgp vrf vrf1 ipv4 unicast 192.0.2.8/32 json"
+ )
)
expected = {
"paths": [
@@ -132,7 +139,7 @@ def test_bgp_path_selection_vpn_ecmp():
"aspath": {"string": "65002"},
"multipath": True,
"nexthops": [{"ip": "192.0.2.3", "metric": 20}],
- }
+ },
]
}
@@ -160,13 +167,13 @@ def test_bgp_path_selection_metric():
"valid": True,
"aspath": {"string": "65002"},
"nexthops": [{"ip": "192.0.2.2", "metric": 10}],
- "bestpath":{ "selectionReason":"IGP Metric"},
+ "bestpath": {"selectionReason": "IGP Metric"},
},
{
"valid": True,
"aspath": {"string": "65002"},
"nexthops": [{"ip": "192.0.2.3", "metric": 20}],
- }
+ },
]
}
@@ -189,7 +196,9 @@ def test_bgp_path_selection_vpn_metric():
def _bgp_check_path_selection_vpn_metric():
output = json.loads(
- tgen.gears["r1"].vtysh_cmd("show bgp vrf vrf1 ipv4 unicast 192.0.2.8/32 json")
+ tgen.gears["r1"].vtysh_cmd(
+ "show bgp vrf vrf1 ipv4 unicast 192.0.2.8/32 json"
+ )
)
expected = {
"paths": [
@@ -197,13 +206,13 @@ def test_bgp_path_selection_vpn_metric():
"valid": True,
"aspath": {"string": "65002"},
"nexthops": [{"ip": "192.0.2.2", "metric": 10}],
- "bestpath":{ "selectionReason":"IGP Metric"},
+ "bestpath": {"selectionReason": "IGP Metric"},
},
{
"valid": True,
"aspath": {"string": "65002"},
"nexthops": [{"ip": "192.0.2.3", "metric": 20}],
- }
+ },
]
}
diff --git a/tests/topotests/bgp_peer_graceful_shutdown/test_bgp_peer_graceful_shutdown.py b/tests/topotests/bgp_peer_graceful_shutdown/test_bgp_peer_graceful_shutdown.py
index 2eb936a..9269826 100644
--- a/tests/topotests/bgp_peer_graceful_shutdown/test_bgp_peer_graceful_shutdown.py
+++ b/tests/topotests/bgp_peer_graceful_shutdown/test_bgp_peer_graceful_shutdown.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.common_config import step
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2"), "s2": ("r2", "r3")}
diff --git a/tests/topotests/bgp_peer_group/r1/bgpd.conf b/tests/topotests/bgp_peer_group/r1/bgpd.conf
index 19b490a..68d8e61 100644
--- a/tests/topotests/bgp_peer_group/r1/bgpd.conf
+++ b/tests/topotests/bgp_peer_group/r1/bgpd.conf
@@ -5,4 +5,8 @@ router bgp 65001
neighbor PG timers 3 10
neighbor 192.168.255.3 peer-group PG
neighbor r1-eth0 interface peer-group PG
+ neighbor PG1 peer-group
+ neighbor PG1 remote-as external
+ neighbor PG1 timers 3 20
+ neighbor 192.168.251.2 peer-group PG1
!
diff --git a/tests/topotests/bgp_peer_group/r1/zebra.conf b/tests/topotests/bgp_peer_group/r1/zebra.conf
index e2c399e..16fd8c5 100644
--- a/tests/topotests/bgp_peer_group/r1/zebra.conf
+++ b/tests/topotests/bgp_peer_group/r1/zebra.conf
@@ -2,5 +2,8 @@
interface r1-eth0
ip address 192.168.255.1/24
!
+interface r1-eth1
+ ip address 192.168.251.1/30
+!
ip forwarding
!
diff --git a/tests/topotests/bgp_peer_group/r2/bgpd.conf b/tests/topotests/bgp_peer_group/r2/bgpd.conf
index 0880ee9..d0e8f01 100644
--- a/tests/topotests/bgp_peer_group/r2/bgpd.conf
+++ b/tests/topotests/bgp_peer_group/r2/bgpd.conf
@@ -4,4 +4,8 @@ router bgp 65002
neighbor PG remote-as external
neighbor PG timers 3 10
neighbor r2-eth0 interface peer-group PG
+ neighbor PG1 peer-group
+ neighbor PG1 remote-as external
+ neighbor PG1 timers 3 20
+ neighbor 192.168.251.1 peer-group PG1
!
diff --git a/tests/topotests/bgp_peer_group/r2/zebra.conf b/tests/topotests/bgp_peer_group/r2/zebra.conf
index 606c17b..c2ad956 100644
--- a/tests/topotests/bgp_peer_group/r2/zebra.conf
+++ b/tests/topotests/bgp_peer_group/r2/zebra.conf
@@ -2,5 +2,8 @@
interface r2-eth0
ip address 192.168.255.2/24
!
+interface r2-eth1
+ ip address 192.168.251.2/30
+!
ip forwarding
!
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 a91fade..5cbcd19 100644
--- a/tests/topotests/bgp_peer_group/test_bgp_peer-group.py
+++ b/tests/topotests/bgp_peer_group/test_bgp_peer-group.py
@@ -22,7 +22,7 @@ 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
pytestmark = [pytest.mark.bgpd]
@@ -36,6 +36,10 @@ def build_topo(tgen):
switch.add_link(tgen.gears["r2"])
switch.add_link(tgen.gears["r3"])
+ switch = tgen.add_switch("s2")
+ switch.add_link(tgen.gears["r1"])
+ switch.add_link(tgen.gears["r2"])
+
def setup_module(mod):
tgen = Topogen(build_topo, mod.__name__)
@@ -70,6 +74,7 @@ def test_bgp_peer_group():
expected = {
"r1-eth0": {"peerGroup": "PG", "bgpState": "Established"},
"192.168.255.3": {"peerGroup": "PG", "bgpState": "Established"},
+ "192.168.251.2": {"peerGroup": "PG1", "bgpState": "Established"},
}
return topotest.json_cmp(output, expected)
@@ -96,6 +101,48 @@ def test_bgp_peer_group():
assert result is None, "Failed checking advertised routes from r3"
+def test_bgp_peer_group_remote_as_del_readd():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ logger.info("Remove bgp peer-group PG1 remote-as neighbor should be retained")
+ r1.cmd(
+ 'vtysh -c "config t" -c "router bgp 65001" '
+ + ' -c "no neighbor PG1 remote-as external" '
+ )
+
+ def _bgp_peer_group_remoteas_del():
+ output = json.loads(tgen.gears["r1"].vtysh_cmd("show bgp neighbor json"))
+ expected = {
+ "192.168.251.2": {"peerGroup": "PG1", "bgpState": "Active"},
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_peer_group_remoteas_del)
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert result is None, "Failed bgp convergence in r1"
+
+ logger.info("Re-add bgp peer-group PG1 remote-as neighbor should be established")
+ r1.cmd(
+ 'vtysh -c "config t" -c "router bgp 65001" '
+ + ' -c "neighbor PG1 remote-as external" '
+ )
+
+ def _bgp_peer_group_remoteas_add():
+ output = json.loads(tgen.gears["r1"].vtysh_cmd("show bgp neighbor json"))
+ expected = {
+ "192.168.251.2": {"peerGroup": "PG1", "bgpState": "Established"},
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_peer_group_remoteas_add)
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5)
+ assert result is None, "Failed bgp convergence in r1"
+
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
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 9239be9..340df71 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
@@ -103,7 +103,6 @@ def setup_module(mod):
# For all registered routers, load the zebra configuration file
for rname, router in tgen.routers().items():
- router.run("/bin/bash {}/setup_vrfs".format(CWD))
router.load_config(
TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
)
diff --git a/tests/topotests/bgp_prefix_list_any/test_bgp_prefix_list_any.py b/tests/topotests/bgp_prefix_list_any/test_bgp_prefix_list_any.py
index 0eb2447..5d6440c 100644
--- a/tests/topotests/bgp_prefix_list_any/test_bgp_prefix_list_any.py
+++ b/tests/topotests/bgp_prefix_list_any/test_bgp_prefix_list_any.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -25,8 +25,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/bgp_remove_private_as_route_map/test_bgp_remove_private_as_route_map.py b/tests/topotests/bgp_remove_private_as_route_map/test_bgp_remove_private_as_route_map.py
index 2ae6f7f..d9402f2 100644
--- a/tests/topotests/bgp_remove_private_as_route_map/test_bgp_remove_private_as_route_map.py
+++ b/tests/topotests/bgp_remove_private_as_route_map/test_bgp_remove_private_as_route_map.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -25,8 +25,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 3):
diff --git a/tests/topotests/bgp_rmap_extcommunity_none/test_bgp_rmap_extcommunity_none.py b/tests/topotests/bgp_rmap_extcommunity_none/test_bgp_rmap_extcommunity_none.py
index 5c7cc8e..ef7c94b 100644
--- a/tests/topotests/bgp_rmap_extcommunity_none/test_bgp_rmap_extcommunity_none.py
+++ b/tests/topotests/bgp_rmap_extcommunity_none/test_bgp_rmap_extcommunity_none.py
@@ -18,7 +18,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -27,8 +27,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 3):
diff --git a/tests/topotests/bgp_route_aggregation/test_bgp_aggregation.py b/tests/topotests/bgp_route_aggregation/test_bgp_aggregation.py
index 412ecc1..d50d67b 100644
--- a/tests/topotests/bgp_route_aggregation/test_bgp_aggregation.py
+++ b/tests/topotests/bgp_route_aggregation/test_bgp_aggregation.py
@@ -403,7 +403,6 @@ def test_route_summarisation_with_summary_only_p1(request):
)
for action, value in zip(["removed", "add"], [True, False]):
-
step(
"{} static routes as below: "
"(no) ip route 10.1.1.0/24 and (no) ip route 10.1.2.0/24"
@@ -815,7 +814,11 @@ def test_route_summarisation_with_as_set_p1(request):
)
for addr_type in ADDR_TYPES:
- for pfx, seq_id, network, in zip(
+ for (
+ pfx,
+ seq_id,
+ network,
+ ) in zip(
[1, 2, 3, 4, 5],
[10, 20, 30, 40, 50],
[NETWORK_1_1, NETWORK_1_2, NETWORK_1_3, NETWORK_1_4, NETWORK_1_5],
diff --git a/tests/topotests/bgp_route_map_delay_timer/test_bgp_route_map_delay_timer.py b/tests/topotests/bgp_route_map_delay_timer/test_bgp_route_map_delay_timer.py
index 15a077d..f7a66fd 100644
--- a/tests/topotests/bgp_route_map_delay_timer/test_bgp_route_map_delay_timer.py
+++ b/tests/topotests/bgp_route_map_delay_timer/test_bgp_route_map_delay_timer.py
@@ -15,7 +15,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -24,8 +24,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/bgp_route_map_match_ipv6_nexthop/test_bgp_route_map_match_ipv6_nexthop.py b/tests/topotests/bgp_route_map_match_ipv6_nexthop/test_bgp_route_map_match_ipv6_nexthop.py
index a06e3ed..93a514b 100644
--- a/tests/topotests/bgp_route_map_match_ipv6_nexthop/test_bgp_route_map_match_ipv6_nexthop.py
+++ b/tests/topotests/bgp_route_map_match_ipv6_nexthop/test_bgp_route_map_match_ipv6_nexthop.py
@@ -16,7 +16,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -25,8 +25,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 3):
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref.diff b/tests/topotests/bgp_route_map_match_tag_untagged/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref.diff
+++ b/tests/topotests/bgp_route_map_match_tag_untagged/__init__.py
diff --git a/tests/topotests/bgp_route_map_match_tag_untagged/r1/frr.conf b/tests/topotests/bgp_route_map_match_tag_untagged/r1/frr.conf
new file mode 100644
index 0000000..13eced2
--- /dev/null
+++ b/tests/topotests/bgp_route_map_match_tag_untagged/r1/frr.conf
@@ -0,0 +1,19 @@
+!
+interface r1-eth0
+ ip address 192.168.1.1/24
+!
+router bgp 65001
+ address-family ipv4
+ redistribute static route-map untagged
+ exit-address-family
+!
+ip route 10.10.10.10/32 Null0
+ip route 10.10.10.20/32 Null0 tag 20
+!
+route-map untagged permit 10
+ match tag untagged
+ set tag 10
+route-map untagged permit 20
+ match tag 20
+ set tag untagged
+exit
diff --git a/tests/topotests/bgp_route_map_match_tag_untagged/test_bgp_route_map_match_tag_untagged.py b/tests/topotests/bgp_route_map_match_tag_untagged/test_bgp_route_map_match_tag_untagged.py
new file mode 100644
index 0000000..7dd63fd
--- /dev/null
+++ b/tests/topotests/bgp_route_map_match_tag_untagged/test_bgp_route_map_match_tag_untagged.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Copyright (c) 2024 by
+# Donatas Abraitis <donatas@opensourcerouting.org>
+#
+
+import os
+import sys
+import json
+import pytest
+import functools
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+
+pytestmark = [pytest.mark.bgpd]
+
+
+def build_topo(tgen):
+ for routern in range(1, 2):
+ tgen.add_router("r{}".format(routern))
+
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["r1"])
+
+
+def setup_module(mod):
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_route_map_match_tag_untagged():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ def _bgp_check_advertised_routes_r2():
+ output = json.loads(
+ tgen.gears["r1"].vtysh_cmd("show bgp ipv4 unicast detail json")
+ )
+ expected = {
+ "routes": {
+ "10.10.10.10/32": [
+ {
+ "tag": 10,
+ }
+ ],
+ "10.10.10.20/32": [
+ {
+ "tag": None,
+ }
+ ],
+ }
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_check_advertised_routes_r2)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Tags for static routes are not as expected"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_route_server_client/test_bgp_route_server_client.py b/tests/topotests/bgp_route_server_client/test_bgp_route_server_client.py
index 23cf041..18b7831 100644
--- a/tests/topotests/bgp_route_server_client/test_bgp_route_server_client.py
+++ b/tests/topotests/bgp_route_server_client/test_bgp_route_server_client.py
@@ -15,7 +15,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -24,8 +24,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 4):
diff --git a/tests/topotests/bgp_rpki_topo1/r2/bgpd.conf b/tests/topotests/bgp_rpki_topo1/r2/bgpd.conf
index 87d7214..4de177d 100644
--- a/tests/topotests/bgp_rpki_topo1/r2/bgpd.conf
+++ b/tests/topotests/bgp_rpki_topo1/r2/bgpd.conf
@@ -21,5 +21,5 @@ router bgp 65002 vrf vrf10
!
rpki
rpki retry_interval 5
- rpki cache 192.0.2.1 15432 preference 1
+ rpki cache tcp 192.0.2.1 15432 preference 1
exit
diff --git a/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py b/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
index a12204f..f52b28a 100644
--- a/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
+++ b/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
@@ -189,7 +189,7 @@ def test_show_bgp_rpki_prefixes_no_rpki_cache():
"""
configure
rpki
- no rpki cache 192.0.2.1 15432 preference 1
+ no rpki cache tcp 192.0.2.1 15432 preference 1
exit
"""
)
@@ -219,7 +219,7 @@ def test_show_bgp_rpki_prefixes_reconnect():
"""
configure
rpki
- rpki cache 192.0.2.1 15432 preference 1
+ rpki cache tcp 192.0.2.1 15432 preference 1
exit
"""
)
@@ -319,7 +319,7 @@ def test_show_bgp_rpki_prefixes_vrf():
configure
vrf vrf10
rpki
- rpki cache 192.0.2.3 15432 preference 1
+ rpki cache tcp 192.0.2.3 15432 preference 1
exit
exit
"""
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 3886bc1..db6dbc6 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
@@ -129,6 +129,83 @@ def test_bgp_sender_as_path_loop_detection():
assert result is None, "Routes should not be sent to r1 from r2"
+def test_remove_loop_detection_on_one_peer():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r2 = tgen.gears["r2"]
+
+ def _bgp_reset_route_to_r1():
+ output = json.loads(
+ r2.vtysh_cmd("show ip bgp neighbor 192.168.255.2 advertised-routes json")
+ )
+ expected = {"totalPrefixCounter": 3}
+ return topotest.json_cmp(output, expected)
+
+ r2.vtysh_cmd(
+ """
+ configure terminal
+ router bgp 65002
+ no neighbor 192.168.255.2 sender-as-path-loop-detection
+ """
+ )
+
+ r2.vtysh_cmd(
+ """
+ clear bgp *
+ """
+ )
+ test_func = functools.partial(_bgp_reset_route_to_r1)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
+ assert result is None, "Failed bgp to reset route"
+
+
+def test_loop_detection_on_peer_group():
+ tgen = get_topogen()
+
+ r2 = tgen.gears["r2"]
+
+ def _bgp_suppress_route_to_r1():
+ output = json.loads(
+ r2.vtysh_cmd("show ip bgp neighbor 192.168.255.2 advertised-routes json")
+ )
+ expected = {"totalPrefixCounter": 0}
+ return topotest.json_cmp(output, expected)
+
+ def _bgp_suppress_route_to_r3():
+ output = json.loads(
+ r2.vtysh_cmd("show ip bgp neighbor 192.168.254.2 advertised-routes json")
+ )
+ expected = {"totalPrefixCounter": 2}
+ return topotest.json_cmp(output, expected)
+
+ r2.vtysh_cmd(
+ """
+ configure terminal
+ router bgp 65002
+ neighbor loop_group peer-group
+ neighbor 192.168.255.2 peer-group loop_group
+ neighbor loop_group sender-as-path-loop-detection
+ """
+ )
+
+ r2.vtysh_cmd(
+ """
+ clear bgp *
+ """
+ )
+
+ test_func = functools.partial(_bgp_suppress_route_to_r3)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
+ assert result is None, "Route 172.16.255.253/32 should not be sent to r3 from r2"
+
+ test_func = functools.partial(_bgp_suppress_route_to_r1)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
+ assert result is None, "Routes should not be sent to r1 from r2"
+
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_set_aspath_exclude/r1/bgpd.conf b/tests/topotests/bgp_set_aspath_exclude/r1/bgpd.conf
index 9bef24f..c70b493 100644
--- a/tests/topotests/bgp_set_aspath_exclude/r1/bgpd.conf
+++ b/tests/topotests/bgp_set_aspath_exclude/r1/bgpd.conf
@@ -8,10 +8,19 @@ router bgp 65001
exit-address-family
!
ip prefix-list p1 seq 5 permit 172.16.255.31/32
+ip prefix-list p2 seq 5 permit 172.16.255.32/32
+ip prefix-list p3 seq 5 permit 172.16.255.30/32
!
+bgp as-path access-list FIRST permit ^65
+bgp as-path access-list SECOND permit 2$
+
+route-map r2 permit 6
+ match ip address prefix-list p2
+ set as-path exclude as-path-access-list SECOND
route-map r2 permit 10
match ip address prefix-list p1
set as-path exclude 65003
route-map r2 permit 20
+ match ip address prefix-list p3
set as-path exclude all
!
diff --git a/tests/topotests/bgp_set_aspath_exclude/r3/zebra.conf b/tests/topotests/bgp_set_aspath_exclude/r3/zebra.conf
index 3fa6c64..5689315 100644
--- a/tests/topotests/bgp_set_aspath_exclude/r3/zebra.conf
+++ b/tests/topotests/bgp_set_aspath_exclude/r3/zebra.conf
@@ -1,5 +1,6 @@
!
int lo
+ ip address 172.16.255.30/32
ip address 172.16.255.31/32
ip address 172.16.255.32/32
!
diff --git a/tests/topotests/bgp_set_aspath_exclude/test_bgp_set_aspath_exclude.py b/tests/topotests/bgp_set_aspath_exclude/test_bgp_set_aspath_exclude.py
index d373a74..85e7b96 100644
--- a/tests/topotests/bgp_set_aspath_exclude/test_bgp_set_aspath_exclude.py
+++ b/tests/topotests/bgp_set_aspath_exclude/test_bgp_set_aspath_exclude.py
@@ -64,29 +64,33 @@ def teardown_module(mod):
expected_1 = {
"routes": {
+ "172.16.255.30/32": [{"path": ""}],
"172.16.255.31/32": [{"path": "65002"}],
- "172.16.255.32/32": [{"path": ""}],
+ "172.16.255.32/32": [{"path": "65003"}],
}
}
expected_2 = {
"routes": {
- "172.16.255.31/32": [{"path": ""}],
+ "172.16.255.30/32": [{"path": ""}],
+ "172.16.255.31/32": [{"path": "65002"}],
"172.16.255.32/32": [{"path": ""}],
}
}
expected_3 = {
"routes": {
- "172.16.255.31/32": [{"path": "65003"}],
- "172.16.255.32/32": [{"path": "65003"}],
+ "172.16.255.30/32": [{"path": ""}],
+ "172.16.255.31/32": [{"path": "65002"}],
+ "172.16.255.32/32": [{"path": "65002 65003"}],
}
}
expected_4 = {
"routes": {
- "172.16.255.31/32": [{"path": "65002 65003"}],
- "172.16.255.32/32": [{"path": "65002 65003"}],
+ "172.16.255.30/32": [{"path": ""}],
+ "172.16.255.31/32": [{"path": "65002"}],
+ "172.16.255.32/32": [{"path": "65002"}],
}
}
@@ -117,34 +121,42 @@ def test_bgp_set_aspath_exclude_access_list():
rname = "r1"
r1 = tgen.gears[rname]
+ # tgen.mininet_cli()
r1.vtysh_cmd(
"""
conf
bgp as-path access-list FIRST permit ^65
route-map r2 permit 6
+ no set as-path exclude as-path-access-list SECOND
set as-path exclude as-path-access-list FIRST
"""
)
+ # tgen.mininet_cli()
+ r1.vtysh_cmd(
+ """
+clear bgp *
+ """
+ )
test_func = functools.partial(bgp_converge, tgen.gears["r1"], expected_2)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
- assert result is None, "Failed overriding incoming AS-PATH with regex 1 route-map"
+ assert result is None, "Failed change of exclude rule in route map"
r1.vtysh_cmd(
"""
conf
- bgp as-path access-list SECOND permit 2
route-map r2 permit 6
+ no set as-path exclude as-path-access-list FIRST
set as-path exclude as-path-access-list SECOND
"""
)
# tgen.mininet_cli()
- test_func = functools.partial(bgp_converge, tgen.gears["r1"], expected_3)
+ test_func = functools.partial(bgp_converge, tgen.gears["r1"], expected_1)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
- assert result is None, "Failed overriding incoming AS-PATH with regex 2 route-map"
+ assert result is None, "Failed reverting exclude rule in route map"
def test_no_bgp_set_aspath_exclude_access_list():
@@ -159,15 +171,28 @@ def test_no_bgp_set_aspath_exclude_access_list():
r1.vtysh_cmd(
"""
conf
- no bgp as-path access-list SECOND permit 2
+ no bgp as-path access-list SECOND permit 2$
+ """
+ )
+
+ r1.vtysh_cmd(
+ """
+clear bgp *
"""
)
test_func = functools.partial(bgp_converge, tgen.gears["r1"], expected_3)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
- assert result is None, "Failed removing bgp as-path access-list"
+ assert result is None, "Failed to removing current accesslist"
+ # tgen.mininet_cli()
+ r1.vtysh_cmd(
+ """
+conf
+ bgp as-path access-list SECOND permit 3$
+ """
+ )
r1.vtysh_cmd(
"""
clear bgp *
@@ -177,7 +202,26 @@ clear bgp *
test_func = functools.partial(bgp_converge, tgen.gears["r1"], expected_4)
_, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
- assert result is None, "Failed to renegotiate with peers"
+ assert result is None, "Failed to renegotiate with peers 2"
+
+ r1.vtysh_cmd(
+ """
+conf
+ route-map r2 permit 6
+ no set as-path exclude as-path-access-list SECOND
+ """
+ )
+
+ r1.vtysh_cmd(
+ """
+clear bgp *
+ """
+ )
+
+ test_func = functools.partial(bgp_converge, tgen.gears["r1"], expected_3)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5)
+
+ assert result is None, "Failed to renegotiate with peers 2"
if __name__ == "__main__":
diff --git a/tests/topotests/bgp_software_version/test_bgp_software_version.py b/tests/topotests/bgp_software_version/test_bgp_software_version.py
index 25e646c..c867208 100644
--- a/tests/topotests/bgp_software_version/test_bgp_software_version.py
+++ b/tests/topotests/bgp_software_version/test_bgp_software_version.py
@@ -17,7 +17,7 @@ import json
import pytest
import functools
-pytestmark = pytest.mark.bgpd
+pytestmark = [pytest.mark.bgpd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -26,8 +26,6 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
-pytestmark = [pytest.mark.bgpd]
-
def setup_module(mod):
topodef = {"s1": ("r1", "r2")}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref.diff b/tests/topotests/bgp_srv6_sid_reachability/c11/bgpd.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/bgp_srv6_sid_reachability/c11/bgpd.conf
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c11/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/c11/staticd.conf
new file mode 100644
index 0000000..bcf5a04
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c11/staticd.conf
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.1.254
+ipv6 route ::/0 2001:1::ffff
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c11/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/c11/zebra.conf
new file mode 100644
index 0000000..0615cf9
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c11/zebra.conf
@@ -0,0 +1,6 @@
+hostname c11
+!
+interface eth0
+ ip address 192.168.1.1/24
+ ipv6 address 2001:1::1/64
+!
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref.diff b/tests/topotests/bgp_srv6_sid_reachability/c12/bgpd.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/bgp_srv6_sid_reachability/c12/bgpd.conf
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c12/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/c12/staticd.conf
new file mode 100644
index 0000000..bcf5a04
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c12/staticd.conf
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.1.254
+ipv6 route ::/0 2001:1::ffff
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c12/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/c12/zebra.conf
new file mode 100644
index 0000000..18985aa
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c12/zebra.conf
@@ -0,0 +1,6 @@
+hostname c12
+!
+interface eth0
+ ip address 192.168.1.1/24
+ ipv6 address 2001:1::1/64
+!
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref.diff b/tests/topotests/bgp_srv6_sid_reachability/c21/bgpd.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref.diff
+++ b/tests/topotests/bgp_srv6_sid_reachability/c21/bgpd.conf
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c21/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/c21/staticd.conf
new file mode 100644
index 0000000..608e600
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c21/staticd.conf
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.2.254
+ipv6 route ::/0 2001:2::ffff
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c21/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/c21/zebra.conf
new file mode 100644
index 0000000..b8b70ac
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c21/zebra.conf
@@ -0,0 +1,6 @@
+hostname c21
+!
+interface eth0
+ ip address 192.168.2.1/24
+ ipv6 address 2001:2::1/64
+!
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref.diff b/tests/topotests/bgp_srv6_sid_reachability/c22/bgpd.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/bgp_srv6_sid_reachability/c22/bgpd.conf
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c22/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/c22/staticd.conf
new file mode 100644
index 0000000..277aae9
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c22/staticd.conf
@@ -0,0 +1,5 @@
+
+!
+ip route 0.0.0.0/0 192.168.2.254
+ipv6 route ::/0 2001:2::ffff
+! \ No newline at end of file
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c22/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/c22/zebra.conf
new file mode 100644
index 0000000..cc764cc
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c22/zebra.conf
@@ -0,0 +1,9 @@
+hostname c22
+!
+interface eth0
+ ip address 192.168.2.1/24
+ ipv6 address 2001:2::1/64
+!
+ip route 0.0.0.0/0 192.168.2.254
+ipv6 route ::/0 2001:2::ffff
+!
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref.diff b/tests/topotests/bgp_srv6_sid_reachability/c31/bgpd.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/bgp_srv6_sid_reachability/c31/bgpd.conf
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c31/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/c31/staticd.conf
new file mode 100644
index 0000000..0c88575
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c31/staticd.conf
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.3.254
+ipv6 route ::/0 2001:3::ffff
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c31/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/c31/zebra.conf
new file mode 100644
index 0000000..3f75641
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c31/zebra.conf
@@ -0,0 +1,6 @@
+hostname c31
+!
+interface eth0
+ ip address 192.168.3.1/24
+ ipv6 address 2001:3::1/64
+!
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref.diff b/tests/topotests/bgp_srv6_sid_reachability/c32/bgpd.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref.diff
+++ b/tests/topotests/bgp_srv6_sid_reachability/c32/bgpd.conf
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c32/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/c32/staticd.conf
new file mode 100644
index 0000000..0c88575
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c32/staticd.conf
@@ -0,0 +1,4 @@
+!
+ip route 0.0.0.0/0 192.168.3.254
+ipv6 route ::/0 2001:3::ffff
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/c32/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/c32/zebra.conf
new file mode 100644
index 0000000..c06a7d1
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/c32/zebra.conf
@@ -0,0 +1,6 @@
+hostname c32
+!
+interface eth0
+ ip address 192.168.3.1/24
+ ipv6 address 2001:3::1/64
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r1/bgpd.conf b/tests/topotests/bgp_srv6_sid_reachability/r1/bgpd.conf
new file mode 100644
index 0000000..573dbe0
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r1/bgpd.conf
@@ -0,0 +1,61 @@
+frr defaults traditional
+!
+hostname r1
+password zebra
+!
+log commands
+!
+router bgp 65001
+ bgp router-id 192.0.2.1
+ no bgp ebgp-requires-policy
+ no bgp default ipv4-unicast
+ neighbor 2001:db8:12::2 remote-as 65002
+ neighbor 2001:db8:12::2 timers 3 10
+ neighbor 2001:db8:12::2 timers connect 1
+ neighbor 2001:db8:12::2 capability extended-nexthop
+ neighbor 2001:db8:13::3 remote-as 65001
+ neighbor 2001:db8:13::3 timers 3 10
+ neighbor 2001:db8:13::3 timers connect 1
+ neighbor 2001:db8:13::3 capability extended-nexthop
+ !
+ segment-routing srv6
+ locator default
+ !
+ address-family ipv4 vpn
+ neighbor 2001:db8:12::2 activate
+ neighbor 2001:db8:13::3 activate
+ exit-address-family
+ !
+!
+router bgp 65001 vrf vrf10
+ bgp router-id 192.0.2.1
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ sid vpn export 1
+ rd vpn export 65001:10
+ rt vpn both 0:10
+ import vpn
+ export vpn
+ exit-address-family
+ !
+!
+router bgp 65001 vrf vrf20
+ bgp router-id 192.0.2.1
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ sid vpn export 2
+ rd vpn export 65001:20
+ rt vpn both 0:20
+ import vpn
+ export vpn
+ exit-address-family
+ !
+!
+interface eth0
+ mpls bgp forwarding
+!
+interface eth1
+ mpls bgp forwarding
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r1/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/r1/staticd.conf
new file mode 100644
index 0000000..49b64fd
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r1/staticd.conf
@@ -0,0 +1,4 @@
+!
+ipv6 route 2001:db8:2:2::/64 2001:db8:12::2
+ipv6 route 2001:db8:3:3::/64 2001:db8:13::3
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r1/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/r1/zebra.conf
new file mode 100644
index 0000000..79dbf95
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r1/zebra.conf
@@ -0,0 +1,32 @@
+log file zebra.log
+!
+hostname r1
+!
+interface lo
+ ipv6 address 2001:db8:1:1::1/128
+!
+interface eth0
+ ipv6 address 2001:db8:12::1/64
+!
+interface eth1
+ ipv6 address 2001:db8:13::1/64
+!
+interface eth2 vrf vrf10
+ ip address 192.168.1.254/24
+!
+interface eth3 vrf vrf20
+ ip address 192.168.1.254/24
+!
+segment-routing
+ srv6
+ locators
+ locator default
+ prefix 2001:db8:1:1::/64
+ !
+ !
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r2/bgpd.conf b/tests/topotests/bgp_srv6_sid_reachability/r2/bgpd.conf
new file mode 100644
index 0000000..723d6fc
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r2/bgpd.conf
@@ -0,0 +1,50 @@
+frr defaults traditional
+!
+hostname r2
+password zebra
+!
+log commands
+!
+router bgp 65002
+ bgp router-id 192.0.2.2
+ no bgp ebgp-requires-policy
+ no bgp default ipv4-unicast
+ neighbor 2001:db8:12::1 remote-as 65001
+ neighbor 2001:db8:12::1 timers 3 10
+ neighbor 2001:db8:12::1 timers connect 1
+ neighbor 2001:db8:12::1 capability extended-nexthop
+ !
+ segment-routing srv6
+ locator default
+ !
+ address-family ipv4 vpn
+ neighbor 2001:db8:12::1 activate
+ exit-address-family
+ !
+!
+router bgp 65002 vrf vrf10
+ bgp router-id 192.0.2.2
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ sid vpn export 1
+ rd vpn export 65002:10
+ rt vpn both 0:10
+ import vpn
+ export vpn
+ exit-address-family
+ !
+!
+router bgp 65002 vrf vrf20
+ bgp router-id 192.0.2.2
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ sid vpn export 2
+ rd vpn export 65002:20
+ rt vpn both 0:20
+ import vpn
+ export vpn
+ exit-address-family
+ !
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r2/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/r2/staticd.conf
new file mode 100644
index 0000000..8d80c1e
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r2/staticd.conf
@@ -0,0 +1,4 @@
+!
+ipv6 route 2001:db8:1:1::/64 2001:db8:12::1
+ipv6 route 2001:db8:3:3::/64 2001:db8:12::1
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r2/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/r2/zebra.conf
new file mode 100644
index 0000000..09a65b9
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r2/zebra.conf
@@ -0,0 +1,29 @@
+log file zebra.log
+!
+hostname r2
+!
+interface lo
+ ipv6 address 2001:db8:2:2::1/128
+!
+interface eth0
+ ipv6 address 2001:db8:12::2/64
+!
+interface eth1 vrf vrf10
+ ip address 192.168.2.254/24
+!
+interface eth2 vrf vrf20
+ ip address 192.168.2.254/24
+!
+segment-routing
+ srv6
+ locators
+ locator default
+ prefix 2001:db8:2:2::/64
+ !
+ !
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r3/bgpd.conf b/tests/topotests/bgp_srv6_sid_reachability/r3/bgpd.conf
new file mode 100644
index 0000000..c412cb6
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r3/bgpd.conf
@@ -0,0 +1,50 @@
+frr defaults traditional
+!
+hostname r2
+password zebra
+!
+log commands
+!
+router bgp 65001
+ bgp router-id 192.0.2.3
+ no bgp ebgp-requires-policy
+ no bgp default ipv4-unicast
+ neighbor 2001:db8:13::1 remote-as 65001
+ neighbor 2001:db8:13::1 timers 3 10
+ neighbor 2001:db8:13::1 timers connect 1
+ neighbor 2001:db8:13::1 capability extended-nexthop
+ !
+ segment-routing srv6
+ locator default
+ !
+ address-family ipv4 vpn
+ neighbor 2001:db8:13::1 activate
+ exit-address-family
+ !
+!
+router bgp 65001 vrf vrf10
+ bgp router-id 192.0.2.3
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ sid vpn export 1
+ rd vpn export 65001:10
+ rt vpn both 0:10
+ import vpn
+ export vpn
+ exit-address-family
+ !
+!
+router bgp 65001 vrf vrf20
+ bgp router-id 192.0.2.2
+ !
+ address-family ipv4 unicast
+ redistribute connected
+ sid vpn export 2
+ rd vpn export 65001:20
+ rt vpn both 0:20
+ import vpn
+ export vpn
+ exit-address-family
+ !
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r3/staticd.conf b/tests/topotests/bgp_srv6_sid_reachability/r3/staticd.conf
new file mode 100644
index 0000000..9d672d5
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r3/staticd.conf
@@ -0,0 +1,6 @@
+!
+ipv6 route 2001:db8:12::/64 2001:db8:13::1
+!
+ipv6 route 2001:db8:1:1::/64 2001:db8:13::1
+ipv6 route 2001:db8:2:2::/64 2001:db8:13::1
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/r3/zebra.conf b/tests/topotests/bgp_srv6_sid_reachability/r3/zebra.conf
new file mode 100644
index 0000000..a20cb76
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/r3/zebra.conf
@@ -0,0 +1,29 @@
+log file zebra.log
+!
+hostname r2
+!
+interface lo
+ ipv6 address 2001:db8:3:3::1/128
+!
+interface eth0
+ ipv6 address 2001:db8:13::3/64
+!
+interface eth1 vrf vrf10
+ ip address 192.168.3.254/24
+!
+interface eth2 vrf vrf20
+ ip address 192.168.3.254/24
+!
+segment-routing
+ srv6
+ locators
+ locator default
+ prefix 2001:db8:3:3::/64
+ !
+ !
+!
+ip forwarding
+ipv6 forwarding
+!
+line vty
+!
diff --git a/tests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py b/tests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py
new file mode 100755
index 0000000..92315bc
--- /dev/null
+++ b/tests/topotests/bgp_srv6_sid_reachability/test_bgp_srv6_sid_reachability.py
@@ -0,0 +1,169 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Part of NetDEF Topology Tests
+#
+# Copyright (c) 2023 by 6WIND
+#
+
+import os
+import re
+import sys
+import json
+import functools
+import pytest
+
+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.common_config import required_linux_kernel_version
+from lib.checkping import check_ping
+
+pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
+
+
+def build_topo(tgen):
+ tgen.add_router("r1")
+ tgen.add_router("r2")
+ tgen.add_router("r3")
+
+ tgen.add_router("c11")
+ tgen.add_router("c12")
+ tgen.add_router("c21")
+ tgen.add_router("c22")
+ tgen.add_router("c31")
+ tgen.add_router("c32")
+
+ tgen.add_link(tgen.gears["r1"], tgen.gears["r2"], "eth0", "eth0")
+ tgen.add_link(tgen.gears["r1"], tgen.gears["r3"], "eth1", "eth0")
+ tgen.add_link(tgen.gears["r1"], tgen.gears["c11"], "eth2", "eth0")
+ tgen.add_link(tgen.gears["r1"], tgen.gears["c12"], "eth3", "eth0")
+ tgen.add_link(tgen.gears["r2"], tgen.gears["c21"], "eth1", "eth0")
+ tgen.add_link(tgen.gears["r2"], tgen.gears["c22"], "eth2", "eth0")
+ tgen.add_link(tgen.gears["r3"], tgen.gears["c31"], "eth1", "eth0")
+ tgen.add_link(tgen.gears["r3"], tgen.gears["c32"], "eth2", "eth0")
+
+
+def setup_module(mod):
+ result = required_linux_kernel_version("5.15")
+ if result is not True:
+ pytest.skip("Kernel requirements are not met")
+
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ 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_STATIC, os.path.join(CWD, "{}/staticd.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
+ )
+
+ tgen.gears["r1"].run("sysctl net.vrf.strict_mode=1")
+ tgen.gears["r1"].run("ip link add vrf10 type vrf table 10")
+ tgen.gears["r1"].run("ip link set vrf10 up")
+ tgen.gears["r1"].run("ip link add vrf20 type vrf table 20")
+ tgen.gears["r1"].run("ip link set vrf20 up")
+ tgen.gears["r1"].run("ip link set eth2 master vrf10")
+ tgen.gears["r1"].run("ip link set eth3 master vrf20")
+
+ tgen.gears["r2"].run("sysctl net.vrf.strict_mode=1")
+ tgen.gears["r2"].run("ip link add vrf10 type vrf table 10")
+ tgen.gears["r2"].run("ip link set vrf10 up")
+ tgen.gears["r2"].run("ip link add vrf20 type vrf table 20")
+ tgen.gears["r2"].run("ip link set vrf20 up")
+ tgen.gears["r2"].run("ip link set eth1 master vrf10")
+ tgen.gears["r2"].run("ip link set eth2 master vrf20")
+
+ tgen.gears["r3"].run("sysctl net.vrf.strict_mode=1")
+ tgen.gears["r3"].run("ip link add vrf10 type vrf table 10")
+ tgen.gears["r3"].run("ip link set vrf10 up")
+ tgen.gears["r3"].run("ip link add vrf20 type vrf table 20")
+ tgen.gears["r3"].run("ip link set vrf20 up")
+ tgen.gears["r3"].run("ip link set eth1 master vrf10")
+ tgen.gears["r3"].run("ip link set eth2 master vrf20")
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_ping():
+ tgen = get_topogen()
+
+ check_ping("c11", "192.168.2.1", True, 10, 1)
+ check_ping("c11", "192.168.3.1", True, 10, 1)
+ check_ping("c12", "192.168.2.1", True, 10, 1)
+ check_ping("c12", "192.168.3.1", True, 10, 1)
+ check_ping("c21", "192.168.3.1", True, 10, 1)
+ check_ping("c22", "192.168.3.1", True, 10, 1)
+
+
+def test_sid_unreachable_nht():
+ get_topogen().gears["r1"].vtysh_cmd(
+ """
+ configure terminal
+ no ipv6 route 2001:db8:2:2::/64 2001:db8:12::2
+ """
+ )
+ check_ping("c11", "192.168.2.1", False, 10, 1)
+
+
+def test_sid_reachable_again_nht():
+ get_topogen().gears["r1"].vtysh_cmd(
+ """
+ configure terminal
+ ipv6 route 2001:db8:2:2::/64 2001:db8:12::2
+ """
+ )
+ check_ping("c11", "192.168.2.1", True, 10, 1)
+
+
+def test_sid_unreachable_bgp_update():
+ get_topogen().gears["r2"].vtysh_cmd(
+ """
+ configure terminal
+ router bgp 65002
+ no segment-routing srv6
+ exit
+ router bgp 65002 vrf vrf10
+ address-family ipv4 unicast
+ no sid vpn export 1
+ """
+ )
+ check_ping("c11", "192.168.2.1", False, 10, 1)
+
+
+def test_sid_reachable_again_bgp_update():
+ get_topogen().gears["r2"].vtysh_cmd(
+ """
+ configure terminal
+ router bgp 65002
+ segment-routing srv6
+ locator default
+ exit
+ exit
+ router bgp 65002 vrf vrf10
+ address-family ipv4 unicast
+ sid vpn export 1
+ """
+ )
+ check_ping("c11", "192.168.2.1", True, 10, 1)
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py b/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py
index 900d0c2..f0c9144 100755
--- a/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py
+++ b/tests/topotests/bgp_srv6l3vpn_route_leak/test_bgp_srv6l3vpn_route_leak.py
@@ -37,10 +37,12 @@ def setup_module(mod):
tgen.start_topology()
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_BGP,
- os.path.join(CWD, '{}/bgpd.conf'.format(rname)))
+ 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.gears["pe1"].run("ip link add vrf10 type vrf table 10")
tgen.gears["pe1"].run("ip link set vrf10 up")
@@ -62,7 +64,7 @@ def open_json_file(path):
return json.load(f)
except IOError:
assert False, "Could not read file {}".format(path)
-
+
def check(name, command, checker):
tgen = get_topogen()
@@ -80,25 +82,25 @@ def check(name, command, checker):
def check_vrf10_bgp_rib(output):
- expected = open_json_file("%s/pe1/results/vrf10_ipv4_unicast.json" % CWD)
+ expected = open_json_file("%s/pe1/results/vrf10_ipv4_unicast.json" % CWD)
actual = json.loads(output)
return topotest.json_cmp(actual, expected)
def check_default_bgp_vpn_rib(output):
- expected = open_json_file("%s/pe1/results/default_ipv4_vpn.json" % CWD)
+ expected = open_json_file("%s/pe1/results/default_ipv4_vpn.json" % CWD)
actual = json.loads(output)
return topotest.json_cmp(actual, expected)
def check_vrf20_bgp_rib(output):
- expected = open_json_file("%s/pe1/results/vrf20_ipv4_unicast.json" % CWD)
+ expected = open_json_file("%s/pe1/results/vrf20_ipv4_unicast.json" % CWD)
actual = json.loads(output)
return topotest.json_cmp(actual, expected)
def check_vrf20_rib(output):
- expected = open_json_file("%s/pe1/results/vrf20_ipv4.json" % CWD)
+ expected = open_json_file("%s/pe1/results/vrf20_ipv4.json" % CWD)
actual = json.loads(output)
return topotest.json_cmp(actual, expected)
diff --git a/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py b/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
index fd8a78b..ec14ef0 100644
--- a/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
+++ b/tests/topotests/bgp_suppress_fib/test_bgp_suppress_fib.py
@@ -217,6 +217,7 @@ def test_bgp_allow_as_in():
assertmsg = '"r2" 192.168.1.1/32 route should be gone'
assert result is None, assertmsg
+
def test_local_vs_non_local():
tgen = get_topogen()
@@ -229,7 +230,7 @@ def test_local_vs_non_local():
paths = output["paths"]
for i in range(len(paths)):
if "fibPending" in paths[i]:
- assert(False), "Route 60.0.0.0/24 should not have fibPending"
+ assert False, "Route 60.0.0.0/24 should not have fibPending"
if __name__ == "__main__":
diff --git a/tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py b/tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
index e7948ea..4855d5c 100644
--- a/tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
+++ b/tests/topotests/bgp_tcp_mss/test_bgp_tcp_mss.py
@@ -36,8 +36,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-pytestmark = [pytest.mark.bgpd]
-
def build_topo(tgen):
for routern in range(1, 3):
diff --git a/tests/topotests/bgp_tcp_mss/test_bgp_vrf_tcp_mss.py b/tests/topotests/bgp_tcp_mss/test_bgp_vrf_tcp_mss.py
index 6fe044f..aeb9bf5 100644
--- a/tests/topotests/bgp_tcp_mss/test_bgp_vrf_tcp_mss.py
+++ b/tests/topotests/bgp_tcp_mss/test_bgp_vrf_tcp_mss.py
@@ -46,7 +46,7 @@ from lib.bgp import (
verify_bgp_rib,
verify_bgp_timers_and_functionality,
verify_router_id,
- verify_tcp_mss
+ verify_tcp_mss,
)
from lib.common_config import (
kill_router_daemons,
@@ -54,6 +54,7 @@ from lib.common_config import (
addKernelRoute,
apply_raw_config,
check_address_types,
+ check_router_status,
create_prefix_lists,
create_route_maps,
create_static_routes,
@@ -66,10 +67,9 @@ from lib.common_config import (
verify_fib_routes,
verify_rib,
write_test_footer,
- write_test_header
+ write_test_header,
)
-pytestmark = [pytest.mark.bgpd]
# Global variables
NETWORK1_1 = {"ipv4": "1.1.1.1/32", "ipv6": "1::1/128"}
NETWORK1_2 = {"ipv4": "1.1.1.2/32", "ipv6": "1::2/128"}
@@ -85,7 +85,8 @@ NETWORK5_2 = {"ipv4": "5.1.1.2/32", "ipv6": "5::2/128"}
NEXT_HOP_IP = {"ipv4": "Null0", "ipv6": "Null0"}
## File name
-TCPDUMP_FILE="test_tcp_packet_test.txt"
+TCPDUMP_FILE = "test_tcp_packet_test.txt"
+
def setup_module(mod):
"""
@@ -93,7 +94,7 @@ def setup_module(mod):
* `mod`: module name
"""
- global topo,TCPDUMP_FILE
+ global topo, TCPDUMP_FILE
# Required linux kernel version for this suite to run.
result = required_linux_kernel_version("4.15")
@@ -128,6 +129,7 @@ def setup_module(mod):
step("Running setup_module() done")
+
def teardown_module():
"""Teardown the pytest environment"""
@@ -138,9 +140,7 @@ def teardown_module():
# Stop toplogy and Remove tmp files
tgen.stop_topology()
- step(
- "Testsuite end time: {}".format(time.asctime(time.localtime(time.time())))
- )
+ step("Testsuite end time: {}".format(time.asctime(time.localtime(time.time()))))
step("=" * 40)
@@ -150,6 +150,7 @@ def teardown_module():
#
#####################################################
+
def test_bgp_vrf_tcp_mss(request):
tgen = get_topogen()
tc_name = request.node.name
@@ -280,34 +281,34 @@ def test_bgp_vrf_tcp_mss(request):
step("Verify the static Routes in R2 on RED VRF")
for addr_type in ADDR_TYPES:
static_routes_input = {
- "r3": {
- "static_routes": [
- {
- "network": [NETWORK1_1[addr_type]] + [NETWORK1_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK2_1[addr_type]] + [NETWORK2_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK3_1[addr_type]] + [NETWORK3_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK4_1[addr_type]] + [NETWORK4_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK5_1[addr_type]] + [NETWORK5_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- ]
+ "r3": {
+ "static_routes": [
+ {
+ "network": [NETWORK1_1[addr_type]] + [NETWORK1_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK2_1[addr_type]] + [NETWORK2_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK3_1[addr_type]] + [NETWORK3_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK4_1[addr_type]] + [NETWORK4_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK5_1[addr_type]] + [NETWORK5_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ ]
}
}
dut = "r2"
@@ -317,34 +318,34 @@ def test_bgp_vrf_tcp_mss(request):
step("Verify the static Routes in R1 on RED VRF")
for addr_type in ADDR_TYPES:
static_routes_input = {
- "r3": {
- "static_routes": [
- {
- "network": [NETWORK1_1[addr_type]] + [NETWORK1_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK2_1[addr_type]] + [NETWORK2_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK3_1[addr_type]] + [NETWORK3_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK4_1[addr_type]] + [NETWORK4_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- {
- "network": [NETWORK5_1[addr_type]] + [NETWORK5_2[addr_type]],
- "next_hop": NEXT_HOP_IP[addr_type],
- "vrf": "RED",
- },
- ]
+ "r3": {
+ "static_routes": [
+ {
+ "network": [NETWORK1_1[addr_type]] + [NETWORK1_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK2_1[addr_type]] + [NETWORK2_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK3_1[addr_type]] + [NETWORK3_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK4_1[addr_type]] + [NETWORK4_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ {
+ "network": [NETWORK5_1[addr_type]] + [NETWORK5_2[addr_type]],
+ "next_hop": NEXT_HOP_IP[addr_type],
+ "vrf": "RED",
+ },
+ ]
}
}
dut = "r1"
@@ -404,9 +405,6 @@ def test_bgp_vrf_tcp_mss(request):
tcp_mss_result
)
-
-
-
step("Enabling tcp-mss 500 between R2 and R3 of VRF Default")
TCP_MSS = 500
raw_config = {
@@ -440,8 +438,6 @@ def test_bgp_vrf_tcp_mss(request):
result = apply_raw_config(tgen, raw_config)
assert result is True, "Testcase {} : Failed Error: {}".format(tc_name, result)
-
-
step("Clear BGP at router R2 and R3")
for addr_type in ADDR_TYPES:
clear_bgp(tgen, topo, "r2", addr_type)
@@ -550,7 +546,6 @@ def test_bgp_vrf_tcp_mss(request):
tcp_mss_result is not True
), " TCP-MSS mismatch :Failed \n Error: {}".format(tcp_mss_result)
-
step("Removing tcp-mss 500 between R2 and R3 of VRF Default ")
TCP_MSS = 500
raw_config = {
diff --git a/tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json b/tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json
new file mode 100644
index 0000000..2ed7631
--- /dev/null
+++ b/tests/topotests/bgp_vpnv4_ebgp/r2/bgp_ipv4_vpn_route_1723101.json
@@ -0,0 +1,50 @@
+{
+ "444:1":{
+ "prefix":"172.31.0.1/32",
+ "advertisedTo":{
+ "192.168.0.1":{
+ }
+ },
+ "paths":[
+ {
+ "aspath":{
+ "string":"65500",
+ "segments":[
+ {
+ "type":"as-sequence",
+ "list":[
+ 65500
+ ]
+ }
+ ],
+ "length":1
+ },
+ "origin":"incomplete",
+ "metric":0,
+ "valid":true,
+ "bestpath":{
+ "overall":true,
+ "selectionReason":"First path received"
+ },
+ "extendedCommunity":{
+ "string":"RT:52:101"
+ },
+ "remoteLabel":102,
+ "nexthops":[
+ {
+ "ip":"192.168.0.1",
+ "afi":"ipv4",
+ "metric":0,
+ "accessible":true,
+ "used":true
+ }
+ ],
+ "peer":{
+ "peerId":"192.168.0.1",
+ "routerId":"192.0.2.1",
+ "type":"external"
+ }
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py b/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py
index 8b2e674..1898243 100644
--- a/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py
+++ b/tests/topotests/bgp_vpnv4_ebgp/test_bgp_vpnv4_ebgp.py
@@ -228,7 +228,12 @@ def test_export_route_target_empty():
router = tgen.gears["r1"]
logger.info("r1, Remove 'rt vpn export 52:100' command")
router.vtysh_cmd(
- "configure terminal\nrouter bgp 65500 vrf vrf1\naddress-family ipv4 unicast\nno rt vpn export 52:100\n"
+ """
+configure terminal
+router bgp 65500 vrf vrf1
+ address-family ipv4 unicast
+ no rt vpn export 52:100
+"""
)
prefix = "172.31.0.1/32"
@@ -254,10 +259,15 @@ def test_export_route_target_with_routemap_with_export_route_target():
router = tgen.gears["r1"]
logger.info("r1, configuring route target with route-map with export route target")
router.vtysh_cmd(
- "configure terminal\nrouter bgp 65500 vrf vrf1\naddress-family ipv4 unicast\nroute-map vpn export rmap\n"
- )
- router.vtysh_cmd(
- "configure terminal\nroute-map rmap permit 1\nset extcommunity rt 52:100\n"
+ """
+configure terminal
+router bgp 65500 vrf vrf1
+ address-family ipv4 unicast
+ route-map vpn export RMAP
+!
+route-map RMAP permit 1
+ set extcommunity rt 52:100
+"""
)
prefix = "172.31.0.1/32"
@@ -283,7 +293,11 @@ def test_export_route_target_with_routemap_without_export_route_target():
router = tgen.gears["r1"]
logger.info("r1, removing 'set extcommunity rt 52:100.")
router.vtysh_cmd(
- "configure terminal\nroute-map rmap permit 1\nno set extcommunity rt\n"
+ """
+configure terminal
+route-map RMAP permit 1
+ no set extcommunity rt
+"""
)
prefix = "172.31.0.1/32"
@@ -309,7 +323,12 @@ def test_export_route_target_with_default_command():
router = tgen.gears["r1"]
logger.info("r1, detach route-map and re-add route target vpn export")
router.vtysh_cmd(
- "configure terminal\nrouter bgp 65500 vrf vrf1\naddress-family ipv4 unicast\nrt vpn export 52:100\n"
+ """
+configure terminal
+router bgp 65500 vrf vrf1
+ address-family ipv4 unicast
+ rt vpn export 52:100
+"""
)
prefix = "172.31.0.1/32"
logger.info("r1, check that exported prefix {} is added back".format(prefix))
@@ -334,9 +353,14 @@ def test_export_suppress_route_target_with_route_map_command():
router = tgen.gears["r1"]
logger.info("r1, add an extended comm-list to delete 52:100")
- router.vtysh_cmd("configure terminal\nbgp extcommunity-list 1 permit rt 52:100\n")
router.vtysh_cmd(
- "configure terminal\nroute-map rmap permit 1\nset extended-comm-list 1 delete\n"
+ """
+configure terminal
+bgp extcommunity-list 1 permit rt 52:100
+!
+route-map RMAP permit 1
+ set extended-comm-list 1 delete
+"""
)
prefix = "172.31.0.1/32"
logger.info("r1, check that exported prefix {} is removed".format(prefix))
@@ -361,7 +385,11 @@ def test_export_add_route_target_to_route_map_command():
router = tgen.gears["r1"]
logger.info("r1, add an additional set extcommunity 52:101")
router.vtysh_cmd(
- "configure terminal\nroute-map rmap permit 1\nset extcommunity rt 52:101\n"
+ """
+configure terminal
+route-map RMAP permit 1
+ set extcommunity rt 52:101
+"""
)
prefix = "172.31.0.1/32"
logger.info("r1, check that exported prefix {} is added back".format(prefix))
@@ -376,6 +404,126 @@ def test_export_add_route_target_to_route_map_command():
assert success, "{}, vpnv4 update {} still not present".format(router.name, prefix)
+def test_adj_rib_out_label_change():
+ """
+ Check that changing the VPN label on r1
+ is propagated on r2
+ """
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("Changing VPN label value to export")
+ dump = tgen.gears["r1"].vtysh_cmd(
+ """
+configure terminal
+ router bgp 65500 vrf vrf1
+ address-family ipv4 unicast
+ label vpn export 102
+"""
+ )
+ # Check BGP IPv4 route entry for 172.31.0.1 on r1
+ logger.info("Checking BGP IPv4 routes for convergence on r1")
+ router = tgen.gears["r2"]
+ json_file = "{}/{}/bgp_ipv4_vpn_route_1723101.json".format(CWD, router.name)
+ expected = json.loads(open(json_file).read())
+ test_func = partial(
+ topotest.router_json_cmp,
+ router,
+ "show bgp ipv4 vpn 172.31.0.1/32 json",
+ expected,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assertmsg = '"{}" JSON output mismatches'.format(router.name)
+ assert result is None, assertmsg
+
+
+def test_adj_rib_in_label_change():
+ """
+ Check that syncinig with ADJ-RIB-in on r2
+ permits restoring the initial label value
+ """
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("Enable soft-reconfiguration inbound on r2")
+
+ r2 = tgen.gears["r2"]
+ r2.vtysh_cmd(
+ """
+configure terminal
+router bgp 65501
+ address-family ipv4 vpn
+ neighbor 192.168.0.1 soft-reconfiguration inbound
+"""
+ )
+
+ logger.info("Applying a deny-all route-map to input on r2")
+ r2.vtysh_cmd(
+ """
+configure terminal
+route-map DENY-ALL deny 1
+!
+router bgp 65501
+ address-family ipv4 vpn
+ neighbor 192.168.0.1 route-map DENY-ALL in
+"""
+ )
+
+ # check that 172.31.0.1 should not be present
+ logger.info("Check that received update 172.31.0.1 is not present")
+
+ expected = {}
+ test_func = partial(
+ topotest.router_json_cmp,
+ r2,
+ "show bgp ipv4 vpn 172.31.0.1/32 json",
+ expected,
+ exact=True,
+ )
+ success, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assert success, "r2, vpnv4 update 172.31.0.1 still present"
+
+
+def test_adj_rib_in_label_change_remove_rmap():
+ """
+ Check that syncinig with ADJ-RIB-in on r2
+ permits restoring the initial label value
+ """
+ tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ logger.info("Removing the deny-all route-map from input on r2")
+
+ r2 = tgen.gears["r2"]
+ r2.vtysh_cmd(
+ """
+configure terminal
+router bgp 65501
+ address-family ipv4 vpn
+ no neighbor 192.168.0.1 route-map DENY-ALL in
+"""
+ )
+ # Check BGP IPv4 route entry for 172.31.0.1 on r1
+ logger.info(
+ "Checking that 172.31.0.1 BGP update is present and has valid label on r2"
+ )
+ json_file = "{}/{}/bgp_ipv4_vpn_route_1723101.json".format(CWD, r2.name)
+
+ expected = json.loads(open(json_file).read())
+ test_func = partial(
+ topotest.router_json_cmp,
+ r2,
+ "show bgp ipv4 vpn 172.31.0.1/32 json",
+ expected,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assertmsg = '"{}" JSON output mismatches'.format(r2.name)
+ assert result is None, assertmsg
+
+
def test_memory_leak():
"Run the memory leak test and report results."
tgen = get_topogen()
diff --git a/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py b/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py
index 6f313be..31743c8 100644
--- a/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py
+++ b/tests/topotests/bgp_vpnv4_gre/test_bgp_vpnv4_gre.py
@@ -52,30 +52,32 @@ def build_topo(tgen):
switch = tgen.add_switch("s3")
switch.add_link(tgen.gears["r2"])
+
def _populate_iface():
tgen = get_topogen()
cmds_list = [
- 'ip link add vrf1 type vrf table 10',
- 'echo 10 > /proc/sys/net/mpls/platform_labels',
- 'ip link set dev vrf1 up',
- 'ip link set dev {0}-eth1 master vrf1',
- 'echo 1 > /proc/sys/net/mpls/conf/{0}-eth0/input',
- 'ip tunnel add {0}-gre0 mode gre ttl 64 dev {0}-eth0 local 10.125.0.{1} remote 10.125.0.{2}',
- 'ip link set dev {0}-gre0 up',
- 'echo 1 > /proc/sys/net/mpls/conf/{0}-gre0/input',
+ "ip link add vrf1 type vrf table 10",
+ "echo 10 > /proc/sys/net/mpls/platform_labels",
+ "ip link set dev vrf1 up",
+ "ip link set dev {0}-eth1 master vrf1",
+ "echo 1 > /proc/sys/net/mpls/conf/{0}-eth0/input",
+ "ip tunnel add {0}-gre0 mode gre ttl 64 dev {0}-eth0 local 10.125.0.{1} remote 10.125.0.{2}",
+ "ip link set dev {0}-gre0 up",
+ "echo 1 > /proc/sys/net/mpls/conf/{0}-gre0/input",
]
for cmd in cmds_list:
- input = cmd.format('r1', '1', '2')
- logger.info('input: ' + cmd)
- output = tgen.net['r1'].cmd(cmd.format('r1', '1', '2'))
- logger.info('output: ' + output)
+ input = cmd.format("r1", "1", "2")
+ logger.info("input: " + cmd)
+ output = tgen.net["r1"].cmd(cmd.format("r1", "1", "2"))
+ logger.info("output: " + output)
for cmd in cmds_list:
- input = cmd.format('r2', '2', '1')
- logger.info('input: ' + cmd)
- output = tgen.net['r2'].cmd(cmd.format('r2', '2', '1'))
- logger.info('output: ' + output)
+ input = cmd.format("r2", "2", "1")
+ logger.info("input: " + cmd)
+ output = tgen.net["r2"].cmd(cmd.format("r2", "2", "1"))
+ logger.info("output: " + output)
+
def setup_module(mod):
"Sets up the pytest environment"
@@ -113,13 +115,13 @@ def test_protocols_convergence():
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
- router = tgen.gears['r1']
+ router = tgen.gears["r1"]
logger.info("Dump some context for r1")
router.vtysh_cmd("show bgp ipv4 vpn")
router.vtysh_cmd("show bgp summary")
router.vtysh_cmd("show bgp vrf vrf1 ipv4")
router.vtysh_cmd("show running-config")
- router = tgen.gears['r2']
+ router = tgen.gears["r2"]
logger.info("Dump some context for r2")
router.vtysh_cmd("show bgp ipv4 vpn")
router.vtysh_cmd("show bgp summary")
@@ -128,11 +130,11 @@ def test_protocols_convergence():
# Check IPv4 routing tables on r1
logger.info("Checking IPv4 routes for convergence on r1")
- router = tgen.gears['r1']
+ router = tgen.gears["r1"]
json_file = "{}/{}/ipv4_routes.json".format(CWD, router.name)
if not os.path.isfile(json_file):
logger.info("skipping file {}".format(json_file))
- assert 0, 'ipv4_routes.json file not found'
+ assert 0, "ipv4_routes.json file not found"
return
expected = json.loads(open(json_file).read())
@@ -148,10 +150,10 @@ def test_protocols_convergence():
# Check BGP IPv4 routing tables on r2 not installed
logger.info("Checking BGP IPv4 routes for convergence on r2")
- router = tgen.gears['r2']
+ router = tgen.gears["r2"]
json_file = "{}/{}/bgp_ipv4_routes.json".format(CWD, router.name)
if not os.path.isfile(json_file):
- assert 0, 'bgp_ipv4_routes.json file not found'
+ assert 0, "bgp_ipv4_routes.json file not found"
expected = json.loads(open(json_file).read())
test_func = partial(
@@ -163,7 +165,8 @@ def test_protocols_convergence():
_, result = topotest.run_and_expect(test_func, None, count=40, wait=2)
assertmsg = '"{}" JSON output mismatches'.format(router.name)
assert result is None, assertmsg
-
+
+
def test_memory_leak():
"Run the memory leak test and report results."
tgen = get_topogen()
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref.diff b/tests/topotests/bgp_vrf_different_asn/__init__.py
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/bgp_vrf_different_asn/__init__.py
diff --git a/tests/topotests/bgp_vrf_different_asn/r1/frr.conf b/tests/topotests/bgp_vrf_different_asn/r1/frr.conf
new file mode 100644
index 0000000..b325dfb
--- /dev/null
+++ b/tests/topotests/bgp_vrf_different_asn/r1/frr.conf
@@ -0,0 +1,18 @@
+!
+vrf vrf100
+ vni 10100
+exit-vrf
+!
+interface r1-eth0 vrf vrf100
+ ip address 192.168.1.1/24
+!
+router bgp 65000
+ address-family ipv4 unicast
+ import vrf vrf100
+ exit-address-family
+!
+router bgp 65100 vrf vrf100
+ address-family ipv4 unicast
+ redistribute connected
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py b/tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py
new file mode 100644
index 0000000..9a1a9ec
--- /dev/null
+++ b/tests/topotests/bgp_vrf_different_asn/test_bgp_vrf_different_asn.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Copyright (c) 2024 by
+# Donatas Abraitis <donatas@opensourcerouting.org>
+#
+
+import os
+import sys
+import json
+import pytest
+import functools
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+
+pytestmark = [pytest.mark.bgpd]
+
+
+def build_topo(tgen):
+ for routern in range(1, 2):
+ tgen.add_router("r{}".format(routern))
+
+ switch = tgen.add_switch("s1")
+ switch.add_link(tgen.gears["r1"])
+
+
+def setup_module(mod):
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ r1 = tgen.gears["r1"]
+ r1.run("ip link add vrf100 type vrf table 1001")
+ r1.run("ip link set up dev vrf100")
+ r1.run("ip link set r1-eth0 master vrf100")
+
+ router_list = tgen.routers()
+
+ for _, (rname, router) in enumerate(router_list.items(), 1):
+ router.load_frr_config(os.path.join(CWD, "{}/frr.conf".format(rname)))
+
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def test_bgp_vrf_different_asn():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ def _bgp_check_instances():
+ output = json.loads(tgen.gears["r1"].vtysh_cmd("show bgp vrf all json"))
+ expected = {
+ "default": {
+ "vrfName": "default",
+ "localAS": 65000,
+ },
+ "vrf100": {
+ "vrfName": "vrf100",
+ "localAS": 65100,
+ },
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_check_instances)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Can't see vrf100 to be under 65100 ASN"
+
+ def _bgp_check_imported_route():
+ output = json.loads(
+ tgen.gears["r1"].vtysh_cmd("show ip route 192.168.1.0/24 json")
+ )
+ expected = {
+ "192.168.1.0/24": [
+ {
+ "installed": True,
+ "selected": True,
+ "nexthops": [
+ {
+ "interfaceName": "vrf100",
+ "vrf": "vrf100",
+ "active": True,
+ }
+ ],
+ }
+ ]
+ }
+ return topotest.json_cmp(output, expected)
+
+ test_func = functools.partial(_bgp_check_imported_route)
+ _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+ assert result is None, "Can't see 192.168.1.0/24 being imported into a default VRF"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/bgp_vrf_dynamic_route_leak_topo3/test_bgp_vrf_dynamic_route_leak_topo3.py b/tests/topotests/bgp_vrf_dynamic_route_leak_topo3/test_bgp_vrf_dynamic_route_leak_topo3.py
index 1787021..726afcb 100644
--- a/tests/topotests/bgp_vrf_dynamic_route_leak_topo3/test_bgp_vrf_dynamic_route_leak_topo3.py
+++ b/tests/topotests/bgp_vrf_dynamic_route_leak_topo3/test_bgp_vrf_dynamic_route_leak_topo3.py
@@ -851,23 +851,25 @@ def test_dynamic_imported_matching_prefix_based_on_community_list_p0(request):
result = verify_bgp_rib(
tgen, addr_type, "r3", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes["r3"]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes["r3"]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, "r3", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes["r3"]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes["r3"]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, "r3", static_routes)
@@ -924,23 +926,25 @@ def test_dynamic_imported_matching_prefix_based_on_community_list_p0(request):
result = verify_bgp_rib(
tgen, addr_type, "r3", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes["r3"]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes["r3"]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, "r3", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes["r3"]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes["r3"]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, "r3", static_routes)
@@ -1153,23 +1157,25 @@ def test_dynamic_import_routes_delete_static_route_p1(request):
result = verify_bgp_rib(
tgen, addr_type, "r2", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes["r2"]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes["r2"]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, "r2", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
step("Delete static routes from vrf BLUE")
@@ -1209,21 +1215,23 @@ def test_dynamic_import_routes_delete_static_route_p1(request):
result = verify_bgp_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
result = verify_rib(tgen, addr_type, dut, static_routes, expected=False)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
step("Delete static routes from vrf default")
diff --git a/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-1.py b/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-1.py
index c7fbc01..45d7b03 100644
--- a/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-1.py
+++ b/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-1.py
@@ -320,7 +320,6 @@ def test_dynamic_import_recursive_import_tenant_vrf_p1(request):
for dut, vrf_name, vrf_import, as_num in zip(
["r2", "r4"], ["GREEN", "BLUE"], ["RED", "default"], [2, 4]
):
-
for action, value in zip(["Delete", "Re-add"], [True, False]):
step("{} the import command on {} router".format(action, dut))
temp = {}
@@ -357,23 +356,25 @@ def test_dynamic_import_recursive_import_tenant_vrf_p1(request):
result = verify_bgp_rib(
tgen, addr_type, "r4", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes["r4"]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes["r4"]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, "r4", static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes["r4"]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes["r4"]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, "r4", static_routes)
diff --git a/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-2.py b/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-2.py
index 02950eb..d29edf5 100644
--- a/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-2.py
+++ b/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-2.py
@@ -495,23 +495,25 @@ def test_dynamic_import_routes_between_two_tenant_vrf_p0(request):
result = verify_bgp_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, dut, static_routes)
@@ -882,23 +884,25 @@ def test_dynamic_import_routes_between_two_tenant_vrf_p0(request):
result = verify_bgp_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, dut, static_routes)
diff --git a/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-3.py b/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-3.py
index 4b18903..c118ffc 100644
--- a/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-3.py
+++ b/tests/topotests/bgp_vrf_dynamic_route_leak_topo4/test_bgp_vrf_dynamic_route_leak_topo4-3.py
@@ -356,23 +356,25 @@ def test_dynamic_import_routes_between_tenant_to_default_vrf_p0(request):
result = verify_bgp_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, dut, static_routes)
@@ -503,23 +505,25 @@ def test_dynamic_import_routes_between_tenant_to_default_vrf_p0(request):
result = verify_bgp_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, dut, static_routes)
@@ -882,23 +886,25 @@ def test_dynamic_import_routes_between_tenant_to_default_vrf_p0(request):
result = verify_bgp_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed \nError {}\n" "Routes {} still in BGP table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed \nError {}\n"
+ "Routes {} still in BGP table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
result = verify_rib(
tgen, addr_type, dut, static_routes, expected=False
)
- assert (
- result is not True
- ), "Testcase {} : Failed Error {}" "Routes {} still in Route table".format(
- tc_name,
- result,
- static_routes[dut]["static_routes"][0]["network"],
+ assert result is not True, (
+ "Testcase {} : Failed Error {}"
+ "Routes {} still in Route table".format(
+ tc_name,
+ result,
+ static_routes[dut]["static_routes"][0]["network"],
+ )
)
else:
result = verify_bgp_rib(tgen, addr_type, dut, static_routes)
diff --git a/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf10_ipv4_unicast.json b/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf10_ipv4_unicast.json
index 768bffb..f664bb6 100644
--- a/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf10_ipv4_unicast.json
+++ b/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf10_ipv4_unicast.json
@@ -15,15 +15,16 @@
"origin": "incomplete",
"nexthops": [
{
+ "ip": "::ffff:c000:202",
"hostname": "ce1",
"afi": "ipv6",
- "scope": "global",
- "used": true
+ "scope": "global"
},
{
"hostname": "ce1",
"afi": "ipv6",
- "scope": "link-local"
+ "scope": "link-local",
+ "used": true
}
]
}
diff --git a/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf20_ipv4_unicast.json b/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf20_ipv4_unicast.json
index 1e93715..3498ed4 100644
--- a/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf20_ipv4_unicast.json
+++ b/tests/topotests/bgp_vrf_leaking_5549_routes/pe1/results/vrf20_ipv4_unicast.json
@@ -17,15 +17,16 @@
"nhVrfName": "vrf10",
"nexthops": [
{
+ "ip": "::ffff:c000:202",
"hostname": "pe1",
"afi": "ipv6",
- "scope": "global",
- "used": true
+ "scope": "global"
},
{
"hostname": "pe1",
"afi": "ipv6",
- "scope": "link-local"
+ "scope": "link-local",
+ "used": true
}
]
}
diff --git a/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py b/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py
index 244db6c..b208192 100755
--- a/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py
+++ b/tests/topotests/bgp_vrf_leaking_5549_routes/test_bgp_vrf_leaking.py
@@ -37,10 +37,12 @@ def setup_module(mod):
tgen.start_topology()
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_BGP,
- os.path.join(CWD, '{}/bgpd.conf'.format(rname)))
+ 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.gears["pe1"].run("ip link add vrf10 type vrf table 10")
tgen.gears["pe1"].run("ip link set vrf10 up")
@@ -62,22 +64,22 @@ def open_json_file(path):
return json.load(f)
except IOError:
assert False, "Could not read file {}".format(path)
-
+
def check_vrf10_rib(output):
- expected = open_json_file("%s/pe1/results/vrf10_ipv4_unicast.json" % CWD)
+ expected = open_json_file("%s/pe1/results/vrf10_ipv4_unicast.json" % CWD)
actual = json.loads(output)
return topotest.json_cmp(actual, expected)
def check_default_vpn_rib(output):
- expected = open_json_file("%s/pe1/results/default_ipv4_vpn.json" % CWD)
+ expected = open_json_file("%s/pe1/results/default_ipv4_vpn.json" % CWD)
actual = json.loads(output)
return topotest.json_cmp(actual, expected)
def check_vrf20_rib(output):
- expected = open_json_file("%s/pe1/results/vrf20_ipv4_unicast.json" % CWD)
+ expected = open_json_file("%s/pe1/results/vrf20_ipv4_unicast.json" % CWD)
actual = json.loads(output)
return topotest.json_cmp(actual, expected)
diff --git a/tests/topotests/bgp_vrf_lite_best_path_test/test_bgp_vrf_lite_best_path_topo2.py b/tests/topotests/bgp_vrf_lite_best_path_test/test_bgp_vrf_lite_best_path_topo2.py
index 5d93964..3cb3180 100644
--- a/tests/topotests/bgp_vrf_lite_best_path_test/test_bgp_vrf_lite_best_path_topo2.py
+++ b/tests/topotests/bgp_vrf_lite_best_path_test/test_bgp_vrf_lite_best_path_topo2.py
@@ -43,7 +43,7 @@ from lib.common_config import (
step,
create_static_routes,
check_router_status,
- apply_raw_config
+ apply_raw_config,
)
from lib.topolog import logger
@@ -51,7 +51,7 @@ from lib.bgp import (
verify_bgp_convergence,
create_router_bgp,
verify_bgp_rib,
- verify_bgp_bestpath
+ verify_bgp_bestpath,
)
from lib.topojson import build_config_from_json
@@ -84,10 +84,8 @@ VRF_LIST = ["RED", "BLUE", "GREEN"]
COMM_VAL_1 = "100:100"
COMM_VAL_2 = "500:500"
COMM_VAL_3 = "600:600"
-BESTPATH = {
- "ipv4": "0.0.0.0",
- "ipv6": "::"
-}
+BESTPATH = {"ipv4": "0.0.0.0", "ipv6": "::"}
+
def setup_module(mod):
"""
@@ -158,6 +156,7 @@ def teardown_module():
#
#####################################################
+
def test_dynamic_import_ecmp_imported_routed_diffrent_vrfs_p0(request):
"""
Verify ECMP for imported routes from different VRFs.
@@ -170,136 +169,130 @@ def test_dynamic_import_ecmp_imported_routed_diffrent_vrfs_p0(request):
check_router_status(tgen)
reset_config_on_routers(tgen)
- step("Configure same static routes in tenant vrfs RED and GREEN on router "
- "R3 and redistribute in respective BGP process")
+ step(
+ "Configure same static routes in tenant vrfs RED and GREEN on router "
+ "R3 and redistribute in respective BGP process"
+ )
for vrf_name in ["RED", "GREEN"]:
for addr_type in ADDR_TYPES:
if vrf_name == "GREEN":
- next_hop_vrf = topo["routers"]["r1"]["links"][
- "r3-link3"][addr_type].split("/")[0]
+ next_hop_vrf = topo["routers"]["r1"]["links"]["r3-link3"][
+ addr_type
+ ].split("/")[0]
else:
- next_hop_vrf = topo["routers"]["r2"]["links"][
- "r3-link1"][addr_type].split("/")[0]
+ next_hop_vrf = topo["routers"]["r2"]["links"]["r3-link1"][
+ addr_type
+ ].split("/")[0]
static_routes = {
"r3": {
"static_routes": [
{
"network": [NETWORK1_1[addr_type]],
"next_hop": next_hop_vrf,
- "vrf": vrf_name
+ "vrf": vrf_name,
}
]
}
}
result = create_static_routes(tgen, static_routes)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(
+ tc_name, result
+ )
step("Redistribute static route on BGP VRF : {}".format(vrf_name))
temp = {}
for addr_type in ADDR_TYPES:
- temp.update({
- addr_type: {
- "unicast": {
- "redistribute": [{
- "redist_type": "static"
- }]
- }
- }
- })
+ temp.update(
+ {addr_type: {"unicast": {"redistribute": [{"redist_type": "static"}]}}}
+ )
- redist_dict = {"r3": {"bgp": [{
- "vrf": vrf_name, "local_as": 3, "address_family": temp
- }]}}
+ redist_dict = {
+ "r3": {"bgp": [{"vrf": vrf_name, "local_as": 3, "address_family": temp}]}
+ }
result = create_router_bgp(tgen, topo, redist_dict)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(
+ tc_name, result
+ )
- step("Verify that configured static routes are installed in respective "
- "BGP table for vrf RED & GREEN")
+ step(
+ "Verify that configured static routes are installed in respective "
+ "BGP table for vrf RED & GREEN"
+ )
for vrf_name in ["RED", "GREEN"]:
for addr_type in ADDR_TYPES:
if vrf_name == "GREEN":
- next_hop_vrf = topo["routers"]["r1"]["links"][
- "r3-link3"][addr_type].split("/")[0]
+ next_hop_vrf = topo["routers"]["r1"]["links"]["r3-link3"][
+ addr_type
+ ].split("/")[0]
else:
- next_hop_vrf = topo["routers"]["r2"]["links"][
- "r3-link1"][addr_type].split("/")[0]
+ next_hop_vrf = topo["routers"]["r2"]["links"]["r3-link1"][
+ addr_type
+ ].split("/")[0]
static_routes = {
"r3": {
"static_routes": [
- {
- "network": [NETWORK1_1[addr_type]],
- "vrf": vrf_name
- }
+ {"network": [NETWORK1_1[addr_type]], "vrf": vrf_name}
]
}
}
- result = verify_bgp_rib(tgen, addr_type, "r3", static_routes,
- next_hop=next_hop_vrf)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ result = verify_bgp_rib(
+ tgen, addr_type, "r3", static_routes, next_hop=next_hop_vrf
+ )
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
- result = verify_rib(tgen, addr_type, "r3", static_routes,
- next_hop=next_hop_vrf)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ result = verify_rib(
+ tgen, addr_type, "r3", static_routes, next_hop=next_hop_vrf
+ )
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
step("Import vrf RED and GREEN into default vrf and Configure ECMP")
bgp_val = []
for vrf_name in ["RED", "GREEN"]:
temp = {}
for addr_type in ADDR_TYPES:
- temp.update({
- addr_type: {
- "unicast": {
- "import": {
- "vrf": vrf_name
- },
- "maximum_paths": {
- "ebgp": 2
+ temp.update(
+ {
+ addr_type: {
+ "unicast": {
+ "import": {"vrf": vrf_name},
+ "maximum_paths": {"ebgp": 2},
}
}
}
- })
+ )
- bgp_val.append({
- "local_as": 3, "address_family": temp
- })
+ bgp_val.append({"local_as": 3, "address_family": temp})
import_dict = {"r3": {"bgp": bgp_val}}
result = create_router_bgp(tgen, topo, import_dict)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("Configure bgp bestpath on router r3")
r3_raw_config = {
- "r3": {
- "raw_config": [
- "router bgp 3",
- "bgp bestpath as-path multipath-relax"
- ]
- }
+ "r3": {"raw_config": ["router bgp 3", "bgp bestpath as-path multipath-relax"]}
}
result = apply_raw_config(tgen, r3_raw_config)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that routes are imported with two different next-hop vrfs "
- "and IPs. Additionally R3 must do ECMP for both the routes.")
+ step(
+ "Verify that routes are imported with two different next-hop vrfs "
+ "and IPs. Additionally R3 must do ECMP for both the routes."
+ )
for addr_type in ADDR_TYPES:
next_hop_vrf = [
- topo["routers"]["r2"]["links"]["r3-link1"][addr_type]. \
- split("/")[0],
- topo["routers"]["r1"]["links"]["r3-link3"][addr_type]. \
- split("/")[0]
- ]
+ topo["routers"]["r2"]["links"]["r3-link1"][addr_type].split("/")[0],
+ topo["routers"]["r1"]["links"]["r3-link3"][addr_type].split("/")[0],
+ ]
static_routes = {
"r3": {
"static_routes": [
@@ -310,54 +303,61 @@ def test_dynamic_import_ecmp_imported_routed_diffrent_vrfs_p0(request):
}
}
- result = verify_bgp_rib(tgen, addr_type, "r3", static_routes,
- next_hop=next_hop_vrf)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ result = verify_bgp_rib(
+ tgen, addr_type, "r3", static_routes, next_hop=next_hop_vrf
+ )
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
- result = verify_rib(tgen, addr_type, "r3", static_routes,
- next_hop=next_hop_vrf)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ result = verify_rib(tgen, addr_type, "r3", static_routes, next_hop=next_hop_vrf)
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
- step("Now change the next-hop of static routes in vrf RED and GREEN to "
- "same IP address")
+ step(
+ "Now change the next-hop of static routes in vrf RED and GREEN to "
+ "same IP address"
+ )
for addr_type in ADDR_TYPES:
- next_hop_vrf = topo["routers"]["r1"]["links"][
- "r3-link3"][addr_type].split("/")[0]
+ next_hop_vrf = topo["routers"]["r1"]["links"]["r3-link3"][addr_type].split("/")[
+ 0
+ ]
static_routes = {
"r3": {
"static_routes": [
{
"network": [NETWORK1_1[addr_type]],
"next_hop": next_hop_vrf,
- "vrf": "RED"
+ "vrf": "RED",
},
{
"network": [NETWORK1_1[addr_type]],
- "next_hop": topo["routers"]["r2"]["links"][
- "r3-link1"][addr_type].split("/")[0],
+ "next_hop": topo["routers"]["r2"]["links"]["r3-link1"][
+ addr_type
+ ].split("/")[0],
"vrf": "RED",
- "delete": True
- }
+ "delete": True,
+ },
]
}
}
result = create_static_routes(tgen, static_routes)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(
+ tc_name, result
+ )
- step("Verify that now routes are imported with two different next-hop "
- "vrfs but same IPs. Additionally R3 must do ECMP for both the routes")
+ step(
+ "Verify that now routes are imported with two different next-hop "
+ "vrfs but same IPs. Additionally R3 must do ECMP for both the routes"
+ )
for addr_type in ADDR_TYPES:
next_hop_vrf = [
- topo["routers"]["r1"]["links"]["r3-link3"][addr_type].\
- split("/")[0],
- topo["routers"]["r1"]["links"]["r3-link3"][addr_type]. \
- split("/")[0]
- ]
+ topo["routers"]["r1"]["links"]["r3-link3"][addr_type].split("/")[0],
+ topo["routers"]["r1"]["links"]["r3-link3"][addr_type].split("/")[0],
+ ]
static_routes = {
"r3": {
"static_routes": [
@@ -368,20 +368,24 @@ def test_dynamic_import_ecmp_imported_routed_diffrent_vrfs_p0(request):
}
}
- result = verify_bgp_rib(tgen, addr_type, "r3", static_routes,
- next_hop=next_hop_vrf)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ result = verify_bgp_rib(
+ tgen, addr_type, "r3", static_routes, next_hop=next_hop_vrf
+ )
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
- result = verify_rib(tgen, addr_type, "r3", static_routes,
- next_hop=next_hop_vrf)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ result = verify_rib(tgen, addr_type, "r3", static_routes, next_hop=next_hop_vrf)
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
write_test_footer(tc_name)
-def test_locally_imported_routes_selected_as_bestpath_over_ebgp_imported_routes_p0(request):
+def test_locally_imported_routes_selected_as_bestpath_over_ebgp_imported_routes_p0(
+ request,
+):
"""
Verify ECMP for imported routes from different VRFs.
"""
@@ -393,13 +397,15 @@ def test_locally_imported_routes_selected_as_bestpath_over_ebgp_imported_routes_
check_router_status(tgen)
reset_config_on_routers(tgen)
- step("Configure same static routes on R2 and R3 vrfs and redistribute in BGP "
- "for GREEN and RED vrf instances")
- for dut, network in zip(["r2", "r3"], [
- [NETWORK1_1, NETWORK1_2], [NETWORK1_1, NETWORK1_2]]):
+ step(
+ "Configure same static routes on R2 and R3 vrfs and redistribute in BGP "
+ "for GREEN and RED vrf instances"
+ )
+ for dut, network in zip(
+ ["r2", "r3"], [[NETWORK1_1, NETWORK1_2], [NETWORK1_1, NETWORK1_2]]
+ ):
for vrf_name, network_vrf in zip(["RED", "GREEN"], network):
- step("Configure static route for VRF : {} on {}".format(vrf_name,
- dut))
+ step("Configure static route for VRF : {} on {}".format(vrf_name, dut))
for addr_type in ADDR_TYPES:
static_routes = {
dut: {
@@ -407,44 +413,50 @@ def test_locally_imported_routes_selected_as_bestpath_over_ebgp_imported_routes_
{
"network": [network_vrf[addr_type]],
"next_hop": "blackhole",
- "vrf": vrf_name
+ "vrf": vrf_name,
}
]
}
}
result = create_static_routes(tgen, static_routes)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(
+ tc_name, result
+ )
for dut, as_num in zip(["r2", "r3"], ["2", "3"]):
for vrf_name in ["RED", "GREEN"]:
step("Redistribute static route on BGP VRF : {}".format(vrf_name))
temp = {}
for addr_type in ADDR_TYPES:
- temp.update({
- addr_type: {
- "unicast": {
- "redistribute": [{
- "redist_type": "static"
- }]
+ temp.update(
+ {
+ addr_type: {
+ "unicast": {"redistribute": [{"redist_type": "static"}]}
}
}
- })
+ )
- redist_dict = {dut: {"bgp": [{
- "vrf": vrf_name, "local_as": as_num, "address_family": temp
- }]}}
+ redist_dict = {
+ dut: {
+ "bgp": [
+ {"vrf": vrf_name, "local_as": as_num, "address_family": temp}
+ ]
+ }
+ }
result = create_router_bgp(tgen, topo, redist_dict)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
-
- step("Verify that R2 and R3 has installed redistributed routes in default "
- "and RED vrfs and GREEN respectively:")
- for dut, network in zip(["r2", "r3"],
- [[NETWORK1_1, NETWORK1_2],
- [NETWORK1_1, NETWORK1_2]]):
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(
+ tc_name, result
+ )
+
+ step(
+ "Verify that R2 and R3 has installed redistributed routes in default "
+ "and RED vrfs and GREEN respectively:"
+ )
+ for dut, network in zip(
+ ["r2", "r3"], [[NETWORK1_1, NETWORK1_2], [NETWORK1_1, NETWORK1_2]]
+ ):
for vrf_name, network_vrf in zip(["RED", "GREEN"], network):
for addr_type in ADDR_TYPES:
static_routes = {
@@ -453,38 +465,32 @@ def test_locally_imported_routes_selected_as_bestpath_over_ebgp_imported_routes_
{
"network": [network_vrf[addr_type]],
"next_hop": "blackhole",
- "vrf": vrf_name
+ "vrf": vrf_name,
}
]
}
}
result = verify_bgp_rib(tgen, addr_type, dut, static_routes)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
step("Import vrf RED's route in vrf GREEN on R3")
temp = {}
for addr_type in ADDR_TYPES:
- temp.update({
- addr_type: {
- "unicast": {
- "import": {
- "vrf": "RED"
- }
- }
- }
- })
+ temp.update({addr_type: {"unicast": {"import": {"vrf": "RED"}}}})
- import_dict = {"r3": {"bgp": [{
- "vrf": "GREEN", "local_as": 3, "address_family": temp
- }]}}
+ import_dict = {
+ "r3": {"bgp": [{"vrf": "GREEN", "local_as": 3, "address_family": temp}]}
+ }
result = create_router_bgp(tgen, topo, import_dict)
- assert result is True, "Testcase {} :Failed \n Error: {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that locally imported routes are installed over eBGP imported"
- " routes from VRF RED into VRF GREEN")
+ step(
+ "Verify that locally imported routes are installed over eBGP imported"
+ " routes from VRF RED into VRF GREEN"
+ )
for addr_type in ADDR_TYPES:
static_routes = {
"r3": {
@@ -492,7 +498,7 @@ def test_locally_imported_routes_selected_as_bestpath_over_ebgp_imported_routes_
{
"network": [NETWORK1_2[addr_type]],
"next_hop": "blackhole",
- "vrf": "GREEN"
+ "vrf": "GREEN",
}
]
}
@@ -504,19 +510,21 @@ def test_locally_imported_routes_selected_as_bestpath_over_ebgp_imported_routes_
{
"network": NETWORK1_2[addr_type],
"bestpath": BESTPATH[addr_type],
- "vrf": "GREEN"
+ "vrf": "GREEN",
}
]
}
}
result = verify_bgp_bestpath(tgen, addr_type, input_routes)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
result = verify_rib(tgen, addr_type, "r3", static_routes)
- assert result is True, "Testcase {} : Failed \n Error {}". \
- format(tc_name, result)
+ assert result is True, "Testcase {} : Failed \n Error {}".format(
+ tc_name, result
+ )
write_test_footer(tc_name)
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 f52f56b..397f793 100644
--- a/tests/topotests/bgp_vrf_route_leak_basic/r1/bgpd.conf
+++ b/tests/topotests/bgp_vrf_route_leak_basic/r1/bgpd.conf
@@ -12,7 +12,7 @@ router bgp 99 vrf DONNA
address-family ipv4 unicast
redistribute connected
import vrf EVA
- import vrf NOTEXISTING
+ import vrf ZITA
import vrf default
!
!
@@ -21,10 +21,10 @@ router bgp 99 vrf EVA
address-family ipv4 unicast
redistribute connected
import vrf DONNA
- import vrf NOTEXISTING
+ import vrf ZITA
!
!
-router bgp 99 vrf NOTEXISTING
+router bgp 99 vrf ZITA
no bgp ebgp-requires-policy
no bgp network import-check
address-family ipv4 unicast
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 13c38a9..6d4b436 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
@@ -24,7 +24,7 @@ sys.path.append(os.path.join(CWD, "../"))
from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-
+from lib.checkping import check_ping
pytestmark = [pytest.mark.bgpd]
@@ -126,11 +126,13 @@ def test_vrf_route_leak_donna():
"172.16.101.0/24": [
{
"protocol": "bgp",
+ "selected": None,
"nexthops": [
{
- "interfaceIndex": 0,
+ "fib": None,
"interfaceName": "unknown",
"vrf": "Unknown",
+ "active": None,
},
],
},
@@ -196,11 +198,13 @@ def test_vrf_route_leak_eva():
"172.16.101.0/24": [
{
"protocol": "bgp",
+ "selected": None,
"nexthops": [
{
- "interfaceIndex": 0,
+ "fib": None,
"interfaceName": "unknown",
"vrf": "Unknown",
+ "active": None,
},
],
},
@@ -214,7 +218,6 @@ def test_vrf_route_leak_eva():
assert result, "BGP VRF EVA check failed:\n{}".format(diff)
-
def test_vrf_route_leak_default():
logger.info("Ensure that routes are leaked back and forth")
tgen = get_topogen()
@@ -278,8 +281,230 @@ def test_ping():
r1 = tgen.gears["r1"]
logger.info("Ping from default to DONNA")
- output = r1.run("ping -c 4 -w 4 -I 10.0.4.1 10.0.0.1")
- assert " 0% packet loss" in output, "Ping default->DONNA FAILED"
+ check_ping("r1", "10.0.0.1", True, 10, 0.5, source_addr="10.0.4.1")
+
+
+def test_vrf_route_leak_donna_after_eva_down():
+ logger.info("Ensure that route states change after EVA interface goes down")
+ tgen = get_topogen()
+ # Don't run this test if we have any failure.
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ r1.vtysh_cmd(
+ """
+configure
+interface EVA
+ shutdown
+"""
+ )
+
+ # Test DONNA VRF.
+ expect = {
+ "10.0.1.0/24": [
+ {
+ "protocol": "bgp",
+ "selected": None,
+ "nexthops": [
+ {
+ "fib": None,
+ "interfaceName": "EVA",
+ "vrf": "EVA",
+ "active": None,
+ },
+ ],
+ },
+ ],
+ "10.0.3.0/24": [
+ {
+ "protocol": "bgp",
+ "selected": None,
+ "nexthops": [
+ {
+ "fib": None,
+ "interfaceName": "EVA",
+ "vrf": "EVA",
+ "active": None,
+ },
+ ],
+ },
+ ],
+ }
+
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show ip route vrf DONNA json", expect
+ )
+ result, diff = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assert result, "BGP VRF DONNA check failed:\n{}".format(diff)
+
+ """
+ Check that "show ip route vrf DONNA json" and the JSON at key "DONNA" of
+ "show ip route vrf all json" gives the same result.
+ """
+
+ def check_vrf_table(router, vrf, expect):
+ output = router.vtysh_cmd("show ip route vrf all json", isjson=True)
+ vrf_table = output.get(vrf, {})
+
+ return topotest.json_cmp(vrf_table, expect)
+
+ test_func = partial(check_vrf_table, r1, "DONNA", expect)
+ result, diff = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assert result, "BGP VRF DONNA check failed:\n{}".format(diff)
+
+
+def test_vrf_route_leak_donna_after_eva_up():
+ logger.info("Ensure that route states change after EVA interface goes up")
+ tgen = get_topogen()
+ # Don't run this test if we have any failure.
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ r1.vtysh_cmd(
+ """
+configure
+interface EVA
+ no shutdown
+"""
+ )
+
+ # Test DONNA VRF.
+ expect = {
+ "10.0.1.0/24": [
+ {
+ "protocol": "bgp",
+ "selected": True,
+ "nexthops": [
+ {
+ "fib": True,
+ "interfaceName": "EVA",
+ "vrf": "EVA",
+ "active": True,
+ },
+ ],
+ },
+ ],
+ "10.0.3.0/24": [
+ {
+ "protocol": "bgp",
+ "selected": True,
+ "nexthops": [
+ {
+ "fib": True,
+ "interfaceName": "EVA",
+ "vrf": "EVA",
+ "active": True,
+ },
+ ],
+ },
+ ],
+ }
+
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show ip route vrf DONNA json", expect
+ )
+ result, diff = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assert result, "BGP VRF DONNA check failed:\n{}".format(diff)
+
+
+def test_vrf_route_leak_donna_add_vrf_zita():
+ logger.info("Add VRF ZITA and ensure that the route from VRF ZITA is updated")
+ tgen = get_topogen()
+ # Don't run this test if we have any failure.
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ r1.cmd("ip link add ZITA type vrf table 1003")
+
+ # Test DONNA VRF.
+ expect = {
+ "172.16.101.0/24": [
+ {
+ "protocol": "bgp",
+ "selected": None,
+ "nexthops": [
+ {
+ "fib": None,
+ "interfaceName": "ZITA",
+ "vrf": "ZITA",
+ "active": None,
+ },
+ ],
+ },
+ ],
+ }
+
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show ip route vrf DONNA json", expect
+ )
+ result, diff = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assert result, "BGP VRF DONNA check failed:\n{}".format(diff)
+
+
+def test_vrf_route_leak_donna_set_zita_up():
+ logger.info("Set VRF ZITA up and ensure that the route from VRF ZITA is updated")
+ tgen = get_topogen()
+ # Don't run this test if we have any failure.
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ r1.vtysh_cmd(
+ """
+configure
+interface ZITA
+ no shutdown
+"""
+ )
+
+ # Test DONNA VRF.
+ expect = {
+ "172.16.101.0/24": [
+ {
+ "protocol": "bgp",
+ "selected": True,
+ "nexthops": [
+ {
+ "fib": True,
+ "interfaceName": "ZITA",
+ "vrf": "ZITA",
+ "active": True,
+ },
+ ],
+ },
+ ],
+ }
+
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show ip route vrf DONNA json", expect
+ )
+ result, diff = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assert result, "BGP VRF DONNA check failed:\n{}".format(diff)
+
+
+def test_vrf_route_leak_donna_delete_vrf_zita():
+ logger.info("Delete VRF ZITA and ensure that the route from VRF ZITA is deleted")
+ tgen = get_topogen()
+ # Don't run this test if we have any failure.
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+ r1.cmd("ip link delete ZITA")
+
+ # Test DONNA VRF.
+ expect = {
+ "172.16.101.0/24": None,
+ }
+
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show ip route vrf DONNA json", expect
+ )
+ result, diff = topotest.run_and_expect(test_func, None, count=10, wait=0.5)
+ assert result, "BGP VRF DONNA check failed:\n{}".format(diff)
def test_memory_leak():
diff --git a/tests/topotests/config_timing/test_config_timing.py b/tests/topotests/config_timing/test_config_timing.py
index 5c1b972..52d196f 100644
--- a/tests/topotests/config_timing/test_config_timing.py
+++ b/tests/topotests/config_timing/test_config_timing.py
@@ -97,8 +97,8 @@ def test_static_timing():
optype = "adding" if add else "removing"
iptype = "IPv6" if do_ipv6 else "IPv4"
if super_prefix is None:
- super_prefix = u"2001::/48" if do_ipv6 else u"10.0.0.0/8"
- via = u"lo"
+ super_prefix = "2001::/48" if do_ipv6 else "10.0.0.0/8"
+ via = "lo"
optyped = "added" if add else "removed"
for rname, router in router_list.items():
@@ -161,8 +161,8 @@ def test_static_timing():
prefix_count = 50
prefix_base = [
- [u"10.0.0.0/8", u"11.0.0.0/8"],
- [u"2100:1111:2220::/44", u"2100:3333:4440::/44"],
+ ["10.0.0.0/8", "11.0.0.0/8"],
+ ["2100:1111:2220::/44", "2100:3333:4440::/44"],
]
# This apparently needed to allow for various mgmtd/staticd/zebra connections to form
diff --git a/tests/topotests/conftest.py b/tests/topotests/conftest.py
index 23eab68..a231513 100755
--- a/tests/topotests/conftest.py
+++ b/tests/topotests/conftest.py
@@ -68,6 +68,10 @@ def log_handler(basename, logpath):
topolog.logfinish(basename, logpath)
+def is_main_runner():
+ return "PYTEST_XDIST_WORKER" not in os.environ
+
+
def pytest_addoption(parser):
"""
Add topology-only option to the topology tester. This option makes pytest
@@ -86,6 +90,17 @@ def pytest_addoption(parser):
)
parser.addoption(
+ "--cov-topotest",
+ action="store_true",
+ help="Enable reporting of coverage",
+ )
+
+ parser.addoption(
+ "--cov-frr-build-dir",
+ help="Dir of coverage-enable build being run, default is the source dir",
+ )
+
+ parser.addoption(
"--gdb-breakpoints",
metavar="SYMBOL[,SYMBOL...]",
help="Comma-separated list of functions to set gdb breakpoints on",
@@ -456,6 +471,37 @@ def pytest_assertrepr_compare(op, left, right):
return json_result.gen_report()
+def setup_coverage(config):
+ commander = Commander("pytest")
+ if config.option.cov_frr_build_dir:
+ bdir = Path(config.option.cov_frr_build_dir).resolve()
+ output = commander.cmd_raises(f"find {bdir} -name zebra_nb.gcno").strip()
+ else:
+ # Support build sub-directory of main source dir
+ bdir = Path(__file__).resolve().parent.parent.parent
+ output = commander.cmd_raises(f"find {bdir} -name zebra_nb.gcno").strip()
+ m = re.match(f"({bdir}.*)/zebra/zebra_nb.gcno", output)
+ if not m:
+ logger.warning(
+ "No coverage data files (*.gcno) found, try specifying --cov-frr-build-dir"
+ )
+ return
+
+ bdir = Path(m.group(1))
+ # Save so we can get later from g_pytest_config
+ rundir = Path(config.option.rundir).resolve()
+ gcdadir = rundir / "gcda"
+ os.environ["FRR_BUILD_DIR"] = str(bdir)
+ os.environ["GCOV_PREFIX_STRIP"] = str(len(bdir.parts) - 1)
+ os.environ["GCOV_PREFIX"] = str(gcdadir)
+
+ if is_main_runner():
+ commander.cmd_raises(f"find {bdir} -name '*.gc??' -exec chmod o+r {{}} +")
+ commander.cmd_raises(f"mkdir -p {gcdadir}")
+ commander.cmd_raises(f"chown -R root:frr {gcdadir}")
+ commander.cmd_raises(f"chmod 2775 {gcdadir}")
+
+
def pytest_configure(config):
"""
Assert that the environment is correctly configured, and get extra config.
@@ -556,8 +602,6 @@ def pytest_configure(config):
if config.option.topology_only and is_xdist:
pytest.exit("Cannot use --topology-only with distributed test mode")
- pytest.exit("Cannot use --topology-only with distributed test mode")
-
# Check environment now that we have config
if not diagnose_env(rundir):
pytest.exit("environment has errors, please read the logs in %s" % rundir)
@@ -572,27 +616,25 @@ def pytest_configure(config):
if "TOPOTESTS_CHECK_STDERR" in os.environ:
del os.environ["TOPOTESTS_CHECK_STDERR"]
+ if config.option.cov_topotest:
+ setup_coverage(config)
+
@pytest.fixture(autouse=True, scope="session")
-def setup_session_auto():
+def session_autouse():
# Aligns logs nicely
logging.addLevelName(logging.WARNING, " WARN")
logging.addLevelName(logging.INFO, " INFO")
- if "PYTEST_TOPOTEST_WORKER" not in os.environ:
- is_worker = False
- elif not os.environ["PYTEST_TOPOTEST_WORKER"]:
- is_worker = False
- else:
- is_worker = True
+ is_main = is_main_runner()
- logger.debug("Before the run (is_worker: %s)", is_worker)
- if not is_worker:
+ logger.debug("Before the run (is_main: %s)", is_main)
+ if is_main:
cleanup_previous()
yield
- if not is_worker:
+ if is_main:
cleanup_current()
- logger.debug("After the run (is_worker: %s)", is_worker)
+ logger.debug("After the run (is_main: %s)", is_main)
def pytest_runtest_setup(item):
@@ -719,6 +761,49 @@ def pytest_runtest_makereport(item, call):
pause_test()
+def coverage_finish(terminalreporter, config):
+ commander = Commander("pytest")
+ rundir = Path(config.option.rundir).resolve()
+ bdir = Path(os.environ["FRR_BUILD_DIR"])
+ gcdadir = Path(os.environ["GCOV_PREFIX"])
+
+ logger.info("Creating .gcno ssymlink from '%s' to '%s'", gcdadir, bdir)
+ commander.cmd_raises(
+ f"cd {gcdadir}; bdir={bdir}"
+ + """
+for f in $(find . -name '*.gcda'); do
+ f=${f#./};
+ f=${f%.gcda}.gcno;
+ ln -fs $bdir/$f $f;
+ touch -h -r $bdir/$f $f;
+ echo $f;
+done"""
+ )
+
+ # Get the results into a summary file
+ data_file = rundir / "coverage.info"
+ logger.info("Gathering coverage data into: %s", data_file)
+ commander.cmd_raises(
+ f"lcov --directory {gcdadir} --capture --output-file {data_file}"
+ )
+
+ # Get coverage info filtered to a specific set of files
+ report_file = rundir / "coverage.info"
+ logger.debug("Generating coverage summary from: %s\n%s", report_file)
+ output = commander.cmd_raises(f"lcov --summary {data_file}")
+ logger.info("\nCOVERAGE-SUMMARY-START\n%s\nCOVERAGE-SUMMARY-END", output)
+ terminalreporter.write(
+ f"\nCOVERAGE-SUMMARY-START\n{output}\nCOVERAGE-SUMMARY-END\n"
+ )
+
+
+def pytest_terminal_summary(terminalreporter, exitstatus, config):
+ # Only run if we are the top level test runner
+ is_xdist_worker = "PYTEST_XDIST_WORKER" in os.environ
+ if config.option.cov_topotest and not is_xdist_worker:
+ coverage_finish(terminalreporter, config)
+
+
#
# Add common fixtures available to all tests as parameters
#
diff --git a/tests/topotests/eigrp_topo1/test_eigrp_topo1.py b/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
index 3c9392c..b3152f4 100644
--- a/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
+++ b/tests/topotests/eigrp_topo1/test_eigrp_topo1.py
@@ -193,6 +193,7 @@ if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
+
#
# Auxiliary Functions
#
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 c0621d7..cfcd4a1 100644
--- a/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
+++ b/tests/topotests/evpn_pim_1/test_evpn_pim_topo1.py
@@ -20,7 +20,7 @@ import pytest
import json
from functools import partial
-pytestmark = [pytest.mark.pimd]
+pytestmark = [pytest.mark.pimd, pytest.mark.bgpd]
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -32,10 +32,6 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-# Required to instantiate the topology builder class.
-
-pytestmark = [pytest.mark.bgpd, pytest.mark.bgpd]
-
#####################################################
##
diff --git a/tests/topotests/example_test/test_template.py b/tests/topotests/example_test/test_template.py
index 2797548..5728eba 100644
--- a/tests/topotests/example_test/test_template.py
+++ b/tests/topotests/example_test/test_template.py
@@ -41,6 +41,7 @@ pytestmark = [
# pytest.mark.vrrpd,
]
+
# Function we pass to Topogen to create the topology
def build_topo(tgen):
"Build function"
diff --git a/tests/topotests/fpm_testing_topo1/r1/fpm_counters.json b/tests/topotests/fpm_testing_topo1/r1/fpm_counters.json
new file mode 100644
index 0000000..05a6731
--- /dev/null
+++ b/tests/topotests/fpm_testing_topo1/r1/fpm_counters.json
@@ -0,0 +1,8 @@
+{
+ "connected":true,
+ "useNHG":true,
+ "useRouteReplace":true,
+ "disabled":false,
+ "address":"127.0.0.1",
+ "port":2620
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref.diff b/tests/topotests/fpm_testing_topo1/r1/fpm_stub.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/fpm_testing_topo1/r1/fpm_stub.conf
diff --git a/tests/topotests/fpm_testing_topo1/r1/routes_summ.json b/tests/topotests/fpm_testing_topo1/r1/routes_summ.json
new file mode 100644
index 0000000..e9157bc
--- /dev/null
+++ b/tests/topotests/fpm_testing_topo1/r1/routes_summ.json
@@ -0,0 +1,27 @@
+{
+ "routes":[
+ {
+ "fib":1,
+ "rib":1,
+ "fibOffLoaded":0,
+ "fibTrapped":0,
+ "type":"connected"
+ },
+ {
+ "fib":1,
+ "rib":1,
+ "fibOffLoaded":0,
+ "fibTrapped":0,
+ "type":"local"
+ },
+ {
+ "fib":10000,
+ "rib":10000,
+ "fibOffLoaded":0,
+ "fibTrapped":0,
+ "type":"sharp"
+ }
+ ],
+ "routesTotal":10002,
+ "routesTotalFib":10002
+}
diff --git a/tests/topotests/fpm_testing_topo1/r1/routes_summ_removed.json b/tests/topotests/fpm_testing_topo1/r1/routes_summ_removed.json
new file mode 100644
index 0000000..8585b2b
--- /dev/null
+++ b/tests/topotests/fpm_testing_topo1/r1/routes_summ_removed.json
@@ -0,0 +1,20 @@
+{
+ "routes":[
+ {
+ "fib":1,
+ "rib":1,
+ "fibOffLoaded":0,
+ "fibTrapped":0,
+ "type":"connected"
+ },
+ {
+ "fib":1,
+ "rib":1,
+ "fibOffLoaded":0,
+ "fibTrapped":0,
+ "type":"local"
+ }
+ ],
+ "routesTotal":2,
+ "routesTotalFib":2
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step10/show_ip_route.ref.diff b/tests/topotests/fpm_testing_topo1/r1/sharpd.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt2/step10/show_ip_route.ref.diff
+++ b/tests/topotests/fpm_testing_topo1/r1/sharpd.conf
diff --git a/tests/topotests/fpm_testing_topo1/r1/zebra.conf b/tests/topotests/fpm_testing_topo1/r1/zebra.conf
new file mode 100644
index 0000000..c7b1646
--- /dev/null
+++ b/tests/topotests/fpm_testing_topo1/r1/zebra.conf
@@ -0,0 +1,5 @@
+fpm address 127.0.0.1
+
+interface r1-eth0
+ ip address 192.168.44.1/24
+!
diff --git a/tests/topotests/fpm_testing_topo1/test_fpm_topo1.py b/tests/topotests/fpm_testing_topo1/test_fpm_topo1.py
new file mode 100644
index 0000000..22fc50b
--- /dev/null
+++ b/tests/topotests/fpm_testing_topo1/test_fpm_topo1.py
@@ -0,0 +1,135 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# test_route_scale1.py
+#
+# Copyright (c) 2024 by
+# Nvidia, Inc.
+# Donald Sharp
+#
+
+"""
+test_fpm_topo1.py: Testing FPM module
+
+"""
+import os
+import re
+import sys
+import pytest
+import json
+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
+
+
+pytestmark = [pytest.mark.fpm, pytest.mark.sharpd]
+
+
+def build_topo(tgen):
+ "Build function"
+
+ # Populate routers
+ tgen.add_router("r1")
+
+ switch = tgen.add_switch("sw1")
+ switch.add_link(tgen.gears["r1"])
+
+
+def setup_module(module):
+ "Setup topology"
+
+ # fpm_stub = os.system("which fpm-stub")
+ # if fpm-stub:
+ # pytest.skip("")
+
+ tgen = Topogen(build_topo, module.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+ for rname, router in router_list.items():
+ router.load_config(
+ TopoRouter.RD_ZEBRA,
+ os.path.join(CWD, "{}/zebra.conf".format(rname)),
+ "-M dplane_fpm_nl",
+ )
+ router.load_config(
+ TopoRouter.RD_SHARP, os.path.join(CWD, "{}/sharpd.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_FPM_LISTENER,
+ os.path.join(CWD, "{}/fpm_stub.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 test_fpm_connection_made():
+ "Test that the fpm starts up and a connection is made"
+
+ tgen = get_topogen()
+ router = tgen.gears["r1"]
+
+ fpm_counters = "{}/r1/fpm_counters.json".format(CWD)
+ expected = json.loads(open(fpm_counters).read())
+
+ test_func = partial(
+ topotest.router_json_cmp, router, "show fpm status json", expected
+ )
+
+ success, result = topotest.run_and_expect(test_func, None, 30, 1)
+ assert success, "Unable to connect to the fpm:\n{}".format(result)
+
+
+def test_fpm_install_routes():
+ "Test that simple routes installed appears to work"
+
+ tgen = get_topogen()
+ router = tgen.gears["r1"]
+
+ # Let's install 10000 routes
+ router.vtysh_cmd("sharp install routes 10.0.0.0 nexthop 192.168.44.33 10000")
+ routes_file = "{}/r1/routes_summ.json".format(CWD)
+ expected = json.loads(open(routes_file).read())
+
+ test_func = partial(
+ topotest.router_json_cmp, router, "show ip route summ json", expected
+ )
+
+ success, result = topotest.run_and_expect(test_func, None, 60, 1)
+ assert success, "Unable to successfully install 10000 routes: {}".format(result)
+
+ # Let's remove 10000 routes
+ router.vtysh_cmd("sharp remove routes 10.0.0.0 10000")
+
+ routes_file_removed = "{}/r1/routes_summ_removed.json".format(CWD)
+ expected = json.loads(open(routes_file_removed).read())
+
+ test_func = partial(
+ topotest.router_json_cmp, router, "show ip route summ json", expected
+ )
+
+ success, result = topotest.run_and_expect(test_func, None, 60, 1)
+ assert success, "Unable to remove 10000 routes: {}".format(result)
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/grpc_basic/test_basic_grpc.py b/tests/topotests/grpc_basic/test_basic_grpc.py
index 1ded663..cf1c6d0 100644
--- a/tests/topotests/grpc_basic/test_basic_grpc.py
+++ b/tests/topotests/grpc_basic/test_basic_grpc.py
@@ -9,16 +9,18 @@
test_basic_grpc.py: Test Basic gRPC.
"""
+import json
import logging
import os
+import re
import sys
import pytest
-
from lib.common_config import step
from lib.micronet import commander
from lib.topogen import Topogen, TopoRouter
from lib.topolog import logger
+from lib.topotest import json_cmp
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -28,6 +30,7 @@ GRPCP_BFDD = 50053
GRPCP_ISISD = 50054
GRPCP_OSPFD = 50055
GRPCP_PIMD = 50056
+GRPCP_MGMTD = 50057
pytestmark = [
pytest.mark.mgmtd,
@@ -59,12 +62,15 @@ def tgen(request):
for rname, router in router_list.items():
router.load_config(TopoRouter.RD_ZEBRA, "zebra.conf", f"-M grpc:{GRPCP_ZEBRA}")
- router.load_config(TopoRouter.RD_STATIC, None, f"-M grpc:{GRPCP_STATICD}")
- # router.load_config(TopoRouter.RD_BFD, None, f"-M grpc:{GRPCP_BFDD}")
+ router.load_config(TopoRouter.RD_STATIC, "", f"-M grpc:{GRPCP_STATICD}")
+ # router.load_config(TopoRouter.RD_BFDD, "", f"-M grpc:{GRPCP_BFDD}")
# router.load_config(TopoRouter.RD_ISIS, None, f"-M grpc:{GRPCP_ISISD}")
# router.load_config(TopoRouter.RD_OSPF, None, f"-M grpc:{GRPCP_OSPFD}")
# router.load_config(TopoRouter.RD_PIM, None, f"-M grpc:{GRPCP_PIMD}")
+ # This doesn't work yet...
+ # router.load_config(TopoRouter.RD_MGMTD, "", f"-M grpc:{GRPCP_MGMTD}")
+
tgen.start_router()
yield tgen
@@ -94,40 +100,94 @@ def run_grpc_client(r, port, commands):
def test_connectivity(tgen):
- r1 = tgen.gears["r1"]
- output = r1.cmd_raises("ping -c1 192.168.1.2")
- logging.info("ping output: %s", output)
+ tgen.gears["r1"].cmd_raises("ping -c1 192.168.1.2")
def test_capabilities(tgen):
r1 = tgen.gears["r1"]
- output = run_grpc_client(r1, GRPCP_ZEBRA, "GETCAP")
- logging.info("grpc output: %s", output)
+ output = run_grpc_client(r1, GRPCP_STATICD, "GETCAP")
+ logging.debug("grpc output: %s", output)
+
+ modules = sorted(re.findall('name: "([^"]+)"', output))
+ expected = ["frr-interface", "frr-routing", "frr-staticd", "frr-vrf"]
+ assert modules == expected
+
+ encodings = sorted(re.findall("supported_encodings: (.*)", output))
+ expected = ["JSON", "XML"]
+ assert encodings == expected
def test_get_config(tgen):
nrepeat = 5
r1 = tgen.gears["r1"]
- step("'GET' interface config 10 times, once per invocation")
+ step("'GET' interface config and state 10 times, once per invocation")
for i in range(0, nrepeat):
- output = run_grpc_client(r1, GRPCP_ZEBRA, "GET,/frr-interface:lib")
- logging.info("[iteration %s]: grpc GET output: %s", i, output)
+ output = run_grpc_client(r1, GRPCP_ZEBRA, "GET-CONFIG,/frr-interface:lib")
+ logging.debug("[iteration %s]: grpc GET output: %s", i, output)
step(f"'GET' YANG {nrepeat} times in one invocation")
- commands = ["GET,/frr-interface:lib" for _ in range(0, 10)]
+ commands = ["GET-CONFIG,/frr-interface:lib" for _ in range(0, 10)]
output = run_grpc_client(r1, GRPCP_ZEBRA, commands)
- logging.info("grpc GET*{%d} output: %s", nrepeat, output)
+ logging.debug("grpc GET*{%d} output: %s", nrepeat, output)
+
+ output = run_grpc_client(r1, GRPCP_ZEBRA, commands[0])
+ out_json = json.loads(output)
+ expect = json.loads(
+ """{
+ "frr-interface:lib": {
+ "interface": [
+ {
+ "name": "r1-eth0",
+ "frr-zebra:zebra": {
+ "ipv4-addrs": [
+ {
+ "ip": "192.168.1.1",
+ "prefix-length": 24
+ }
+ ],
+ "evpn-mh": {},
+ "ipv6-router-advertisements": {}
+ }
+ }
+ ]
+ },
+ "frr-zebra:zebra": {
+ "import-kernel-table": {}
+ }
+} """
+ )
+ result = json_cmp(out_json, expect, exact=True)
+ assert result is None
def test_get_vrf_config(tgen):
r1 = tgen.gears["r1"]
- step("'GET' get VRF config")
-
- output = run_grpc_client(r1, GRPCP_ZEBRA, "GET,/frr-vrf:lib")
- logging.info("grpc GET /frr-vrf:lib output: %s", output)
+ step("'GET' VRF config and state")
+
+ output = run_grpc_client(r1, GRPCP_STATICD, "GET,/frr-vrf:lib")
+ logging.debug("grpc GET /frr-vrf:lib output: %s", output)
+ out_json = json.loads(output)
+ expect = json.loads(
+ """{
+ "frr-vrf:lib": {
+ "vrf": [
+ {
+ "name": "default",
+ "state": {
+ "id": 0,
+ "active": true
+ }
+ }
+ ]
+ }
+}
+ """
+ )
+ result = json_cmp(out_json, expect, exact=True)
+ assert result is None
def test_shutdown_checks(tgen):
diff --git a/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py b/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
index 6a5f81d..6689cf4 100755
--- a/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
+++ b/tests/topotests/isis_sr_flex_algo_topo2/test_isis_sr_flex_algo_topo2.py
@@ -118,11 +118,19 @@ def setup_module(mod):
# 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_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname)))
+ router.load_config(
+ TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
+ )
if rname in ["rt0", "rt9"]:
- router.load_config( TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.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))
+ )
+ router.load_config(
+ TopoRouter.RD_PATH, os.path.join(CWD, "{}/pathd.conf".format(rname))
+ )
router.run("ip link add dum0 type dummy")
router.run("ip link set dum0 up")
if rname == "rt0":
@@ -145,6 +153,7 @@ def setup_testcase(msg):
pytest.skip(tgen.errors)
return tgen
+
def open_json_file(filename):
try:
with open(filename, "r") as f:
@@ -162,7 +171,7 @@ def check_rib(name, cmd, expected_file):
expected = open_json_file("{}/{}".format(CWD, expected_file))
return topotest.json_cmp(output, expected)
- logger.info("[+] check {} \"{}\" {}".format(name, cmd, expected_file))
+ logger.info('[+] check {} "{}" {}'.format(name, cmd, expected_file))
tgen = get_topogen()
func = partial(_check, name, cmd, expected_file)
success, result = topotest.run_and_expect(func, None, count=120, wait=0.5)
diff --git a/tests/topotests/isis_srv6_topo1/test_isis_srv6_topo1.py b/tests/topotests/isis_srv6_topo1/test_isis_srv6_topo1.py
index 892f6e1..1a7505d 100644
--- a/tests/topotests/isis_srv6_topo1/test_isis_srv6_topo1.py
+++ b/tests/topotests/isis_srv6_topo1/test_isis_srv6_topo1.py
@@ -197,13 +197,16 @@ def setup_module(mod):
# For all registered routers, load the zebra and isis configuration files
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_ISIS,
- os.path.join(CWD, '{}/isisd.conf'.format(rname)))
- if (os.path.exists('{}/sharpd.conf'.format(rname))):
- router.load_config(TopoRouter.RD_SHARP,
- os.path.join(CWD, '{}/sharpd.conf'.format(rname)))
+ router.load_config(
+ TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+ )
+ router.load_config(
+ TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
+ )
+ if os.path.exists("{}/sharpd.conf".format(rname)):
+ router.load_config(
+ TopoRouter.RD_SHARP, os.path.join(CWD, "{}/sharpd.conf".format(rname))
+ )
# Start routers
tgen.start_router()
@@ -227,7 +230,9 @@ def router_compare_json_output(rname, command, reference):
expected = json.loads(open(filename).read())
# Run test function until we get an result. Wait at most 60 seconds.
- test_func = functools.partial(topotest.router_json_cmp, tgen.gears[rname], command, expected)
+ test_func = functools.partial(
+ topotest.router_json_cmp, tgen.gears[rname], command, expected
+ )
_, diff = topotest.run_and_expect(test_func, None, count=120, wait=0.5)
assertmsg = '"{}" JSON output mismatches the expected result'.format(rname)
assert diff is None, assertmsg
@@ -308,8 +313,10 @@ def test_srv6_locator_step1():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step1/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step1/show_srv6_locator_table.ref",
+ )
def test_ping_step1():
@@ -326,10 +333,16 @@ def test_ping_step1():
pytest.skip(tgen.errors)
# Setup encap route on rt1, decap route on rt2
- tgen.gears["rt1"].vtysh_cmd("sharp install seg6-routes fc00:0:9::1 nexthop-seg6 2001:db8:1::2 encap fc00:0:1:2:6:f00d:: 1")
- tgen.gears["rt6"].vtysh_cmd("sharp install seg6local-routes fc00:0:f00d:: nexthop-seg6local eth-dst End_DT6 254 1")
- tgen.gears["dst"].vtysh_cmd("sharp install route 2001:db8:1::1 nexthop 2001:db8:10::1 1")
-
+ tgen.gears["rt1"].vtysh_cmd(
+ "sharp install seg6-routes fc00:0:9::1 nexthop-seg6 2001:db8:1::2 encap fc00:0:1:2:6:f00d:: 1"
+ )
+ tgen.gears["rt6"].vtysh_cmd(
+ "sharp install seg6local-routes fc00:0:f00d:: nexthop-seg6local eth-dst End_DT6 254 1"
+ )
+ tgen.gears["dst"].vtysh_cmd(
+ "sharp install route 2001:db8:1::1 nexthop 2001:db8:10::1 1"
+ )
+
# Try to ping dst from rt1
check_ping6("rt1", "fc00:0:9::1", True)
@@ -412,8 +425,10 @@ def test_srv6_locator_step2():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step2/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step2/show_srv6_locator_table.ref",
+ )
def test_ping_step2():
@@ -428,7 +443,7 @@ def test_ping_step2():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", False)
@@ -512,8 +527,10 @@ def test_srv6_locator_step3():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step3/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step3/show_srv6_locator_table.ref",
+ )
def test_ping_step3():
@@ -528,7 +545,7 @@ def test_ping_step3():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", True)
@@ -608,8 +625,10 @@ def test_srv6_locator_step4():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step4/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step4/show_srv6_locator_table.ref",
+ )
def test_ping_step4():
@@ -624,7 +643,7 @@ def test_ping_step4():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", False)
@@ -704,8 +723,10 @@ def test_srv6_locator_step5():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step5/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step5/show_srv6_locator_table.ref",
+ )
def test_ping_step5():
@@ -720,7 +741,7 @@ def test_ping_step5():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", True)
@@ -799,8 +820,10 @@ def test_srv6_locator_step6():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step6/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step6/show_srv6_locator_table.ref",
+ )
def test_ping_step6():
@@ -815,7 +838,7 @@ def test_ping_step6():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", False)
@@ -895,8 +918,10 @@ def test_srv6_locator_step7():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step7/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step7/show_srv6_locator_table.ref",
+ )
def test_ping_step7():
@@ -911,7 +936,7 @@ def test_ping_step7():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", True)
@@ -990,8 +1015,10 @@ def test_srv6_locator_step8():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step8/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step8/show_srv6_locator_table.ref",
+ )
def test_ping_step8():
@@ -1006,7 +1033,7 @@ def test_ping_step8():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", False)
@@ -1089,8 +1116,10 @@ def test_srv6_locator_step9():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show segment-routing srv6 locator json", "step9/show_srv6_locator_table.ref"
- )
+ rname,
+ "show segment-routing srv6 locator json",
+ "step9/show_srv6_locator_table.ref",
+ )
def test_ping_step9():
@@ -1105,7 +1134,7 @@ def test_ping_step9():
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
-
+
check_ping6("rt1", "fc00:0:9::1", True)
diff --git a/tests/topotests/isis_te_topo1/test_isis_te_topo1.py b/tests/topotests/isis_te_topo1/test_isis_te_topo1.py
index 9c70e05..eb4f310 100644
--- a/tests/topotests/isis_te_topo1/test_isis_te_topo1.py
+++ b/tests/topotests/isis_te_topo1/test_isis_te_topo1.py
@@ -189,10 +189,18 @@ def test_step3():
tgen = setup_testcase("Step3: Add IPv6 on r1 and r2 interfaces")
- tgen.net["r1"].cmd('vtysh -c "conf t" -c "interface r1-eth0" -c "ipv6 address 2001:db8:0::1/64"')
- tgen.net["r1"].cmd('vtysh -c "conf t" -c "interface r1-eth0" -c "ipv6 router isis TE"')
- tgen.net["r2"].cmd('vtysh -c "conf t" -c "interface r2-eth0" -c "ipv6 address 2001:db8:0::2/64"')
- tgen.net["r2"].cmd('vtysh -c "conf t" -c "interface r2-eth0" -c "ipv6 router isis TE"')
+ tgen.net["r1"].cmd(
+ 'vtysh -c "conf t" -c "interface r1-eth0" -c "ipv6 address 2001:db8:0::1/64"'
+ )
+ tgen.net["r1"].cmd(
+ 'vtysh -c "conf t" -c "interface r1-eth0" -c "ipv6 router isis TE"'
+ )
+ tgen.net["r2"].cmd(
+ 'vtysh -c "conf t" -c "interface r2-eth0" -c "ipv6 address 2001:db8:0::2/64"'
+ )
+ tgen.net["r2"].cmd(
+ 'vtysh -c "conf t" -c "interface r2-eth0" -c "ipv6 router isis TE"'
+ )
for rname in ["r1", "r2", "r3", "r4"]:
compare_ted_json_output(tgen, rname, "ted_step3.json")
@@ -202,8 +210,12 @@ def test_step4():
tgen = setup_testcase("Step4: Modify Prefix SID on router r4")
- tgen.net["r4"].cmd('vtysh -c "conf t" -c "router isis TE" -c "segment-routing prefix 10.0.255.4/32 index 40"')
- tgen.net["r4"].cmd('vtysh -c "conf t" -c "router isis TE" -c "segment-routing prefix 2001:db8:ffff::4/128 index 1040"')
+ tgen.net["r4"].cmd(
+ 'vtysh -c "conf t" -c "router isis TE" -c "segment-routing prefix 10.0.255.4/32 index 40"'
+ )
+ tgen.net["r4"].cmd(
+ 'vtysh -c "conf t" -c "router isis TE" -c "segment-routing prefix 2001:db8:ffff::4/128 index 1040"'
+ )
for rname in ["r1", "r2", "r3", "r4"]:
compare_ted_json_output(tgen, rname, "ted_step4.json")
@@ -229,9 +241,15 @@ def test_step6():
tgen = setup_testcase("Step6: Modify link parameters on r2 & r4")
- tgen.net["r2"].cmd('vtysh -c "conf t" -c "interface r2-eth3" -c "link-params" -c "no use-bw"')
- tgen.net["r4"].cmd('vtysh -c "conf t" -c "interface r4-eth0" -c "link-params" -c "delay 20000"')
- tgen.net["r4"].cmd('vtysh -c "conf t" -c "interface r4-eth0" -c "link-params" -c "delay-variation 10000"')
+ tgen.net["r2"].cmd(
+ 'vtysh -c "conf t" -c "interface r2-eth3" -c "link-params" -c "no use-bw"'
+ )
+ tgen.net["r4"].cmd(
+ 'vtysh -c "conf t" -c "interface r4-eth0" -c "link-params" -c "delay 20000"'
+ )
+ tgen.net["r4"].cmd(
+ 'vtysh -c "conf t" -c "interface r4-eth0" -c "link-params" -c "delay-variation 10000"'
+ )
for rname in ["r1", "r2", "r3", "r4"]:
compare_ted_json_output(tgen, rname, "ted_step6.json")
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 aa0357d..f73b22d 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
@@ -7,7 +7,8 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
}
]
},
@@ -31,7 +32,8 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
}
]
},
@@ -55,7 +57,8 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
}
]
},
@@ -79,7 +82,8 @@
"type":"SR (IS-IS)",
"outLabel":16050,
"installed":true,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
}
]
},
@@ -103,13 +107,15 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
}
]
},
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 9c5901b..fcef68c 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
@@ -10,14 +10,14 @@
"adjacency": [
{
"neighbor-sys-type": "level-1",
- "neighbor-sysid": "0000.0000.0003",
+ "neighbor-sysid": "0000.0000.0002",
"hold-timer": 10,
"neighbor-priority": 64,
"state": "up"
},
{
"neighbor-sys-type": "level-1",
- "neighbor-sysid": "0000.0000.0002",
+ "neighbor-sysid": "0000.0000.0003",
"hold-timer": 10,
"neighbor-priority": 64,
"state": "up"
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step12/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step12/show_ip_route.ref.diff
deleted file mode 100644
index a8d6e6c..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step12/show_ip_route.ref.diff
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/rt1/step11/show_ip_route.ref
-+++ b/rt1/step12/show_ip_route.ref
-@@ -110,16 +110,6 @@
- "labels":[
- 16060
- ]
-- },
-- {
-- "fib":true,
-- "ip":"10.0.1.3",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16060
-- ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step12/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step12/show_ipv6_route.ref.diff
deleted file mode 100644
index 637c59f..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step12/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/rt1/step11/show_ipv6_route.ref
-+++ b/rt1/step12/show_ipv6_route.ref
-@@ -105,15 +105,6 @@
- "labels":[
- 16061
- ]
-- },
-- {
-- "fib":true,
-- "afi":"ipv6",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16061
-- ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step12/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt1/step12/show_mpls_table.ref.diff
deleted file mode 100644
index e110bf4..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step12/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/rt1/step11/show_mpls_table.ref
-+++ b/rt1/step12/show_mpls_table.ref
-@@ -79,12 +79,6 @@
- "type":"SR (IS-IS)",
- "outLabel":16060,
- "installed":true,
-- "nexthop":"10.0.1.3"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16060,
-- "installed":true,
- "nexthop":"10.0.1.2"
- }
- ]
-@@ -96,12 +90,6 @@
- {
- "type":"SR (IS-IS)",
- "outLabel":16061,
-- "installed":true,
-- "interface":"eth-sw1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16061,
- "installed":true,
- "interface":"eth-sw1"
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref
new file mode 100644
index 0000000..92b7437
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ip_route.ref
@@ -0,0 +1,294 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref
new file mode 100644
index 0000000..3232121
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_ipv6_route.ref
@@ -0,0 +1,121 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref
new file mode 100644
index 0000000..f73b22d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step2/show_mpls_table.ref
@@ -0,0 +1,140 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref
new file mode 100644
index 0000000..92b7437
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ip_route.ref
@@ -0,0 +1,294 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref
new file mode 100644
index 0000000..3232121
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_ipv6_route.ref
@@ -0,0 +1,121 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref
new file mode 100644
index 0000000..f73b22d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step3/show_mpls_table.ref
@@ -0,0 +1,140 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref
new file mode 100644
index 0000000..89e0b16
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref
@@ -0,0 +1,291 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 10b336f..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ip_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step3/show_ip_route.ref
-+++ b/rt1/step4/show_ip_route.ref
-@@ -60,10 +60,7 @@
- "ip":"10.0.1.2",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref
new file mode 100644
index 0000000..0358d5d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref
@@ -0,0 +1,118 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 904aaa1..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step4/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step3/show_ipv6_route.ref
-+++ b/rt1/step4/show_ipv6_route.ref
-@@ -57,10 +57,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16041
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref
new file mode 100644
index 0000000..d587d42
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref
@@ -0,0 +1,115 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index d7d8753..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step4/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,33 +0,0 @@
---- a/rt1/step3/show_mpls_table.ref
-+++ b/rt1/step4/show_mpls_table.ref
-@@ -47,30 +47,6 @@
- }
- ]
- },
-- "16040":{
-- "inLabel":16040,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "installed":true,
-- "nexthop":"10.0.1.2"
-- }
-- ]
-- },
-- "16041":{
-- "inLabel":16041,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "installed":true,
-- "interface":"eth-sw1"
-- }
-- ]
-- },
- "16050":{
- "inLabel":16050,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref
new file mode 100644
index 0000000..92b7437
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref
@@ -0,0 +1,294 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index b583fa9..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ip_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step4/show_ip_route.ref
-+++ b/rt1/step5/show_ip_route.ref
-@@ -60,7 +60,10 @@
- "ip":"10.0.1.2",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref
new file mode 100644
index 0000000..3232121
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref
@@ -0,0 +1,121 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index d608abe..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step5/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step4/show_ipv6_route.ref
-+++ b/rt1/step5/show_ipv6_route.ref
-@@ -57,7 +57,10 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16041
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref
new file mode 100644
index 0000000..f73b22d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref
@@ -0,0 +1,140 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index b5161fc..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step5/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,33 +0,0 @@
---- a/rt1/step4/show_mpls_table.ref
-+++ b/rt1/step5/show_mpls_table.ref
-@@ -47,6 +47,30 @@
- }
- ]
- },
-+ "16040":{
-+ "inLabel":16040,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "installed":true,
-+ "nexthop":"10.0.1.2"
-+ }
-+ ]
-+ },
-+ "16041":{
-+ "inLabel":16041,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "installed":true,
-+ "interface":"eth-sw1"
-+ }
-+ ]
-+ },
- "16050":{
- "inLabel":16050,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref
new file mode 100644
index 0000000..92b7437
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ip_route.ref
@@ -0,0 +1,294 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref
new file mode 100644
index 0000000..3232121
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_ipv6_route.ref
@@ -0,0 +1,121 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref
new file mode 100644
index 0000000..f73b22d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step6/show_mpls_table.ref
@@ -0,0 +1,140 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref
new file mode 100644
index 0000000..270fcef
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref
@@ -0,0 +1,291 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 726aed5..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ip_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step6/show_ip_route.ref
-+++ b/rt1/step7/show_ip_route.ref
-@@ -83,10 +83,7 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref
new file mode 100644
index 0000000..7ded014
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref
@@ -0,0 +1,118 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 2049f6f..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step7/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step6/show_ipv6_route.ref
-+++ b/rt1/step7/show_ipv6_route.ref
-@@ -79,10 +79,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref
new file mode 100644
index 0000000..b4ba438
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref
@@ -0,0 +1,115 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 22301ba..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step7/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,33 +0,0 @@
---- a/rt1/step6/show_mpls_table.ref
-+++ b/rt1/step7/show_mpls_table.ref
-@@ -71,30 +71,6 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.1.3"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-sw1"
-- }
-- ]
-- },
- "16060":{
- "inLabel":16060,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref
new file mode 100644
index 0000000..92b7437
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref
@@ -0,0 +1,294 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 4a1d480..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ip_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step7/show_ip_route.ref
-+++ b/rt1/step8/show_ip_route.ref
-@@ -83,7 +83,10 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref
new file mode 100644
index 0000000..3232121
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref
@@ -0,0 +1,121 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index eaece74..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step8/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/rt1/step7/show_ipv6_route.ref
-+++ b/rt1/step8/show_ipv6_route.ref
-@@ -79,7 +79,10 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref
new file mode 100644
index 0000000..f73b22d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref
@@ -0,0 +1,140 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 46c17de..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step8/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,33 +0,0 @@
---- a/rt1/step7/show_mpls_table.ref
-+++ b/rt1/step8/show_mpls_table.ref
-@@ -71,6 +71,30 @@
- }
- ]
- },
-+ "16050":{
-+ "inLabel":16050,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "installed":true,
-+ "nexthop":"10.0.1.3"
-+ }
-+ ]
-+ },
-+ "16051":{
-+ "inLabel":16051,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "installed":true,
-+ "interface":"eth-sw1"
-+ }
-+ ]
-+ },
- "16060":{
- "inLabel":16060,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref
new file mode 100644
index 0000000..841c902
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref
@@ -0,0 +1,294 @@
+{
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 06efdc9..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ip_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt1/step8/show_ip_route.ref
-+++ b/rt1/step9/show_ip_route.ref
-@@ -85,7 +85,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref
new file mode 100644
index 0000000..4d35cf1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref
@@ -0,0 +1,121 @@
+{
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16501
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index a58f2d4..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step9/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt1/step8/show_ipv6_route.ref
-+++ b/rt1/step9/show_ipv6_route.ref
-@@ -81,7 +81,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16051
-+ 16501
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref
new file mode 100644
index 0000000..dc64494
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref
@@ -0,0 +1,140 @@
+{
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16500":{
+ "inLabel":16500,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16501":{
+ "inLabel":16501,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index c0a1ac5..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt1/step9/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,64 +0,0 @@
---- a/rt1/step8/show_mpls_table.ref
-+++ b/rt1/step9/show_mpls_table.ref
-@@ -71,30 +71,6 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.1.3"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-sw1"
-- }
-- ]
-- },
- "16060":{
- "inLabel":16060,
- "installed":true,
-@@ -129,6 +105,30 @@
- "installed":true,
- "interface":"eth-sw1"
- }
-+ ]
-+ },
-+ "16500":{
-+ "inLabel":16500,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16500,
-+ "installed":true,
-+ "nexthop":"10.0.1.3"
-+ }
-+ ]
-+ },
-+ "16501":{
-+ "inLabel":16501,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16501,
-+ "installed":true,
-+ "interface":"eth-sw1"
-+ }
- ]
- }
- }
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 6d31f6f..9543231 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
@@ -152,7 +152,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-1",
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
16051
@@ -161,7 +161,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt4-1",
"active":true,
"labels":[
16051
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 b9b906a..8580cb0 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
@@ -8,6 +8,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
"backupIndex":[
0,
1
@@ -18,12 +19,14 @@
{
"type":"SR (IS-IS)",
"outLabel":16050,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16050,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
}
]
},
@@ -64,6 +67,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.1.3",
+ "interface":"eth-sw1",
"backupIndex":[
0,
1
@@ -74,12 +78,14 @@
{
"type":"SR (IS-IS)",
"outLabel":16050,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16050,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
}
]
},
@@ -120,6 +126,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
"backupIndex":[
0
]
@@ -129,6 +136,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
"backupIndex":[
0
]
@@ -138,7 +146,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16050,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
}
]
},
@@ -181,19 +190,22 @@
"type":"SR (IS-IS)",
"outLabel":16050,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
},
{
"type":"SR (IS-IS)",
"outLabel":16050,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
},
{
"type":"SR (IS-IS)",
"outLabel":16050,
"installed":true,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
}
]
},
@@ -205,19 +217,19 @@
"type":"SR (IS-IS)",
"outLabel":16051,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-sw1"
},
{
"type":"SR (IS-IS)",
"outLabel":16051,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
},
{
"type":"SR (IS-IS)",
"outLabel":16051,
"installed":true,
- "interface":"eth-sw1"
+ "interface":"eth-rt4-1"
}
]
},
@@ -230,6 +242,7 @@
"outLabel":16060,
"installed":true,
"nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
"backupIndex":[
0
]
@@ -239,6 +252,7 @@
"outLabel":16060,
"installed":true,
"nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
"backupIndex":[
0
]
@@ -248,7 +262,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16060,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
}
]
},
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step10/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step10/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step10/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step11/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step11/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step11/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step11/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step11/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step11/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step11/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step11/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step11/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step12/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step12/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step12/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step12/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step12/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step12/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step12/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt2/step12/show_mpls_table.ref.diff
deleted file mode 100644
index 84a3644..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step12/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/rt2/step11/show_mpls_table.ref
-+++ b/rt2/step12/show_mpls_table.ref
-@@ -199,7 +199,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
-+ "outLabel":16500,
- "nexthop":"10.0.1.3"
- }
- ]
-@@ -230,7 +230,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
-+ "outLabel":16501,
- "interface":"eth-sw1"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref
new file mode 100644
index 0000000..374eec7
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref
@@ -0,0 +1,447 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 90e0895..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ip_route.ref.diff
+++ /dev/null
@@ -1,169 +0,0 @@
---- a/rt2/step1/show_ip_route.ref
-+++ b/rt2/step2/show_ip_route.ref
-@@ -15,36 +15,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050,
-- 16010
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050,
-- 16010
-- ]
-- }
- ]
- }
- ],
-@@ -64,36 +38,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050,
-- 16030
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050,
-- 16030
-- ]
-- }
- ]
- }
- ],
-@@ -251,40 +199,12 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-+ "interfaceName":"eth-sw1"
- },
- {
- "ip":"10.0.1.3",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "interfaceName":"eth-sw1"
- }
- ]
- }
-@@ -380,24 +300,6 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
- "active":true
- }
- ]
-@@ -418,24 +320,6 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
- "active":true
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref
new file mode 100644
index 0000000..ca4f96f
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref
@@ -0,0 +1,181 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 2d19f20..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step2/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,72 +0,0 @@
---- a/rt2/step1/show_ipv6_route.ref
-+++ b/rt2/step2/show_ipv6_route.ref
-@@ -14,34 +14,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051,
-- 16011
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051,
-- 16011
-- ]
-- }
- ]
- }
- ],
-@@ -60,34 +36,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051,
-- 16031
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051,
-- 16031
-- ]
-- }
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref
new file mode 100644
index 0000000..7b48e86
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref
@@ -0,0 +1,233 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 01fc74a..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step2/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/rt2/step1/show_mpls_table.ref
-+++ b/rt2/step2/show_mpls_table.ref
-@@ -7,23 +7,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.3.4"
-+ "nexthop":"10.0.1.1"
- }
- ]
- },
-@@ -35,23 +19,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-2"
-+ "interface":"eth-sw1"
- }
- ]
- },
-@@ -63,23 +31,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.3",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.3.4"
-+ "nexthop":"10.0.1.3"
- }
- ]
- },
-@@ -91,23 +43,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-2"
-+ "interface":"eth-sw1"
- }
- ]
- },
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref
new file mode 100644
index 0000000..7e1ccd1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index d93f036..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ip_route.ref.diff
+++ /dev/null
@@ -1,169 +0,0 @@
---- a/rt2/step2/show_ip_route.ref
-+++ b/rt2/step3/show_ip_route.ref
-@@ -15,10 +15,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16010
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16010
-+ ]
-+ }
- ]
- }
- ],
-@@ -38,10 +64,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16030
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16030
-+ ]
-+ }
- ]
- }
- ],
-@@ -199,12 +251,40 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
- },
- {
- "ip":"10.0.1.3",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
-@@ -300,6 +380,24 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-+ "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
- "active":true
- }
- ]
-@@ -320,6 +418,24 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-+ "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
- "active":true
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref
new file mode 100644
index 0000000..9543231
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 68b618e..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step3/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,72 +0,0 @@
---- a/rt2/step2/show_ipv6_route.ref
-+++ b/rt2/step3/show_ipv6_route.ref
-@@ -14,10 +14,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16011
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16011
-+ ]
-+ }
- ]
- }
- ],
-@@ -36,10 +60,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16031
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16031
-+ ]
-+ }
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref
new file mode 100644
index 0000000..8580cb0
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 966e153..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step3/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/rt2/step2/show_mpls_table.ref
-+++ b/rt2/step3/show_mpls_table.ref
-@@ -7,7 +7,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1"
-+ "nexthop":"10.0.1.1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.3.4"
- }
- ]
- },
-@@ -19,7 +35,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1"
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-2"
- }
- ]
- },
-@@ -31,7 +63,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.3"
-+ "nexthop":"10.0.1.3",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.3.4"
- }
- ]
- },
-@@ -43,7 +91,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1"
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-2"
- }
- ]
- },
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref
new file mode 100644
index 0000000..c5fc51b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref
@@ -0,0 +1,464 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index dd75d76..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ip_route.ref.diff
+++ /dev/null
@@ -1,192 +0,0 @@
---- a/rt2/step3/show_ip_route.ref
-+++ b/rt2/step4/show_ip_route.ref
-@@ -15,36 +15,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050,
-- 16010
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050,
-- 16010
-- ]
-- }
- ]
- }
- ],
-@@ -64,36 +38,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050,
-- 16030
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050,
-- 16030
-- ]
-- }
- ]
- }
- ],
-@@ -115,9 +63,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- },
- {
-@@ -128,9 +73,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -141,8 +83,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050,
-- 16040
-+ 16050
- ]
- }
- ]
-@@ -173,20 +114,14 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
-@@ -209,9 +144,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 16060
- ]
- },
- {
-@@ -222,9 +154,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 16060
- ]
- }
- ],
-@@ -251,40 +180,12 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-+ "interfaceName":"eth-sw1"
- },
- {
- "ip":"10.0.1.3",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "interfaceName":"eth-sw1"
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref
new file mode 100644
index 0000000..22bec0f
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref
@@ -0,0 +1,162 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 6373123..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step4/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,146 +0,0 @@
---- a/rt2/step3/show_ipv6_route.ref
-+++ b/rt2/step4/show_ipv6_route.ref
-@@ -14,34 +14,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051,
-- 16011
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051,
-- 16011
-- ]
-- }
- ]
- }
- ],
-@@ -60,34 +36,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051,
-- 16031
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051,
-- 16031
-- ]
-- }
- ]
- }
- ],
-@@ -108,9 +60,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- },
- {
-@@ -120,9 +69,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -132,8 +78,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16051,
-- 16041
-+ 16051
- ]
- }
- ]
-@@ -153,10 +98,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- },
- {
- "fib":true,
-@@ -171,10 +113,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- }
- ]
- }
-@@ -196,9 +135,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 16061
- ]
- },
- {
-@@ -208,9 +144,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 16061
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref
new file mode 100644
index 0000000..67f2b53
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref
@@ -0,0 +1,142 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 3872ce4..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step4/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,200 +0,0 @@
---- a/rt2/step3/show_mpls_table.ref
-+++ b/rt2/step4/show_mpls_table.ref
-@@ -7,23 +7,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.3.4"
-+ "nexthop":"10.0.1.1"
- }
- ]
- },
-@@ -35,23 +19,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-2"
-+ "interface":"eth-sw1"
- }
- ]
- },
-@@ -63,23 +31,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.3",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.3.4"
-+ "nexthop":"10.0.1.3"
- }
- ]
- },
-@@ -91,84 +43,6 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-2"
-- }
-- ]
-- },
-- "16040":{
-- "inLabel":16040,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.3.4",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.2.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.1.3"
-- }
-- ]
-- },
-- "16041":{
-- "inLabel":16041,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt4-2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt4-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
- "interface":"eth-sw1"
- }
- ]
-@@ -181,18 +55,6 @@
- "type":"SR (IS-IS)",
- "outLabel":16050,
- "installed":true,
-- "nexthop":"10.0.3.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
- "nexthop":"10.0.1.3"
- }
- ]
-@@ -204,18 +66,6 @@
- {
- "type":"SR (IS-IS)",
- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-rt4-2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
- "installed":true,
- "interface":"eth-sw1"
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref
new file mode 100644
index 0000000..7e1ccd1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 4d56364..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ip_route.ref.diff
+++ /dev/null
@@ -1,192 +0,0 @@
---- a/rt2/step4/show_ip_route.ref
-+++ b/rt2/step5/show_ip_route.ref
-@@ -15,10 +15,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16010
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16010
-+ ]
-+ }
- ]
- }
- ],
-@@ -38,10 +64,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16030
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16030
-+ ]
-+ }
- ]
- }
- ],
-@@ -63,6 +115,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- },
- {
-@@ -73,6 +128,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -83,7 +141,8 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050
-+ 16050,
-+ 16040
- ]
- }
- ]
-@@ -114,14 +173,20 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
-@@ -144,6 +209,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 16060
- ]
- },
- {
-@@ -154,6 +222,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 16060
- ]
- }
- ],
-@@ -180,12 +251,40 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
- },
- {
- "ip":"10.0.1.3",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref
new file mode 100644
index 0000000..9543231
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index f9e0276..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step5/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,146 +0,0 @@
---- a/rt2/step4/show_ipv6_route.ref
-+++ b/rt2/step5/show_ipv6_route.ref
-@@ -14,10 +14,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16011
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16011
-+ ]
-+ }
- ]
- }
- ],
-@@ -36,10 +60,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16031
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16031
-+ ]
-+ }
- ]
- }
- ],
-@@ -60,6 +108,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- },
- {
-@@ -69,6 +120,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -78,7 +132,8 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16051
-+ 16051,
-+ 16041
- ]
- }
- ]
-@@ -98,7 +153,10 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- },
- {
- "fib":true,
-@@ -113,7 +171,10 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- }
- ]
- }
-@@ -135,6 +196,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 16061
- ]
- },
- {
-@@ -144,6 +208,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 16061
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref
new file mode 100644
index 0000000..ecaaae1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 6aebbd6..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step5/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,200 +0,0 @@
---- a/rt2/step4/show_mpls_table.ref
-+++ b/rt2/step5/show_mpls_table.ref
-@@ -7,7 +7,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1"
-+ "nexthop":"10.0.1.1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.3.4"
- }
- ]
- },
-@@ -19,7 +35,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1"
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-2"
- }
- ]
- },
-@@ -31,7 +63,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.3"
-+ "nexthop":"10.0.1.3",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.3.4"
- }
- ]
- },
-@@ -43,6 +91,84 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-2"
-+ }
-+ ]
-+ },
-+ "16040":{
-+ "inLabel":16040,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.3.4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.2.4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.1.3"
-+ }
-+ ]
-+ },
-+ "16041":{
-+ "inLabel":16041,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt4-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt4-1",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
- "interface":"eth-sw1"
- }
- ]
-@@ -55,6 +181,18 @@
- "type":"SR (IS-IS)",
- "outLabel":16050,
- "installed":true,
-+ "nexthop":"10.0.3.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "installed":true,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "installed":true,
- "nexthop":"10.0.1.3"
- }
- ]
-@@ -66,6 +204,18 @@
- {
- "type":"SR (IS-IS)",
- "outLabel":16051,
-+ "installed":true,
-+ "interface":"eth-rt4-2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "installed":true,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
- "installed":true,
- "interface":"eth-sw1"
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref
new file mode 100644
index 0000000..7e1ccd1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref
new file mode 100644
index 0000000..9543231
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step6/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref
new file mode 100644
index 0000000..ecaaae1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step6/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref
new file mode 100644
index 0000000..9459f2e
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref
@@ -0,0 +1,405 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1"
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2"
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 5e73b97..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ip_route.ref.diff
+++ /dev/null
@@ -1,288 +0,0 @@
---- a/rt2/step6/show_ip_route.ref
-+++ b/rt2/step7/show_ip_route.ref
-@@ -15,36 +15,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050,
-- 16010
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050,
-- 16010
-- ]
-- }
- ]
- }
- ],
-@@ -64,36 +38,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050,
-- 16030
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050,
-- 16030
-- ]
-- }
- ]
- }
- ],
-@@ -113,9 +61,6 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
-@@ -126,25 +71,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.3",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16050,
-- 16040
-- ]
-- }
- ]
- }
- ],
-@@ -163,30 +93,21 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
-@@ -251,40 +172,12 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-+ "interfaceName":"eth-sw1"
- },
- {
- "ip":"10.0.1.3",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.2.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-- },
-- {
-- "ip":"10.0.3.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "interfaceName":"eth-sw1"
- }
- ]
- }
-@@ -299,30 +192,13 @@
- {
- "ip":"10.0.2.4",
- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1",
-- "backupIndex":[
-- 0
-- ]
-+ "interfaceName":"eth-rt4-1"
- },
- {
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.3",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
-@@ -338,29 +214,12 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-+ "active":true
- },
- {
- "ip":"10.0.3.4",
- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.3",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "interfaceName":"eth-rt4-2"
- }
- ]
- }
-@@ -497,31 +356,14 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.3",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref
new file mode 100644
index 0000000..a75e585
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref
@@ -0,0 +1,155 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 5dc4e59..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step7/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,139 +0,0 @@
---- a/rt2/step6/show_ipv6_route.ref
-+++ b/rt2/step7/show_ipv6_route.ref
-@@ -14,34 +14,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051,
-- 16011
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051,
-- 16011
-- ]
-- }
- ]
- }
- ],
-@@ -60,34 +36,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051,
-- 16031
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051,
-- 16031
-- ]
-- }
- ]
- }
- ],
-@@ -106,9 +58,6 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
-@@ -118,24 +67,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16051,
-- 16041
-- ]
-- }
- ]
- }
- ],
-@@ -153,28 +88,19 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref
new file mode 100644
index 0000000..2c0139f
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref
@@ -0,0 +1,155 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 6c0d739..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step7/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,207 +0,0 @@
---- a/rt2/step6/show_mpls_table.ref
-+++ b/rt2/step7/show_mpls_table.ref
-@@ -7,23 +7,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.3.4"
-+ "nexthop":"10.0.1.1"
- }
- ]
- },
-@@ -35,23 +19,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-2"
-+ "interface":"eth-sw1"
- }
- ]
- },
-@@ -63,23 +31,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.3",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.3.4"
-+ "nexthop":"10.0.1.3"
- }
- ]
- },
-@@ -91,23 +43,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4-2"
-+ "interface":"eth-sw1"
- }
- ]
- },
-@@ -119,26 +55,13 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.3.4",
-- "backupIndex":[
-- 0
-- ]
-+ "nexthop":"10.0.3.4"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.2.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.1.3"
-+ "nexthop":"10.0.2.4"
- }
- ]
- },
-@@ -150,74 +73,13 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt4-2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt4-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-sw1"
-- }
-- ]
-- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.3.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.1.3"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
- "interface":"eth-rt4-2"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":3,
- "installed":true,
- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-sw1"
- }
- ]
- },
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref
new file mode 100644
index 0000000..7e1ccd1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050,
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index f5df607..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ip_route.ref.diff
+++ /dev/null
@@ -1,288 +0,0 @@
---- a/rt2/step7/show_ip_route.ref
-+++ b/rt2/step8/show_ip_route.ref
-@@ -15,10 +15,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16010
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16010
-+ ]
-+ }
- ]
- }
- ],
-@@ -38,10 +64,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16030
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16030
-+ ]
-+ }
- ]
- }
- ],
-@@ -61,6 +113,9 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
-@@ -71,10 +126,25 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.3",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16050,
-+ 16040
-+ ]
-+ }
- ]
- }
- ],
-@@ -93,21 +163,30 @@
- "ip":"10.0.1.3",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
-@@ -172,12 +251,40 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
- },
- {
- "ip":"10.0.1.3",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.2.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
-+ },
-+ {
-+ "ip":"10.0.3.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
-@@ -192,13 +299,30 @@
- {
- "ip":"10.0.2.4",
- "afi":"ipv4",
-- "interfaceName":"eth-rt4-1"
-+ "interfaceName":"eth-rt4-1",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.3",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
-@@ -214,12 +338,29 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.3.4",
- "afi":"ipv4",
-- "interfaceName":"eth-rt4-2"
-+ "interfaceName":"eth-rt4-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.3",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
-@@ -356,14 +497,31 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.3",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref
new file mode 100644
index 0000000..9543231
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 125f36b..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step8/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,139 +0,0 @@
---- a/rt2/step7/show_ipv6_route.ref
-+++ b/rt2/step8/show_ipv6_route.ref
-@@ -14,10 +14,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16011
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16011
-+ ]
-+ }
- ]
- }
- ],
-@@ -36,10 +60,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-1",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16031
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4-2",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16031
-+ ]
-+ }
- ]
- }
- ],
-@@ -58,6 +106,9 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
-@@ -67,10 +118,24 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16051,
-+ 16041
-+ ]
-+ }
- ]
- }
- ],
-@@ -88,19 +153,28 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref
new file mode 100644
index 0000000..8580cb0
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index a1d5d79..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step8/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,207 +0,0 @@
---- a/rt2/step7/show_mpls_table.ref
-+++ b/rt2/step8/show_mpls_table.ref
-@@ -7,7 +7,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1"
-+ "nexthop":"10.0.1.1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.3.4"
- }
- ]
- },
-@@ -19,7 +35,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1"
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-2"
- }
- ]
- },
-@@ -31,7 +63,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.3"
-+ "nexthop":"10.0.1.3",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.3.4"
- }
- ]
- },
-@@ -43,7 +91,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1"
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4-2"
- }
- ]
- },
-@@ -55,13 +119,26 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.3.4"
-+ "nexthop":"10.0.3.4",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.2.4"
-+ "nexthop":"10.0.2.4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.1.3"
- }
- ]
- },
-@@ -73,13 +150,74 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt4-2"
-+ "interface":"eth-rt4-2",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-+ "interface":"eth-rt4-1",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-sw1"
-+ }
-+ ]
-+ },
-+ "16050":{
-+ "inLabel":16050,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "installed":true,
-+ "nexthop":"10.0.3.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "installed":true,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "installed":true,
-+ "nexthop":"10.0.1.3"
-+ }
-+ ]
-+ },
-+ "16051":{
-+ "inLabel":16051,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "installed":true,
-+ "interface":"eth-rt4-2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "installed":true,
- "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "installed":true,
-+ "interface":"eth-sw1"
- }
- ]
- },
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref
new file mode 100644
index 0000000..5096155
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16500,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16500,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16500,
+ 16030
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16500,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16500,
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 2475c63..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ip_route.ref.diff
+++ /dev/null
@@ -1,119 +0,0 @@
---- a/rt2/step8/show_ip_route.ref
-+++ b/rt2/step9/show_ip_route.ref
-@@ -31,7 +31,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050,
-+ 16500,
- 16010
- ]
- },
-@@ -41,7 +41,7 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050,
-+ 16500,
- 16010
- ]
- }
-@@ -80,7 +80,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050,
-+ 16500,
- 16030
- ]
- },
-@@ -90,7 +90,7 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050,
-+ 16500,
- 16030
- ]
- }
-@@ -141,7 +141,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050,
-+ 16500,
- 16040
- ]
- }
-@@ -165,7 +165,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- },
- {
-@@ -175,7 +175,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- },
- {
-@@ -185,7 +185,7 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
-@@ -274,7 +274,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- },
- {
-@@ -283,7 +283,7 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
-@@ -321,7 +321,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
-@@ -359,7 +359,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
-@@ -520,7 +520,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref
new file mode 100644
index 0000000..50e6a0a
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16501,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16501,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16501,
+ 16031
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16501,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16501,
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16501
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+ 16501
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16501
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 2d21fbc..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step9/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,74 +0,0 @@
---- a/rt2/step8/show_ipv6_route.ref
-+++ b/rt2/step9/show_ipv6_route.ref
-@@ -29,7 +29,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051,
-+ 16501,
- 16011
- ]
- },
-@@ -38,7 +38,7 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051,
-+ 16501,
- 16011
- ]
- }
-@@ -75,7 +75,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051,
-+ 16501,
- 16031
- ]
- },
-@@ -84,7 +84,7 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051,
-+ 16501,
- 16031
- ]
- }
-@@ -132,7 +132,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16051,
-+ 16501,
- 16041
- ]
- }
-@@ -155,7 +155,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
-+ 16501
- ]
- },
- {
-@@ -164,7 +164,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16051
-+ 16501
- ]
- },
- {
-@@ -173,7 +173,7 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051
-+ 16501
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref
new file mode 100644
index 0000000..0bba135
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16500":{
+ "inLabel":16500,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "installed":true,
+ "nexthop":"10.0.1.3",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "installed":true,
+ "nexthop":"10.0.3.4",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "installed":true,
+ "nexthop":"10.0.2.4",
+ "interface":"eth-rt4-1"
+ }
+ ]
+ },
+ "16501":{
+ "inLabel":16501,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index bc0ec31..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt2/step9/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,182 +0,0 @@
---- a/rt2/step8/show_mpls_table.ref
-+++ b/rt2/step9/show_mpls_table.ref
-@@ -17,12 +17,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":16500,
- "nexthop":"10.0.2.4"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":16500,
- "nexthop":"10.0.3.4"
- }
- ]
-@@ -45,12 +45,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":16501,
- "interface":"eth-rt4-1"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":16501,
- "interface":"eth-rt4-2"
- }
- ]
-@@ -73,12 +73,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":16500,
- "nexthop":"10.0.2.4"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":16500,
- "nexthop":"10.0.3.4"
- }
- ]
-@@ -101,12 +101,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":16501,
- "interface":"eth-rt4-1"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":16501,
- "interface":"eth-rt4-2"
- }
- ]
-@@ -137,7 +137,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":16500,
- "nexthop":"10.0.1.3"
- }
- ]
-@@ -168,55 +168,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-sw1"
-- }
-- ]
-- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.3.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.2.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "installed":true,
-- "nexthop":"10.0.1.3"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-rt4-2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-rt4-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "installed":true,
-+ "outLabel":16501,
- "interface":"eth-sw1"
- }
- ]
-@@ -282,5 +234,53 @@
- "interface":"eth-sw1"
- }
- ]
-+ },
-+ "16500":{
-+ "inLabel":16500,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16500,
-+ "installed":true,
-+ "nexthop":"10.0.3.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16500,
-+ "installed":true,
-+ "nexthop":"10.0.2.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16500,
-+ "installed":true,
-+ "nexthop":"10.0.1.3"
-+ }
-+ ]
-+ },
-+ "16501":{
-+ "inLabel":16501,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16501,
-+ "installed":true,
-+ "interface":"eth-rt4-2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16501,
-+ "installed":true,
-+ "interface":"eth-rt4-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16501,
-+ "installed":true,
-+ "interface":"eth-sw1"
-+ }
-+ ]
- }
- }
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 058d336..45af4e0 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
@@ -104,7 +104,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16041
@@ -113,7 +113,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16041
@@ -122,7 +122,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
16041
@@ -144,7 +144,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"backupIndex":[
0
@@ -156,7 +156,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"backupIndex":[
0
@@ -192,7 +192,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"backupIndex":[
0
@@ -204,7 +204,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"backupIndex":[
0
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 1912df3..1b12d04 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
@@ -8,6 +8,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
"backupIndex":[
0,
1
@@ -18,12 +19,14 @@
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
}
]
},
@@ -64,6 +67,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
"backupIndex":[
0,
1
@@ -74,12 +78,14 @@
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
}
]
},
@@ -119,19 +125,22 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
}
]
},
@@ -143,19 +152,19 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-sw1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-sw1"
+ "interface":"eth-rt5-1"
}
]
},
@@ -168,6 +177,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
"backupIndex":[
0
]
@@ -177,6 +187,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
"backupIndex":[
0
]
@@ -186,7 +197,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
}
]
},
@@ -230,6 +242,7 @@
"outLabel":16060,
"installed":true,
"nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
"backupIndex":[
0
]
@@ -239,6 +252,7 @@
"outLabel":16060,
"installed":true,
"nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
"backupIndex":[
0
]
@@ -248,7 +262,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16060,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
}
]
},
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 777c749..2645827 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
@@ -48,16 +48,16 @@
"adjacency": [
{
"neighbor-sys-type": "level-1",
- "neighbor-sysid": "0000.0000.0001",
+ "neighbor-sysid": "0000.0000.0002",
"hold-timer": 10,
- "neighbor-priority": 100,
+ "neighbor-priority": 64,
"state": "up"
},
{
"neighbor-sys-type": "level-1",
- "neighbor-sysid": "0000.0000.0002",
+ "neighbor-sysid": "0000.0000.0001",
"hold-timer": 10,
- "neighbor-priority": 64,
+ "neighbor-priority": 100,
"state": "up"
}
]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step10/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step10/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step10/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step10/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step10/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step10/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step10/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step10/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step10/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step11/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step11/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step11/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step11/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step11/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step11/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step11/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step11/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step11/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step12/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step12/show_ip_route.ref.diff
deleted file mode 100644
index 8695cf8..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step12/show_ip_route.ref.diff
+++ /dev/null
@@ -1,58 +0,0 @@
---- a/rt3/step11/show_ip_route.ref
-+++ b/rt3/step12/show_ip_route.ref
-@@ -198,44 +198,37 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":30,
-+ "metric":40,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
-- "ip":"10.0.4.5",
-+ "ip":"10.0.1.2",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
-+ "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
-- 30060
-+ 16060
- ]
- },
- {
- "fib":true,
-- "ip":"10.0.5.5",
-+ "ip":"10.0.4.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
-+ "interfaceName":"eth-rt5-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 30060
- ]
-- }
-- ],
-- "backupNexthops":[
-+ },
- {
-- "ip":"10.0.1.2",
-+ "fib":true,
-+ "ip":"10.0.5.5",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-+ "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16060
-+ 30060
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step12/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step12/show_ipv6_route.ref.diff
deleted file mode 100644
index 661d0fe..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step12/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,45 +0,0 @@
---- a/rt3/step11/show_ipv6_route.ref
-+++ b/rt3/step12/show_ipv6_route.ref
-@@ -186,7 +186,7 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":30,
-+ "metric":40,
- "installed":true,
- "nexthops":[
- {
-@@ -194,9 +194,6 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt5-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 30061
- ]
-@@ -206,23 +203,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt5-2",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 30061
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16061
-- ]
-- }
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step12/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt3/step12/show_mpls_table.ref.diff
deleted file mode 100644
index 30941b3..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step12/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/rt3/step11/show_mpls_table.ref
-+++ b/rt3/step12/show_mpls_table.ref
-@@ -165,27 +165,8 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30060,
-- "installed":true,
-- "nexthop":"10.0.5.5",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30060,
-- "installed":true,
-- "nexthop":"10.0.4.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16060,
-+ "installed":true,
- "nexthop":"10.0.1.2"
- }
- ]
-@@ -196,27 +177,8 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30061,
-- "installed":true,
-- "interface":"eth-rt5-2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30061,
-- "installed":true,
-- "interface":"eth-rt5-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16061,
-+ "installed":true,
- "interface":"eth-sw1"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref
new file mode 100644
index 0000000..d70e9fe
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16020
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref
new file mode 100644
index 0000000..45af4e0
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step2/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref
new file mode 100644
index 0000000..1b12d04
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step2/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref
new file mode 100644
index 0000000..d70e9fe
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16020
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref
new file mode 100644
index 0000000..45af4e0
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step3/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref
new file mode 100644
index 0000000..1b12d04
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step3/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref
new file mode 100644
index 0000000..5f87799
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref
@@ -0,0 +1,405 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1"
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1"
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2"
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 9ba73b0..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ip_route.ref.diff
+++ /dev/null
@@ -1,288 +0,0 @@
---- a/rt3/step3/show_ip_route.ref
-+++ b/rt3/step4/show_ip_route.ref
-@@ -15,36 +15,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.4.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "labels":[
-- 16040,
-- 16010
-- ]
-- },
-- {
-- "ip":"10.0.5.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "labels":[
-- 16040,
-- 16010
-- ]
-- }
- ]
- }
- ],
-@@ -64,36 +38,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.4.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "labels":[
-- 16040,
-- 16020
-- ]
-- },
-- {
-- "ip":"10.0.5.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "labels":[
-- 16040,
-- 16020
-- ]
-- }
- ]
- }
- ],
-@@ -112,30 +60,21 @@
- "ip":"10.0.1.2",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- }
- ]
- }
-@@ -156,9 +95,6 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
-@@ -169,25 +105,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16040,
-- 16050
-- ]
-- }
- ]
- }
- ],
-@@ -251,40 +172,12 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-+ "interfaceName":"eth-sw1"
- },
- {
- "ip":"10.0.1.2",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.4.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-- },
-- {
-- "ip":"10.0.5.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "interfaceName":"eth-sw1"
- }
- ]
- }
-@@ -375,30 +268,13 @@
- {
- "ip":"10.0.4.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
-- "backupIndex":[
-- 0
-- ]
-+ "interfaceName":"eth-rt5-1"
- },
- {
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- }
- ]
- }
-@@ -414,29 +290,12 @@
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-+ "active":true
- },
- {
- "ip":"10.0.5.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "interfaceName":"eth-rt5-2"
- }
- ]
- }
-@@ -531,31 +390,14 @@
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.1.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref
new file mode 100644
index 0000000..9142640
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref
@@ -0,0 +1,155 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 04f61c4..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step4/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,139 +0,0 @@
---- a/rt3/step3/show_ipv6_route.ref
-+++ b/rt3/step4/show_ipv6_route.ref
-@@ -14,34 +14,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "labels":[
-- 16041,
-- 16011
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "labels":[
-- 16041,
-- 16011
-- ]
-- }
- ]
- }
- ],
-@@ -60,34 +36,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-- "backupIndex":[
-- 0,
-- 1
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "labels":[
-- 16041,
-- 16021
-- ]
-- },
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "labels":[
-- 16041,
-- 16021
-- ]
-- }
- ]
- }
- ],
-@@ -105,28 +57,19 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-1",
-- "active":true,
-- "labels":[
-- 16041
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16041
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-2",
-- "active":true,
-- "labels":[
-- 16041
-- ]
-+ "active":true
- }
- ]
- }
-@@ -146,9 +89,6 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt5-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
-@@ -158,24 +98,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt5-2",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-sw1",
-- "active":true,
-- "labels":[
-- 16041,
-- 16051
-- ]
-- }
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref
new file mode 100644
index 0000000..0a6e316
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref
@@ -0,0 +1,155 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index b3588ca..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step4/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,206 +0,0 @@
---- a/rt3/step3/show_mpls_table.ref
-+++ b/rt3/step4/show_mpls_table.ref
-@@ -7,23 +7,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.4.5"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.5.5"
-+ "nexthop":"10.0.1.1"
- }
- ]
- },
-@@ -35,23 +19,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-rt5-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-rt5-2"
-+ "interface":"eth-sw1"
- }
- ]
- },
-@@ -63,23 +31,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.2",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.4.5"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.5.5"
-+ "nexthop":"10.0.1.2"
- }
- ]
- },
-@@ -91,70 +43,6 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1",
-- "backupIndex":[
-- 0,
-- 1
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-rt5-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-rt5-2"
-- }
-- ]
-- },
-- "16040":{
-- "inLabel":16040,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "installed":true,
-- "nexthop":"10.0.5.5"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "installed":true,
-- "nexthop":"10.0.4.5"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "installed":true,
-- "nexthop":"10.0.1.2"
-- }
-- ]
-- },
-- "16041":{
-- "inLabel":16041,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "installed":true,
-- "interface":"eth-rt5-2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "installed":true,
-- "interface":"eth-rt5-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "installed":true,
- "interface":"eth-sw1"
- }
- ]
-@@ -167,26 +55,13 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.5.5",
-- "backupIndex":[
-- 0
-- ]
-+ "nexthop":"10.0.5.5"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.4.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.1.2"
-+ "nexthop":"10.0.4.5"
- }
- ]
- },
-@@ -198,26 +73,13 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5-2",
-- "backupIndex":[
-- 0
-- ]
-+ "interface":"eth-rt5-2"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-sw1"
-+ "interface":"eth-rt5-1"
- }
- ]
- },
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref
new file mode 100644
index 0000000..d70e9fe
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16020
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040,
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 1af024f..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ip_route.ref.diff
+++ /dev/null
@@ -1,288 +0,0 @@
---- a/rt3/step4/show_ip_route.ref
-+++ b/rt3/step5/show_ip_route.ref
-@@ -15,10 +15,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.4.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-1",
-+ "active":true,
-+ "labels":[
-+ 16040,
-+ 16010
-+ ]
-+ },
-+ {
-+ "ip":"10.0.5.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-2",
-+ "active":true,
-+ "labels":[
-+ 16040,
-+ 16010
-+ ]
-+ }
- ]
- }
- ],
-@@ -38,10 +64,36 @@
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.4.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-1",
-+ "active":true,
-+ "labels":[
-+ 16040,
-+ 16020
-+ ]
-+ },
-+ {
-+ "ip":"10.0.5.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-2",
-+ "active":true,
-+ "labels":[
-+ 16040,
-+ 16020
-+ ]
-+ }
- ]
- }
- ],
-@@ -60,21 +112,30 @@
- "ip":"10.0.1.2",
- "afi":"ipv4",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
-@@ -95,6 +156,9 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
-@@ -105,10 +169,25 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16040,
-+ 16050
-+ ]
-+ }
- ]
- }
- ],
-@@ -172,12 +251,40 @@
- {
- "ip":"10.0.1.1",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
- },
- {
- "ip":"10.0.1.2",
- "afi":"ipv4",
-- "interfaceName":"eth-sw1"
-+ "interfaceName":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.4.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-1",
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
-+ },
-+ {
-+ "ip":"10.0.5.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-2",
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
-@@ -268,13 +375,30 @@
- {
- "ip":"10.0.4.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1"
-+ "interfaceName":"eth-rt5-1",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
-@@ -290,12 +414,29 @@
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.5.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2"
-+ "interfaceName":"eth-rt5-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
-@@ -390,14 +531,31 @@
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.1.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref
new file mode 100644
index 0000000..45af4e0
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 7cc79d0..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step5/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,139 +0,0 @@
---- a/rt3/step4/show_ipv6_route.ref
-+++ b/rt3/step5/show_ipv6_route.ref
-@@ -14,10 +14,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-1",
-+ "active":true,
-+ "labels":[
-+ 16041,
-+ 16011
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-2",
-+ "active":true,
-+ "labels":[
-+ 16041,
-+ 16011
-+ ]
-+ }
- ]
- }
- ],
-@@ -36,10 +60,34 @@
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
- "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-1",
-+ "active":true,
-+ "labels":[
-+ 16041,
-+ 16021
-+ ]
-+ },
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-2",
-+ "active":true,
-+ "labels":[
-+ 16041,
-+ 16021
-+ ]
-+ }
- ]
- }
- ],
-@@ -57,19 +105,28 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16041
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-sw1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16041
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16041
-+ ]
- }
- ]
- }
-@@ -89,6 +146,9 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt5-1",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
-@@ -98,10 +158,24 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt5-2",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-sw1",
-+ "active":true,
-+ "labels":[
-+ 16041,
-+ 16051
-+ ]
-+ }
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref
new file mode 100644
index 0000000..1b12d04
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 75a0f01..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step5/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,206 +0,0 @@
---- a/rt3/step4/show_mpls_table.ref
-+++ b/rt3/step5/show_mpls_table.ref
-@@ -7,7 +7,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.1"
-+ "nexthop":"10.0.1.1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.4.5"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.5.5"
- }
- ]
- },
-@@ -19,7 +35,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-sw1"
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-rt5-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-rt5-2"
- }
- ]
- },
-@@ -31,7 +63,23 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.1.2"
-+ "nexthop":"10.0.1.2",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.4.5"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.5.5"
- }
- ]
- },
-@@ -43,6 +91,70 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-+ "interface":"eth-sw1",
-+ "backupIndex":[
-+ 0,
-+ 1
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-rt5-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-rt5-2"
-+ }
-+ ]
-+ },
-+ "16040":{
-+ "inLabel":16040,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "installed":true,
-+ "nexthop":"10.0.5.5"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "installed":true,
-+ "nexthop":"10.0.4.5"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "installed":true,
-+ "nexthop":"10.0.1.2"
-+ }
-+ ]
-+ },
-+ "16041":{
-+ "inLabel":16041,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "installed":true,
-+ "interface":"eth-rt5-2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "installed":true,
-+ "interface":"eth-rt5-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "installed":true,
- "interface":"eth-sw1"
- }
- ]
-@@ -55,13 +167,26 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.5.5"
-+ "nexthop":"10.0.5.5",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.4.5"
-+ "nexthop":"10.0.4.5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.1.2"
- }
- ]
- },
-@@ -73,13 +198,26 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5-2"
-+ "interface":"eth-rt5-2",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5-1"
-+ "interface":"eth-rt5-1",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-sw1"
- }
- ]
- },
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref
new file mode 100644
index 0000000..e6d99e5
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040,
+ 30050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index c814a28..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ip_route.ref.diff
+++ /dev/null
@@ -1,101 +0,0 @@
---- a/rt3/step5/show_ip_route.ref
-+++ b/rt3/step6/show_ip_route.ref
-@@ -31,7 +31,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16040,
-+ 30040,
- 16010
- ]
- },
-@@ -41,7 +41,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16040,
-+ 30040,
- 16010
- ]
- }
-@@ -80,7 +80,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16040,
-+ 30040,
- 16020
- ]
- },
-@@ -90,7 +90,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16040,
-+ 30040,
- 16020
- ]
- }
-@@ -124,7 +124,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16040
-+ 30040
- ]
- },
- {
-@@ -134,7 +134,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16040
-+ 30040
- ]
- }
- ]
-@@ -185,7 +185,7 @@
- "active":true,
- "labels":[
- 16040,
-- 16050
-+ 30050
- ]
- }
- ]
-@@ -211,7 +211,7 @@
- 0
- ],
- "labels":[
-- 16060
-+ 30060
- ]
- },
- {
-@@ -224,7 +224,7 @@
- 0
- ],
- "labels":[
-- 16060
-+ 30060
- ]
- }
- ],
-@@ -274,7 +274,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16040
-+ 30040
- ]
- },
- {
-@@ -283,7 +283,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16040
-+ 30040
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref
new file mode 100644
index 0000000..f844d5a
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041,
+ 30051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 6f9405f..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step6/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,83 +0,0 @@
---- a/rt3/step5/show_ipv6_route.ref
-+++ b/rt3/step6/show_ipv6_route.ref
-@@ -29,7 +29,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16041,
-+ 30041,
- 16011
- ]
- },
-@@ -38,7 +38,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16041,
-+ 30041,
- 16011
- ]
- }
-@@ -75,7 +75,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16041,
-+ 30041,
- 16021
- ]
- },
-@@ -84,7 +84,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16041,
-+ 30041,
- 16021
- ]
- }
-@@ -107,7 +107,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16041
-+ 30041
- ]
- },
- {
-@@ -125,7 +125,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16041
-+ 30041
- ]
- }
- ]
-@@ -173,7 +173,7 @@
- "active":true,
- "labels":[
- 16041,
-- 16051
-+ 30051
- ]
- }
- ]
-@@ -198,7 +198,7 @@
- 0
- ],
- "labels":[
-- 16061
-+ 30061
- ]
- },
- {
-@@ -210,7 +210,7 @@
- 0
- ],
- "labels":[
-- 16061
-+ 30061
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref
new file mode 100644
index 0000000..052a5a1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index d8c3968..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step6/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,130 +0,0 @@
---- a/rt3/step5/show_mpls_table.ref
-+++ b/rt3/step6/show_mpls_table.ref
-@@ -17,12 +17,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":30040,
- "nexthop":"10.0.4.5"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":30040,
- "nexthop":"10.0.5.5"
- }
- ]
-@@ -45,12 +45,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":30041,
- "interface":"eth-rt5-1"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":30041,
- "interface":"eth-rt5-2"
- }
- ]
-@@ -73,12 +73,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":30040,
- "nexthop":"10.0.4.5"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":30040,
- "nexthop":"10.0.5.5"
- }
- ]
-@@ -101,12 +101,12 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":30041,
- "interface":"eth-rt5-1"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":30041,
- "interface":"eth-rt5-2"
- }
- ]
-@@ -117,13 +117,13 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":30040,
- "installed":true,
- "nexthop":"10.0.5.5"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":30040,
- "installed":true,
- "nexthop":"10.0.4.5"
- },
-@@ -141,13 +141,13 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":30041,
- "installed":true,
- "interface":"eth-rt5-2"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":30041,
- "installed":true,
- "interface":"eth-rt5-1"
- },
-@@ -227,7 +227,7 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
-+ "outLabel":30060,
- "installed":true,
- "nexthop":"10.0.5.5",
- "backupIndex":[
-@@ -236,7 +236,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
-+ "outLabel":30060,
- "installed":true,
- "nexthop":"10.0.4.5",
- "backupIndex":[
-@@ -258,7 +258,7 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
-+ "outLabel":30061,
- "installed":true,
- "interface":"eth-rt5-2",
- "backupIndex":[
-@@ -267,7 +267,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
-+ "outLabel":30061,
- "installed":true,
- "interface":"eth-rt5-1",
- "backupIndex":[
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref
new file mode 100644
index 0000000..fd340ba
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref
@@ -0,0 +1,556 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index c928fcd..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ip_route.ref.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/rt3/step6/show_ip_route.ref
-+++ b/rt3/step7/show_ip_route.ref
-@@ -158,9 +158,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- },
- {
-@@ -171,9 +168,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -184,8 +178,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16040,
-- 30050
-+ 16040
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref
new file mode 100644
index 0000000..27be692
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref
@@ -0,0 +1,222 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 0170971..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step7/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/rt3/step6/show_ipv6_route.ref
-+++ b/rt3/step7/show_ipv6_route.ref
-@@ -148,9 +148,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- },
- {
-@@ -160,9 +157,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -172,8 +166,7 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16041,
-- 30051
-+ 16041
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref
new file mode 100644
index 0000000..1d8d1d0
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref
@@ -0,0 +1,236 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index d7a3ed9..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step7/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,71 +0,0 @@
---- a/rt3/step6/show_mpls_table.ref
-+++ b/rt3/step7/show_mpls_table.ref
-@@ -159,68 +159,6 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.5.5",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.4.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.1.2"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt5-2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt5-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-sw1"
-- }
-- ]
-- },
- "16060":{
- "inLabel":16060,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref
new file mode 100644
index 0000000..e6d99e5
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040,
+ 30050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 41a7ff3..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ip_route.ref.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/rt3/step7/show_ip_route.ref
-+++ b/rt3/step8/show_ip_route.ref
-@@ -158,6 +158,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- },
- {
-@@ -168,6 +171,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -178,7 +184,8 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16040
-+ 16040,
-+ 30050
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref
new file mode 100644
index 0000000..f844d5a
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041,
+ 30051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index bd49f86..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step8/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/rt3/step7/show_ipv6_route.ref
-+++ b/rt3/step8/show_ipv6_route.ref
-@@ -148,6 +148,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- },
- {
-@@ -157,6 +160,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -166,7 +172,8 @@
- "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
-- 16041
-+ 16041,
-+ 30051
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref
new file mode 100644
index 0000000..052a5a1
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 4cc69b6..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step8/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,71 +0,0 @@
---- a/rt3/step7/show_mpls_table.ref
-+++ b/rt3/step8/show_mpls_table.ref
-@@ -159,6 +159,68 @@
- }
- ]
- },
-+ "16050":{
-+ "inLabel":16050,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.5.5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.4.5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.1.2"
-+ }
-+ ]
-+ },
-+ "16051":{
-+ "inLabel":16051,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt5-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt5-1",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-sw1"
-+ }
-+ ]
-+ },
- "16060":{
- "inLabel":16060,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref
new file mode 100644
index 0000000..a9590ee
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref
@@ -0,0 +1,563 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040,
+ 30500
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30060
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.1.1",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ },
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index cc0a482..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ip_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt3/step8/show_ip_route.ref
-+++ b/rt3/step9/show_ip_route.ref
-@@ -185,7 +185,7 @@
- "active":true,
- "labels":[
- 16040,
-- 30050
-+ 30500
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref
new file mode 100644
index 0000000..ce63540
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref
@@ -0,0 +1,229 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041,
+ 30501
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30061
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 650b982..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step9/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt3/step8/show_ipv6_route.ref
-+++ b/rt3/step9/show_ipv6_route.ref
-@@ -173,7 +173,7 @@
- "active":true,
- "labels":[
- 16041,
-- 30051
-+ 30501
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref
new file mode 100644
index 0000000..a364c2e
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.1",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5-2"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16500":{
+ "inLabel":16500,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.5",
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.5",
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.1.2",
+ "interface":"eth-sw1"
+ }
+ ]
+ },
+ "16501":{
+ "inLabel":16501,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-sw1"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 8ce4f1d..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt3/step9/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,133 +0,0 @@
---- a/rt3/step8/show_mpls_table.ref
-+++ b/rt3/step9/show_mpls_table.ref
-@@ -159,13 +159,13 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-+ "16060":{
-+ "inLabel":16060,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":30060,
- "installed":true,
- "nexthop":"10.0.5.5",
- "backupIndex":[
-@@ -174,7 +174,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":30060,
- "installed":true,
- "nexthop":"10.0.4.5",
- "backupIndex":[
-@@ -185,18 +185,18 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":16060,
- "nexthop":"10.0.1.2"
- }
- ]
- },
-- "16051":{
-- "inLabel":16051,
-+ "16061":{
-+ "inLabel":16061,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":30061,
- "installed":true,
- "interface":"eth-rt5-2",
- "backupIndex":[
-@@ -205,7 +205,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":30061,
- "installed":true,
- "interface":"eth-rt5-1",
- "backupIndex":[
-@@ -216,18 +216,18 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":16061,
- "interface":"eth-sw1"
- }
- ]
- },
-- "16060":{
-- "inLabel":16060,
-+ "16500":{
-+ "inLabel":16500,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30060,
-+ "outLabel":3,
- "installed":true,
- "nexthop":"10.0.5.5",
- "backupIndex":[
-@@ -236,7 +236,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":30060,
-+ "outLabel":3,
- "installed":true,
- "nexthop":"10.0.4.5",
- "backupIndex":[
-@@ -247,18 +247,18 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
-+ "outLabel":16040,
- "nexthop":"10.0.1.2"
- }
- ]
- },
-- "16061":{
-- "inLabel":16061,
-+ "16501":{
-+ "inLabel":16501,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30061,
-+ "outLabel":3,
- "installed":true,
- "interface":"eth-rt5-2",
- "backupIndex":[
-@@ -267,7 +267,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":30061,
-+ "outLabel":3,
- "installed":true,
- "interface":"eth-rt5-1",
- "backupIndex":[
-@@ -278,7 +278,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
-+ "outLabel":16041,
- "interface":"eth-sw1"
- }
- ]
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 b640df3..c757031 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
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"backupIndex":[
0
@@ -24,7 +24,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"backupIndex":[
0
@@ -59,7 +59,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"backupIndex":[
0
@@ -71,7 +71,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"backupIndex":[
0
@@ -107,7 +107,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -116,7 +116,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
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 f60937c..2a70907 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
@@ -8,6 +8,7 @@
"outLabel":16010,
"installed":true,
"nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
"backupIndex":[
0
]
@@ -17,6 +18,7 @@
"outLabel":16010,
"installed":true,
"nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
"backupIndex":[
0
]
@@ -26,7 +28,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16010,
- "nexthop":"10.0.6.5"
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
}
]
},
@@ -70,6 +73,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
"backupIndex":[
0
]
@@ -79,6 +83,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
"backupIndex":[
0
]
@@ -88,7 +93,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16030,
- "nexthop":"10.0.6.5"
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
}
]
},
@@ -131,19 +137,22 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.6.5"
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
}
]
},
@@ -180,6 +189,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.6.5",
+ "interface":"eth-rt5",
"backupIndex":[
0
]
@@ -189,7 +199,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16050,
- "nexthop":"10.0.7.6"
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6"
}
]
},
@@ -224,6 +235,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
"backupIndex":[
0
]
@@ -233,7 +245,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16060,
- "nexthop":"10.0.6.5"
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
}
]
},
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step10/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step10/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step10/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step10/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step10/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step10/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step10/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step10/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step10/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step11/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step11/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step11/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step11/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step11/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step11/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step11/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step11/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step11/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step12/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step12/show_ip_route.ref.diff
deleted file mode 100644
index 2645c59..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step12/show_ip_route.ref.diff
+++ /dev/null
@@ -1,144 +0,0 @@
---- a/rt4/step11/show_ip_route.ref
-+++ b/rt4/step12/show_ip_route.ref
-@@ -160,23 +160,13 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "backupIndex":[
-- 0
-+ 0,
-+ 1
- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16500
-- ]
-- }
- ]
- }
- ],
-@@ -196,24 +186,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30060
-- ]
-- }
- ]
- }
- ],
-@@ -352,19 +328,12 @@
- "active":true,
- "backupIndex":[
- 0,
-- 1,
-- 2
-+ 1
- ]
- }
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- },
-- {
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-@@ -397,19 +366,12 @@
- "active":true,
- "backupIndex":[
- 0,
-- 1,
-- 2
-+ 1
- ]
- }
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- },
-- {
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-@@ -439,14 +401,6 @@
- 0
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- }
- ]
- }
- ],
-@@ -460,18 +414,7 @@
- {
- "ip":"10.0.7.6",
- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true
-+ "interfaceName":"eth-rt6"
- }
- ]
- }
-@@ -492,13 +435,6 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
- "active":true
-- },
-- {
-- "fib":true,
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step12/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step12/show_ipv6_route.ref.diff
deleted file mode 100644
index 37e3185..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step12/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,50 +0,0 @@
---- a/rt4/step11/show_ipv6_route.ref
-+++ b/rt4/step12/show_ipv6_route.ref
-@@ -149,23 +149,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16501
-- ]
-- }
- ]
- }
- ],
-@@ -184,23 +171,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30061
-- ]
-- }
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step12/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt4/step12/show_mpls_table.ref.diff
deleted file mode 100644
index 186291a..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step12/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,78 +0,0 @@
---- a/rt4/step11/show_mpls_table.ref
-+++ b/rt4/step12/show_mpls_table.ref
-@@ -179,17 +179,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.7.6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30060,
-- "nexthop":"10.0.6.5"
-+ "nexthop":"10.0.7.6"
- }
- ]
- },
-@@ -201,17 +191,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30061,
-- "interface":"eth-rt5"
-+ "interface":"eth-rt6"
- }
- ]
- },
-@@ -223,17 +203,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.6.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16500,
-- "nexthop":"10.0.7.6"
-+ "nexthop":"10.0.6.5"
- }
- ]
- },
-@@ -245,17 +215,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16501,
-- "interface":"eth-rt6"
-+ "interface":"eth-rt5"
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref
new file mode 100644
index 0000000..0ef5d1b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref
new file mode 100644
index 0000000..c757031
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16031,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step2/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref
new file mode 100644
index 0000000..2a70907
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt5"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step2/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref
new file mode 100644
index 0000000..0ef5d1b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref
new file mode 100644
index 0000000..c757031
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16031,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step3/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref
new file mode 100644
index 0000000..2a70907
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt5"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step3/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref
new file mode 100644
index 0000000..0f26fa5
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref
@@ -0,0 +1,296 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1"
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2"
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5"
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6"
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index a941847..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ip_route.ref.diff
+++ /dev/null
@@ -1,367 +0,0 @@
---- a/rt4/step3/show_ip_route.ref
-+++ b/rt4/step4/show_ip_route.ref
-@@ -14,37 +14,14 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 16010
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 16010
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16010
-- ]
-+ "active":true
- }
- ]
- }
-@@ -64,38 +41,14 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16030,
-- 16020
-- ]
-+ "active":true
- }
- ]
- }
-@@ -115,30 +68,21 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "labels":[
-- 16030
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "labels":[
-- 16030
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16030
-- ]
-+ "active":true
- }
- ]
- }
-@@ -158,24 +102,7 @@
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
-@@ -195,24 +122,7 @@
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16060
-- ]
-+ "active":true
- }
- ]
- }
-@@ -232,27 +142,13 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
- "active":true
- }
- ]
-@@ -268,30 +164,13 @@
- {
- "ip":"10.0.2.2",
- "afi":"ipv4",
-- "interfaceName":"eth-rt2-1",
-- "backupIndex":[
-- 0
-- ]
-+ "interfaceName":"eth-rt2-1"
- },
- {
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16030
-- ]
-+ "active":true
- }
- ]
- }
-@@ -307,29 +186,12 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-+ "active":true
- },
- {
- "ip":"10.0.3.2",
- "afi":"ipv4",
-- "interfaceName":"eth-rt2-2",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16030
-- ]
-+ "interfaceName":"eth-rt2-2"
- }
- ]
- }
-@@ -349,31 +211,6 @@
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0,
-- 1,
-- 2
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- },
-- {
-- "ip":"10.0.2.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt2-1",
-- "active":true
-- },
-- {
-- "ip":"10.0.3.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt2-2",
- "active":true
- }
- ]
-@@ -394,31 +231,6 @@
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0,
-- 1,
-- 2
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- },
-- {
-- "ip":"10.0.2.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt2-1",
-- "active":true
-- },
-- {
-- "ip":"10.0.3.2",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt2-2",
- "active":true
- }
- ]
-@@ -434,18 +246,7 @@
- {
- "ip":"10.0.6.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.7.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-+ "interfaceName":"eth-rt5"
- }
- ]
- }
-@@ -460,18 +261,7 @@
- {
- "ip":"10.0.7.6",
- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true
-+ "interfaceName":"eth-rt6"
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref
new file mode 100644
index 0000000..329fa39
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref
@@ -0,0 +1,121 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 991562a..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step4/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,161 +0,0 @@
---- a/rt4/step3/show_ipv6_route.ref
-+++ b/rt4/step4/show_ipv6_route.ref
-@@ -13,35 +13,13 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 16011
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 16011
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16011
-- ]
-+ "active":true
- }
- ]
- }
-@@ -60,36 +38,13 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16031,
-- 16021
-- ]
-+ "active":true
- }
- ]
- }
-@@ -108,28 +63,19 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "labels":[
-- 16031
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "labels":[
-- 16031
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16031
-- ]
-+ "active":true
- }
- ]
- }
-@@ -148,23 +94,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- }
- ]
- }
-@@ -183,23 +113,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16061
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref
new file mode 100644
index 0000000..0967ef4
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref
@@ -0,0 +1 @@
+{}
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
deleted file mode 100644
index 660d2fb..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step4/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,265 +0,0 @@
---- a/rt4/step3/show_mpls_table.ref
-+++ b/rt4/step4/show_mpls_table.ref
-@@ -1,262 +1,2 @@
- {
-- "16010":{
-- "inLabel":16010,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16010,
-- "installed":true,
-- "nexthop":"10.0.3.2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16010,
-- "installed":true,
-- "nexthop":"10.0.2.2",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16010,
-- "nexthop":"10.0.6.5"
-- }
-- ]
-- },
-- "16011":{
-- "inLabel":16011,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16011,
-- "installed":true,
-- "interface":"eth-rt2-2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16011,
-- "installed":true,
-- "interface":"eth-rt2-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16011,
-- "interface":"eth-rt5"
-- }
-- ]
-- },
-- "16020":{
-- "inLabel":16020,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.3.2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.2.2",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16030,
-- "nexthop":"10.0.6.5"
-- }
-- ]
-- },
-- "16021":{
-- "inLabel":16021,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt2-2",
-- "backupIndex":[
-- 0
-- ]
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt2-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16031,
-- "interface":"eth-rt5"
-- }
-- ]
-- },
-- "16030":{
-- "inLabel":16030,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16030,
-- "installed":true,
-- "nexthop":"10.0.3.2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16030,
-- "installed":true,
-- "nexthop":"10.0.2.2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16030,
-- "installed":true,
-- "nexthop":"10.0.6.5"
-- }
-- ]
-- },
-- "16031":{
-- "inLabel":16031,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16031,
-- "installed":true,
-- "interface":"eth-rt2-2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16031,
-- "installed":true,
-- "interface":"eth-rt2-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16031,
-- "installed":true,
-- "interface":"eth-rt5"
-- }
-- ]
-- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.6.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.7.6"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt6"
-- }
-- ]
-- },
-- "16060":{
-- "inLabel":16060,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.7.6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16060,
-- "nexthop":"10.0.6.5"
-- }
-- ]
-- },
-- "16061":{
-- "inLabel":16061,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16061,
-- "interface":"eth-rt5"
-- }
-- ]
-- }
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref
new file mode 100644
index 0000000..0ef5d1b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 4385df2..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ip_route.ref.diff
+++ /dev/null
@@ -1,367 +0,0 @@
---- a/rt4/step4/show_ip_route.ref
-+++ b/rt4/step5/show_ip_route.ref
-@@ -14,14 +14,37 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 16010
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 16010
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16010
-+ ]
- }
- ]
- }
-@@ -41,14 +64,38 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16030,
-+ 16020
-+ ]
- }
- ]
- }
-@@ -68,21 +115,30 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16030
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16030
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16030
-+ ]
- }
- ]
- }
-@@ -102,7 +158,24 @@
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.7.6",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt6",
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
-@@ -122,7 +195,24 @@
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16060
-+ ]
- }
- ]
- }
-@@ -142,13 +232,27 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5",
- "active":true
- }
- ]
-@@ -164,13 +268,30 @@
- {
- "ip":"10.0.2.2",
- "afi":"ipv4",
-- "interfaceName":"eth-rt2-1"
-+ "interfaceName":"eth-rt2-1",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.3.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16030
-+ ]
- }
- ]
- }
-@@ -186,12 +307,29 @@
- "ip":"10.0.2.2",
- "afi":"ipv4",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.3.2",
- "afi":"ipv4",
-- "interfaceName":"eth-rt2-2"
-+ "interfaceName":"eth-rt2-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16030
-+ ]
- }
- ]
- }
-@@ -211,6 +349,31 @@
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-+ "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1,
-+ 2
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.7.6",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt6",
-+ "active":true
-+ },
-+ {
-+ "ip":"10.0.2.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt2-1",
-+ "active":true
-+ },
-+ {
-+ "ip":"10.0.3.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt2-2",
- "active":true
- }
- ]
-@@ -231,6 +394,31 @@
- "ip":"10.0.6.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-+ "active":true,
-+ "backupIndex":[
-+ 0,
-+ 1,
-+ 2
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.7.6",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt6",
-+ "active":true
-+ },
-+ {
-+ "ip":"10.0.2.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt2-1",
-+ "active":true
-+ },
-+ {
-+ "ip":"10.0.3.2",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt2-2",
- "active":true
- }
- ]
-@@ -246,7 +434,18 @@
- {
- "ip":"10.0.6.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5"
-+ "interfaceName":"eth-rt5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.7.6",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt6",
-+ "active":true
- }
- ]
- }
-@@ -261,7 +460,18 @@
- {
- "ip":"10.0.7.6",
- "afi":"ipv4",
-- "interfaceName":"eth-rt6"
-+ "interfaceName":"eth-rt6",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.5",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5",
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref
new file mode 100644
index 0000000..c757031
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16031,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 54a1dc2..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step5/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,161 +0,0 @@
---- a/rt4/step4/show_ipv6_route.ref
-+++ b/rt4/step5/show_ipv6_route.ref
-@@ -13,13 +13,35 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 16011
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 16011
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16011
-+ ]
- }
- ]
- }
-@@ -38,13 +60,36 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16031,
-+ 16021
-+ ]
- }
- ]
- }
-@@ -63,19 +108,28 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16031
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16031
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16031
-+ ]
- }
- ]
- }
-@@ -94,7 +148,23 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt6",
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- }
- ]
- }
-@@ -113,7 +183,23 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 16061
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref
new file mode 100644
index 0000000..2a70907
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt5"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index fb6a119..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step5/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,265 +0,0 @@
---- a/rt4/step4/show_mpls_table.ref
-+++ b/rt4/step5/show_mpls_table.ref
-@@ -1,2 +1,262 @@
- {
-+ "16010":{
-+ "inLabel":16010,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16010,
-+ "installed":true,
-+ "nexthop":"10.0.3.2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16010,
-+ "installed":true,
-+ "nexthop":"10.0.2.2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16010,
-+ "nexthop":"10.0.6.5"
-+ }
-+ ]
-+ },
-+ "16011":{
-+ "inLabel":16011,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16011,
-+ "installed":true,
-+ "interface":"eth-rt2-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16011,
-+ "installed":true,
-+ "interface":"eth-rt2-1",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16011,
-+ "interface":"eth-rt5"
-+ }
-+ ]
-+ },
-+ "16020":{
-+ "inLabel":16020,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.3.2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.2.2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16030,
-+ "nexthop":"10.0.6.5"
-+ }
-+ ]
-+ },
-+ "16021":{
-+ "inLabel":16021,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt2-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt2-1",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16031,
-+ "interface":"eth-rt5"
-+ }
-+ ]
-+ },
-+ "16030":{
-+ "inLabel":16030,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16030,
-+ "installed":true,
-+ "nexthop":"10.0.3.2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16030,
-+ "installed":true,
-+ "nexthop":"10.0.2.2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16030,
-+ "installed":true,
-+ "nexthop":"10.0.6.5"
-+ }
-+ ]
-+ },
-+ "16031":{
-+ "inLabel":16031,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16031,
-+ "installed":true,
-+ "interface":"eth-rt2-2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16031,
-+ "installed":true,
-+ "interface":"eth-rt2-1"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16031,
-+ "installed":true,
-+ "interface":"eth-rt5"
-+ }
-+ ]
-+ },
-+ "16050":{
-+ "inLabel":16050,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.6.5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.7.6"
-+ }
-+ ]
-+ },
-+ "16051":{
-+ "inLabel":16051,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt6"
-+ }
-+ ]
-+ },
-+ "16060":{
-+ "inLabel":16060,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.7.6",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16060,
-+ "nexthop":"10.0.6.5"
-+ }
-+ ]
-+ },
-+ "16061":{
-+ "inLabel":16061,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt6",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16061,
-+ "interface":"eth-rt5"
-+ }
-+ ]
-+ }
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref
new file mode 100644
index 0000000..89e556e
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 9070414..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ip_route.ref.diff
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/rt4/step5/show_ip_route.ref
-+++ b/rt4/step6/show_ip_route.ref
-@@ -43,7 +43,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16010
-+ 30010
- ]
- }
- ]
-@@ -93,7 +93,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16030,
-+ 30030,
- 16020
- ]
- }
-@@ -137,7 +137,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16030
-+ 30030
- ]
- }
- ]
-@@ -211,7 +211,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16060
-+ 30060
- ]
- }
- ]
-@@ -290,7 +290,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16030
-+ 30030
- ]
- }
- ]
-@@ -328,7 +328,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16030
-+ 30030
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref
new file mode 100644
index 0000000..12479fa
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 57a5764..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step6/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,38 +0,0 @@
---- a/rt4/step5/show_ipv6_route.ref
-+++ b/rt4/step6/show_ipv6_route.ref
-@@ -40,7 +40,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16011
-+ 30011
- ]
- }
- ]
-@@ -87,7 +87,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16031,
-+ 30031,
- 16021
- ]
- }
-@@ -128,7 +128,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16031
-+ 30031
- ]
- }
- ]
-@@ -198,7 +198,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16061
-+ 30061
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref
new file mode 100644
index 0000000..6693de7
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "interface":"eth-rt5"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 94f8785..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step6/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,74 +0,0 @@
---- a/rt4/step5/show_mpls_table.ref
-+++ b/rt4/step6/show_mpls_table.ref
-@@ -25,7 +25,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16010,
-+ "outLabel":30010,
- "nexthop":"10.0.6.5"
- }
- ]
-@@ -56,7 +56,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16011,
-+ "outLabel":30011,
- "interface":"eth-rt5"
- }
- ]
-@@ -87,7 +87,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16030,
-+ "outLabel":30030,
- "nexthop":"10.0.6.5"
- }
- ]
-@@ -118,7 +118,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16031,
-+ "outLabel":30031,
- "interface":"eth-rt5"
- }
- ]
-@@ -141,7 +141,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16030,
-+ "outLabel":30030,
- "installed":true,
- "nexthop":"10.0.6.5"
- }
-@@ -165,7 +165,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16031,
-+ "outLabel":30031,
- "installed":true,
- "interface":"eth-rt5"
- }
-@@ -232,7 +232,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
-+ "outLabel":30060,
- "nexthop":"10.0.6.5"
- }
- ]
-@@ -254,7 +254,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
-+ "outLabel":30061,
- "interface":"eth-rt5"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref
new file mode 100644
index 0000000..f90e7f4
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref
@@ -0,0 +1,500 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e54873d..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ip_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt4/step6/show_ip_route.ref
-+++ b/rt4/step7/show_ip_route.ref
-@@ -161,9 +161,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -172,10 +169,7 @@
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref
new file mode 100644
index 0000000..f55d6ba
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref
@@ -0,0 +1,201 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 92e08f9..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step7/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt4/step6/show_ipv6_route.ref
-+++ b/rt4/step7/show_ipv6_route.ref
-@@ -151,9 +151,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -161,10 +158,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref
new file mode 100644
index 0000000..e6a73be
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref
@@ -0,0 +1,229 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "interface":"eth-rt5"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index fb614eb..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step7/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,53 +0,0 @@
---- a/rt4/step6/show_mpls_table.ref
-+++ b/rt4/step7/show_mpls_table.ref
-@@ -171,50 +171,6 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.6.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.7.6"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt6"
-- }
-- ]
-- },
- "16060":{
- "inLabel":16060,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref
new file mode 100644
index 0000000..89e556e
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 252da6e..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ip_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt4/step7/show_ip_route.ref
-+++ b/rt4/step8/show_ip_route.ref
-@@ -161,6 +161,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -169,7 +172,10 @@
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref
new file mode 100644
index 0000000..12479fa
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 7057d21..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step8/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt4/step7/show_ipv6_route.ref
-+++ b/rt4/step8/show_ipv6_route.ref
-@@ -151,6 +151,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -158,7 +161,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref
new file mode 100644
index 0000000..6693de7
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "interface":"eth-rt5"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 3dc4303..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step8/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,53 +0,0 @@
---- a/rt4/step7/show_mpls_table.ref
-+++ b/rt4/step8/show_mpls_table.ref
-@@ -171,6 +171,50 @@
- }
- ]
- },
-+ "16050":{
-+ "inLabel":16050,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.6.5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.7.6"
-+ }
-+ ]
-+ },
-+ "16051":{
-+ "inLabel":16051,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt6"
-+ }
-+ ]
-+ },
- "16060":{
- "inLabel":16060,
- "installed":true,
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref
new file mode 100644
index 0000000..1a084c7
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030,
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30030
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 56f9cc5..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ip_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt4/step8/show_ip_route.ref
-+++ b/rt4/step9/show_ip_route.ref
-@@ -174,7 +174,7 @@
- "interfaceName":"eth-rt6",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref
new file mode 100644
index 0000000..1b08fde
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031,
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16501
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 41e5521..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step9/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt4/step8/show_ipv6_route.ref
-+++ b/rt4/step9/show_ipv6_route.ref
-@@ -163,7 +163,7 @@
- "interfaceName":"eth-rt6",
- "active":true,
- "labels":[
-- 16051
-+ 16501
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref
new file mode 100644
index 0000000..2c8ea08
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.3.2",
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.2.2",
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt2-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30060,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30061,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16500":{
+ "inLabel":16500,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "nexthop":"10.0.7.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16501":{
+ "inLabel":16501,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "interface":"eth-rt6"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 627e292..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt4/step9/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/rt4/step8/show_mpls_table.ref
-+++ b/rt4/step9/show_mpls_table.ref
-@@ -171,15 +171,15 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-+ "16060":{
-+ "inLabel":16060,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.6.5",
-+ "nexthop":"10.0.7.6",
- "backupIndex":[
- 0
- ]
-@@ -188,20 +188,20 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.7.6"
-+ "outLabel":30060,
-+ "nexthop":"10.0.6.5"
- }
- ]
- },
-- "16051":{
-- "inLabel":16051,
-+ "16061":{
-+ "inLabel":16061,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5",
-+ "interface":"eth-rt6",
- "backupIndex":[
- 0
- ]
-@@ -210,20 +210,20 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt6"
-+ "outLabel":30061,
-+ "interface":"eth-rt5"
- }
- ]
- },
-- "16060":{
-- "inLabel":16060,
-+ "16500":{
-+ "inLabel":16500,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.7.6",
-+ "nexthop":"10.0.6.5",
- "backupIndex":[
- 0
- ]
-@@ -232,20 +232,20 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30060,
-- "nexthop":"10.0.6.5"
-+ "outLabel":16500,
-+ "nexthop":"10.0.7.6"
- }
- ]
- },
-- "16061":{
-- "inLabel":16061,
-+ "16501":{
-+ "inLabel":16501,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt6",
-+ "interface":"eth-rt5",
- "backupIndex":[
- 0
- ]
-@@ -254,8 +254,8 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30061,
-- "interface":"eth-rt5"
-+ "outLabel":16501,
-+ "interface":"eth-rt6"
- }
- ]
- }
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 6dafa69..168828d 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
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt3-2",
+ "interfaceName":"eth-rt3-1",
"active":true,
"backupIndex":[
0
@@ -24,7 +24,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt3-1",
+ "interfaceName":"eth-rt3-2",
"active":true,
"backupIndex":[
0
@@ -59,7 +59,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt3-1",
"active":true,
"labels":[
16021
@@ -77,7 +77,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt3-1",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16021
@@ -99,7 +99,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt3-2",
+ "interfaceName":"eth-rt3-1",
"active":true,
"backupIndex":[
0
@@ -111,7 +111,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt3-1",
+ "interfaceName":"eth-rt3-2",
"active":true,
"backupIndex":[
0
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 0c5861b..14de03d 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
@@ -8,6 +8,7 @@
"outLabel":16010,
"installed":true,
"nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
"backupIndex":[
0
]
@@ -17,6 +18,7 @@
"outLabel":16010,
"installed":true,
"nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
"backupIndex":[
0
]
@@ -26,7 +28,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16010,
- "nexthop":"10.0.6.4"
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
}
]
},
@@ -69,19 +72,22 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.5.3"
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.4.3"
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.6.4"
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
}
]
},
@@ -118,6 +124,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
"backupIndex":[
0
]
@@ -127,6 +134,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
"backupIndex":[
0
]
@@ -136,7 +144,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16020,
- "nexthop":"10.0.6.4"
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
}
]
},
@@ -180,6 +189,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
"backupIndex":[
0
]
@@ -189,7 +199,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.8.6"
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
}
]
},
@@ -224,6 +235,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
"backupIndex":[
0
]
@@ -233,7 +245,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16060,
- "nexthop":"10.0.6.4"
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
}
]
},
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref
new file mode 100644
index 0000000..ff8ace2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref
@@ -0,0 +1,485 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6"
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref
new file mode 100644
index 0000000..bc39e11
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref
@@ -0,0 +1,194 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref
new file mode 100644
index 0000000..8a339e6
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref
@@ -0,0 +1,301 @@
+{
+ "30010":{
+ "inLabel":30010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30011":{
+ "inLabel":30011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30020":{
+ "inLabel":30020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30021":{
+ "inLabel":30021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30030":{
+ "inLabel":30030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30031":{
+ "inLabel":30031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30040":{
+ "inLabel":30040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ }
+ ]
+ },
+ "30041":{
+ "inLabel":30041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt3-2"
+ }
+ ]
+ },
+ "30060":{
+ "inLabel":30060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ }
+ ]
+ },
+ "30061":{
+ "inLabel":30061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0,
+ 1
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt3-2"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step10/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step11/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step11/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step11/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step11/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step11/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step11/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step11/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step11/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step11/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step12/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step12/show_ip_route.ref.diff
deleted file mode 100644
index 3d21c04..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step12/show_ip_route.ref.diff
+++ /dev/null
@@ -1,151 +0,0 @@
---- a/rt5/step11/show_ip_route.ref
-+++ b/rt5/step12/show_ip_route.ref
-@@ -159,24 +159,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.8.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-- }
- ]
- }
- ],
-@@ -187,25 +173,11 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":20,
-+ "metric":30,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
-- "ip":"10.0.8.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-@@ -276,19 +248,12 @@
- "active":true,
- "backupIndex":[
- 0,
-- 1,
-- 2
-+ 1
- ]
- }
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.8.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- },
-- {
- "ip":"10.0.4.3",
- "afi":"ipv4",
- "interfaceName":"eth-rt3-1",
-@@ -321,19 +286,12 @@
- "active":true,
- "backupIndex":[
- 0,
-- 1,
-- 2
-+ 1
- ]
- }
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.8.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- },
-- {
- "ip":"10.0.4.3",
- "afi":"ipv4",
- "interfaceName":"eth-rt3-1",
-@@ -439,14 +397,6 @@
- 0
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.8.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- }
- ]
- }
- ],
-@@ -465,39 +415,6 @@
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-- },
-- {
-- "fib":true,
-- "ip":"10.0.8.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "active":true
-- }
-- ]
-- }
-- ],
-- "10.0.8.0\/24":[
-- {
-- "prefix":"10.0.8.0\/24",
-- "protocol":"isis",
-- "distance":115,
-- "metric":20,
-- "nexthops":[
-- {
-- "ip":"10.0.8.6",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4",
- "active":true
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step12/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step12/show_ipv6_route.ref.diff
deleted file mode 100644
index 66a9dac..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step12/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,53 +0,0 @@
---- a/rt5/step11/show_ipv6_route.ref
-+++ b/rt5/step12/show_ipv6_route.ref
-@@ -149,23 +149,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16041
-- ]
-- }
- ]
- }
- ],
-@@ -176,25 +163,12 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":20,
-+ "metric":30,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
- "afi":"ipv6",
-- "interfaceName":"eth-rt6",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
- "interfaceName":"eth-rt4",
- "active":true,
- "labels":[
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step12/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt5/step12/show_mpls_table.ref.diff
deleted file mode 100644
index cdfc407..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step12/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,80 +0,0 @@
---- a/rt5/step11/show_mpls_table.ref
-+++ b/rt5/step12/show_mpls_table.ref
-@@ -179,17 +179,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.6.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.8.6"
-+ "nexthop":"10.0.6.4"
- }
- ]
- },
-@@ -201,17 +191,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-rt6"
-+ "interface":"eth-rt4"
- }
- ]
- },
-@@ -221,18 +201,8 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.8.6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16060,
-+ "installed":true,
- "nexthop":"10.0.6.4"
- }
- ]
-@@ -243,18 +213,8 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt6",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16061,
-+ "installed":true,
- "interface":"eth-rt4"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref
new file mode 100644
index 0000000..93740e2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref
new file mode 100644
index 0000000..168828d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step2/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref
new file mode 100644
index 0000000..14de03d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step2/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref
new file mode 100644
index 0000000..93740e2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref
new file mode 100644
index 0000000..168828d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step3/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref
new file mode 100644
index 0000000..14de03d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step3/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref
new file mode 100644
index 0000000..b5bd8c7
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref
@@ -0,0 +1,439 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1"
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2"
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 7545a31..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ip_route.ref.diff
+++ /dev/null
@@ -1,161 +0,0 @@
---- a/rt5/step3/show_ip_route.ref
-+++ b/rt5/step4/show_ip_route.ref
-@@ -41,10 +41,7 @@
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16010
-- ]
-+ "active":true
- }
- ]
- }
-@@ -84,10 +81,7 @@
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16020
-- ]
-+ "active":true
- }
- ]
- }
-@@ -108,9 +102,6 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt3-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
-@@ -121,25 +112,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt3-2",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16020,
-- 16030
-- ]
-- }
- ]
- }
- ],
-@@ -161,9 +137,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -172,10 +145,7 @@
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- }
- ]
- }
-@@ -209,10 +179,7 @@
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16060
-- ]
-+ "active":true
- }
- ]
- }
-@@ -358,30 +325,13 @@
- {
- "ip":"10.0.4.3",
- "afi":"ipv4",
-- "interfaceName":"eth-rt3-1",
-- "backupIndex":[
-- 0
-- ]
-+ "interfaceName":"eth-rt3-1"
- },
- {
- "ip":"10.0.5.3",
- "afi":"ipv4",
- "interfaceName":"eth-rt3-2",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16020
-- ]
-+ "active":true
- }
- ]
- }
-@@ -397,29 +347,12 @@
- "ip":"10.0.4.3",
- "afi":"ipv4",
- "interfaceName":"eth-rt3-1",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-+ "active":true
- },
- {
- "ip":"10.0.5.3",
- "afi":"ipv4",
-- "interfaceName":"eth-rt3-2",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.6.4",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16020
-- ]
-+ "interfaceName":"eth-rt3-2"
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref
new file mode 100644
index 0000000..647add8
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref
@@ -0,0 +1,175 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 3
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 1de62bb..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step4/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,95 +0,0 @@
---- a/rt5/step3/show_ipv6_route.ref
-+++ b/rt5/step4/show_ipv6_route.ref
-@@ -38,10 +38,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16011
-- ]
-+ "active":true
- }
- ]
- }
-@@ -60,10 +57,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16021
-- ]
-+ "active":true
- },
- {
- "fib":true,
-@@ -101,9 +95,6 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt3-2",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
-@@ -113,24 +104,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt3-1",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16021,
-- 16031
-- ]
-- }
- ]
- }
- ],
-@@ -151,9 +128,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -161,10 +135,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 16041
-- ]
-+ "active":true
- }
- ]
- }
-@@ -196,10 +167,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16061
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref
new file mode 100644
index 0000000..cfb0bf2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref
@@ -0,0 +1,189 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index b3d5252..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step4/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,166 +0,0 @@
---- a/rt5/step3/show_mpls_table.ref
-+++ b/rt5/step4/show_mpls_table.ref
-@@ -25,7 +25,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16010,
-+ "outLabel":3,
- "nexthop":"10.0.6.4"
- }
- ]
-@@ -56,7 +56,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16011,
-+ "outLabel":3,
- "interface":"eth-rt4"
- }
- ]
-@@ -76,12 +76,6 @@
- "outLabel":16020,
- "installed":true,
- "nexthop":"10.0.4.3"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16020,
-- "installed":true,
-- "nexthop":"10.0.6.4"
- }
- ]
- },
-@@ -100,12 +94,6 @@
- "outLabel":16021,
- "installed":true,
- "interface":"eth-rt3-1"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16021,
-- "installed":true,
-- "interface":"eth-rt4"
- }
- ]
- },
-@@ -117,26 +105,13 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.5.3",
-- "backupIndex":[
-- 0
-- ]
-+ "nexthop":"10.0.5.3"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.4.3",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16020,
-- "nexthop":"10.0.6.4"
-+ "nexthop":"10.0.4.3"
- }
- ]
- },
-@@ -148,70 +123,13 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt3-2",
-- "backupIndex":[
-- 0
-- ]
-+ "interface":"eth-rt3-2"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt3-1",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16021,
-- "interface":"eth-rt4"
-- }
-- ]
-- },
-- "16040":{
-- "inLabel":16040,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.6.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.8.6"
-- }
-- ]
-- },
-- "16041":{
-- "inLabel":16041,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-rt6"
-+ "interface":"eth-rt3-1"
- }
- ]
- },
-@@ -232,7 +150,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
-+ "outLabel":3,
- "nexthop":"10.0.6.4"
- }
- ]
-@@ -254,7 +172,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
-+ "outLabel":3,
- "interface":"eth-rt4"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref
new file mode 100644
index 0000000..93740e2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index be5d83f..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ip_route.ref.diff
+++ /dev/null
@@ -1,161 +0,0 @@
---- a/rt5/step4/show_ip_route.ref
-+++ b/rt5/step5/show_ip_route.ref
-@@ -41,7 +41,10 @@
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16010
-+ ]
- }
- ]
- }
-@@ -81,7 +84,10 @@
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16020
-+ ]
- }
- ]
- }
-@@ -102,6 +108,9 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt3-1",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
-@@ -112,10 +121,25 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt3-2",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4",
-+ "active":true,
-+ "labels":[
-+ 16020,
-+ 16030
-+ ]
-+ }
- ]
- }
- ],
-@@ -137,6 +161,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -145,7 +172,10 @@
- "ip":"10.0.8.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
-@@ -179,7 +209,10 @@
- "ip":"10.0.6.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16060
-+ ]
- }
- ]
- }
-@@ -325,13 +358,30 @@
- {
- "ip":"10.0.4.3",
- "afi":"ipv4",
-- "interfaceName":"eth-rt3-1"
-+ "interfaceName":"eth-rt3-1",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.5.3",
- "afi":"ipv4",
- "interfaceName":"eth-rt3-2",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4",
-+ "active":true,
-+ "labels":[
-+ 16020
-+ ]
- }
- ]
- }
-@@ -347,12 +397,29 @@
- "ip":"10.0.4.3",
- "afi":"ipv4",
- "interfaceName":"eth-rt3-1",
-- "active":true
-+ "active":true,
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "ip":"10.0.5.3",
- "afi":"ipv4",
-- "interfaceName":"eth-rt3-2"
-+ "interfaceName":"eth-rt3-2",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "ip":"10.0.6.4",
-+ "afi":"ipv4",
-+ "interfaceName":"eth-rt4",
-+ "active":true,
-+ "labels":[
-+ 16020
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref
new file mode 100644
index 0000000..168828d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index a856019..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step5/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,95 +0,0 @@
---- a/rt5/step4/show_ipv6_route.ref
-+++ b/rt5/step5/show_ipv6_route.ref
-@@ -38,7 +38,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16011
-+ ]
- }
- ]
- }
-@@ -57,7 +60,10 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16021
-+ ]
- },
- {
- "fib":true,
-@@ -95,6 +101,9 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt3-2",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
-@@ -104,10 +113,24 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt3-1",
- "active":true,
-+ "backupIndex":[
-+ 0
-+ ],
- "labels":[
- 3
- ]
- }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "afi":"ipv6",
-+ "interfaceName":"eth-rt4",
-+ "active":true,
-+ "labels":[
-+ 16021,
-+ 16031
-+ ]
-+ }
- ]
- }
- ],
-@@ -128,6 +151,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -135,7 +161,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16041
-+ ]
- }
- ]
- }
-@@ -167,7 +196,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16061
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref
new file mode 100644
index 0000000..d40be3d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "16060":{
+ "inLabel":16060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16061":{
+ "inLabel":16061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 74caa86..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step5/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,166 +0,0 @@
---- a/rt5/step4/show_mpls_table.ref
-+++ b/rt5/step5/show_mpls_table.ref
-@@ -25,7 +25,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16010,
- "nexthop":"10.0.6.4"
- }
- ]
-@@ -56,7 +56,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16011,
- "interface":"eth-rt4"
- }
- ]
-@@ -69,6 +69,12 @@
- "type":"SR (IS-IS)",
- "outLabel":16020,
- "installed":true,
-+ "nexthop":"10.0.6.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16020,
-+ "installed":true,
- "nexthop":"10.0.5.3"
- },
- {
-@@ -87,6 +93,12 @@
- "type":"SR (IS-IS)",
- "outLabel":16021,
- "installed":true,
-+ "interface":"eth-rt4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16021,
-+ "installed":true,
- "interface":"eth-rt3-2"
- },
- {
-@@ -105,13 +117,26 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.5.3"
-+ "nexthop":"10.0.5.3",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.4.3"
-+ "nexthop":"10.0.4.3",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16020,
-+ "nexthop":"10.0.6.4"
- }
- ]
- },
-@@ -123,13 +148,70 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt3-2"
-+ "interface":"eth-rt3-2",
-+ "backupIndex":[
-+ 0
-+ ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt3-1"
-+ "interface":"eth-rt3-1",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16021,
-+ "interface":"eth-rt4"
-+ }
-+ ]
-+ },
-+ "16040":{
-+ "inLabel":16040,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.6.4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.8.6"
-+ }
-+ ]
-+ },
-+ "16041":{
-+ "inLabel":16041,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-rt6"
- }
- ]
- },
-@@ -150,7 +232,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16060,
- "nexthop":"10.0.6.4"
- }
- ]
-@@ -172,7 +254,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16061,
- "interface":"eth-rt4"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref
new file mode 100644
index 0000000..93740e2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref
new file mode 100644
index 0000000..168828d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step6/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref
new file mode 100644
index 0000000..a21038b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "30010":{
+ "inLabel":30010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30011":{
+ "inLabel":30011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30020":{
+ "inLabel":30020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30021":{
+ "inLabel":30021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30030":{
+ "inLabel":30030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30031":{
+ "inLabel":30031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30040":{
+ "inLabel":30040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30041":{
+ "inLabel":30041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30060":{
+ "inLabel":30060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30061":{
+ "inLabel":30061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 2883c04..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step6/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,146 +0,0 @@
---- a/rt5/step5/show_mpls_table.ref
-+++ b/rt5/step6/show_mpls_table.ref
-@@ -1,6 +1,6 @@
- {
-- "16010":{
-- "inLabel":16010,
-+ "30010":{
-+ "inLabel":30010,
- "installed":true,
- "nexthops":[
- {
-@@ -30,8 +30,8 @@
- }
- ]
- },
-- "16011":{
-- "inLabel":16011,
-+ "30011":{
-+ "inLabel":30011,
- "installed":true,
- "nexthops":[
- {
-@@ -61,56 +61,56 @@
- }
- ]
- },
-- "16020":{
-- "inLabel":16020,
-+ "30020":{
-+ "inLabel":30020,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":16020,
- "installed":true,
-- "nexthop":"10.0.6.4"
-+ "nexthop":"10.0.5.3"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16020,
- "installed":true,
-- "nexthop":"10.0.5.3"
-+ "nexthop":"10.0.4.3"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16020,
- "installed":true,
-- "nexthop":"10.0.4.3"
-+ "nexthop":"10.0.6.4"
- }
- ]
- },
-- "16021":{
-- "inLabel":16021,
-+ "30021":{
-+ "inLabel":30021,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":16021,
- "installed":true,
-- "interface":"eth-rt4"
-+ "interface":"eth-rt3-2"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16021,
- "installed":true,
-- "interface":"eth-rt3-2"
-+ "interface":"eth-rt3-1"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16021,
- "installed":true,
-- "interface":"eth-rt3-1"
-+ "interface":"eth-rt4"
- }
- ]
- },
-- "16030":{
-- "inLabel":16030,
-+ "30030":{
-+ "inLabel":30030,
- "installed":true,
- "nexthops":[
- {
-@@ -140,8 +140,8 @@
- }
- ]
- },
-- "16031":{
-- "inLabel":16031,
-+ "30031":{
-+ "inLabel":30031,
- "installed":true,
- "nexthops":[
- {
-@@ -171,8 +171,8 @@
- }
- ]
- },
-- "16040":{
-- "inLabel":16040,
-+ "30040":{
-+ "inLabel":30040,
- "installed":true,
- "nexthops":[
- {
-@@ -193,8 +193,8 @@
- }
- ]
- },
-- "16041":{
-- "inLabel":16041,
-+ "30041":{
-+ "inLabel":30041,
- "installed":true,
- "nexthops":[
- {
-@@ -215,8 +215,8 @@
- }
- ]
- },
-- "16060":{
-- "inLabel":16060,
-+ "30060":{
-+ "inLabel":30060,
- "installed":true,
- "nexthops":[
- {
-@@ -237,8 +237,8 @@
- }
- ]
- },
-- "16061":{
-- "inLabel":16061,
-+ "30061":{
-+ "inLabel":30061,
- "installed":true,
- "nexthops":[
- {
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref
new file mode 100644
index 0000000..93740e2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref
new file mode 100644
index 0000000..168828d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step7/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref
new file mode 100644
index 0000000..a21038b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "30010":{
+ "inLabel":30010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30011":{
+ "inLabel":30011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30020":{
+ "inLabel":30020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30021":{
+ "inLabel":30021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30030":{
+ "inLabel":30030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30031":{
+ "inLabel":30031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30040":{
+ "inLabel":30040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30041":{
+ "inLabel":30041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30060":{
+ "inLabel":30060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30061":{
+ "inLabel":30061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step7/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref
new file mode 100644
index 0000000..93740e2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref
new file mode 100644
index 0000000..168828d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step8/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref
new file mode 100644
index 0000000..a21038b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "30010":{
+ "inLabel":30010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30011":{
+ "inLabel":30011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30020":{
+ "inLabel":30020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30021":{
+ "inLabel":30021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30030":{
+ "inLabel":30030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30031":{
+ "inLabel":30031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30040":{
+ "inLabel":30040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30041":{
+ "inLabel":30041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30060":{
+ "inLabel":30060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30061":{
+ "inLabel":30061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step8/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref
new file mode 100644
index 0000000..93740e2
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref
@@ -0,0 +1,506 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16010
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020,
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "6.6.6.6\/32":[
+ {
+ "prefix":"6.6.6.6\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16060
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0,
+ 1,
+ 2
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ },
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref
new file mode 100644
index 0000000..168828d
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref
@@ -0,0 +1,207 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16011
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::6\/128":[
+ {
+ "prefix":"2001:db8:1000::6\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16061
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step9/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref
new file mode 100644
index 0000000..a21038b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref
@@ -0,0 +1,275 @@
+{
+ "30010":{
+ "inLabel":30010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30011":{
+ "inLabel":30011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30020":{
+ "inLabel":30020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30021":{
+ "inLabel":30021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt3-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30030":{
+ "inLabel":30030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.5.3",
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.4.3",
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30031":{
+ "inLabel":30031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30040":{
+ "inLabel":30040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30041":{
+ "inLabel":30041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt6"
+ }
+ ]
+ },
+ "30060":{
+ "inLabel":30060,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.6",
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16060,
+ "nexthop":"10.0.6.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "30061":{
+ "inLabel":30061,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16061,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt5/step9/show_mpls_table.ref.diff
+++ /dev/null
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 1b19429..de31816 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
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
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 5b52a16..4bd85c3 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
@@ -7,13 +7,15 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.8.5"
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.7.4"
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
}
]
},
@@ -44,6 +46,7 @@
"outLabel":16020,
"installed":true,
"nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
"backupIndex":[
0
]
@@ -53,7 +56,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16020,
- "nexthop":"10.0.8.5"
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
}
]
},
@@ -88,6 +92,7 @@
"outLabel":16030,
"installed":true,
"nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
"backupIndex":[
0
]
@@ -97,7 +102,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16030,
- "nexthop":"10.0.7.4"
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
}
]
},
@@ -132,6 +138,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
"backupIndex":[
0
]
@@ -141,7 +148,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.8.5"
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
}
]
},
@@ -176,6 +184,7 @@
"outLabel":3,
"installed":true,
"nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
"backupIndex":[
0
]
@@ -185,7 +194,8 @@
{
"type":"SR (IS-IS)",
"outLabel":16050,
- "nexthop":"10.0.7.4"
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
}
]
},
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_down.ref b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_down.ref
new file mode 100644
index 0000000..2b573d0
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_down.ref
@@ -0,0 +1,6 @@
+{
+ "multihop":false,
+ "peer":"10.0.8.5",
+ "interface":"eth-rt5",
+ "status":"down"
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_up.ref b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_up.ref
new file mode 100644
index 0000000..f536b36
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_bfd_peer_up.ref
@@ -0,0 +1,6 @@
+{
+ "multihop":false,
+ "peer":"10.0.8.5",
+ "interface":"eth-rt5",
+ "status":"up"
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref
new file mode 100644
index 0000000..822e24b
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref
@@ -0,0 +1,354 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref
new file mode 100644
index 0000000..7a87f44
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref
@@ -0,0 +1,147 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16501
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref
new file mode 100644
index 0000000..6e4a783
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref
@@ -0,0 +1,127 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16500":{
+ "inLabel":16500,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16501":{
+ "inLabel":16501,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref.diff
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step10/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step11/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step11/show_ip_route.ref.diff
deleted file mode 100644
index e477e87..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step11/show_ip_route.ref.diff
+++ /dev/null
@@ -1,125 +0,0 @@
---- a/rt6/step10/show_ip_route.ref
-+++ b/rt6/step11/show_ip_route.ref
-@@ -76,25 +76,11 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":30,
-+ "metric":40,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 30030
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-@@ -150,25 +136,11 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":20,
-+ "metric":30,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-@@ -276,22 +248,11 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":20,
-+ "metric":30,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-@@ -307,22 +268,11 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":20,
-+ "metric":30,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-@@ -389,19 +339,9 @@
- "prefix":"10.0.8.0\/24",
- "protocol":"isis",
- "distance":115,
-- "metric":20,
-+ "metric":30,
- "nexthops":[
- {
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step11/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step11/show_ipv6_route.ref.diff
deleted file mode 100644
index 12e0b59..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step11/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/rt6/step10/show_ipv6_route.ref
-+++ b/rt6/step11/show_ipv6_route.ref
-@@ -72,25 +72,12 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":30,
-+ "metric":40,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 30031
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
- "interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-@@ -142,25 +129,12 @@
- "selected":true,
- "destSelected":true,
- "distance":115,
-- "metric":20,
-+ "metric":30,
- "installed":true,
- "nexthops":[
- {
- "fib":true,
- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "backupIndex":[
-- 0
-- ],
-- "labels":[
-- 3
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
- "interfaceName":"eth-rt4",
- "active":true,
- "labels":[
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step11/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step11/show_mpls_table.ref.diff
deleted file mode 100644
index 387dcca..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step11/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,106 +0,0 @@
---- a/rt6/step10/show_mpls_table.ref
-+++ b/rt6/step11/show_mpls_table.ref
-@@ -8,12 +8,6 @@
- "outLabel":16010,
- "installed":true,
- "nexthop":"10.0.7.4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30010,
-- "installed":true,
-- "nexthop":"10.0.8.5"
- }
- ]
- },
-@@ -26,12 +20,6 @@
- "outLabel":16011,
- "installed":true,
- "interface":"eth-rt4"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30011,
-- "installed":true,
-- "interface":"eth-rt5"
- }
- ]
- },
-@@ -85,18 +73,8 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30030,
-- "installed":true,
-- "nexthop":"10.0.8.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16030,
-+ "installed":true,
- "nexthop":"10.0.7.4"
- }
- ]
-@@ -107,17 +85,6 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":30031,
-- "installed":true,
-- "interface":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16031,
- "interface":"eth-rt4"
- }
-@@ -173,18 +140,8 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.8.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16500,
-+ "installed":true,
- "nexthop":"10.0.7.4"
- }
- ]
-@@ -195,18 +152,8 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":16501,
-+ "installed":true,
- "interface":"eth-rt4"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step12/show_ip_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step12/show_ip_route.ref.diff
deleted file mode 100644
index 1086b6e..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step12/show_ip_route.ref.diff
+++ /dev/null
@@ -1,153 +0,0 @@
---- a/rt6/step12/show_ip_route.ref
-+++ b/rt6/step12/show_ip_route.ref
-@@ -18,16 +18,6 @@
- "labels":[
- 16010
- ]
-- },
-- {
-- "fib":true,
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30010
-- ]
- }
- ]
- }
-@@ -48,24 +38,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 16020
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30020
-- ]
-- }
- ]
- }
- ],
-@@ -108,24 +84,10 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30040
-- ]
-- }
- ]
- }
- ],
-@@ -168,13 +130,6 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
- "active":true
-- },
-- {
-- "fib":true,
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true
- }
- ]
- }
-@@ -194,17 +149,6 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
- "active":true
- }
- ]
-@@ -225,17 +169,6 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
- "active":true
- }
- ]
-@@ -297,13 +230,6 @@
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
- "active":true
-- },
-- {
-- "fib":true,
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true
- }
- ]
- }
-@@ -318,18 +244,7 @@
- {
- "ip":"10.0.7.4",
- "afi":"ipv4",
-- "interfaceName":"eth-rt4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "ip":"10.0.8.5",
-- "afi":"ipv4",
-- "interfaceName":"eth-rt5",
-- "active":true
-+ "interfaceName":"eth-rt4"
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step12/show_ipv6_route.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step12/show_ipv6_route.ref.diff
deleted file mode 100644
index 571c66f..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step12/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/rt6/step12/show_ipv6_route.ref
-+++ b/rt6/step12/show_ipv6_route.ref
-@@ -17,15 +17,6 @@
- "labels":[
- 16011
- ]
-- },
-- {
-- "fib":true,
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30011
-- ]
- }
- ]
- }
-@@ -45,23 +36,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 16021
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30021
-- ]
-- }
- ]
- }
- ],
-@@ -102,23 +80,10 @@
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
- "active":true,
-- "backupIndex":[
-- 0
-- ],
- "labels":[
- 3
- ]
- }
-- ],
-- "backupNexthops":[
-- {
-- "afi":"ipv6",
-- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 30041
-- ]
-- }
- ]
- }
- ],
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step12/show_mpls_table.ref.diff b/tests/topotests/isis_tilfa_topo1/rt6/step12/show_mpls_table.ref.diff
deleted file mode 100644
index 18322f1..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step12/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,78 +0,0 @@
---- a/rt6/step12/show_mpls_table.ref
-+++ b/rt6/step12/show_mpls_table.ref
-@@ -31,17 +31,7 @@
- "type":"SR (IS-IS)",
- "outLabel":16020,
- "installed":true,
-- "nexthop":"10.0.7.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30020,
-- "nexthop":"10.0.8.5"
-+ "nexthop":"10.0.7.4"
- }
- ]
- },
-@@ -53,17 +43,7 @@
- "type":"SR (IS-IS)",
- "outLabel":16021,
- "installed":true,
-- "interface":"eth-rt4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30021,
-- "interface":"eth-rt5"
-+ "interface":"eth-rt4"
- }
- ]
- },
-@@ -98,17 +78,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.7.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30040,
-- "nexthop":"10.0.8.5"
-+ "nexthop":"10.0.7.4"
- }
- ]
- },
-@@ -120,17 +90,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":30041,
-- "interface":"eth-rt5"
-+ "interface":"eth-rt4"
- }
- ]
- }, \ No newline at end of file
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref
new file mode 100644
index 0000000..b9b43c4
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref
@@ -0,0 +1,413 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref
new file mode 100644
index 0000000..de31816
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref
@@ -0,0 +1,173 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step2/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref
new file mode 100644
index 0000000..4bd85c3
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref
@@ -0,0 +1,224 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step2/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref
new file mode 100644
index 0000000..b9b43c4
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref
@@ -0,0 +1,413 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ip_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref
new file mode 100644
index 0000000..de31816
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref
@@ -0,0 +1,173 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step3/show_ipv6_route.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref
new file mode 100644
index 0000000..4bd85c3
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref
@@ -0,0 +1,224 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index e69de29..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step3/show_mpls_table.ref.diff
+++ /dev/null
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref
new file mode 100644
index 0000000..d34a28e
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref
@@ -0,0 +1,395 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 7c2f004..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ip_route.ref.diff
+++ /dev/null
@@ -1,70 +0,0 @@
---- a/rt6/step3/show_ip_route.ref
-+++ b/rt6/step4/show_ip_route.ref
-@@ -14,10 +14,7 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16010
-- ]
-+ "active":true
- },
- {
- "fib":true,
-@@ -50,9 +47,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 16020
- ]
- }
- ],
-@@ -98,10 +92,7 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16030
-- ]
-+ "active":true
- }
- ]
- }
-@@ -124,9 +115,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -135,10 +123,7 @@
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16040
-- ]
-+ "active":true
- }
- ]
- }
-@@ -172,10 +157,7 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref
new file mode 100644
index 0000000..2527c85
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref
@@ -0,0 +1,155 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 70f872e..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step4/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,70 +0,0 @@
---- a/rt6/step3/show_ipv6_route.ref
-+++ b/rt6/step4/show_ipv6_route.ref
-@@ -13,10 +13,7 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16011
-- ]
-+ "active":true
- },
- {
- "fib":true,
-@@ -47,9 +44,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 16021
- ]
- }
- ],
-@@ -92,10 +86,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16031
-- ]
-+ "active":true
- }
- ]
- }
-@@ -117,9 +108,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -127,10 +115,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16041
-- ]
-+ "active":true
- }
- ]
- }
-@@ -162,10 +147,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref
new file mode 100644
index 0000000..5cac925
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref
@@ -0,0 +1,165 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index c191763..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step4/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,109 +0,0 @@
---- a/rt6/step3/show_mpls_table.ref
-+++ b/rt6/step4/show_mpls_table.ref
-@@ -8,12 +8,6 @@
- "outLabel":16010,
- "installed":true,
- "nexthop":"10.0.8.5"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16010,
-- "installed":true,
-- "nexthop":"10.0.7.4"
- }
- ]
- },
-@@ -26,12 +20,6 @@
- "outLabel":16011,
- "installed":true,
- "interface":"eth-rt5"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16011,
-- "installed":true,
-- "interface":"eth-rt4"
- }
- ]
- },
-@@ -96,7 +84,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16030,
-+ "outLabel":3,
- "nexthop":"10.0.7.4"
- }
- ]
-@@ -118,52 +106,8 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16031,
-- "interface":"eth-rt4"
-- }
-- ]
-- },
-- "16040":{
-- "inLabel":16040,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.7.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16040,
-- "nexthop":"10.0.8.5"
-- }
-- ]
-- },
-- "16041":{
-- "inLabel":16041,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16041,
-- "interface":"eth-rt5"
-+ "interface":"eth-rt4"
- }
- ]
- },
-@@ -184,7 +128,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":3,
- "nexthop":"10.0.7.4"
- }
- ]
-@@ -206,7 +150,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":3,
- "interface":"eth-rt4"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref
new file mode 100644
index 0000000..b9b43c4
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref
@@ -0,0 +1,413 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 9f017d2..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ip_route.ref.diff
+++ /dev/null
@@ -1,70 +0,0 @@
---- a/rt6/step4/show_ip_route.ref
-+++ b/rt6/step5/show_ip_route.ref
-@@ -14,7 +14,10 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16010
-+ ]
- },
- {
- "fib":true,
-@@ -47,6 +50,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 16020
- ]
- }
- ],
-@@ -92,7 +98,10 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16030
-+ ]
- }
- ]
- }
-@@ -115,6 +124,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -123,7 +135,10 @@
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16040
-+ ]
- }
- ]
- }
-@@ -157,7 +172,10 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref
new file mode 100644
index 0000000..de31816
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref
@@ -0,0 +1,173 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 1209504..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step5/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,70 +0,0 @@
---- a/rt6/step4/show_ipv6_route.ref
-+++ b/rt6/step5/show_ipv6_route.ref
-@@ -13,7 +13,10 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16011
-+ ]
- },
- {
- "fib":true,
-@@ -44,6 +47,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 16021
- ]
- }
- ],
-@@ -86,7 +92,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16031
-+ ]
- }
- ]
- }
-@@ -108,6 +117,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -115,7 +127,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16041
-+ ]
- }
- ]
- }
-@@ -147,7 +162,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref
new file mode 100644
index 0000000..ef2310f
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref
@@ -0,0 +1,224 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index abf7c2a..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step5/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,112 +0,0 @@
---- a/rt6/step4/show_mpls_table.ref
-+++ b/rt6/step5/show_mpls_table.ref
-@@ -7,6 +7,12 @@
- "type":"SR (IS-IS)",
- "outLabel":16010,
- "installed":true,
-+ "nexthop":"10.0.7.4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16010,
-+ "installed":true,
- "nexthop":"10.0.8.5"
- }
- ]
-@@ -19,6 +25,12 @@
- "type":"SR (IS-IS)",
- "outLabel":16011,
- "installed":true,
-+ "interface":"eth-rt4"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16011,
-+ "installed":true,
- "interface":"eth-rt5"
- }
- ]
-@@ -84,7 +96,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16030,
- "nexthop":"10.0.7.4"
- }
- ]
-@@ -106,11 +118,55 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16031,
- "interface":"eth-rt4"
- }
- ]
- },
-+ "16040":{
-+ "inLabel":16040,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.7.4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16040,
-+ "nexthop":"10.0.8.5"
-+ }
-+ ]
-+ },
-+ "16041":{
-+ "inLabel":16041,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16041,
-+ "interface":"eth-rt5"
-+ }
-+ ]
-+ },
- "16050":{
- "inLabel":16050,
- "installed":true,
-@@ -128,7 +184,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16050,
- "nexthop":"10.0.7.4"
- }
- ]
-@@ -150,7 +206,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16051,
- "interface":"eth-rt4"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref
new file mode 100644
index 0000000..ca39251
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref
@@ -0,0 +1,413 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index f318f95..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ip_route.ref.diff
+++ /dev/null
@@ -1,38 +0,0 @@
---- a/rt6/step5/show_ip_route.ref
-+++ b/rt6/step6/show_ip_route.ref
-@@ -26,7 +26,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16010
-+ 30010
- ]
- }
- ]
-@@ -63,7 +63,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16020
-+ 30020
- ]
- }
- ]
-@@ -89,7 +89,7 @@
- 0
- ],
- "labels":[
-- 16030
-+ 30030
- ]
- }
- ],
-@@ -137,7 +137,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16040
-+ 30040
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref
new file mode 100644
index 0000000..4a42ec9
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref
@@ -0,0 +1,173 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 9208491..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step6/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,38 +0,0 @@
---- a/rt6/step5/show_ipv6_route.ref
-+++ b/rt6/step6/show_ipv6_route.ref
-@@ -24,7 +24,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16011
-+ 30011
- ]
- }
- ]
-@@ -59,7 +59,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16021
-+ 30021
- ]
- }
- ]
-@@ -84,7 +84,7 @@
- 0
- ],
- "labels":[
-- 16031
-+ 30031
- ]
- }
- ],
-@@ -129,7 +129,7 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16041
-+ 30041
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref
new file mode 100644
index 0000000..edbe78a
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref
@@ -0,0 +1,224 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index aee8969..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step6/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,74 +0,0 @@
---- a/rt6/step5/show_mpls_table.ref
-+++ b/rt6/step6/show_mpls_table.ref
-@@ -11,7 +11,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16010,
-+ "outLabel":30010,
- "installed":true,
- "nexthop":"10.0.8.5"
- }
-@@ -29,7 +29,7 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16011,
-+ "outLabel":30011,
- "installed":true,
- "interface":"eth-rt5"
- }
-@@ -52,7 +52,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16020,
-+ "outLabel":30020,
- "nexthop":"10.0.8.5"
- }
- ]
-@@ -74,7 +74,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16021,
-+ "outLabel":30021,
- "interface":"eth-rt5"
- }
- ]
-@@ -85,7 +85,7 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16030,
-+ "outLabel":30030,
- "installed":true,
- "nexthop":"10.0.8.5",
- "backupIndex":[
-@@ -107,7 +107,7 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16031,
-+ "outLabel":30031,
- "installed":true,
- "interface":"eth-rt5",
- "backupIndex":[
-@@ -140,7 +140,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16040,
-+ "outLabel":30040,
- "nexthop":"10.0.8.5"
- }
- ]
-@@ -162,7 +162,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16041,
-+ "outLabel":30041,
- "interface":"eth-rt5"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref
new file mode 100644
index 0000000..ee47c1a
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref
@@ -0,0 +1,407 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 0e6c3ff..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ip_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt6/step6/show_ip_route.ref
-+++ b/rt6/step7/show_ip_route.ref
-@@ -161,9 +161,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -172,10 +169,7 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16050
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref
new file mode 100644
index 0000000..c5ef607
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref
@@ -0,0 +1,167 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 2fe46c8..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step7/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt6/step6/show_ipv6_route.ref
-+++ b/rt6/step7/show_ipv6_route.ref
-@@ -152,9 +152,6 @@
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
-@@ -162,10 +159,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 16051
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref
new file mode 100644
index 0000000..ad965ce
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref
@@ -0,0 +1,178 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 179a4f4..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step7/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,52 +0,0 @@
---- a/rt6/step6/show_mpls_table.ref
-+++ b/rt6/step7/show_mpls_table.ref
-@@ -166,49 +166,5 @@
- "interface":"eth-rt5"
- }
- ]
-- },
-- "16050":{
-- "inLabel":16050,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.8.5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16050,
-- "nexthop":"10.0.7.4"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt5",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16051,
-- "interface":"eth-rt4"
-- }
-- ]
- }
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref
new file mode 100644
index 0000000..ca39251
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref
@@ -0,0 +1,413 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16050
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 9d5c440..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ip_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt6/step7/show_ip_route.ref
-+++ b/rt6/step8/show_ip_route.ref
-@@ -161,6 +161,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -169,7 +172,10 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16050
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref
new file mode 100644
index 0000000..4a42ec9
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref
@@ -0,0 +1,173 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index 21cab20..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step8/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/rt6/step7/show_ipv6_route.ref
-+++ b/rt6/step8/show_ipv6_route.ref
-@@ -152,6 +152,9 @@
- "active":true,
- "backupIndex":[
- 0
-+ ],
-+ "labels":[
-+ 3
- ]
- }
- ],
-@@ -159,7 +162,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16051
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref
new file mode 100644
index 0000000..edbe78a
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref
@@ -0,0 +1,224 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16050":{
+ "inLabel":16050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16051":{
+ "inLabel":16051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 760c554..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step8/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,52 +0,0 @@
---- a/rt6/step7/show_mpls_table.ref
-+++ b/rt6/step8/show_mpls_table.ref
-@@ -166,5 +166,49 @@
- "interface":"eth-rt5"
- }
- ]
-+ },
-+ "16050":{
-+ "inLabel":16050,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.8.5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
-+ "nexthop":"10.0.7.4"
-+ }
-+ ]
-+ },
-+ "16051":{
-+ "inLabel":16051,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt5",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16051,
-+ "interface":"eth-rt4"
-+ }
-+ ]
- }
- }
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref
new file mode 100644
index 0000000..879d595
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref
@@ -0,0 +1,413 @@
+{
+ "1.1.1.1\/32":[
+ {
+ "prefix":"1.1.1.1\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16010
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30010
+ ]
+ }
+ ]
+ }
+ ],
+ "2.2.2.2\/32":[
+ {
+ "prefix":"2.2.2.2\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16020
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30020
+ ]
+ }
+ ]
+ }
+ ],
+ "3.3.3.3\/32":[
+ {
+ "prefix":"3.3.3.3\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30030
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16030
+ ]
+ }
+ ]
+ }
+ ],
+ "4.4.4.4\/32":[
+ {
+ "prefix":"4.4.4.4\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30040
+ ]
+ }
+ ]
+ }
+ ],
+ "5.5.5.5\/32":[
+ {
+ "prefix":"5.5.5.5\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16500
+ ]
+ }
+ ]
+ }
+ ],
+ "10.0.1.0\/24":[
+ {
+ "prefix":"10.0.1.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.2.0\/24":[
+ {
+ "prefix":"10.0.2.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.3.0\/24":[
+ {
+ "prefix":"10.0.3.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.4.0\/24":[
+ {
+ "prefix":"10.0.4.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.5.0\/24":[
+ {
+ "prefix":"10.0.5.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.6.0\/24":[
+ {
+ "prefix":"10.0.6.0\/24",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.7.0\/24":[
+ {
+ "prefix":"10.0.7.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+ }
+ ],
+ "10.0.8.0\/24":[
+ {
+ "prefix":"10.0.8.0\/24",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index ee29647..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ip_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt6/step8/show_ip_route.ref
-+++ b/rt6/step9/show_ip_route.ref
-@@ -174,7 +174,7 @@
- "interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-- 16050
-+ 16500
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref
new file mode 100644
index 0000000..e8a7200
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref
@@ -0,0 +1,173 @@
+{
+ "2001:db8:1000::1\/128":[
+ {
+ "prefix":"2001:db8:1000::1\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":40,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30011
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::2\/128":[
+ {
+ "prefix":"2001:db8:1000::2\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 16021
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30021
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::3\/128":[
+ {
+ "prefix":"2001:db8:1000::3\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 30031
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16031
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::4\/128":[
+ {
+ "prefix":"2001:db8:1000::4\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 30041
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::5\/128":[
+ {
+ "prefix":"2001:db8:1000::5\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16501
+ ]
+ }
+ ]
+ }
+ ]
+}
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
deleted file mode 100644
index bebca4d..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step9/show_ipv6_route.ref.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/rt6/step8/show_ipv6_route.ref
-+++ b/rt6/step9/show_ipv6_route.ref
-@@ -164,7 +164,7 @@
- "interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-- 16051
-+ 16501
- ]
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref
new file mode 100644
index 0000000..4b6c4ee
--- /dev/null
+++ b/tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref
@@ -0,0 +1,224 @@
+{
+ "16010":{
+ "inLabel":16010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30010,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16011":{
+ "inLabel":16011,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+ "interface":"eth-rt4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30011,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16020":{
+ "inLabel":16020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30020,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16021":{
+ "inLabel":16021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30021,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16030":{
+ "inLabel":16030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30030,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16031":{
+ "inLabel":16031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30031,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16040":{
+ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30040,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16041":{
+ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":30041,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "16500":{
+ "inLabel":16500,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "nexthop":"10.0.8.5",
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "nexthop":"10.0.7.4",
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "16501":{
+ "inLabel":16501,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16501,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
+}
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
deleted file mode 100644
index 57347d1..0000000
--- a/tests/topotests/isis_tilfa_topo1/rt6/step9/show_mpls_table.ref.diff
+++ /dev/null
@@ -1,39 +0,0 @@
---- a/rt6/step8/show_mpls_table.ref
-+++ b/rt6/step9/show_mpls_table.ref
-@@ -167,8 +167,8 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-+ "16500":{
-+ "inLabel":16500,
- "installed":true,
- "nexthops":[
- {
-@@ -184,13 +184,13 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":16500,
- "nexthop":"10.0.7.4"
- }
- ]
- },
-- "16051":{
-- "inLabel":16051,
-+ "16501":{
-+ "inLabel":16501,
- "installed":true,
- "nexthops":[
- {
-@@ -206,7 +206,7 @@
- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":16501,
- "interface":"eth-rt4"
- }
- ]
diff --git a/tests/topotests/isis_tilfa_topo1/rt6/zebra.conf b/tests/topotests/isis_tilfa_topo1/rt6/zebra.conf
index 94fed46..c765996 100644
--- a/tests/topotests/isis_tilfa_topo1/rt6/zebra.conf
+++ b/tests/topotests/isis_tilfa_topo1/rt6/zebra.conf
@@ -16,6 +16,7 @@ interface eth-rt4
!
interface eth-rt5
ip address 10.0.8.6/24
+ no link-detect
!
ip forwarding
!
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 e2bbf45..aaf6af0 100755
--- a/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
+++ b/tests/topotests/isis_tilfa_topo1/test_isis_tilfa_topo1.py
@@ -56,6 +56,7 @@ import pytest
import json
import tempfile
from functools import partial
+from time import sleep
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -120,45 +121,6 @@ def build_topo(tgen):
switch.add_link(tgen.gears["rt5"], nodeif="eth-rt6")
switch.add_link(tgen.gears["rt6"], nodeif="eth-rt5")
- #
- # Populate multi-dimensional dictionary containing all expected outputs
- #
- files = [
- "show_ip_route.ref",
- "show_ipv6_route.ref",
- "show_mpls_table.ref",
- "show_yang_interface_isis_adjacencies.ref",
- ]
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- outputs[rname] = {}
- for step in range(1, 12 + 1):
- outputs[rname][step] = {}
- for file in files:
- if step == 1:
- # Get snapshots relative to the expected initial network convergence
- filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
- outputs[rname][step][file] = open(filename).read()
- else:
- if file == "show_yang_interface_isis_adjacencies.ref":
- continue
-
- # Get diff relative to the previous step
- filename = "{}/{}/step{}/{}.diff".format(CWD, rname, step, file)
-
- # Create temporary files in order to apply the diff
- f_in = tempfile.NamedTemporaryFile(mode="w")
- f_in.write(outputs[rname][step - 1][file])
- f_in.flush()
- f_out = tempfile.NamedTemporaryFile(mode="r")
- os.system(
- "patch -s -o %s %s %s" % (f_out.name, f_in.name, filename)
- )
-
- # Store the updated snapshot and remove the temporary files
- outputs[rname][step][file] = open(f_out.name).read()
- f_in.close()
- f_out.close()
-
def setup_module(mod):
"Sets up the pytest environment"
@@ -176,7 +138,7 @@ def setup_module(mod):
TopoRouter.RD_ISIS, os.path.join(CWD, "{}/isisd.conf".format(rname))
)
router.load_config(
- TopoRouter.RD_BFD, os.path.join(CWD, "/dev/null".format(rname))
+ TopoRouter.RD_BFD, os.path.join(CWD, "{}/bfdd.conf".format(rname))
)
tgen.start_router()
@@ -190,12 +152,174 @@ def teardown_module(mod):
tgen.stop_topology()
-def router_compare_json_output(rname, command, reference, count=120, wait=0.5):
+def filter_json(data, keys_to_keep):
+ """
+ Filters a dictionary, keeping only the specified keys.
+ """
+ return {k: v for k, v in data.items() if k in keys_to_keep}
+
+
+def regen_data(rname, command, step, file, wait):
+ """
+ Regenerates reference data.
+ """
+ # Sleep enough time to ensure the protocol has converged
+ if rname == "rt1":
+ sleep(wait)
+ if step == 10:
+ sleep(10)
+
+ # Get and parse JSON output
+ tgen = get_topogen()
+ output = json.loads(tgen.gears[rname].vtysh_cmd(command))
+
+ # Default JSON separators
+ separators = (",", ":")
+
+ # Process JSON output based on the specified file
+ if file == "show_yang_interface_isis_adjacencies.ref":
+ # Filter out the loopback interface
+ output["frr-interface:lib"]["interface"] = [
+ interface
+ for interface in output["frr-interface:lib"]["interface"]
+ if interface["name"] != "lo"
+ ]
+
+ # Filter out unwanted fields
+ for interface in output["frr-interface:lib"]["interface"]:
+ keys_to_keep = {"name", "vrf", "state"}
+ filtered_interface = filter_json(interface, keys_to_keep)
+ interface.clear()
+ interface.update(filtered_interface)
+
+ keys_to_keep = {"frr-isisd:isis"}
+ filtered_state = filter_json(interface["state"], keys_to_keep)
+ interface["state"].clear()
+ interface["state"].update(filtered_state)
+
+ keys_to_keep = {"adjacencies"}
+ filtered_isis = filter_json(
+ interface["state"]["frr-isisd:isis"], keys_to_keep
+ )
+ interface["state"]["frr-isisd:isis"].clear()
+ interface["state"]["frr-isisd:isis"].update(filtered_isis)
+ if "adjacencies" in interface["state"]["frr-isisd:isis"]:
+ for adjacency in interface["state"]["frr-isisd:isis"]["adjacencies"][
+ "adjacency"
+ ]:
+ keys_to_keep = {
+ "neighbor-sys-type",
+ "neighbor-sysid",
+ "hold-timer",
+ "neighbor-priority",
+ "state",
+ }
+ filtered_adjacency = filter_json(adjacency, keys_to_keep)
+ adjacency.clear()
+ adjacency.update(filtered_adjacency)
+ # Adjust separators to match libyang's output.
+ separators = (",", ": ")
+
+ elif file == "show_ip_route.ref" or file == "show_ipv6_route.ref":
+ # Filter out unwanted fields
+ keys_to_keep_route = {
+ "prefix",
+ "protocol",
+ "selected",
+ "destSelected",
+ "distance",
+ "metric",
+ "installed",
+ "nexthops",
+ "backupNexthops",
+ }
+ keys_to_keep_nh = {
+ "fib",
+ "ip",
+ "afi",
+ "interfaceName",
+ "active",
+ "backupIndex",
+ "labels",
+ }
+ for prefix_key, prefix_value in output.items():
+ filtered_routes = []
+ for route in prefix_value:
+ if "nexthops" in route:
+ filtered_nhs = []
+ for nh in route["nexthops"]:
+ if nh["ip"].startswith("fe80"):
+ del nh["ip"]
+ filtered_nhs.append(filter_json(nh, keys_to_keep_nh))
+ route["nexthops"] = filtered_nhs
+ if "backupNexthops" in route:
+ filtered_nhs = []
+ for nh in route["backupNexthops"]:
+ if nh["ip"].startswith("fe80"):
+ del nh["ip"]
+ filtered_nhs.append(filter_json(nh, keys_to_keep_nh))
+ route["backupNexthops"] = filtered_nhs
+ filtered_routes.append(filter_json(route, keys_to_keep_route))
+ output[prefix_key] = filtered_routes
+
+ elif file == "show_mpls_table.ref":
+ # Filter out Adj-SID labels
+ output = {int(key): value for key, value in output.items() if int(key) >= 16000}
+
+ # Filter out unwanted fields
+ keys_to_keep_label = {
+ "inLabel",
+ "installed",
+ "nexthops",
+ "backupNexthops",
+ }
+ keys_to_keep_nh = {
+ "type",
+ "outLabel",
+ "installed",
+ "interface",
+ "nexthop",
+ "backupIndex",
+ }
+ for label_key, label_value in output.items():
+ if "nexthops" in label_value:
+ filtered_nhs = []
+ for nh in label_value["nexthops"]:
+ if nh["nexthop"].startswith("fe80"):
+ del nh["nexthop"]
+ filtered_nhs.append(filter_json(nh, keys_to_keep_nh))
+ label_value["nexthops"] = filtered_nhs
+ if "backupNexthops" in label_value:
+ filtered_nhs = []
+ for nh in label_value["backupNexthops"]:
+ if nh["nexthop"].startswith("fe80"):
+ del nh["nexthop"]
+ filtered_nhs.append(filter_json(nh, keys_to_keep_nh))
+ label_value["backupNexthops"] = filtered_nhs
+ output[label_key] = filter_json(label_value, keys_to_keep_label)
+
+ elif file.startswith("show_bfd_peer"):
+ keys_to_keep = ["multihop", "peer", "interface", "status"]
+ output = filter_json(output, keys_to_keep)
+
+ # Save the processed output to a file
+ filename = "{}/{}/step{}/{}".format(CWD, rname, step, file)
+ output = json.dumps(output, separators=separators, indent=2).replace("/", "\\/")
+ with open(filename, "w", encoding="ascii") as file:
+ file.write(output + "\n")
+
+
+def router_compare_json_output(rname, command, step, file, count=120, wait=0.5):
"Compare router JSON output"
- logger.info('Comparing router "%s" "%s" output', rname, command)
+ # Regenerate reference data when the REGEN_DATA environment variable is set
+ if os.environ.get("REGEN_DATA") is not None:
+ regen_data(rname, command, step, file, count * wait)
+ return
tgen = get_topogen()
+ logger.info('Comparing router "%s" "%s" output', rname, command)
+ reference = open("{}/{}/step{}/{}".format(CWD, rname, step, file)).read()
expected = json.loads(reference)
# Run test function until we get an result. Wait at most 60 seconds.
@@ -222,7 +346,8 @@ def test_isis_adjacencies_step1():
router_compare_json_output(
rname,
"show yang operational-data /frr-interface:lib isisd",
- outputs[rname][1]["show_yang_interface_isis_adjacencies.ref"],
+ 1,
+ "show_yang_interface_isis_adjacencies.ref",
)
@@ -236,7 +361,7 @@ def test_rib_ipv4_step1():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][1]["show_ip_route.ref"]
+ rname, "show ip route isis json", 1, "show_ip_route.ref"
)
@@ -250,7 +375,7 @@ def test_rib_ipv6_step1():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][1]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 1, "show_ipv6_route.ref"
)
@@ -264,7 +389,7 @@ def test_mpls_lib_step1():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][1]["show_mpls_table.ref"]
+ rname, "show mpls table json", 1, "show_mpls_table.ref"
)
@@ -292,7 +417,7 @@ def test_rib_ipv4_step2():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][2]["show_ip_route.ref"]
+ rname, "show ip route isis json", 2, "show_ip_route.ref"
)
@@ -306,7 +431,7 @@ def test_rib_ipv6_step2():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][2]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 2, "show_ipv6_route.ref"
)
@@ -320,7 +445,7 @@ def test_mpls_lib_step2():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][2]["show_mpls_table.ref"]
+ rname, "show mpls table json", 2, "show_mpls_table.ref"
)
@@ -348,7 +473,7 @@ def test_rib_ipv4_step3():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][3]["show_ip_route.ref"]
+ rname, "show ip route isis json", 3, "show_ip_route.ref"
)
@@ -362,7 +487,7 @@ def test_rib_ipv6_step3():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][3]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 3, "show_ipv6_route.ref"
)
@@ -376,7 +501,7 @@ def test_mpls_lib_step3():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][3]["show_mpls_table.ref"]
+ rname, "show mpls table json", 3, "show_mpls_table.ref"
)
@@ -409,7 +534,7 @@ def test_rib_ipv4_step4():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][4]["show_ip_route.ref"]
+ rname, "show ip route isis json", 4, "show_ip_route.ref"
)
@@ -423,7 +548,7 @@ def test_rib_ipv6_step4():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][4]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 4, "show_ipv6_route.ref"
)
@@ -437,7 +562,7 @@ def test_mpls_lib_step4():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][4]["show_mpls_table.ref"]
+ rname, "show mpls table json", 4, "show_mpls_table.ref"
)
@@ -463,7 +588,7 @@ def test_rib_ipv4_step5():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][5]["show_ip_route.ref"]
+ rname, "show ip route isis json", 5, "show_ip_route.ref"
)
@@ -477,7 +602,7 @@ def test_rib_ipv6_step5():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][5]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 5, "show_ipv6_route.ref"
)
@@ -491,7 +616,7 @@ def test_mpls_lib_step5():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][5]["show_mpls_table.ref"]
+ rname, "show mpls table json", 5, "show_mpls_table.ref"
)
@@ -519,7 +644,7 @@ def test_rib_ipv4_step6():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][6]["show_ip_route.ref"]
+ rname, "show ip route isis json", 6, "show_ip_route.ref"
)
@@ -533,7 +658,7 @@ def test_rib_ipv6_step6():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][6]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 6, "show_ipv6_route.ref"
)
@@ -547,7 +672,7 @@ def test_mpls_lib_step6():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][6]["show_mpls_table.ref"]
+ rname, "show mpls table json", 6, "show_mpls_table.ref"
)
@@ -579,7 +704,7 @@ def test_rib_ipv4_step7():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][7]["show_ip_route.ref"]
+ rname, "show ip route isis json", 7, "show_ip_route.ref"
)
@@ -593,7 +718,7 @@ def test_rib_ipv6_step7():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][7]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 7, "show_ipv6_route.ref"
)
@@ -607,7 +732,7 @@ def test_mpls_lib_step7():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][7]["show_mpls_table.ref"]
+ rname, "show mpls table json", 7, "show_mpls_table.ref"
)
@@ -638,7 +763,7 @@ def test_rib_ipv4_step8():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][8]["show_ip_route.ref"]
+ rname, "show ip route isis json", 8, "show_ip_route.ref"
)
@@ -652,7 +777,7 @@ def test_rib_ipv6_step8():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][8]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 8, "show_ipv6_route.ref"
)
@@ -666,7 +791,7 @@ def test_mpls_lib_step8():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][8]["show_mpls_table.ref"]
+ rname, "show mpls table json", 8, "show_mpls_table.ref"
)
@@ -698,7 +823,7 @@ def test_rib_ipv4_step9():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][9]["show_ip_route.ref"]
+ rname, "show ip route isis json", 9, "show_ip_route.ref"
)
@@ -712,7 +837,7 @@ def test_rib_ipv6_step9():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show ipv6 route isis json", outputs[rname][9]["show_ipv6_route.ref"]
+ rname, "show ipv6 route isis json", 9, "show_ipv6_route.ref"
)
@@ -726,7 +851,7 @@ def test_mpls_lib_step9():
for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
router_compare_json_output(
- rname, "show mpls table json", outputs[rname][9]["show_mpls_table.ref"]
+ rname, "show mpls table json", 9, "show_mpls_table.ref"
)
@@ -734,11 +859,17 @@ def test_mpls_lib_step9():
# Step 10
#
# Action(s):
-# - Setting spf-delay-ietf init-delay of 15s
+# - Enable ISIS BFD between rt5 and rt6
+# - Verify that the BFD session is up
+# - Configure an SPF delay-ietf initial delay of 60 seconds on both rt5 and rt6
+# - Shut down the eth-rt5 interface on rt6 from the switch side to test fast-reroute
#
# Expected changes:
-# - No routing table change
-# - At the end of test, SPF reacts to a failure in 15s
+# - Verify that the BFD session is down
+# - Routes should switch over to use alternate paths
+# - On rt5, the switchover should be triggered by the link down event
+# - On rt6, the switchover should be triggered by the BFD down event, since it has
+# link-detect disabled on the eth-rt5 interface
#
def test_rib_ipv4_step10():
logger.info("Test (step 10): verify IPv4 RIB")
@@ -748,353 +879,69 @@ def test_rib_ipv4_step10():
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
- logger.info("Setting spf-delay-ietf init-delay of 15s")
- tgen.net["rt6"].cmd(
- 'vtysh -c "conf t" -c "router isis 1" -c "spf-delay-ietf init-delay 15000 short-delay 0 long-delay 0 holddown 0 time-to-learn 0"'
- )
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][10]["show_ip_route.ref"]
- )
-
-
-def test_rib_ipv6_step10():
- logger.info("Test (step 10): verify IPv6 RIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname,
- "show ipv6 route isis json",
- outputs[rname][10]["show_ipv6_route.ref"],
- )
-
-
-def test_mpls_lib_step10():
- logger.info("Test (step 10): verify MPLS LIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname, "show mpls table json", outputs[rname][10]["show_mpls_table.ref"]
- )
-
-
-#
-# Step 11
-#
-# Action(s):
-# - shut the eth-rt5 interface on rt6
-#
-# Expected changes:
-# - Route switchover of routes via eth-rt5
-#
-def test_rt6_step11():
- logger.info(
- "Test (step 11): Check IPv4/6 RIB and MPLS table after a LFA switchover"
- )
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- logger.info(
- "Shut a rt6 interface to rt5 from the switch side and check fast-reroute"
- )
- tgen.net.cmd_raises("ip link set %s down" % tgen.net["s8"].intfs[1])
-
- rname = "rt6"
- router_compare_json_output(
- rname,
- "show ip route isis json",
- outputs[rname][11]["show_ip_route.ref"],
- count=20,
- )
- router_compare_json_output(
- rname,
- "show ipv6 route isis json",
- outputs[rname][11]["show_ipv6_route.ref"],
- count=20,
- )
- router_compare_json_output(
- rname,
- "show mpls table json",
- outputs[rname][11]["show_mpls_table.ref"],
- count=20,
- )
-
-
-#
-# Step 12
-#
-# Action(s): wait for the convergence and SPF computation on rt6
-#
-# Expected changes:
-# - convergence of IPv4/6 RIB and MPLS table
-#
-def test_rib_ipv4_step12():
- logger.info("Test (step 12): verify IPv4 RIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- logger.info("Check SPF convergence")
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname,
- "show ip route isis json",
- outputs[rname][12]["show_ip_route.ref"],
- )
-
-
-def test_rib_ipv6_step12():
- logger.info("Test (step 12): verify IPv6 RIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname,
- "show ipv6 route isis json",
- outputs[rname][12]["show_ipv6_route.ref"],
- )
-
-
-def test_mpls_lib_step12():
- logger.info("Test (step 12): verify MPLS LIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname,
- "show mpls table json",
- outputs[rname][12]["show_mpls_table.ref"],
- )
-
-
-#
-# Step 13
-#
-# Action(s):
-# - unshut the rt6 to rt5 interface
-# - Setup BFD
-#
-# Expected changes:
-# - All route tables go back to previous state situation
-# - At the end of test, next SPF is scheduled in approximatively 15s
-#
-def test_rib_ipv4_step13():
- logger.info("Test (step 13): verify IPv4 RIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- logger.info("Unsetting spf-delay-ietf init-delay of 15s")
- tgen.net["rt6"].cmd('vtysh -c "conf t" -c "router isis 1" -c "no spf-delay-ietf"')
-
- logger.info(
- "Unshut the rt6 interface to rt5 from the switch side and check fast-reroute"
- )
- tgen.net.cmd_raises("ip link set %s up" % tgen.net["s8"].intfs[1])
-
- logger.info("Setup BFD on rt5 and rt6")
- for rname in ["rt5", "rt6"]:
- conf_file = os.path.join(CWD, "{}/bfdd.conf".format(rname))
- tgen.net[rname].cmd("vtysh -f {}".format(conf_file))
-
- expect = (
- '[{"multihop":false,"peer":"10.0.8.5","interface":"eth-rt5","status":"up"}]'
- )
- router_compare_json_output("rt6", "show bfd peers json", expect)
-
- # Unset link detection. We want zebra to consider linkdow as operationaly up
- # in order that BFD triggers LFA instead of the interface down
-
- # reset spf-interval
- logger.info("Set spf-interval to 15s")
- tgen.net["rt6"].cmd(
- 'vtysh -c "conf t" -c "router isis 1" -c "spf-delay-ietf init-delay 15000 short-delay 0 long-delay 0 holddown 0 time-to-learn 0"'
- )
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname, "show ip route isis json", outputs[rname][10]["show_ip_route.ref"]
- )
-
- logger.info("Set ISIS BFD")
+ logger.info("Enabling ISIS BFD between rt5 and rt6")
tgen.net["rt5"].cmd('vtysh -c "conf t" -c "int eth-rt6" -c "isis bfd"')
tgen.net["rt6"].cmd('vtysh -c "conf t" -c "int eth-rt5" -c "isis bfd"')
- expect = (
- '[{"multihop":false,"peer":"10.0.8.5","interface":"eth-rt5","status":"up"}]'
- )
+ logger.info("Checking if the BFD session is up")
+ expect = '{"multihop":false,"peer":"10.0.8.5","interface":"eth-rt5","status":"up"}'
router_compare_json_output(
- rname,
- "show bfd peers json",
- expect,
+ "rt6", "show bfd peer 10.0.8.5 json", 10, "show_bfd_peer_up.ref"
)
-
-def test_rib_ipv6_step13():
- logger.info("Test (step 13): verify IPv6 RIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname,
- "show ipv6 route isis json",
- outputs[rname][10]["show_ipv6_route.ref"],
- )
-
-
-def test_mpls_lib_step13():
- logger.info("Test (step 13): verify MPLS LIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
- router_compare_json_output(
- rname, "show mpls table json", outputs[rname][10]["show_mpls_table.ref"]
+ logger.info("Setting SPF delay-ietf initial delay to 60 seconds")
+ for rname in ["rt5", "rt6"]:
+ tgen.net[rname].cmd(
+ 'vtysh -c "conf t" -c "router isis 1" -c "spf-delay-ietf init-delay 60000 short-delay 0 long-delay 0 holddown 0 time-to-learn 0"'
)
-
-#
-# Step 14
-#
-# Action(s):
-# - drop traffic between rt5 and rt6 by shutting down the bridge between
-# the routers. Interfaces on rt5 and rt6 stay up.
-#
-# Expected changes:
-# - Route switchover of routes via eth-rt5
-#
-def test_rt6_step14():
- logger.info("Test (step 14): verify IPv4/6 RIB and MPLS table")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- logger.info("Drop traffic between rt5 and rt6")
- tgen.net.cmd_raises("ip link set s8 down")
-
- rname = "rt6"
-
- expect = (
- '[{"multihop":false,"peer":"10.0.8.5","interface":"eth-rt5","status":"down"}]'
- )
- router_compare_json_output(
- rname,
- "show bfd peers json",
- expect,
- count=40,
- wait=0.5,
+ logger.info(
+ "Shutting down rt5 interface to rt6 from the switch side to test fast-reroute"
)
+ tgen.net.cmd_raises("ip link set %s down" % tgen.net["s8"].intfs[0])
- router_compare_json_output(
- rname,
- "show ip route isis json",
- outputs[rname][11]["show_ip_route.ref"],
- count=20,
- )
- router_compare_json_output(
- rname,
- "show ipv6 route isis json",
- outputs[rname][11]["show_ipv6_route.ref"],
- count=20,
- wait=2,
+ logger.info("Verifying if the BFD session is down")
+ expect = (
+ '{"multihop":false,"peer":"10.0.8.5","interface":"eth-rt5","status":"down"}'
)
router_compare_json_output(
- rname,
- "show mpls table json",
- outputs[rname][11]["show_mpls_table.ref"],
- count=20,
+ "rt6", "show bfd peer 10.0.8.5 json", 10, "show_bfd_peer_down.ref"
)
-
-#
-# Step 15
-#
-# Action(s): wait for the convergence and SPF computation on rt6
-#
-# Expected changes:
-# - convergence of IPv4/6 RIB and MPLS table
-#
-def test_rib_ipv4_step15():
- logger.info("Test (step 15): verify IPv4 RIB")
- tgen = get_topogen()
-
- # Skip if previous fatal error condition is raised
- if tgen.routers_have_failure():
- pytest.skip(tgen.errors)
-
- logger.info("Check SPF convergence")
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
+ for rname in ["rt5", "rt6"]:
router_compare_json_output(
- rname,
- "show ip route isis json",
- outputs[rname][12]["show_ip_route.ref"],
+ rname, "show ip route isis json", 10, "show_ip_route.ref"
)
-def test_rib_ipv6_step15():
- logger.info("Test (step 15): verify IPv6 RIB")
+def test_rib_ipv6_step10():
+ logger.info("Test (step 10): verify IPv6 RIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
+ for rname in ["rt5", "rt6"]:
router_compare_json_output(
rname,
"show ipv6 route isis json",
- outputs[rname][12]["show_ipv6_route.ref"],
+ 10,
+ "show_ipv6_route.ref",
)
-def test_mpls_lib_step15():
- logger.info("Test (step 15): verify MPLS LIB")
+def test_mpls_lib_step10():
+ logger.info("Test (step 10): verify MPLS LIB")
tgen = get_topogen()
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
- for rname in ["rt1", "rt2", "rt3", "rt4", "rt5", "rt6"]:
+ for rname in ["rt5", "rt6"]:
router_compare_json_output(
- rname,
- "show mpls table json",
- outputs[rname][12]["show_mpls_table.ref"],
+ rname, "show mpls table json", 10, "show_mpls_table.ref"
)
diff --git a/tests/topotests/isis_topo1/test_isis_topo1.py b/tests/topotests/isis_topo1/test_isis_topo1.py
index 532e708..b388f52 100644
--- a/tests/topotests/isis_topo1/test_isis_topo1.py
+++ b/tests/topotests/isis_topo1/test_isis_topo1.py
@@ -685,7 +685,7 @@ def _check_lsp_overload_bit(router, overloaded_router_lsp, att_p_ol_expected):
)
database_json = json.loads(isis_database_output)
- att_p_ol = database_json["areas"][0]["levels"][1]["att-p-ol"]
+ att_p_ol = database_json["areas"][0]["levels"][1]["lsps"][0]["attPOl"]
if att_p_ol == att_p_ol_expected:
return True
return "{} peer with expected att_p_ol {} got {} ".format(
diff --git a/tests/topotests/key_sendaccept/r1/frr.conf b/tests/topotests/key_sendaccept/r1/frr.conf
new file mode 100644
index 0000000..d231634
--- /dev/null
+++ b/tests/topotests/key_sendaccept/r1/frr.conf
@@ -0,0 +1,31 @@
+log timestamp precision 6
+log file frr.log debug
+
+! debug northbound libyang
+
+debug northbound notifications
+debug northbound events
+debug northbound callbacks
+
+debug mgmt backend datastore frontend transaction
+debug mgmt client frontend
+debug mgmt client backend
+
+interface r1-eth0
+ ip address 1.1.1.1/24
+
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+exit
+
+router ospf
+ ospf router-id 1.1.1.1
+ network 1.1.1.0/24 area 0
+exit
+
+router rip
+ network 1.1.1.0/24
+ network r1-eth0
+exit
+
+!ip route 250.0.0.1/32 Null0 \ No newline at end of file
diff --git a/tests/topotests/key_sendaccept/r2/frr.conf b/tests/topotests/key_sendaccept/r2/frr.conf
new file mode 100644
index 0000000..95bb6e2
--- /dev/null
+++ b/tests/topotests/key_sendaccept/r2/frr.conf
@@ -0,0 +1,20 @@
+log timestamp precision 6
+log file frr.log debug
+
+interface r2-eth0
+ ip address 1.1.1.2/24
+
+ ip ospf hello-interval 2
+ ip ospf dead-interval 10
+exit
+
+router ospf
+ ospf router-id 2.2.2.2
+ network 1.1.1.0/24 area 0
+exit
+
+router rip
+ network 1.1.1.0/24
+exit
+
+ip route 250.0.0.2/32 Null0 \ No newline at end of file
diff --git a/tests/topotests/key_sendaccept/test_keychain.py b/tests/topotests/key_sendaccept/test_keychain.py
new file mode 100644
index 0000000..b11d31b
--- /dev/null
+++ b/tests/topotests/key_sendaccept/test_keychain.py
@@ -0,0 +1,150 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 eval: (blacken-mode 1) -*-
+# SPDX-License-Identifier: ISC
+#
+# March 4 2024, Christian Hopps <chopps@labn.net>
+#
+# Copyright (c) 2024, LabN Consulting, L.L.C.
+#
+"""
+Test static route functionality
+"""
+import json
+
+import pytest
+from lib.topogen import Topogen
+
+pytestmark = [pytest.mark.ripd, pytest.mark.mgmtd]
+
+
+@pytest.fixture(scope="module")
+def tgen(request):
+ "Setup/Teardown the environment and provide tgen argument to tests"
+
+ topodef = {"s1": ("r1", "r2")}
+
+ tgen = Topogen(topodef, request.module.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+ for rname, router in router_list.items():
+ router.load_frr_config("frr.conf")
+
+ tgen.start_router()
+ yield tgen
+ tgen.stop_topology()
+
+
+DIR_SEND = 0
+DIR_ACCEPT = 1
+
+
+def is_key_active(router, keychain, keyid, direction):
+ dstr = "send" if direction == DIR_SEND else "accept"
+ node = f"{dstr}-lifetime-active"
+ output = router.net.cmd_raises(
+ "vtysh -c 'show mgmt get-data "
+ f'/ietf-key-chain:key-chains/key-chain[name="{keychain}"]'
+ f'/key[key-id="{keyid}"]/{node} json'
+ "'"
+ )
+ jd = json.loads(output)
+ return jd["ietf-key-chain:key-chains"]["key-chain"][0]["key"][0][node]
+
+
+def test_send_accept(tgen):
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+
+ conf = """conf t
+key chain kc
+ key 1
+ key-string theSecret
+ cryptographic-algorithm hmac-sha-256
+ exit
+exit
+"""
+ r1.vtysh_multicmd(conf.split("\n"), pretty_output=True)
+ assert is_key_active(r1, "kc", 1, DIR_SEND)
+ assert is_key_active(r1, "kc", 1, DIR_ACCEPT)
+
+ conf = """conf t
+key chain kc
+ key 1
+ key-string theSecret
+ cryptographic-algorithm hmac-sha-256
+ send-lifetime 00:00:00 Jan 1 2024 infinite
+ accept-lifetime 00:00:00 Jan 1 2024 infinite
+ exit
+exit
+"""
+ r1.vtysh_multicmd(conf.split("\n"), pretty_output=True)
+ assert is_key_active(r1, "kc", 1, DIR_SEND)
+ assert is_key_active(r1, "kc", 1, DIR_ACCEPT)
+
+ conf = """conf t
+key chain kc
+ key 1
+ send-lifetime 00:00:00 Jan 1 2035 infinite
+ accept-lifetime 00:00:00 Jan 1 2035 infinite
+ exit
+exit
+"""
+ r1.vtysh_multicmd(conf.split("\n"), pretty_output=True)
+ assert not is_key_active(r1, "kc", 1, DIR_SEND)
+ assert not is_key_active(r1, "kc", 1, DIR_ACCEPT)
+
+ secs_in_10_years = 60 * 60 * 24 * 365 * 10
+ conf = f"""conf t
+key chain kc
+ key 2
+ key-string theSecret
+ cryptographic-algorithm hmac-sha-256
+ send-lifetime 00:00:00 Jan 1 2024 duration {secs_in_10_years}
+ accept-lifetime 00:00:00 Jan 1 2024 duration {secs_in_10_years}
+ exit
+exit
+"""
+ r1.vtysh_multicmd(conf.split("\n"), pretty_output=True)
+ assert is_key_active(r1, "kc", 2, DIR_SEND)
+ assert is_key_active(r1, "kc", 2, DIR_ACCEPT)
+
+ conf = f"""conf t
+key chain kc
+ key 2
+ send-lifetime 00:00:00 Jan 1 2000 duration 10
+ accept-lifetime 00:00:00 Jan 1 2000 duration 10
+ exit
+exit
+"""
+ r1.vtysh_multicmd(conf.split("\n"), pretty_output=True)
+ assert not is_key_active(r1, "kc", 2, DIR_SEND)
+ assert not is_key_active(r1, "kc", 2, DIR_ACCEPT)
+
+ conf = """conf t
+key chain kc
+ key 3
+ key-string theSecret
+ cryptographic-algorithm hmac-sha-256
+ send-lifetime 00:00:00 Jan 1 2024 23:59:59 Dec 31 2034
+ accept-lifetime 00:00:00 Jan 1 2024 23:59:59 Dec 31 2034
+ exit
+exit
+"""
+ r1.vtysh_multicmd(conf.split("\n"), pretty_output=True)
+ assert is_key_active(r1, "kc", 3, DIR_SEND)
+ assert is_key_active(r1, "kc", 3, DIR_ACCEPT)
+
+ conf = """conf t
+key chain kc
+ key 3
+ send-lifetime 00:00:00 Dec 1 2035 23:59:59 Dec 31 2034
+ accept-lifetime 00:00:00 Dec 1 2035 23:59:59 Dec 31 2034
+ exit
+exit
+"""
+ r1.vtysh_multicmd(conf.split("\n"), pretty_output=True)
+ assert not is_key_active(r1, "kc", 3, DIR_SEND)
+ assert not is_key_active(r1, "kc", 3, DIR_ACCEPT)
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 6c27a10..846be5b 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
@@ -5,8 +5,8 @@
"ldpIgpSyncState":"Sync achieved"
},
"r2-eth2":{
- "ldpIgpSyncEnabled":false,
+ "ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
- "ldpIgpSyncState":"Sync not required"
+ "ldpIgpSyncState":"Sync achieved"
}
}
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 889f69e..ad3b8b5 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
@@ -5,8 +5,8 @@
"ldpIgpSyncState":"Holding down until Sync"
},
"r2-eth2":{
- "ldpIgpSyncEnabled":false,
+ "ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
- "ldpIgpSyncState":"Sync not required"
+ "ldpIgpSyncState":"Sync achieved"
}
}
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 d9036e1..d5e4b88 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
@@ -1,7 +1,7 @@
{
"r2-eth2":{
- "ldpIgpSyncEnabled":false,
+ "ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
- "ldpIgpSyncState":"Sync not required"
+ "ldpIgpSyncState":"Sync achieved"
}
}
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 b417ab0..5b9542d 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
@@ -1,8 +1,8 @@
{
"r3-eth1":{
- "ldpIgpSyncEnabled":false,
+ "ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
- "ldpIgpSyncState":"Sync not required"
+ "ldpIgpSyncState":"Sync achieved"
},
"r3-eth2":{
"ldpIgpSyncEnabled":true,
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 b417ab0..5b9542d 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
@@ -1,8 +1,8 @@
{
"r3-eth1":{
- "ldpIgpSyncEnabled":false,
+ "ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
- "ldpIgpSyncState":"Sync not required"
+ "ldpIgpSyncState":"Sync achieved"
},
"r3-eth2":{
"ldpIgpSyncEnabled":true,
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 b417ab0..5b9542d 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
@@ -1,8 +1,8 @@
{
"r3-eth1":{
- "ldpIgpSyncEnabled":false,
+ "ldpIgpSyncEnabled":true,
"holdDownTimeInSec":50,
- "ldpIgpSyncState":"Sync not required"
+ "ldpIgpSyncState":"Sync achieved"
},
"r3-eth2":{
"ldpIgpSyncEnabled":true,
diff --git a/tests/topotests/lib/bmp_collector/bgp/open/__init__.py b/tests/topotests/lib/bmp_collector/bgp/open/__init__.py
index 6c814ee..e1e6b51 100644
--- a/tests/topotests/lib/bmp_collector/bgp/open/__init__.py
+++ b/tests/topotests/lib/bmp_collector/bgp/open/__init__.py
@@ -8,27 +8,29 @@ import struct
class BGPOpen:
- UNPACK_STR = '!16sHBBHH4sB'
+ UNPACK_STR = "!16sHBBHH4sB"
@classmethod
def dissect(cls, data):
- (marker,
- length,
- open_type,
- version,
- my_as,
- hold_time,
- bgp_id,
- optional_params_len) = struct.unpack_from(cls.UNPACK_STR, data)
+ (
+ marker,
+ length,
+ open_type,
+ version,
+ my_as,
+ hold_time,
+ bgp_id,
+ optional_params_len,
+ ) = struct.unpack_from(cls.UNPACK_STR, data)
- data = data[struct.calcsize(cls.UNPACK_STR) + optional_params_len:]
+ data = data[struct.calcsize(cls.UNPACK_STR) + optional_params_len :]
# XXX: parse optional parameters
return data, {
- 'version': version,
- 'my_as': my_as,
- 'hold_time': hold_time,
- 'bgp_id': ipaddress.ip_address(bgp_id),
- 'optional_params_len': optional_params_len,
+ "version": version,
+ "my_as": my_as,
+ "hold_time": hold_time,
+ "bgp_id": ipaddress.ip_address(bgp_id),
+ "optional_params_len": optional_params_len,
}
diff --git a/tests/topotests/lib/bmp_collector/bgp/update/__init__.py b/tests/topotests/lib/bmp_collector/bgp/update/__init__.py
index d079b35..629e175 100644
--- a/tests/topotests/lib/bmp_collector/bgp/update/__init__.py
+++ b/tests/topotests/lib/bmp_collector/bgp/update/__init__.py
@@ -10,45 +10,47 @@ from .nlri import NlriIPv4Unicast
from .path_attributes import PathAttribute
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BGPUpdate:
- UNPACK_STR = '!16sHBH'
+ UNPACK_STR = "!16sHBH"
STATIC_SIZE = 23
@classmethod
def dissect(cls, data):
- msg = {'bmp_log_type': 'update'}
+ msg = {"bmp_log_type": "update"}
common_size = struct.calcsize(cls.UNPACK_STR)
- (marker,
- length,
- update_type,
- withdrawn_routes_len) = struct.unpack_from(cls.UNPACK_STR, data)
+ (marker, length, update_type, withdrawn_routes_len) = struct.unpack_from(
+ cls.UNPACK_STR, data
+ )
# get withdrawn routes
- withdrawn_routes = ''
+ withdrawn_routes = ""
if withdrawn_routes_len:
withdrawn_routes = NlriIPv4Unicast.parse(
- data[common_size:common_size + withdrawn_routes_len]
+ data[common_size : common_size + withdrawn_routes_len]
)
- msg['bmp_log_type'] = 'withdraw'
+ msg["bmp_log_type"] = "withdraw"
msg.update(withdrawn_routes)
# get path attributes
(total_path_attrs_len,) = struct.unpack_from(
- '!H', data[common_size+withdrawn_routes_len:])
+ "!H", data[common_size + withdrawn_routes_len :]
+ )
if total_path_attrs_len:
offset = cls.STATIC_SIZE + withdrawn_routes_len
- path_attrs_data = data[offset:offset + total_path_attrs_len]
+ path_attrs_data = data[offset : offset + total_path_attrs_len]
while path_attrs_data:
path_attrs_data, pattr = PathAttribute.dissect(path_attrs_data)
if pattr:
msg = {**msg, **pattr}
# get nlri
- nlri_len = length - cls.STATIC_SIZE - withdrawn_routes_len - total_path_attrs_len
+ nlri_len = (
+ length - cls.STATIC_SIZE - withdrawn_routes_len - total_path_attrs_len
+ )
if nlri_len > 0:
- nlri = NlriIPv4Unicast.parse(data[length - nlri_len:length])
+ nlri = NlriIPv4Unicast.parse(data[length - nlri_len : length])
msg.update(nlri)
return data[length:], msg
diff --git a/tests/topotests/lib/bmp_collector/bgp/update/af.py b/tests/topotests/lib/bmp_collector/bgp/update/af.py
index 01af1ae..200b15a 100644
--- a/tests/topotests/lib/bmp_collector/bgp/update/af.py
+++ b/tests/topotests/lib/bmp_collector/bgp/update/af.py
@@ -19,7 +19,7 @@ SAFI_IP_FLOWSPEC = 133
SAFI_VPN_FLOWSPEC = 134
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class AddressFamily:
def __init__(self, afi, safi):
self.afi = afi
@@ -31,13 +31,13 @@ class AddressFamily:
return (self.afi, self.safi) == (other.afi, other.safi)
def __str__(self):
- return f'afi: {self.afi}, safi: {self.safi}'
+ return f"afi: {self.afi}, safi: {self.safi}"
def __hash__(self):
return hash((self.afi, self.safi))
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class AF:
IPv4_UNICAST = AddressFamily(AFI_IP, SAFI_UNICAST)
IPv6_UNICAST = AddressFamily(AFI_IP6, SAFI_UNICAST)
diff --git a/tests/topotests/lib/bmp_collector/bgp/update/nlri.py b/tests/topotests/lib/bmp_collector/bgp/update/nlri.py
index c1720f1..b362520 100644
--- a/tests/topotests/lib/bmp_collector/bgp/update/nlri.py
+++ b/tests/topotests/lib/bmp_collector/bgp/update/nlri.py
@@ -13,7 +13,8 @@ from .rd import RouteDistinguisher
def decode_label(label):
# from frr
# frr encode just one label
- return (label[0] << 12) | (label[1] << 4) | (label[2] & 0xf0) >> 4
+ return (label[0] << 12) | (label[1] << 4) | (label[2] & 0xF0) >> 4
+
def padding(databin, len_):
"""
@@ -23,7 +24,8 @@ def padding(databin, len_):
"""
if len(databin) >= len_:
return databin
- return databin + b'\0' * (len_ - len(databin))
+ return databin + b"\0" * (len_ - len(databin))
+
def dissect_nlri(nlri_data, afi, safi):
"""
@@ -37,35 +39,34 @@ def dissect_nlri(nlri_data, afi, safi):
elif addr_family == AF.IPv6_UNICAST:
return NlriIPv6Unicast.parse(nlri_data)
- return {'ip_prefix': 'Unknown'}
+ return {"ip_prefix": "Unknown"}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv4Unicast:
-
@staticmethod
def parse(data):
"""parses prefixes from withdrawn_routes or nrli data"""
- (prefix_len,) = struct.unpack_from('!B', data)
+ (prefix_len,) = struct.unpack_from("!B", data)
prefix = padding(data[1:], 4)
- return {'ip_prefix': f'{ipaddress.IPv4Address(prefix)}/{prefix_len}'}
+ return {"ip_prefix": f"{ipaddress.IPv4Address(prefix)}/{prefix_len}"}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv6Unicast:
@staticmethod
def parse(data):
"""parses prefixes from withdrawn_routes or nrli data"""
- (prefix_len,) = struct.unpack_from('!B', data)
+ (prefix_len,) = struct.unpack_from("!B", data)
prefix = padding(data[1:], 16)
- return {'ip_prefix': f'{ipaddress.IPv6Address(prefix)}/{prefix_len}'}
+ return {"ip_prefix": f"{ipaddress.IPv6Address(prefix)}/{prefix_len}"}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv4Vpn:
- UNPACK_STR = '!B3s8s'
+ UNPACK_STR = "!B3s8s"
@classmethod
def parse(cls, data):
@@ -74,17 +75,17 @@ class NlriIPv4Vpn:
ipv4 = padding(data[offset:], 4)
# prefix_len = total_bits_len - label_bits_len - rd_bits_len
- prefix_len = bit_len - 3*8 - 8*8
+ prefix_len = bit_len - 3 * 8 - 8 * 8
return {
- 'label': decode_label(label),
- 'rd': str(RouteDistinguisher(rd)),
- 'ip_prefix': f'{ipaddress.IPv4Address(ipv4)}/{prefix_len}',
+ "label": decode_label(label),
+ "rd": str(RouteDistinguisher(rd)),
+ "ip_prefix": f"{ipaddress.IPv4Address(ipv4)}/{prefix_len}",
}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv6Vpn:
- UNPACK_STR = '!B3s8s'
+ UNPACK_STR = "!B3s8s"
@classmethod
def parse(cls, data):
@@ -93,48 +94,49 @@ class NlriIPv6Vpn:
offset = struct.calcsize(cls.UNPACK_STR)
ipv6 = padding(data[offset:], 16)
- prefix_len = bit_len - 3*8 - 8*8
+ prefix_len = bit_len - 3 * 8 - 8 * 8
return {
- 'label': decode_label(label),
- 'rd': str(RouteDistinguisher(rd)),
- 'ip_prefix': f'{ipaddress.IPv6Address(ipv6)}/{prefix_len}',
+ "label": decode_label(label),
+ "rd": str(RouteDistinguisher(rd)),
+ "ip_prefix": f"{ipaddress.IPv6Address(ipv6)}/{prefix_len}",
}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv4Mpls:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv6Mpls:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv4FlowSpec:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriIPv6FlowSpec:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriVpn4FlowSpec:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriVpn6FlowSpec:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class NlriL2EVPN:
pass
-#------------------------------------------------------------------------------
+
+# ------------------------------------------------------------------------------
class NlriL2VPNFlowSpec:
pass
diff --git a/tests/topotests/lib/bmp_collector/bgp/update/path_attributes.py b/tests/topotests/lib/bmp_collector/bgp/update/path_attributes.py
index 6e82e9c..3694cb4 100644
--- a/tests/topotests/lib/bmp_collector/bgp/update/path_attributes.py
+++ b/tests/topotests/lib/bmp_collector/bgp/update/path_attributes.py
@@ -38,17 +38,18 @@ ORIGIN_EGP = 0x01
ORIGIN_INCOMPLETE = 0x02
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttribute:
PATH_ATTRS = {}
UNKNOWN_ATTR = None
- UNPACK_STR = '!BB'
+ UNPACK_STR = "!BB"
@classmethod
def register_path_attr(cls, path_attr):
def _register_path_attr(subcls):
cls.PATH_ATTRS[path_attr] = subcls
return subcls
+
return _register_path_attr
@classmethod
@@ -61,7 +62,7 @@ class PathAttribute:
offset = struct.calcsize(cls.UNPACK_STR)
# get attribute length
- attr_len_str = '!H' if (flags & PATH_ATTR_FLAG_EXTENDED_LENGTH) else '!B'
+ attr_len_str = "!H" if (flags & PATH_ATTR_FLAG_EXTENDED_LENGTH) else "!B"
(attr_len,) = struct.unpack_from(attr_len_str, data[offset:])
@@ -69,32 +70,34 @@ class PathAttribute:
path_attr_cls = cls.lookup_path_attr(type_code)
if path_attr_cls == cls.UNKNOWN_ATTR:
- return data[offset + attr_len:], None
+ return data[offset + attr_len :], None
- return data[offset+attr_len:], path_attr_cls.dissect(data[offset:offset+attr_len])
+ return data[offset + attr_len :], path_attr_cls.dissect(
+ data[offset : offset + attr_len]
+ )
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@PathAttribute.register_path_attr(PATH_ATTR_TYPE_ORIGIN)
class PathAttrOrigin:
ORIGIN_STR = {
- ORIGIN_IGP: 'IGP',
- ORIGIN_EGP: 'EGP',
- ORIGIN_INCOMPLETE: 'INCOMPLETE',
+ ORIGIN_IGP: "IGP",
+ ORIGIN_EGP: "EGP",
+ ORIGIN_INCOMPLETE: "INCOMPLETE",
}
@classmethod
def dissect(cls, data):
- (origin,) = struct.unpack_from('!B', data)
+ (origin,) = struct.unpack_from("!B", data)
- return {'origin': cls.ORIGIN_STR.get(origin, 'UNKNOWN')}
+ return {"origin": cls.ORIGIN_STR.get(origin, "UNKNOWN")}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@PathAttribute.register_path_attr(PATH_ATTR_TYPE_AS_PATH)
class PathAttrAsPath:
AS_PATH_TYPE_SET = 0x01
- AS_PATH_TYPE_SEQUENCE= 0x02
+ AS_PATH_TYPE_SEQUENCE = 0x02
@staticmethod
def get_asn_len(asns):
@@ -103,34 +106,34 @@ class PathAttrAsPath:
@classmethod
def dissect(cls, data):
- (_type, _len) = struct.unpack_from('!BB', data)
+ (_type, _len) = struct.unpack_from("!BB", data)
data = data[2:]
- _type_str = 'Ordred' if _type == cls.AS_PATH_TYPE_SEQUENCE else 'Raw'
+ _type_str = "Ordred" if _type == cls.AS_PATH_TYPE_SEQUENCE else "Raw"
segment = []
while data:
- (asn,) = struct.unpack_from('!I', data)
+ (asn,) = struct.unpack_from("!I", data)
segment.append(asn)
data = data[4:]
- return {'as_path': ' '.join(str(a) for a in segment)}
+ return {"as_path": " ".join(str(a) for a in segment)}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@PathAttribute.register_path_attr(PATH_ATTR_TYPE_NEXT_HOP)
class PathAttrNextHop:
@classmethod
def dissect(cls, data):
- (nexthop,) = struct.unpack_from('!4s', data)
- return {'bgp_nexthop': str(ipaddress.IPv4Address(nexthop))}
+ (nexthop,) = struct.unpack_from("!4s", data)
+ return {"bgp_nexthop": str(ipaddress.IPv4Address(nexthop))}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrMultiExitDisc:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@PathAttribute.register_path_attr(PATH_ATTR_TYPE_MP_REACH_NLRI)
class PathAttrMpReachNLRI:
"""
@@ -162,7 +165,8 @@ class PathAttrMpReachNLRI:
| Network Layer Reachability Information (variable) |
+---------------------------------------------------------+
"""
- UNPACK_STR = '!HBB'
+
+ UNPACK_STR = "!HBB"
NLRI_RESERVED_LEN = 1
@staticmethod
@@ -170,35 +174,35 @@ class PathAttrMpReachNLRI:
msg = {}
if nexthop_len == 4:
# IPv4
- (ipv4,) = struct.unpack_from('!4s', nexthop_data)
- msg['nxhp_ip'] = str(ipaddress.IPv4Address(ipv4))
+ (ipv4,) = struct.unpack_from("!4s", nexthop_data)
+ msg["nxhp_ip"] = str(ipaddress.IPv4Address(ipv4))
elif nexthop_len == 12:
# RD + IPv4
- (rd, ipv4) = struct.unpack_from('!8s4s', nexthop_data)
- msg['nxhp_ip'] = str(ipaddress.IPv4Address(ipv4))
- msg['nxhp_rd'] = str(RouteDistinguisher(rd))
+ (rd, ipv4) = struct.unpack_from("!8s4s", nexthop_data)
+ msg["nxhp_ip"] = str(ipaddress.IPv4Address(ipv4))
+ msg["nxhp_rd"] = str(RouteDistinguisher(rd))
elif nexthop_len == 16:
# IPv6
- (ipv6,) = struct.unpack_from('!16s', nexthop_data)
- msg['nxhp_ip'] = str(ipaddress.IPv6Address(ipv6))
+ (ipv6,) = struct.unpack_from("!16s", nexthop_data)
+ msg["nxhp_ip"] = str(ipaddress.IPv6Address(ipv6))
elif nexthop_len == 24:
# RD + IPv6
- (rd, ipv6) = struct.unpack_from('!8s16s', nexthop_data)
- msg['nxhp_ip'] = str(ipaddress.IPv6Address(ipv6))
- msg['nxhp_rd'] = str(RouteDistinguisher(rd))
+ (rd, ipv6) = struct.unpack_from("!8s16s", nexthop_data)
+ msg["nxhp_ip"] = str(ipaddress.IPv6Address(ipv6))
+ msg["nxhp_rd"] = str(RouteDistinguisher(rd))
elif nexthop_len == 32:
# IPv6 + IPv6 link-local
- (ipv6, link_local)= struct.unpack_from('!16s16s', nexthop_data)
- msg['nxhp_ip'] = str(ipaddress.IPv6Address(ipv6))
- msg['nxhp_link-local'] = str(ipaddress.IPv6Address(link_local))
+ (ipv6, link_local) = struct.unpack_from("!16s16s", nexthop_data)
+ msg["nxhp_ip"] = str(ipaddress.IPv6Address(ipv6))
+ msg["nxhp_link-local"] = str(ipaddress.IPv6Address(link_local))
elif nexthop_len == 48:
# RD + IPv6 + RD + IPv6 link-local
- u_str = '!8s16s8s16s'
- (rd1, ipv6, rd2, link_local)= struct.unpack_from(u_str, nexthop_data)
- msg['nxhp_rd1'] = str(RouteDistinguisher(rd1))
- msg['nxhp_ip'] = str(ipaddress.IPv6Address(ipv6))
- msg['nxhp_rd2'] = str(RouteDistinguisher(rd2))
- msg['nxhp_link-local'] = str(ipaddress.IPv6Address(link_local))
+ u_str = "!8s16s8s16s"
+ (rd1, ipv6, rd2, link_local) = struct.unpack_from(u_str, nexthop_data)
+ msg["nxhp_rd1"] = str(RouteDistinguisher(rd1))
+ msg["nxhp_ip"] = str(ipaddress.IPv6Address(ipv6))
+ msg["nxhp_rd2"] = str(RouteDistinguisher(rd2))
+ msg["nxhp_link-local"] = str(ipaddress.IPv6Address(link_local))
return msg
@@ -210,10 +214,10 @@ class PathAttrMpReachNLRI:
def dissect(cls, data):
(afi, safi, nexthop_len) = struct.unpack_from(cls.UNPACK_STR, data)
offset = struct.calcsize(cls.UNPACK_STR)
- msg = {'afi': afi, 'safi': safi}
+ msg = {"afi": afi, "safi": safi}
# dissect nexthop
- nexthop_data = data[offset: offset + nexthop_len]
+ nexthop_data = data[offset : offset + nexthop_len]
nexthop = cls.dissect_nexthop(nexthop_data, nexthop_len)
msg.update(nexthop)
@@ -227,7 +231,7 @@ class PathAttrMpReachNLRI:
return msg
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@PathAttribute.register_path_attr(PATH_ATTR_TYPE_MP_UNREACH_NLRI)
class PathAttrMpUnReachNLRI:
"""
@@ -239,13 +243,14 @@ class PathAttrMpUnReachNLRI:
| Withdrawn Routes (variable) |
+---------------------------------------------------------+
"""
- UNPACK_STR = '!HB'
+
+ UNPACK_STR = "!HB"
@classmethod
def dissect(cls, data):
(afi, safi) = struct.unpack_from(cls.UNPACK_STR, data)
offset = struct.calcsize(cls.UNPACK_STR)
- msg = {'bmp_log_type': 'withdraw','afi': afi, 'safi': safi}
+ msg = {"bmp_log_type": "withdraw", "afi": afi, "safi": safi}
if data[offset:]:
# dissect withdrawn_routes
@@ -254,51 +259,51 @@ class PathAttrMpUnReachNLRI:
return msg
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrLocalPref:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrAtomicAgregate:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrAggregator:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrCommunities:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrOriginatorID:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrClusterList:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrExtendedCommunities:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrPMSITunnel:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrLinkState:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class PathAttrLargeCommunities:
pass
diff --git a/tests/topotests/lib/bmp_collector/bgp/update/rd.py b/tests/topotests/lib/bmp_collector/bgp/update/rd.py
index c382fa8..3f08de5 100644
--- a/tests/topotests/lib/bmp_collector/bgp/update/rd.py
+++ b/tests/topotests/lib/bmp_collector/bgp/update/rd.py
@@ -7,7 +7,7 @@ import ipaddress
import struct
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class RouteDistinguisher:
"""
type 0:
@@ -28,32 +28,32 @@ class RouteDistinguisher:
+ | 4-bytes AS number (4 bytes)| Service Provider 2 bytes)|
+-------------------------------------------------------------------------+
"""
+
def __init__(self, rd):
self.rd = rd
self.as_number = None
self.admin_ipv4 = None
self.four_bytes_as = None
self.assigned_sp = None
- self.repr_str = ''
+ self.repr_str = ""
self.dissect()
def dissect(self):
- (rd_type,) = struct.unpack_from('!H', self.rd)
+ (rd_type,) = struct.unpack_from("!H", self.rd)
if rd_type == 0:
- (self.as_number,
- self.assigned_sp) = struct.unpack_from('!HI', self.rd[2:])
- self.repr_str = f'{self.as_number}:{self.assigned_sp}'
+ (self.as_number, self.assigned_sp) = struct.unpack_from("!HI", self.rd[2:])
+ self.repr_str = f"{self.as_number}:{self.assigned_sp}"
elif rd_type == 1:
- (self.admin_ipv4,
- self.assigned_sp) = struct.unpack_from('!IH', self.rd[2:])
+ (self.admin_ipv4, self.assigned_sp) = struct.unpack_from("!IH", self.rd[2:])
ipv4 = str(ipaddress.IPv4Address(self.admin_ipv4))
- self.repr_str = f'{self.as_number}:{self.assigned_sp}'
+ self.repr_str = f"{self.as_number}:{self.assigned_sp}"
elif rd_type == 2:
- (self.four_bytes_as,
- self.assigned_sp) = struct.unpack_from('!IH', self.rd[2:])
- self.repr_str = f'{self.four_bytes_as}:{self.assigned_sp}'
+ (self.four_bytes_as, self.assigned_sp) = struct.unpack_from(
+ "!IH", self.rd[2:]
+ )
+ self.repr_str = f"{self.four_bytes_as}:{self.assigned_sp}"
def __str__(self):
return self.repr_str
diff --git a/tests/topotests/lib/bmp_collector/bmp.py b/tests/topotests/lib/bmp_collector/bmp.py
index 57f642a..237decd 100644
--- a/tests/topotests/lib/bmp_collector/bmp.py
+++ b/tests/topotests/lib/bmp_collector/bmp.py
@@ -33,30 +33,33 @@ IS_FILTERED = 1 << 7
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)
+
def bin2str_ipaddress(ip_bytes, is_ipv6=False):
if is_ipv6:
return str(ipaddress.IPv6Address(ip_bytes))
return str(ipaddress.IPv4Address(ip_bytes[-4:]))
-def log2file(logs):
+
+def log2file(logs, log_file):
"""
XXX: extract the useful information and save it in a flat dictionnary
"""
- with open(LOG_FILE, 'a') as f:
+ with open(log_file, "a") as f:
f.write(json.dumps(logs) + "\n")
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPCodes:
"""
XXX: complete the list, provide RFCs.
"""
+
VERSION = 0x3
BMP_MSG_TYPE_ROUTE_MONITORING = 0x00
BMP_MSG_TYPE_STATISTICS_REPORT = 0x01
- BMP_MSG_TYPE_PEER_DOWN_NOTIFICATION = 0x02
- BMP_MSG_TYPE_PEER_UP_NOTIFICATION = 0x03
+ BMP_MSG_TYPE_PEER_DOWN_NOTIFICATION = 0x02
+ BMP_MSG_TYPE_PEER_UP_NOTIFICATION = 0x03
BMP_MSG_TYPE_INITIATION = 0x04
BMP_MSG_TYPE_TERMINATION = 0x05
BMP_MSG_TYPE_ROUTE_MIRRORING = 0x06
@@ -107,15 +110,15 @@ class BMPCodes:
# peer down reason code
BMP_PEER_DOWN_LOCAL_NOTIFY = 0x01
- BMP_PEER_DOWN_LOCAL_NO_NOTIFY = 0X02
- BMP_PEER_DOWN_REMOTE_NOTIFY = 0X03
- BMP_PEER_DOWN_REMOTE_NO_NOTIFY = 0X04
+ BMP_PEER_DOWN_LOCAL_NO_NOTIFY = 0x02
+ BMP_PEER_DOWN_REMOTE_NOTIFY = 0x03
+ BMP_PEER_DOWN_REMOTE_NO_NOTIFY = 0x04
BMP_PEER_DOWN_INFO_NO_LONGER = 0x05
- BMP_PEER_DOWN_SYSTEM_CLOSED = 0X06
+ BMP_PEER_DOWN_SYSTEM_CLOSED = 0x06
# termincation message types
BMP_TERM_TYPE_STRING = 0x00
- BMP_TERM_TYPE_REASON = 0X01
+ BMP_TERM_TYPE_REASON = 0x01
# termination reason code
BMP_TERM_REASON_ADMIN_CLOSE = 0x00
@@ -126,31 +129,32 @@ class BMPCodes:
# policy route tlv
BMP_ROUTE_POLICY_TLV_VRF = 0x00
- BMP_ROUTE_POLICY_TLV_POLICY= 0x01
+ BMP_ROUTE_POLICY_TLV_POLICY = 0x01
BMP_ROUTE_POLICY_TLV_PRE_POLICY = 0x02
BMP_ROUTE_POLICY_TLV_POST_POLICY = 0x03
BMP_ROUTE_POLICY_TLV_STRING = 0x04
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPMsg:
"""
XXX: should we move register_msg_type and look_msg_type
to generic Type class.
"""
+
TYPES = {}
UNKNOWN_TYPE = None
- HDR_STR = '!BIB'
+ HDR_STR = "!BIB"
MIN_LEN = struct.calcsize(HDR_STR)
TYPES_STR = {
- BMPCodes.BMP_MSG_TYPE_INITIATION: 'initiation',
- BMPCodes.BMP_MSG_TYPE_PEER_DOWN_NOTIFICATION: 'peer down notification',
- BMPCodes.BMP_MSG_TYPE_PEER_UP_NOTIFICATION: 'peer up notification',
- BMPCodes.BMP_MSG_TYPE_ROUTE_MONITORING: 'route monitoring',
- BMPCodes.BMP_MSG_TYPE_STATISTICS_REPORT: 'statistics report',
- BMPCodes.BMP_MSG_TYPE_TERMINATION: 'termination',
- BMPCodes.BMP_MSG_TYPE_ROUTE_MIRRORING: 'route mirroring',
- BMPCodes.BMP_MSG_TYPE_ROUTE_POLICY: 'route policy',
+ BMPCodes.BMP_MSG_TYPE_INITIATION: "initiation",
+ BMPCodes.BMP_MSG_TYPE_PEER_DOWN_NOTIFICATION: "peer down notification",
+ BMPCodes.BMP_MSG_TYPE_PEER_UP_NOTIFICATION: "peer up notification",
+ BMPCodes.BMP_MSG_TYPE_ROUTE_MONITORING: "route monitoring",
+ BMPCodes.BMP_MSG_TYPE_STATISTICS_REPORT: "statistics report",
+ BMPCodes.BMP_MSG_TYPE_TERMINATION: "termination",
+ BMPCodes.BMP_MSG_TYPE_ROUTE_MIRRORING: "route mirroring",
+ BMPCodes.BMP_MSG_TYPE_ROUTE_POLICY: "route policy",
}
@classmethod
@@ -158,6 +162,7 @@ class BMPMsg:
def _register_type(subcls):
cls.TYPES[msgtype] = subcls
return subcls
+
return _register_type
@classmethod
@@ -179,15 +184,15 @@ class BMPMsg:
if len(data) < cls.MIN_LEN:
pass
else:
- _version, _len, _type = struct.unpack(cls.HDR_STR, data[0:cls.MIN_LEN])
+ _version, _len, _type = struct.unpack(cls.HDR_STR, data[0 : cls.MIN_LEN])
return _version, _len, _type
@classmethod
- def dissect(cls, data):
+ def dissect(cls, data, log_file=None):
global SEQ
version, msglen, msgtype = cls.dissect_header(data)
- msg_data = data[cls.MIN_LEN:msglen]
+ msg_data = data[cls.MIN_LEN : msglen]
data = data[msglen:]
if version != BMPCodes.VERSION:
@@ -202,13 +207,13 @@ class BMPMsg:
msg_cls.MSG_LEN = msglen - cls.MIN_LEN
logs = msg_cls.dissect(msg_data)
logs["seq"] = SEQ
- log2file(logs)
+ log2file(logs, log_file if log_file else LOG_FILE)
SEQ += 1
return data
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPPerPeerMessage:
"""
0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
@@ -229,30 +234,33 @@ class BMPPerPeerMessage:
| Timestamp (microseconds) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"""
- PEER_UNPACK_STR = '!BB8s16sI4sII'
+
+ PEER_UNPACK_STR = "!BB8s16sI4sII"
PEER_TYPE_STR = {
- BMPCodes.BMP_PEER_GLOBAL_INSTANCE: 'global instance',
- BMPCodes.BMP_PEER_RD_INSTANCE: 'route distinguisher instance',
- BMPCodes.BMP_PEER_LOCAL_INSTANCE: 'local instance',
- BMPCodes.BMP_PEER_LOC_RIB_INSTANCE: 'loc-rib instance',
+ BMPCodes.BMP_PEER_GLOBAL_INSTANCE: "global instance",
+ BMPCodes.BMP_PEER_RD_INSTANCE: "route distinguisher instance",
+ BMPCodes.BMP_PEER_LOCAL_INSTANCE: "local instance",
+ BMPCodes.BMP_PEER_LOC_RIB_INSTANCE: "loc-rib instance",
}
@classmethod
def dissect(cls, data):
- (peer_type,
- peer_flags,
- peer_distinguisher,
- peer_address,
- peer_asn,
- peer_bgp_id,
- timestamp_secs,
- timestamp_microsecs) = struct.unpack_from(cls.PEER_UNPACK_STR, data)
-
- msg = {'peer_type': cls.PEER_TYPE_STR[peer_type]}
+ (
+ peer_type,
+ peer_flags,
+ peer_distinguisher,
+ peer_address,
+ peer_asn,
+ peer_bgp_id,
+ timestamp_secs,
+ timestamp_microsecs,
+ ) = struct.unpack_from(cls.PEER_UNPACK_STR, data)
+
+ msg = {"peer_type": cls.PEER_TYPE_STR[peer_type]}
if peer_type == 0x03:
- msg['is_filtered'] = bool(peer_flags & IS_FILTERED)
- msg['policy'] = 'loc-rib'
+ msg["is_filtered"] = bool(peer_flags & IS_FILTERED)
+ msg["policy"] = "loc-rib"
else:
# peer_flags = 0x0000 0000
# ipv6, post-policy, as-path, adj-rib-out, reserverdx4
@@ -260,29 +268,29 @@ class BMPPerPeerMessage:
is_as_path = bool(peer_flags & IS_AS_PATH)
is_post_policy = bool(peer_flags & IS_POST_POLICY)
is_ipv6 = bool(peer_flags & IS_IPV6)
- msg['policy'] = 'post-policy' if is_post_policy else 'pre-policy'
- msg['ipv6'] = is_ipv6
- msg['peer_ip'] = bin2str_ipaddress(peer_address, is_ipv6)
-
+ msg["policy"] = "post-policy" if is_post_policy else "pre-policy"
+ msg["ipv6"] = is_ipv6
+ msg["peer_ip"] = bin2str_ipaddress(peer_address, is_ipv6)
peer_bgp_id = bin2str_ipaddress(peer_bgp_id)
- timestamp = float(timestamp_secs) + timestamp_microsecs * (10 ** -6)
-
- data = data[struct.calcsize(cls.PEER_UNPACK_STR):]
- msg.update({
- 'peer_distinguisher': str(RouteDistinguisher(peer_distinguisher)),
- 'peer_asn': peer_asn,
- 'peer_bgp_id': peer_bgp_id,
- 'timestamp': str(datetime.datetime.fromtimestamp(timestamp)),
- })
+ timestamp = float(timestamp_secs) + timestamp_microsecs * (10**-6)
+
+ data = data[struct.calcsize(cls.PEER_UNPACK_STR) :]
+ msg.update(
+ {
+ "peer_distinguisher": str(RouteDistinguisher(peer_distinguisher)),
+ "peer_asn": peer_asn,
+ "peer_bgp_id": peer_bgp_id,
+ "timestamp": str(datetime.datetime.fromtimestamp(timestamp)),
+ }
+ )
return data, msg
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@BMPMsg.register_msg_type(BMPCodes.BMP_MSG_TYPE_ROUTE_MONITORING)
class BMPRouteMonitoring(BMPPerPeerMessage):
-
@classmethod
def dissect(cls, data):
data, peer_msg = super().dissect(data)
@@ -290,7 +298,7 @@ class BMPRouteMonitoring(BMPPerPeerMessage):
return {**peer_msg, **update_msg}
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPStatisticsReport:
"""
0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
@@ -303,10 +311,11 @@ class BMPStatisticsReport:
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"""
+
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPPeerDownNotification:
"""
0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
@@ -316,10 +325,11 @@ class BMPPeerDownNotification:
| Data (present if Reason = 1, 2 or 3) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"""
+
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@BMPMsg.register_msg_type(BMPCodes.BMP_MSG_TYPE_PEER_UP_NOTIFICATION)
class BMPPeerUpNotification(BMPPerPeerMessage):
"""
@@ -336,7 +346,8 @@ class BMPPeerUpNotification(BMPPerPeerMessage):
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"""
- UNPACK_STR = '!16sHH'
+
+ UNPACK_STR = "!16sHH"
MIN_LEN = struct.calcsize(UNPACK_STR)
MSG_LEN = None
@@ -344,16 +355,14 @@ class BMPPeerUpNotification(BMPPerPeerMessage):
def dissect(cls, data):
data, peer_msg = super().dissect(data)
- (local_addr,
- local_port,
- remote_port) = struct.unpack_from(cls.UNPACK_STR, data)
+ (local_addr, local_port, remote_port) = struct.unpack_from(cls.UNPACK_STR, data)
msg = {
**peer_msg,
**{
- 'local_ip': bin2str_ipaddress(local_addr, peer_msg.get('ipv6')),
- 'local_port': int(local_port),
- 'remote_port': int(remote_port),
+ "local_ip": bin2str_ipaddress(local_addr, peer_msg.get("ipv6")),
+ "local_port": int(local_port),
+ "remote_port": int(remote_port),
},
}
@@ -362,7 +371,7 @@ class BMPPeerUpNotification(BMPPerPeerMessage):
return msg
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
@BMPMsg.register_msg_type(BMPCodes.BMP_MSG_TYPE_INITIATION)
class BMPInitiation:
"""
@@ -374,30 +383,31 @@ class BMPInitiation:
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"""
- TLV_STR = '!HH'
+
+ TLV_STR = "!HH"
MIN_LEN = struct.calcsize(TLV_STR)
FIELD_TO_STR = {
- BMPCodes.BMP_INIT_INFO_STRING: 'information',
- BMPCodes.BMP_INIT_ADMIN_LABEL: 'admin_label',
- BMPCodes.BMP_INIT_SYSTEM_DESCRIPTION: 'system_description',
- BMPCodes.BMP_INIT_SYSTEM_NAME: 'system_name',
- BMPCodes.BMP_INIT_VRF_TABLE_NAME: 'vrf_table_name',
+ BMPCodes.BMP_INIT_INFO_STRING: "information",
+ BMPCodes.BMP_INIT_ADMIN_LABEL: "admin_label",
+ BMPCodes.BMP_INIT_SYSTEM_DESCRIPTION: "system_description",
+ BMPCodes.BMP_INIT_SYSTEM_NAME: "system_name",
+ BMPCodes.BMP_INIT_VRF_TABLE_NAME: "vrf_table_name",
}
@classmethod
def dissect(cls, data):
msg = {}
while len(data) > cls.MIN_LEN:
- _type, _len = struct.unpack_from(cls.TLV_STR, data[0:cls.MIN_LEN])
- _value = data[cls.MIN_LEN: cls.MIN_LEN + _len].decode()
+ _type, _len = struct.unpack_from(cls.TLV_STR, data[0 : cls.MIN_LEN])
+ _value = data[cls.MIN_LEN : cls.MIN_LEN + _len].decode()
msg[cls.FIELD_TO_STR[_type]] = _value
- data = data[cls.MIN_LEN + _len:]
+ data = data[cls.MIN_LEN + _len :]
return msg
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPTermination:
"""
0 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
@@ -408,14 +418,15 @@ class BMPTermination:
~ ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
"""
+
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPRouteMirroring:
pass
-#------------------------------------------------------------------------------
+# ------------------------------------------------------------------------------
class BMPRoutePolicy:
pass
diff --git a/tests/topotests/lib/bmp_collector/bmpserver b/tests/topotests/lib/bmp_collector/bmpserver
index 25b4a52..5257df7 100755
--- a/tests/topotests/lib/bmp_collector/bmpserver
+++ b/tests/topotests/lib/bmp_collector/bmpserver
@@ -16,10 +16,12 @@ BGP_MAX_SIZE = 4096
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--address", type=str, default="0.0.0.0")
parser.add_argument("-p", "--port", type=int, default=1789)
+parser.add_argument("-l", "--logfile", type=str, default="/var/log/bmp.log")
def main():
args = parser.parse_args()
ADDRESS, PORT = args.address, args.port
+ LOG_FILE = args.logfile
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
@@ -31,7 +33,7 @@ def main():
while True:
data = connection.recv(BGP_MAX_SIZE)
while len(data) > BMPMsg.MIN_LEN:
- data = BMPMsg.dissect(data)
+ data = BMPMsg.dissect(data, log_file=LOG_FILE)
except Exception as e:
# XXX: do something
pass
diff --git a/tests/topotests/lib/checkping.py b/tests/topotests/lib/checkping.py
index aaa6164..5500807 100644
--- a/tests/topotests/lib/checkping.py
+++ b/tests/topotests/lib/checkping.py
@@ -8,7 +8,7 @@ from lib.topolog import logger
from lib import topotest
-def check_ping(name, dest_addr, expect_connected, count, wait):
+def check_ping(name, dest_addr, expect_connected, count, wait, source_addr=None):
"""
Assert that ping to dest_addr is expected
* 'name': the router to set the ping from
@@ -18,9 +18,13 @@ def check_ping(name, dest_addr, expect_connected, count, wait):
* 'wait': how long ping should wait to receive all replies
"""
- def _check(name, dest_addr, match):
+ def _check(name, dest_addr, source_addr, match):
tgen = get_topogen()
- output = tgen.gears[name].run("ping {} -c 1 -w 1".format(dest_addr))
+ cmd = "ping {}".format(dest_addr)
+ if source_addr:
+ cmd += " -I {}".format(source_addr)
+ cmd += " -c 1 -w 1"
+ output = tgen.gears[name].run(cmd)
logger.info(output)
if match not in output:
return "ping fail"
@@ -28,6 +32,6 @@ def check_ping(name, dest_addr, expect_connected, count, wait):
match = ", {} packet loss".format("0%" if expect_connected else "100%")
logger.info("[+] check {} {} {}".format(name, dest_addr, match))
tgen = get_topogen()
- func = functools.partial(_check, name, dest_addr, match)
+ func = functools.partial(_check, name, dest_addr, source_addr, match)
success, result = topotest.run_and_expect(func, None, count=count, wait=wait)
assert result is None, "Failed"
diff --git a/tests/topotests/lib/common_config.py b/tests/topotests/lib/common_config.py
index 598db84..7787b6f 100644
--- a/tests/topotests/lib/common_config.py
+++ b/tests/topotests/lib/common_config.py
@@ -936,14 +936,26 @@ def generate_support_bundle():
"""
tgen = get_topogen()
+ if tgen is None:
+ logger.warn(
+ "Support bundle attempted to be generated, but topogen is not being used"
+ )
+ return True
+
router_list = tgen.routers()
test_name = os.environ.get("PYTEST_CURRENT_TEST").split(":")[-1].split(" ")[0]
bundle_procs = {}
for rname, rnode in router_list.items():
logger.info("Spawn collection of support bundle for %s", rname)
- dst_bundle = "{}/{}/support_bundles/{}".format(tgen.logdir, rname, test_name)
- rnode.run("mkdir -p " + dst_bundle)
+ try:
+ dst_bundle = "{}/{}/support_bundles/{}".format(
+ tgen.logdir, rname, test_name
+ )
+ rnode.run("mkdir -p " + dst_bundle)
+ except Exception as err:
+ logger.error("Generation of Support bundle failed {}".format(err))
+ return True
gen_sup_cmd = [
"/usr/lib/frr/generate_support_bundle.py",
diff --git a/tests/topotests/lib/fe_client.py b/tests/topotests/lib/fe_client.py
index 07059cc..a475446 100755
--- a/tests/topotests/lib/fe_client.py
+++ b/tests/topotests/lib/fe_client.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# -*- coding: utf-8 eval: (blacken-mode 1) -*-
# SPDX-License-Identifier: GPL-2.0-or-later
#
diff --git a/tests/topotests/lib/grpc-query.py b/tests/topotests/lib/grpc-query.py
index 8c4701c..13b6361 100755
--- a/tests/topotests/lib/grpc-query.py
+++ b/tests/topotests/lib/grpc-query.py
@@ -10,35 +10,46 @@ import argparse
import logging
import os
import sys
+import tempfile
import pytest
CWD = os.path.dirname(os.path.realpath(__file__))
-# This is painful but works if you have installed grpc and grpc_tools would be *way*
-# better if we actually built and installed these but ... python packaging.
try:
- import grpc
- import grpc_tools
-
- sys.path.append(os.path.dirname(CWD))
- from munet.base import commander
-
- commander.cmd_raises(f"cp {CWD}/../../../grpc/frr-northbound.proto .")
- commander.cmd_raises(
- f"python3 -m grpc_tools.protoc --python_out=. --grpc_python_out=. -I . frr-northbound.proto"
- )
-except Exception as error:
- logging.error("can't create proto definition modules %s", error)
- raise
-
-try:
- sys.path[0:0] = "."
- import frr_northbound_pb2
- import frr_northbound_pb2_grpc
-except Exception as error:
- logging.error("can't import proto definition modules %s", error)
- raise
+ # Make sure we don't run-into ourselves in parallel operating environment
+ tmpdir = tempfile.mkdtemp(prefix="grpc-client-")
+
+ # This is painful but works if you have installed grpc and grpc_tools would be *way*
+ # better if we actually built and installed these but ... python packaging.
+ try:
+ import grpc_tools
+ from munet.base import commander
+
+ import grpc
+
+ commander.cmd_raises(f"cp {CWD}/../../../grpc/frr-northbound.proto .")
+ commander.cmd_raises(
+ "python3 -m grpc_tools.protoc"
+ f" --python_out={tmpdir} --grpc_python_out={tmpdir}"
+ f" -I {CWD}/../../../grpc frr-northbound.proto"
+ )
+ except Exception as error:
+ logging.error("can't create proto definition modules %s", error)
+ raise
+
+ try:
+ sys.path[0:0] = [tmpdir]
+ print(sys.path)
+ import frr_northbound_pb2
+ import frr_northbound_pb2_grpc
+
+ sys.path = sys.path[1:]
+ except Exception as error:
+ logging.error("can't import proto definition modules %s", error)
+ raise
+finally:
+ commander.cmd_nostatus(f"rm -rf {tmpdir}")
class GRPCClient:
@@ -57,16 +68,16 @@ class GRPCClient:
logging.debug("GRPC Capabilities: %s", response)
return response
- def get(self, xpath):
+ def get(self, xpath, encoding, gtype):
request = frr_northbound_pb2.GetRequest()
request.path.append(xpath)
- request.type = frr_northbound_pb2.GetRequest.ALL
- request.encoding = frr_northbound_pb2.XML
- xml = ""
+ request.type = gtype
+ request.encoding = encoding
+ result = ""
for r in self.stub.Get(request):
- logging.info('GRPC Get path: "%s" value: %s', request.path, r)
- xml += str(r.data.data)
- return xml
+ logging.debug('GRPC Get path: "%s" value: %s', request.path, r)
+ result += str(r.data.data)
+ return result
def next_action(action_list=None):
@@ -95,6 +106,7 @@ def main(*args):
)
parser.add_argument("-v", "--verbose", action="store_true", help="be verbose")
parser.add_argument("--check", action="store_true", help="check runable")
+ parser.add_argument("--xml", action="store_true", help="encode XML instead of JSON")
parser.add_argument("actions", nargs="*", help="GETCAP|GET,xpath")
args = parser.parse_args(*args)
@@ -107,20 +119,32 @@ def main(*args):
if args.check:
sys.exit(0)
+ encoding = frr_northbound_pb2.XML if args.xml else frr_northbound_pb2.JSON
+
c = GRPCClient(args.server, args.port)
for action in next_action(args.actions):
action = action.casefold()
- logging.info("GOT ACTION: %s", action)
+ logging.debug("GOT ACTION: %s", action)
if action == "getcap":
caps = c.get_capabilities()
- print("Capabilities:", caps)
+ print(caps)
elif action.startswith("get,"):
- # Print Interface State and Config
+ # Get and print config and state
+ _, xpath = action.split(",", 1)
+ logging.debug("Get XPath: %s", xpath)
+ print(c.get(xpath, encoding, gtype=frr_northbound_pb2.GetRequest.ALL))
+ elif action.startswith("get-config,"):
+ # Get and print config
+ _, xpath = action.split(",", 1)
+ logging.debug("Get Config XPath: %s", xpath)
+ print(c.get(xpath, encoding, gtype=frr_northbound_pb2.GetRequest.CONFIG))
+ # for _ in range(0, 1):
+ elif action.startswith("get-state,"):
+ # Get and print state
_, xpath = action.split(",", 1)
- print("Get XPath: ", xpath)
- xml = c.get(xpath)
- print("{}: {}".format(xpath, xml))
+ logging.debug("Get State XPath: %s", xpath)
+ print(c.get(xpath, encoding, gtype=frr_northbound_pb2.GetRequest.STATE))
# for _ in range(0, 1):
diff --git a/tests/topotests/lib/snmptest.py b/tests/topotests/lib/snmptest.py
index 814813f..8e2e76d 100644
--- a/tests/topotests/lib/snmptest.py
+++ b/tests/topotests/lib/snmptest.py
@@ -85,15 +85,18 @@ class SnmpTester(object):
return out_dict, out_list
def get(self, oid):
- cmd = "snmpget {0} {1}".format(self._snmp_config(), oid)
-
+ cmd = "snmpget {0} {1} 2>&1 | grep -v SNMPv2-PDU".format(
+ self._snmp_config(), oid
+ )
result = self.router.cmd(cmd)
if "not found" in result:
return None
return self._get_snmp_value(result)
def get_next(self, oid):
- cmd = "snmpgetnext {0} {1}".format(self._snmp_config(), oid)
+ cmd = "snmpgetnext {0} {1} 2>&1 | grep -v SNMPv2-PDU".format(
+ self._snmp_config(), oid
+ )
result = self.router.cmd(cmd)
print("get_next: {}".format(result))
@@ -102,7 +105,9 @@ class SnmpTester(object):
return self._get_snmp_value(result)
def walk(self, oid):
- cmd = "snmpwalk {0} {1}".format(self._snmp_config(), oid)
+ cmd = "snmpwalk {0} {1} 2>&1 | grep -v SNMPv2-PDU".format(
+ self._snmp_config(), oid
+ )
result = self.router.cmd(cmd)
return self._parse_multiline(result)
diff --git a/tests/topotests/lib/topogen.py b/tests/topotests/lib/topogen.py
index 155d2d0..f49e30e 100644
--- a/tests/topotests/lib/topogen.py
+++ b/tests/topotests/lib/topogen.py
@@ -94,7 +94,9 @@ def get_exabgp_cmd(commander=None):
return False
version = m.group(1)
if topotest.version_cmp(version, "4.2.11") < 0:
- logging.debug("found exabgp version < 4.2.11 in %s will keep looking", exacmd)
+ logging.debug(
+ "found exabgp version < 4.2.11 in %s will keep looking", exacmd
+ )
return False
logger.info("Using ExaBGP version %s in %s", version, exacmd)
return True
@@ -746,6 +748,7 @@ class TopoRouter(TopoGear):
RD_PIM6 = 19
RD_MGMTD = 20
RD_TRAP = 21
+ RD_FPM_LISTENER = 22
RD = {
RD_FRR: "frr",
RD_ZEBRA: "zebra",
@@ -769,6 +772,7 @@ class TopoRouter(TopoGear):
RD_SNMP: "snmpd",
RD_MGMTD: "mgmtd",
RD_TRAP: "snmptrapd",
+ RD_FPM_LISTENER: "fpm_listener",
}
def __init__(self, tgen, cls, name, **params):
@@ -845,7 +849,8 @@ class TopoRouter(TopoGear):
TopoRouter.RD_RIPNG, TopoRouter.RD_OSPF, TopoRouter.RD_OSPF6,
TopoRouter.RD_ISIS, TopoRouter.RD_BGP, TopoRouter.RD_LDP,
TopoRouter.RD_PIM, TopoRouter.RD_PIM6, TopoRouter.RD_PBR,
- TopoRouter.RD_SNMP, TopoRouter.RD_MGMTD, TopoRouter.RD_TRAP.
+ TopoRouter.RD_SNMP, TopoRouter.RD_MGMTD, TopoRouter.RD_TRAP,
+ TopoRouter.RD_FPM_LISTENER.
Possible `source` values are `None` for an empty config file, a path name which is
used directly, or a file name with no path components which is first looked for
@@ -883,7 +888,12 @@ class TopoRouter(TopoGear):
# Enable all daemon command logging, logging files
# and set them to the start dir.
for daemon, enabled in nrouter.daemons.items():
- if enabled and daemon != "snmpd" and daemon != "snmptrapd":
+ if (
+ enabled
+ and daemon != "snmpd"
+ and daemon != "snmptrapd"
+ and daemon != "fpm_listener"
+ ):
self.vtysh_cmd(
"\n".join(
[
@@ -933,7 +943,7 @@ class TopoRouter(TopoGear):
# and set them to the start dir.
for daemon in daemons:
enabled = nrouter.daemons[daemon]
- if enabled and daemon != "snmpd":
+ if enabled and daemon != "snmpd" and daemon != "fpm_listener":
self.vtysh_cmd(
"\n".join(
[
@@ -1253,9 +1263,12 @@ class TopoBMPCollector(TopoHost):
gear += " TopoBMPCollector<>".format()
return gear
- def start(self):
+ def start(self, log_file=None):
+ log_arg = "-l {}".format(log_file) if log_file else ""
self.run(
- "{}/bmp_collector/bmpserver -a {} -p {}&".format(CWD, self.ip, self.port),
+ "{}/bmp_collector/bmpserver -a {} -p {} {}&".format(
+ CWD, self.ip, self.port, log_arg
+ ),
stdout=None,
)
diff --git a/tests/topotests/lib/topojson.py b/tests/topotests/lib/topojson.py
index 901e4f6..148fb04 100644
--- a/tests/topotests/lib/topojson.py
+++ b/tests/topotests/lib/topojson.py
@@ -227,13 +227,17 @@ def build_topo_from_json(tgen, topo=None):
topo["routers"][destRouter]["links"][curSwitch][
"interface"
] = "{}-{}-eth{}".format(
- destRouter, curSwitch, topo["routers"][destRouter]["nextIfname"]
+ destRouter,
+ curSwitch,
+ topo["routers"][destRouter]["nextIfname"],
)
topo["switches"][curSwitch]["links"][destRouter][
"interface"
] = "{}-{}-eth{}".format(
- curSwitch, destRouter, topo["routers"][destRouter]["nextIfname"]
+ curSwitch,
+ destRouter,
+ topo["routers"][destRouter]["nextIfname"],
)
topo["routers"][destRouter]["nextIfname"] += 1
diff --git a/tests/topotests/lib/topotest.py b/tests/topotests/lib/topotest.py
index 2bb8923..087d845 100644
--- a/tests/topotests/lib/topotest.py
+++ b/tests/topotests/lib/topotest.py
@@ -27,6 +27,7 @@ import time
import logging
from collections.abc import Mapping
from copy import deepcopy
+from pathlib import Path
import lib.topolog as topolog
from lib.micronet_compat import Node
@@ -1295,6 +1296,8 @@ def fix_netns_limits(ns):
sysctl_assure(ns, "net.ipv4.conf.all.ignore_routes_with_linkdown", 1)
sysctl_assure(ns, "net.ipv6.conf.all.ignore_routes_with_linkdown", 1)
+ sysctl_assure(ns, "net.ipv4.conf.default.ignore_routes_with_linkdown", 1)
+ sysctl_assure(ns, "net.ipv6.conf.default.ignore_routes_with_linkdown", 1)
# igmp
sysctl_atleast(ns, "net.ipv4.igmp_max_memberships", 1000)
@@ -1426,6 +1429,7 @@ class Router(Node):
"snmpd": 0,
"mgmtd": 0,
"snmptrapd": 0,
+ "fpm_listener": 0,
}
self.daemons_options = {"zebra": ""}
self.reportCores = True
@@ -1522,7 +1526,7 @@ class Router(Node):
pass
return ret
- def stopRouter(self, assertOnError=True, minErrorVersion="5.1"):
+ def stopRouter(self, assertOnError=True):
# Stop Running FRR Daemons
running = self.listDaemons()
if not running:
@@ -1569,9 +1573,6 @@ class Router(Node):
)
errors = self.checkRouterCores(reportOnce=True)
- if self.checkRouterVersion("<", minErrorVersion):
- # ignore errors in old versions
- errors = ""
if assertOnError and (errors is not None) and len(errors) > 0:
assert "Errors found - details follow:" == 0, errors
return errors
@@ -1802,6 +1803,8 @@ class Router(Node):
"Starts FRR daemons for this router."
asan_abort = bool(g_pytest_config.option.asan_abort)
+ cov_option = bool(g_pytest_config.option.cov_topotest)
+ cov_dir = Path(g_pytest_config.option.rundir) / "gcda"
gdb_breakpoints = g_pytest_config.get_option_list("--gdb-breakpoints")
gdb_daemons = g_pytest_config.get_option_list("--gdb-daemons")
gdb_routers = g_pytest_config.get_option_list("--gdb-routers")
@@ -1835,13 +1838,6 @@ class Router(Node):
# Re-enable to allow for report per run
self.reportCores = True
- # XXX: glue code forward ported from removed function.
- if self.version is None:
- self.version = self.cmd(
- os.path.join(self.daemondir, "bgpd") + " -v"
- ).split()[2]
- logger.info("{}: running version: {}".format(self.name, self.version))
-
perfds = {}
perf_options = g_pytest_config.get_option("--perf-options", "-g")
for perf in g_pytest_config.get_option("--perf", []):
@@ -1896,7 +1892,11 @@ class Router(Node):
)
rediropt = " > {0}.out 2> {0}.err".format(daemon)
- if daemon == "snmpd":
+ if daemon == "fpm_listener":
+ binary = "/usr/lib/frr/fpm_listener"
+ cmdenv = ""
+ cmdopt = "-d {}".format(daemon_opts)
+ elif daemon == "snmpd":
binary = "/usr/sbin/snmpd"
cmdenv = ""
cmdopt = "{} -C -c /etc/frr/snmpd.conf -p ".format(
@@ -1923,6 +1923,10 @@ class Router(Node):
self.logdir, self.name, daemon
)
+ if cov_option:
+ scount = os.environ["GCOV_PREFIX_STRIP"]
+ cmdenv += f"GCOV_PREFIX_STRIP={scount} GCOV_PREFIX={cov_dir}"
+
if valgrind_memleaks:
this_dir = os.path.dirname(
os.path.abspath(os.path.realpath(__file__))
@@ -2162,7 +2166,11 @@ class Router(Node):
"%s: %s %s started with rr", self, self.routertype, daemon
)
else:
- if daemon != "snmpd" and daemon != "snmptrapd":
+ if (
+ daemon != "snmpd"
+ and daemon != "snmptrapd"
+ and daemon != "fpm_listener"
+ ):
cmdopt += " -d "
cmdopt += rediropt
@@ -2175,12 +2183,16 @@ class Router(Node):
daemon,
error.returncode,
error.cmd,
- '\n:stdout: "{}"'.format(error.stdout.strip())
- if error.stdout
- else "",
- '\n:stderr: "{}"'.format(error.stderr.strip())
- if error.stderr
- else "",
+ (
+ '\n:stdout: "{}"'.format(error.stdout.strip())
+ if error.stdout
+ else ""
+ ),
+ (
+ '\n:stderr: "{}"'.format(error.stderr.strip())
+ if error.stderr
+ else ""
+ ),
)
else:
logger.debug("%s: %s %s started", self, self.routertype, daemon)
@@ -2212,6 +2224,11 @@ class Router(Node):
while "snmpd" in daemons_list:
daemons_list.remove("snmpd")
+ if "fpm_listener" in daemons_list:
+ start_daemon("fpm_listener")
+ while "fpm_listener" in daemons_list:
+ daemons_list.remove("fpm_listener")
+
# Now start all the other daemons
for daemon in daemons_list:
if self.daemons[daemon] == 0:
@@ -2263,9 +2280,7 @@ class Router(Node):
rc, o, e = self.cmd_status("kill -0 " + str(pid), warn=False)
return rc == 0 or "No such process" not in e
- def killRouterDaemons(
- self, daemons, wait=True, assertOnError=True, minErrorVersion="5.1"
- ):
+ def killRouterDaemons(self, daemons, wait=True, assertOnError=True):
# Kill Running FRR
# Daemons(user specified daemon only) using SIGKILL
rundaemons = self.cmd("ls -1 /var/run/%s/*.pid" % self.routertype)
@@ -2325,9 +2340,6 @@ class Router(Node):
self.cmd("rm -- {}".format(daemonpidfile))
if wait:
errors = self.checkRouterCores(reportOnce=True)
- if self.checkRouterVersion("<", minErrorVersion):
- # ignore errors in old versions
- errors = ""
if assertOnError and len(errors) > 0:
assert "Errors found - details follow:" == 0, errors
else:
@@ -2407,6 +2419,8 @@ class Router(Node):
continue
if daemon == "snmptrapd":
continue
+ if daemon == "fpm_listener":
+ continue
if (self.daemons[daemon] == 1) and not (daemon in daemonsRunning):
sys.stderr.write("%s: Daemon %s not running\n" % (self.name, daemon))
if daemon == "staticd":
diff --git a/tests/topotests/mgmt_fe_client/mgmt_pb2.py b/tests/topotests/mgmt_fe_client/mgmt_pb2.py
index 0aa8803..44dd2f6 100644
--- a/tests/topotests/mgmt_fe_client/mgmt_pb2.py
+++ b/tests/topotests/mgmt_fe_client/mgmt_pb2.py
@@ -7,90 +7,113 @@ from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
+
# @@protoc_insertion_point(imports)
_sym_db = _symbol_database.Default()
-
-
DESCRIPTOR = _descriptor.FileDescriptor(
- name='mgmt.proto',
- package='mgmtd',
- syntax='proto2',
- serialized_options=None,
- create_key=_descriptor._internal_create_key,
- serialized_pb=b'\n\nmgmt.proto\x12\x05mgmtd\"\x1e\n\rYangDataXPath\x12\r\n\x05xpath\x18\x01 \x02(\t\"3\n\rYangDataValue\x12\x19\n\x0f\x65ncoded_str_val\x18\x64 \x01(\tH\x00\x42\x07\n\x05value\">\n\x08YangData\x12\r\n\x05xpath\x18\x01 \x02(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.mgmtd.YangDataValue\"X\n\x0eYangCfgDataReq\x12\x1d\n\x04\x64\x61ta\x18\x01 \x02(\x0b\x32\x0f.mgmtd.YangData\x12\'\n\x08req_type\x18\x02 \x02(\x0e\x32\x15.mgmtd.CfgDataReqType\"B\n\x0eYangGetDataReq\x12\x1d\n\x04\x64\x61ta\x18\x01 \x02(\x0b\x32\x0f.mgmtd.YangData\x12\x11\n\tnext_indx\x18\x02 \x02(\x03\"R\n\x0e\x42\x65SubscribeReq\x12\x13\n\x0b\x63lient_name\x18\x01 \x02(\t\x12\x18\n\x10subscribe_xpaths\x18\x02 \x02(\x08\x12\x11\n\txpath_reg\x18\x03 \x03(\t\"#\n\x10\x42\x65SubscribeReply\x12\x0f\n\x07success\x18\x01 \x02(\x08\"*\n\x08\x42\x65TxnReq\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63reate\x18\x02 \x02(\x08\"=\n\nBeTxnReply\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63reate\x18\x02 \x02(\x08\x12\x0f\n\x07success\x18\x03 \x02(\x08\"b\n\x12\x42\x65\x43\x66gDataCreateReq\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\'\n\x08\x64\x61ta_req\x18\x02 \x03(\x0b\x32\x15.mgmtd.YangCfgDataReq\x12\x13\n\x0b\x65nd_of_data\x18\x03 \x02(\x08\"M\n\x14\x42\x65\x43\x66gDataCreateReply\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0f\n\x07success\x18\x02 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x03 \x01(\t\"#\n\x11\x42\x65\x43\x66gDataApplyReq\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\"L\n\x13\x42\x65\x43\x66gDataApplyReply\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0f\n\x07success\x18\x02 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x03 \x01(\t\"A\n\rYangDataReply\x12\x1d\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x0f.mgmtd.YangData\x12\x11\n\tnext_indx\x18\x02 \x02(\x03\"\x94\x03\n\tBeMessage\x12+\n\nsubscr_req\x18\x02 \x01(\x0b\x32\x15.mgmtd.BeSubscribeReqH\x00\x12/\n\x0csubscr_reply\x18\x03 \x01(\x0b\x32\x17.mgmtd.BeSubscribeReplyH\x00\x12\"\n\x07txn_req\x18\x04 \x01(\x0b\x32\x0f.mgmtd.BeTxnReqH\x00\x12&\n\ttxn_reply\x18\x05 \x01(\x0b\x32\x11.mgmtd.BeTxnReplyH\x00\x12\x31\n\x0c\x63\x66g_data_req\x18\x06 \x01(\x0b\x32\x19.mgmtd.BeCfgDataCreateReqH\x00\x12\x35\n\x0e\x63\x66g_data_reply\x18\x07 \x01(\x0b\x32\x1b.mgmtd.BeCfgDataCreateReplyH\x00\x12\x31\n\rcfg_apply_req\x18\x08 \x01(\x0b\x32\x18.mgmtd.BeCfgDataApplyReqH\x00\x12\x35\n\x0f\x63\x66g_apply_reply\x18\t \x01(\x0b\x32\x1a.mgmtd.BeCfgDataApplyReplyH\x00\x42\t\n\x07message\"$\n\rFeRegisterReq\x12\x13\n\x0b\x63lient_name\x18\x01 \x02(\t\"T\n\x0c\x46\x65SessionReq\x12\x0e\n\x06\x63reate\x18\x01 \x02(\x08\x12\x18\n\x0e\x63lient_conn_id\x18\x02 \x01(\x04H\x00\x12\x14\n\nsession_id\x18\x03 \x01(\x04H\x00\x42\x04\n\x02id\"]\n\x0e\x46\x65SessionReply\x12\x0e\n\x06\x63reate\x18\x01 \x02(\x08\x12\x0f\n\x07success\x18\x02 \x02(\x08\x12\x16\n\x0e\x63lient_conn_id\x18\x03 \x01(\x04\x12\x12\n\nsession_id\x18\x04 \x02(\x04\"b\n\x0b\x46\x65LockDsReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06req_id\x18\x02 \x02(\x04\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0c\n\x04lock\x18\x04 \x02(\x08\"\x8b\x01\n\rFeLockDsReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06req_id\x18\x02 \x02(\x04\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0c\n\x04lock\x18\x04 \x02(\x08\x12\x0f\n\x07success\x18\x05 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x06 \x01(\t\"\xbf\x01\n\x0e\x46\x65SetConfigReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12!\n\x05\x64s_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x03 \x02(\x04\x12#\n\x04\x64\x61ta\x18\x04 \x03(\x0b\x32\x15.mgmtd.YangCfgDataReq\x12\x17\n\x0fimplicit_commit\x18\x05 \x02(\x08\x12(\n\x0c\x63ommit_ds_id\x18\x06 \x02(\x0e\x32\x12.mgmtd.DatastoreId\"\x99\x01\n\x10\x46\x65SetConfigReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12!\n\x05\x64s_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x03 \x02(\x04\x12\x0f\n\x07success\x18\x04 \x02(\x08\x12\x17\n\x0fimplicit_commit\x18\x05 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x06 \x01(\t\"\xab\x01\n\x11\x46\x65\x43ommitConfigReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12%\n\tsrc_ds_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12%\n\tdst_ds_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12\x15\n\rvalidate_only\x18\x05 \x02(\x08\x12\r\n\x05\x61\x62ort\x18\x06 \x02(\x08\"\xd4\x01\n\x13\x46\x65\x43ommitConfigReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12%\n\tsrc_ds_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12%\n\tdst_ds_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12\x15\n\rvalidate_only\x18\x05 \x02(\x08\x12\x0f\n\x07success\x18\x06 \x02(\x08\x12\r\n\x05\x61\x62ort\x18\x07 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x08 \x01(\t\"\x86\x01\n\x08\x46\x65GetReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63onfig\x18\x02 \x02(\x08\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12#\n\x04\x64\x61ta\x18\x05 \x03(\x0b\x32\x15.mgmtd.YangGetDataReq\"\xae\x01\n\nFeGetReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63onfig\x18\x02 \x02(\x08\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12\x0f\n\x07success\x18\x05 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x06 \x01(\t\x12\"\n\x04\x64\x61ta\x18\x07 \x01(\x0b\x32\x14.mgmtd.YangDataReply\"0\n\x0f\x46\x65NotifyDataReq\x12\x1d\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x0f.mgmtd.YangData\"\x9c\x01\n\x13\x46\x65RegisterNotifyReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12!\n\x05\x64s_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x14\n\x0cregister_req\x18\x03 \x02(\x08\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12(\n\ndata_xpath\x18\x05 \x03(\x0b\x32\x14.mgmtd.YangDataXPath\"\xf0\x04\n\tFeMessage\x12,\n\x0cregister_req\x18\x02 \x01(\x0b\x32\x14.mgmtd.FeRegisterReqH\x00\x12*\n\x0bsession_req\x18\x03 \x01(\x0b\x32\x13.mgmtd.FeSessionReqH\x00\x12.\n\rsession_reply\x18\x04 \x01(\x0b\x32\x15.mgmtd.FeSessionReplyH\x00\x12(\n\nlockds_req\x18\x05 \x01(\x0b\x32\x12.mgmtd.FeLockDsReqH\x00\x12,\n\x0clockds_reply\x18\x06 \x01(\x0b\x32\x14.mgmtd.FeLockDsReplyH\x00\x12+\n\nsetcfg_req\x18\x07 \x01(\x0b\x32\x15.mgmtd.FeSetConfigReqH\x00\x12/\n\x0csetcfg_reply\x18\x08 \x01(\x0b\x32\x17.mgmtd.FeSetConfigReplyH\x00\x12/\n\x0b\x63ommcfg_req\x18\t \x01(\x0b\x32\x18.mgmtd.FeCommitConfigReqH\x00\x12\x33\n\rcommcfg_reply\x18\n \x01(\x0b\x32\x1a.mgmtd.FeCommitConfigReplyH\x00\x12\"\n\x07get_req\x18\x0b \x01(\x0b\x32\x0f.mgmtd.FeGetReqH\x00\x12&\n\tget_reply\x18\x0c \x01(\x0b\x32\x11.mgmtd.FeGetReplyH\x00\x12\x31\n\x0fnotify_data_req\x18\x0f \x01(\x0b\x32\x16.mgmtd.FeNotifyDataReqH\x00\x12\x33\n\rregnotify_req\x18\x10 \x01(\x0b\x32\x1a.mgmtd.FeRegisterNotifyReqH\x00\x42\t\n\x07message*B\n\x0e\x43\x66gDataReqType\x12\x11\n\rREQ_TYPE_NONE\x10\x00\x12\x0c\n\x08SET_DATA\x10\x01\x12\x0f\n\x0b\x44\x45LETE_DATA\x10\x02*`\n\x0b\x44\x61tastoreId\x12\x0b\n\x07\x44S_NONE\x10\x00\x12\x0e\n\nRUNNING_DS\x10\x01\x12\x10\n\x0c\x43\x41NDIDATE_DS\x10\x02\x12\x12\n\x0eOPERATIONAL_DS\x10\x03\x12\x0e\n\nSTARTUP_DS\x10\x04'
+ name="mgmt.proto",
+ package="mgmtd",
+ syntax="proto2",
+ serialized_options=None,
+ create_key=_descriptor._internal_create_key,
+ serialized_pb=b'\n\nmgmt.proto\x12\x05mgmtd"\x1e\n\rYangDataXPath\x12\r\n\x05xpath\x18\x01 \x02(\t"3\n\rYangDataValue\x12\x19\n\x0f\x65ncoded_str_val\x18\x64 \x01(\tH\x00\x42\x07\n\x05value">\n\x08YangData\x12\r\n\x05xpath\x18\x01 \x02(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.mgmtd.YangDataValue"X\n\x0eYangCfgDataReq\x12\x1d\n\x04\x64\x61ta\x18\x01 \x02(\x0b\x32\x0f.mgmtd.YangData\x12\'\n\x08req_type\x18\x02 \x02(\x0e\x32\x15.mgmtd.CfgDataReqType"B\n\x0eYangGetDataReq\x12\x1d\n\x04\x64\x61ta\x18\x01 \x02(\x0b\x32\x0f.mgmtd.YangData\x12\x11\n\tnext_indx\x18\x02 \x02(\x03"R\n\x0e\x42\x65SubscribeReq\x12\x13\n\x0b\x63lient_name\x18\x01 \x02(\t\x12\x18\n\x10subscribe_xpaths\x18\x02 \x02(\x08\x12\x11\n\txpath_reg\x18\x03 \x03(\t"#\n\x10\x42\x65SubscribeReply\x12\x0f\n\x07success\x18\x01 \x02(\x08"*\n\x08\x42\x65TxnReq\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63reate\x18\x02 \x02(\x08"=\n\nBeTxnReply\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63reate\x18\x02 \x02(\x08\x12\x0f\n\x07success\x18\x03 \x02(\x08"b\n\x12\x42\x65\x43\x66gDataCreateReq\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\'\n\x08\x64\x61ta_req\x18\x02 \x03(\x0b\x32\x15.mgmtd.YangCfgDataReq\x12\x13\n\x0b\x65nd_of_data\x18\x03 \x02(\x08"M\n\x14\x42\x65\x43\x66gDataCreateReply\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0f\n\x07success\x18\x02 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x03 \x01(\t"#\n\x11\x42\x65\x43\x66gDataApplyReq\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04"L\n\x13\x42\x65\x43\x66gDataApplyReply\x12\x0e\n\x06txn_id\x18\x01 \x02(\x04\x12\x0f\n\x07success\x18\x02 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x03 \x01(\t"A\n\rYangDataReply\x12\x1d\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x0f.mgmtd.YangData\x12\x11\n\tnext_indx\x18\x02 \x02(\x03"\x94\x03\n\tBeMessage\x12+\n\nsubscr_req\x18\x02 \x01(\x0b\x32\x15.mgmtd.BeSubscribeReqH\x00\x12/\n\x0csubscr_reply\x18\x03 \x01(\x0b\x32\x17.mgmtd.BeSubscribeReplyH\x00\x12"\n\x07txn_req\x18\x04 \x01(\x0b\x32\x0f.mgmtd.BeTxnReqH\x00\x12&\n\ttxn_reply\x18\x05 \x01(\x0b\x32\x11.mgmtd.BeTxnReplyH\x00\x12\x31\n\x0c\x63\x66g_data_req\x18\x06 \x01(\x0b\x32\x19.mgmtd.BeCfgDataCreateReqH\x00\x12\x35\n\x0e\x63\x66g_data_reply\x18\x07 \x01(\x0b\x32\x1b.mgmtd.BeCfgDataCreateReplyH\x00\x12\x31\n\rcfg_apply_req\x18\x08 \x01(\x0b\x32\x18.mgmtd.BeCfgDataApplyReqH\x00\x12\x35\n\x0f\x63\x66g_apply_reply\x18\t \x01(\x0b\x32\x1a.mgmtd.BeCfgDataApplyReplyH\x00\x42\t\n\x07message"$\n\rFeRegisterReq\x12\x13\n\x0b\x63lient_name\x18\x01 \x02(\t"T\n\x0c\x46\x65SessionReq\x12\x0e\n\x06\x63reate\x18\x01 \x02(\x08\x12\x18\n\x0e\x63lient_conn_id\x18\x02 \x01(\x04H\x00\x12\x14\n\nsession_id\x18\x03 \x01(\x04H\x00\x42\x04\n\x02id"]\n\x0e\x46\x65SessionReply\x12\x0e\n\x06\x63reate\x18\x01 \x02(\x08\x12\x0f\n\x07success\x18\x02 \x02(\x08\x12\x16\n\x0e\x63lient_conn_id\x18\x03 \x01(\x04\x12\x12\n\nsession_id\x18\x04 \x02(\x04"b\n\x0b\x46\x65LockDsReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06req_id\x18\x02 \x02(\x04\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0c\n\x04lock\x18\x04 \x02(\x08"\x8b\x01\n\rFeLockDsReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06req_id\x18\x02 \x02(\x04\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0c\n\x04lock\x18\x04 \x02(\x08\x12\x0f\n\x07success\x18\x05 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x06 \x01(\t"\xbf\x01\n\x0e\x46\x65SetConfigReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12!\n\x05\x64s_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x03 \x02(\x04\x12#\n\x04\x64\x61ta\x18\x04 \x03(\x0b\x32\x15.mgmtd.YangCfgDataReq\x12\x17\n\x0fimplicit_commit\x18\x05 \x02(\x08\x12(\n\x0c\x63ommit_ds_id\x18\x06 \x02(\x0e\x32\x12.mgmtd.DatastoreId"\x99\x01\n\x10\x46\x65SetConfigReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12!\n\x05\x64s_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x03 \x02(\x04\x12\x0f\n\x07success\x18\x04 \x02(\x08\x12\x17\n\x0fimplicit_commit\x18\x05 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x06 \x01(\t"\xab\x01\n\x11\x46\x65\x43ommitConfigReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12%\n\tsrc_ds_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12%\n\tdst_ds_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12\x15\n\rvalidate_only\x18\x05 \x02(\x08\x12\r\n\x05\x61\x62ort\x18\x06 \x02(\x08"\xd4\x01\n\x13\x46\x65\x43ommitConfigReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12%\n\tsrc_ds_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12%\n\tdst_ds_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12\x15\n\rvalidate_only\x18\x05 \x02(\x08\x12\x0f\n\x07success\x18\x06 \x02(\x08\x12\r\n\x05\x61\x62ort\x18\x07 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x08 \x01(\t"\x86\x01\n\x08\x46\x65GetReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63onfig\x18\x02 \x02(\x08\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12#\n\x04\x64\x61ta\x18\x05 \x03(\x0b\x32\x15.mgmtd.YangGetDataReq"\xae\x01\n\nFeGetReply\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12\x0e\n\x06\x63onfig\x18\x02 \x02(\x08\x12!\n\x05\x64s_id\x18\x03 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12\x0f\n\x07success\x18\x05 \x02(\x08\x12\x14\n\x0c\x65rror_if_any\x18\x06 \x01(\t\x12"\n\x04\x64\x61ta\x18\x07 \x01(\x0b\x32\x14.mgmtd.YangDataReply"0\n\x0f\x46\x65NotifyDataReq\x12\x1d\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x0f.mgmtd.YangData"\x9c\x01\n\x13\x46\x65RegisterNotifyReq\x12\x12\n\nsession_id\x18\x01 \x02(\x04\x12!\n\x05\x64s_id\x18\x02 \x02(\x0e\x32\x12.mgmtd.DatastoreId\x12\x14\n\x0cregister_req\x18\x03 \x02(\x08\x12\x0e\n\x06req_id\x18\x04 \x02(\x04\x12(\n\ndata_xpath\x18\x05 \x03(\x0b\x32\x14.mgmtd.YangDataXPath"\xf0\x04\n\tFeMessage\x12,\n\x0cregister_req\x18\x02 \x01(\x0b\x32\x14.mgmtd.FeRegisterReqH\x00\x12*\n\x0bsession_req\x18\x03 \x01(\x0b\x32\x13.mgmtd.FeSessionReqH\x00\x12.\n\rsession_reply\x18\x04 \x01(\x0b\x32\x15.mgmtd.FeSessionReplyH\x00\x12(\n\nlockds_req\x18\x05 \x01(\x0b\x32\x12.mgmtd.FeLockDsReqH\x00\x12,\n\x0clockds_reply\x18\x06 \x01(\x0b\x32\x14.mgmtd.FeLockDsReplyH\x00\x12+\n\nsetcfg_req\x18\x07 \x01(\x0b\x32\x15.mgmtd.FeSetConfigReqH\x00\x12/\n\x0csetcfg_reply\x18\x08 \x01(\x0b\x32\x17.mgmtd.FeSetConfigReplyH\x00\x12/\n\x0b\x63ommcfg_req\x18\t \x01(\x0b\x32\x18.mgmtd.FeCommitConfigReqH\x00\x12\x33\n\rcommcfg_reply\x18\n \x01(\x0b\x32\x1a.mgmtd.FeCommitConfigReplyH\x00\x12"\n\x07get_req\x18\x0b \x01(\x0b\x32\x0f.mgmtd.FeGetReqH\x00\x12&\n\tget_reply\x18\x0c \x01(\x0b\x32\x11.mgmtd.FeGetReplyH\x00\x12\x31\n\x0fnotify_data_req\x18\x0f \x01(\x0b\x32\x16.mgmtd.FeNotifyDataReqH\x00\x12\x33\n\rregnotify_req\x18\x10 \x01(\x0b\x32\x1a.mgmtd.FeRegisterNotifyReqH\x00\x42\t\n\x07message*B\n\x0e\x43\x66gDataReqType\x12\x11\n\rREQ_TYPE_NONE\x10\x00\x12\x0c\n\x08SET_DATA\x10\x01\x12\x0f\n\x0b\x44\x45LETE_DATA\x10\x02*`\n\x0b\x44\x61tastoreId\x12\x0b\n\x07\x44S_NONE\x10\x00\x12\x0e\n\nRUNNING_DS\x10\x01\x12\x10\n\x0c\x43\x41NDIDATE_DS\x10\x02\x12\x12\n\x0eOPERATIONAL_DS\x10\x03\x12\x0e\n\nSTARTUP_DS\x10\x04',
)
_CFGDATAREQTYPE = _descriptor.EnumDescriptor(
- name='CfgDataReqType',
- full_name='mgmtd.CfgDataReqType',
- filename=None,
- file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
- values=[
- _descriptor.EnumValueDescriptor(
- name='REQ_TYPE_NONE', index=0, number=0,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='SET_DATA', index=1, number=1,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='DELETE_DATA', index=2, number=2,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=3674,
- serialized_end=3740,
+ name="CfgDataReqType",
+ full_name="mgmtd.CfgDataReqType",
+ filename=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name="REQ_TYPE_NONE",
+ index=0,
+ number=0,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.EnumValueDescriptor(
+ name="SET_DATA",
+ index=1,
+ number=1,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.EnumValueDescriptor(
+ name="DELETE_DATA",
+ index=2,
+ number=2,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=3674,
+ serialized_end=3740,
)
_sym_db.RegisterEnumDescriptor(_CFGDATAREQTYPE)
CfgDataReqType = enum_type_wrapper.EnumTypeWrapper(_CFGDATAREQTYPE)
_DATASTOREID = _descriptor.EnumDescriptor(
- name='DatastoreId',
- full_name='mgmtd.DatastoreId',
- filename=None,
- file=DESCRIPTOR,
- create_key=_descriptor._internal_create_key,
- values=[
- _descriptor.EnumValueDescriptor(
- name='DS_NONE', index=0, number=0,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='RUNNING_DS', index=1, number=1,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='CANDIDATE_DS', index=2, number=2,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='OPERATIONAL_DS', index=3, number=3,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- _descriptor.EnumValueDescriptor(
- name='STARTUP_DS', index=4, number=4,
- serialized_options=None,
- type=None,
- create_key=_descriptor._internal_create_key),
- ],
- containing_type=None,
- serialized_options=None,
- serialized_start=3742,
- serialized_end=3838,
+ name="DatastoreId",
+ full_name="mgmtd.DatastoreId",
+ filename=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ values=[
+ _descriptor.EnumValueDescriptor(
+ name="DS_NONE",
+ index=0,
+ number=0,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.EnumValueDescriptor(
+ name="RUNNING_DS",
+ index=1,
+ number=1,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.EnumValueDescriptor(
+ name="CANDIDATE_DS",
+ index=2,
+ number=2,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.EnumValueDescriptor(
+ name="OPERATIONAL_DS",
+ index=3,
+ number=3,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.EnumValueDescriptor(
+ name="STARTUP_DS",
+ index=4,
+ number=4,
+ serialized_options=None,
+ type=None,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ containing_type=None,
+ serialized_options=None,
+ serialized_start=3742,
+ serialized_end=3838,
)
_sym_db.RegisterEnumDescriptor(_DATASTOREID)
@@ -105,1885 +128,3341 @@ OPERATIONAL_DS = 3
STARTUP_DS = 4
-
_YANGDATAXPATH = _descriptor.Descriptor(
- name='YangDataXPath',
- full_name='mgmtd.YangDataXPath',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='xpath', full_name='mgmtd.YangDataXPath.xpath', index=0,
- number=1, type=9, cpp_type=9, label=2,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=21,
- serialized_end=51,
+ name="YangDataXPath",
+ full_name="mgmtd.YangDataXPath",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="xpath",
+ full_name="mgmtd.YangDataXPath.xpath",
+ index=0,
+ number=1,
+ type=9,
+ cpp_type=9,
+ label=2,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=21,
+ serialized_end=51,
)
_YANGDATAVALUE = _descriptor.Descriptor(
- name='YangDataValue',
- full_name='mgmtd.YangDataValue',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='encoded_str_val', full_name='mgmtd.YangDataValue.encoded_str_val', index=0,
- number=100, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='value', full_name='mgmtd.YangDataValue.value',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=53,
- serialized_end=104,
+ name="YangDataValue",
+ full_name="mgmtd.YangDataValue",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="encoded_str_val",
+ full_name="mgmtd.YangDataValue.encoded_str_val",
+ index=0,
+ number=100,
+ type=9,
+ cpp_type=9,
+ label=1,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name="value",
+ full_name="mgmtd.YangDataValue.value",
+ index=0,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[],
+ ),
+ ],
+ serialized_start=53,
+ serialized_end=104,
)
_YANGDATA = _descriptor.Descriptor(
- name='YangData',
- full_name='mgmtd.YangData',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='xpath', full_name='mgmtd.YangData.xpath', index=0,
- number=1, type=9, cpp_type=9, label=2,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='value', full_name='mgmtd.YangData.value', index=1,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=106,
- serialized_end=168,
+ name="YangData",
+ full_name="mgmtd.YangData",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="xpath",
+ full_name="mgmtd.YangData.xpath",
+ index=0,
+ number=1,
+ type=9,
+ cpp_type=9,
+ label=2,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="value",
+ full_name="mgmtd.YangData.value",
+ index=1,
+ number=2,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=106,
+ serialized_end=168,
)
_YANGCFGDATAREQ = _descriptor.Descriptor(
- name='YangCfgDataReq',
- full_name='mgmtd.YangCfgDataReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='data', full_name='mgmtd.YangCfgDataReq.data', index=0,
- number=1, type=11, cpp_type=10, label=2,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_type', full_name='mgmtd.YangCfgDataReq.req_type', index=1,
- number=2, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=170,
- serialized_end=258,
+ name="YangCfgDataReq",
+ full_name="mgmtd.YangCfgDataReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="data",
+ full_name="mgmtd.YangCfgDataReq.data",
+ index=0,
+ number=1,
+ type=11,
+ cpp_type=10,
+ label=2,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_type",
+ full_name="mgmtd.YangCfgDataReq.req_type",
+ index=1,
+ number=2,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=170,
+ serialized_end=258,
)
_YANGGETDATAREQ = _descriptor.Descriptor(
- name='YangGetDataReq',
- full_name='mgmtd.YangGetDataReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='data', full_name='mgmtd.YangGetDataReq.data', index=0,
- number=1, type=11, cpp_type=10, label=2,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_indx', full_name='mgmtd.YangGetDataReq.next_indx', index=1,
- number=2, type=3, cpp_type=2, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=260,
- serialized_end=326,
+ name="YangGetDataReq",
+ full_name="mgmtd.YangGetDataReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="data",
+ full_name="mgmtd.YangGetDataReq.data",
+ index=0,
+ number=1,
+ type=11,
+ cpp_type=10,
+ label=2,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="next_indx",
+ full_name="mgmtd.YangGetDataReq.next_indx",
+ index=1,
+ number=2,
+ type=3,
+ cpp_type=2,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=260,
+ serialized_end=326,
)
_BESUBSCRIBEREQ = _descriptor.Descriptor(
- name='BeSubscribeReq',
- full_name='mgmtd.BeSubscribeReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='client_name', full_name='mgmtd.BeSubscribeReq.client_name', index=0,
- number=1, type=9, cpp_type=9, label=2,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='subscribe_xpaths', full_name='mgmtd.BeSubscribeReq.subscribe_xpaths', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='xpath_reg', full_name='mgmtd.BeSubscribeReq.xpath_reg', index=2,
- number=3, type=9, cpp_type=9, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=328,
- serialized_end=410,
+ name="BeSubscribeReq",
+ full_name="mgmtd.BeSubscribeReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="client_name",
+ full_name="mgmtd.BeSubscribeReq.client_name",
+ index=0,
+ number=1,
+ type=9,
+ cpp_type=9,
+ label=2,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="subscribe_xpaths",
+ full_name="mgmtd.BeSubscribeReq.subscribe_xpaths",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="xpath_reg",
+ full_name="mgmtd.BeSubscribeReq.xpath_reg",
+ index=2,
+ number=3,
+ type=9,
+ cpp_type=9,
+ label=3,
+ has_default_value=False,
+ default_value=[],
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=328,
+ serialized_end=410,
)
_BESUBSCRIBEREPLY = _descriptor.Descriptor(
- name='BeSubscribeReply',
- full_name='mgmtd.BeSubscribeReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.BeSubscribeReply.success', index=0,
- number=1, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=412,
- serialized_end=447,
+ name="BeSubscribeReply",
+ full_name="mgmtd.BeSubscribeReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.BeSubscribeReply.success",
+ index=0,
+ number=1,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=412,
+ serialized_end=447,
)
_BETXNREQ = _descriptor.Descriptor(
- name='BeTxnReq',
- full_name='mgmtd.BeTxnReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='txn_id', full_name='mgmtd.BeTxnReq.txn_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='create', full_name='mgmtd.BeTxnReq.create', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=449,
- serialized_end=491,
+ name="BeTxnReq",
+ full_name="mgmtd.BeTxnReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="txn_id",
+ full_name="mgmtd.BeTxnReq.txn_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="create",
+ full_name="mgmtd.BeTxnReq.create",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=449,
+ serialized_end=491,
)
_BETXNREPLY = _descriptor.Descriptor(
- name='BeTxnReply',
- full_name='mgmtd.BeTxnReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='txn_id', full_name='mgmtd.BeTxnReply.txn_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='create', full_name='mgmtd.BeTxnReply.create', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.BeTxnReply.success', index=2,
- number=3, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=493,
- serialized_end=554,
+ name="BeTxnReply",
+ full_name="mgmtd.BeTxnReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="txn_id",
+ full_name="mgmtd.BeTxnReply.txn_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="create",
+ full_name="mgmtd.BeTxnReply.create",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.BeTxnReply.success",
+ index=2,
+ number=3,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=493,
+ serialized_end=554,
)
_BECFGDATACREATEREQ = _descriptor.Descriptor(
- name='BeCfgDataCreateReq',
- full_name='mgmtd.BeCfgDataCreateReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='txn_id', full_name='mgmtd.BeCfgDataCreateReq.txn_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data_req', full_name='mgmtd.BeCfgDataCreateReq.data_req', index=1,
- number=2, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='end_of_data', full_name='mgmtd.BeCfgDataCreateReq.end_of_data', index=2,
- number=3, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=556,
- serialized_end=654,
+ name="BeCfgDataCreateReq",
+ full_name="mgmtd.BeCfgDataCreateReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="txn_id",
+ full_name="mgmtd.BeCfgDataCreateReq.txn_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="data_req",
+ full_name="mgmtd.BeCfgDataCreateReq.data_req",
+ index=1,
+ number=2,
+ type=11,
+ cpp_type=10,
+ label=3,
+ has_default_value=False,
+ default_value=[],
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="end_of_data",
+ full_name="mgmtd.BeCfgDataCreateReq.end_of_data",
+ index=2,
+ number=3,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=556,
+ serialized_end=654,
)
_BECFGDATACREATEREPLY = _descriptor.Descriptor(
- name='BeCfgDataCreateReply',
- full_name='mgmtd.BeCfgDataCreateReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='txn_id', full_name='mgmtd.BeCfgDataCreateReply.txn_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.BeCfgDataCreateReply.success', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='error_if_any', full_name='mgmtd.BeCfgDataCreateReply.error_if_any', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=656,
- serialized_end=733,
+ name="BeCfgDataCreateReply",
+ full_name="mgmtd.BeCfgDataCreateReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="txn_id",
+ full_name="mgmtd.BeCfgDataCreateReply.txn_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.BeCfgDataCreateReply.success",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="error_if_any",
+ full_name="mgmtd.BeCfgDataCreateReply.error_if_any",
+ index=2,
+ number=3,
+ type=9,
+ cpp_type=9,
+ label=1,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=656,
+ serialized_end=733,
)
_BECFGDATAAPPLYREQ = _descriptor.Descriptor(
- name='BeCfgDataApplyReq',
- full_name='mgmtd.BeCfgDataApplyReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='txn_id', full_name='mgmtd.BeCfgDataApplyReq.txn_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=735,
- serialized_end=770,
+ name="BeCfgDataApplyReq",
+ full_name="mgmtd.BeCfgDataApplyReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="txn_id",
+ full_name="mgmtd.BeCfgDataApplyReq.txn_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=735,
+ serialized_end=770,
)
_BECFGDATAAPPLYREPLY = _descriptor.Descriptor(
- name='BeCfgDataApplyReply',
- full_name='mgmtd.BeCfgDataApplyReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='txn_id', full_name='mgmtd.BeCfgDataApplyReply.txn_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.BeCfgDataApplyReply.success', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='error_if_any', full_name='mgmtd.BeCfgDataApplyReply.error_if_any', index=2,
- number=3, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=772,
- serialized_end=848,
+ name="BeCfgDataApplyReply",
+ full_name="mgmtd.BeCfgDataApplyReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="txn_id",
+ full_name="mgmtd.BeCfgDataApplyReply.txn_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.BeCfgDataApplyReply.success",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="error_if_any",
+ full_name="mgmtd.BeCfgDataApplyReply.error_if_any",
+ index=2,
+ number=3,
+ type=9,
+ cpp_type=9,
+ label=1,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=772,
+ serialized_end=848,
)
_YANGDATAREPLY = _descriptor.Descriptor(
- name='YangDataReply',
- full_name='mgmtd.YangDataReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='data', full_name='mgmtd.YangDataReply.data', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='next_indx', full_name='mgmtd.YangDataReply.next_indx', index=1,
- number=2, type=3, cpp_type=2, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=850,
- serialized_end=915,
+ name="YangDataReply",
+ full_name="mgmtd.YangDataReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="data",
+ full_name="mgmtd.YangDataReply.data",
+ index=0,
+ number=1,
+ type=11,
+ cpp_type=10,
+ label=3,
+ has_default_value=False,
+ default_value=[],
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="next_indx",
+ full_name="mgmtd.YangDataReply.next_indx",
+ index=1,
+ number=2,
+ type=3,
+ cpp_type=2,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=850,
+ serialized_end=915,
)
_BEMESSAGE = _descriptor.Descriptor(
- name='BeMessage',
- full_name='mgmtd.BeMessage',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='subscr_req', full_name='mgmtd.BeMessage.subscr_req', index=0,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='subscr_reply', full_name='mgmtd.BeMessage.subscr_reply', index=1,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='txn_req', full_name='mgmtd.BeMessage.txn_req', index=2,
- number=4, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='txn_reply', full_name='mgmtd.BeMessage.txn_reply', index=3,
- number=5, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='cfg_data_req', full_name='mgmtd.BeMessage.cfg_data_req', index=4,
- number=6, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='cfg_data_reply', full_name='mgmtd.BeMessage.cfg_data_reply', index=5,
- number=7, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='cfg_apply_req', full_name='mgmtd.BeMessage.cfg_apply_req', index=6,
- number=8, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='cfg_apply_reply', full_name='mgmtd.BeMessage.cfg_apply_reply', index=7,
- number=9, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='message', full_name='mgmtd.BeMessage.message',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=918,
- serialized_end=1322,
+ name="BeMessage",
+ full_name="mgmtd.BeMessage",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="subscr_req",
+ full_name="mgmtd.BeMessage.subscr_req",
+ index=0,
+ number=2,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="subscr_reply",
+ full_name="mgmtd.BeMessage.subscr_reply",
+ index=1,
+ number=3,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="txn_req",
+ full_name="mgmtd.BeMessage.txn_req",
+ index=2,
+ number=4,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="txn_reply",
+ full_name="mgmtd.BeMessage.txn_reply",
+ index=3,
+ number=5,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="cfg_data_req",
+ full_name="mgmtd.BeMessage.cfg_data_req",
+ index=4,
+ number=6,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="cfg_data_reply",
+ full_name="mgmtd.BeMessage.cfg_data_reply",
+ index=5,
+ number=7,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="cfg_apply_req",
+ full_name="mgmtd.BeMessage.cfg_apply_req",
+ index=6,
+ number=8,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="cfg_apply_reply",
+ full_name="mgmtd.BeMessage.cfg_apply_reply",
+ index=7,
+ number=9,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name="message",
+ full_name="mgmtd.BeMessage.message",
+ index=0,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[],
+ ),
+ ],
+ serialized_start=918,
+ serialized_end=1322,
)
_FEREGISTERREQ = _descriptor.Descriptor(
- name='FeRegisterReq',
- full_name='mgmtd.FeRegisterReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='client_name', full_name='mgmtd.FeRegisterReq.client_name', index=0,
- number=1, type=9, cpp_type=9, label=2,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1324,
- serialized_end=1360,
+ name="FeRegisterReq",
+ full_name="mgmtd.FeRegisterReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="client_name",
+ full_name="mgmtd.FeRegisterReq.client_name",
+ index=0,
+ number=1,
+ type=9,
+ cpp_type=9,
+ label=2,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=1324,
+ serialized_end=1360,
)
_FESESSIONREQ = _descriptor.Descriptor(
- name='FeSessionReq',
- full_name='mgmtd.FeSessionReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='create', full_name='mgmtd.FeSessionReq.create', index=0,
- number=1, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='client_conn_id', full_name='mgmtd.FeSessionReq.client_conn_id', index=1,
- number=2, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeSessionReq.session_id', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='id', full_name='mgmtd.FeSessionReq.id',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=1362,
- serialized_end=1446,
+ name="FeSessionReq",
+ full_name="mgmtd.FeSessionReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="create",
+ full_name="mgmtd.FeSessionReq.create",
+ index=0,
+ number=1,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="client_conn_id",
+ full_name="mgmtd.FeSessionReq.client_conn_id",
+ index=1,
+ number=2,
+ type=4,
+ cpp_type=4,
+ label=1,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeSessionReq.session_id",
+ index=2,
+ number=3,
+ type=4,
+ cpp_type=4,
+ label=1,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name="id",
+ full_name="mgmtd.FeSessionReq.id",
+ index=0,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[],
+ ),
+ ],
+ serialized_start=1362,
+ serialized_end=1446,
)
_FESESSIONREPLY = _descriptor.Descriptor(
- name='FeSessionReply',
- full_name='mgmtd.FeSessionReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='create', full_name='mgmtd.FeSessionReply.create', index=0,
- number=1, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.FeSessionReply.success', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='client_conn_id', full_name='mgmtd.FeSessionReply.client_conn_id', index=2,
- number=3, type=4, cpp_type=4, label=1,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeSessionReply.session_id', index=3,
- number=4, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1448,
- serialized_end=1541,
+ name="FeSessionReply",
+ full_name="mgmtd.FeSessionReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="create",
+ full_name="mgmtd.FeSessionReply.create",
+ index=0,
+ number=1,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.FeSessionReply.success",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="client_conn_id",
+ full_name="mgmtd.FeSessionReply.client_conn_id",
+ index=2,
+ number=3,
+ type=4,
+ cpp_type=4,
+ label=1,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeSessionReply.session_id",
+ index=3,
+ number=4,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=1448,
+ serialized_end=1541,
)
_FELOCKDSREQ = _descriptor.Descriptor(
- name='FeLockDsReq',
- full_name='mgmtd.FeLockDsReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeLockDsReq.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeLockDsReq.req_id', index=1,
- number=2, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ds_id', full_name='mgmtd.FeLockDsReq.ds_id', index=2,
- number=3, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='lock', full_name='mgmtd.FeLockDsReq.lock', index=3,
- number=4, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1543,
- serialized_end=1641,
+ name="FeLockDsReq",
+ full_name="mgmtd.FeLockDsReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeLockDsReq.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeLockDsReq.req_id",
+ index=1,
+ number=2,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="ds_id",
+ full_name="mgmtd.FeLockDsReq.ds_id",
+ index=2,
+ number=3,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="lock",
+ full_name="mgmtd.FeLockDsReq.lock",
+ index=3,
+ number=4,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=1543,
+ serialized_end=1641,
)
_FELOCKDSREPLY = _descriptor.Descriptor(
- name='FeLockDsReply',
- full_name='mgmtd.FeLockDsReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeLockDsReply.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeLockDsReply.req_id', index=1,
- number=2, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ds_id', full_name='mgmtd.FeLockDsReply.ds_id', index=2,
- number=3, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='lock', full_name='mgmtd.FeLockDsReply.lock', index=3,
- number=4, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.FeLockDsReply.success', index=4,
- number=5, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='error_if_any', full_name='mgmtd.FeLockDsReply.error_if_any', index=5,
- number=6, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1644,
- serialized_end=1783,
+ name="FeLockDsReply",
+ full_name="mgmtd.FeLockDsReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeLockDsReply.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeLockDsReply.req_id",
+ index=1,
+ number=2,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="ds_id",
+ full_name="mgmtd.FeLockDsReply.ds_id",
+ index=2,
+ number=3,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="lock",
+ full_name="mgmtd.FeLockDsReply.lock",
+ index=3,
+ number=4,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.FeLockDsReply.success",
+ index=4,
+ number=5,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="error_if_any",
+ full_name="mgmtd.FeLockDsReply.error_if_any",
+ index=5,
+ number=6,
+ type=9,
+ cpp_type=9,
+ label=1,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=1644,
+ serialized_end=1783,
)
_FESETCONFIGREQ = _descriptor.Descriptor(
- name='FeSetConfigReq',
- full_name='mgmtd.FeSetConfigReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeSetConfigReq.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ds_id', full_name='mgmtd.FeSetConfigReq.ds_id', index=1,
- number=2, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeSetConfigReq.req_id', index=2,
- number=3, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data', full_name='mgmtd.FeSetConfigReq.data', index=3,
- number=4, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='implicit_commit', full_name='mgmtd.FeSetConfigReq.implicit_commit', index=4,
- number=5, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='commit_ds_id', full_name='mgmtd.FeSetConfigReq.commit_ds_id', index=5,
- number=6, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1786,
- serialized_end=1977,
+ name="FeSetConfigReq",
+ full_name="mgmtd.FeSetConfigReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeSetConfigReq.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="ds_id",
+ full_name="mgmtd.FeSetConfigReq.ds_id",
+ index=1,
+ number=2,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeSetConfigReq.req_id",
+ index=2,
+ number=3,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="data",
+ full_name="mgmtd.FeSetConfigReq.data",
+ index=3,
+ number=4,
+ type=11,
+ cpp_type=10,
+ label=3,
+ has_default_value=False,
+ default_value=[],
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="implicit_commit",
+ full_name="mgmtd.FeSetConfigReq.implicit_commit",
+ index=4,
+ number=5,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="commit_ds_id",
+ full_name="mgmtd.FeSetConfigReq.commit_ds_id",
+ index=5,
+ number=6,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=1786,
+ serialized_end=1977,
)
_FESETCONFIGREPLY = _descriptor.Descriptor(
- name='FeSetConfigReply',
- full_name='mgmtd.FeSetConfigReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeSetConfigReply.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ds_id', full_name='mgmtd.FeSetConfigReply.ds_id', index=1,
- number=2, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeSetConfigReply.req_id', index=2,
- number=3, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.FeSetConfigReply.success', index=3,
- number=4, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='implicit_commit', full_name='mgmtd.FeSetConfigReply.implicit_commit', index=4,
- number=5, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='error_if_any', full_name='mgmtd.FeSetConfigReply.error_if_any', index=5,
- number=6, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=1980,
- serialized_end=2133,
+ name="FeSetConfigReply",
+ full_name="mgmtd.FeSetConfigReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeSetConfigReply.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="ds_id",
+ full_name="mgmtd.FeSetConfigReply.ds_id",
+ index=1,
+ number=2,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeSetConfigReply.req_id",
+ index=2,
+ number=3,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.FeSetConfigReply.success",
+ index=3,
+ number=4,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="implicit_commit",
+ full_name="mgmtd.FeSetConfigReply.implicit_commit",
+ index=4,
+ number=5,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="error_if_any",
+ full_name="mgmtd.FeSetConfigReply.error_if_any",
+ index=5,
+ number=6,
+ type=9,
+ cpp_type=9,
+ label=1,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=1980,
+ serialized_end=2133,
)
_FECOMMITCONFIGREQ = _descriptor.Descriptor(
- name='FeCommitConfigReq',
- full_name='mgmtd.FeCommitConfigReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeCommitConfigReq.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='src_ds_id', full_name='mgmtd.FeCommitConfigReq.src_ds_id', index=1,
- number=2, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='dst_ds_id', full_name='mgmtd.FeCommitConfigReq.dst_ds_id', index=2,
- number=3, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeCommitConfigReq.req_id', index=3,
- number=4, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validate_only', full_name='mgmtd.FeCommitConfigReq.validate_only', index=4,
- number=5, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='abort', full_name='mgmtd.FeCommitConfigReq.abort', index=5,
- number=6, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2136,
- serialized_end=2307,
+ name="FeCommitConfigReq",
+ full_name="mgmtd.FeCommitConfigReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeCommitConfigReq.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="src_ds_id",
+ full_name="mgmtd.FeCommitConfigReq.src_ds_id",
+ index=1,
+ number=2,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="dst_ds_id",
+ full_name="mgmtd.FeCommitConfigReq.dst_ds_id",
+ index=2,
+ number=3,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeCommitConfigReq.req_id",
+ index=3,
+ number=4,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="validate_only",
+ full_name="mgmtd.FeCommitConfigReq.validate_only",
+ index=4,
+ number=5,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="abort",
+ full_name="mgmtd.FeCommitConfigReq.abort",
+ index=5,
+ number=6,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=2136,
+ serialized_end=2307,
)
_FECOMMITCONFIGREPLY = _descriptor.Descriptor(
- name='FeCommitConfigReply',
- full_name='mgmtd.FeCommitConfigReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeCommitConfigReply.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='src_ds_id', full_name='mgmtd.FeCommitConfigReply.src_ds_id', index=1,
- number=2, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='dst_ds_id', full_name='mgmtd.FeCommitConfigReply.dst_ds_id', index=2,
- number=3, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeCommitConfigReply.req_id', index=3,
- number=4, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='validate_only', full_name='mgmtd.FeCommitConfigReply.validate_only', index=4,
- number=5, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.FeCommitConfigReply.success', index=5,
- number=6, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='abort', full_name='mgmtd.FeCommitConfigReply.abort', index=6,
- number=7, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='error_if_any', full_name='mgmtd.FeCommitConfigReply.error_if_any', index=7,
- number=8, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2310,
- serialized_end=2522,
+ name="FeCommitConfigReply",
+ full_name="mgmtd.FeCommitConfigReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeCommitConfigReply.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="src_ds_id",
+ full_name="mgmtd.FeCommitConfigReply.src_ds_id",
+ index=1,
+ number=2,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="dst_ds_id",
+ full_name="mgmtd.FeCommitConfigReply.dst_ds_id",
+ index=2,
+ number=3,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeCommitConfigReply.req_id",
+ index=3,
+ number=4,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="validate_only",
+ full_name="mgmtd.FeCommitConfigReply.validate_only",
+ index=4,
+ number=5,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.FeCommitConfigReply.success",
+ index=5,
+ number=6,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="abort",
+ full_name="mgmtd.FeCommitConfigReply.abort",
+ index=6,
+ number=7,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="error_if_any",
+ full_name="mgmtd.FeCommitConfigReply.error_if_any",
+ index=7,
+ number=8,
+ type=9,
+ cpp_type=9,
+ label=1,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=2310,
+ serialized_end=2522,
)
_FEGETREQ = _descriptor.Descriptor(
- name='FeGetReq',
- full_name='mgmtd.FeGetReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeGetReq.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='config', full_name='mgmtd.FeGetReq.config', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ds_id', full_name='mgmtd.FeGetReq.ds_id', index=2,
- number=3, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeGetReq.req_id', index=3,
- number=4, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data', full_name='mgmtd.FeGetReq.data', index=4,
- number=5, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2525,
- serialized_end=2659,
+ name="FeGetReq",
+ full_name="mgmtd.FeGetReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeGetReq.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="config",
+ full_name="mgmtd.FeGetReq.config",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="ds_id",
+ full_name="mgmtd.FeGetReq.ds_id",
+ index=2,
+ number=3,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeGetReq.req_id",
+ index=3,
+ number=4,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="data",
+ full_name="mgmtd.FeGetReq.data",
+ index=4,
+ number=5,
+ type=11,
+ cpp_type=10,
+ label=3,
+ has_default_value=False,
+ default_value=[],
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=2525,
+ serialized_end=2659,
)
_FEGETREPLY = _descriptor.Descriptor(
- name='FeGetReply',
- full_name='mgmtd.FeGetReply',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeGetReply.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='config', full_name='mgmtd.FeGetReply.config', index=1,
- number=2, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ds_id', full_name='mgmtd.FeGetReply.ds_id', index=2,
- number=3, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeGetReply.req_id', index=3,
- number=4, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='success', full_name='mgmtd.FeGetReply.success', index=4,
- number=5, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='error_if_any', full_name='mgmtd.FeGetReply.error_if_any', index=5,
- number=6, type=9, cpp_type=9, label=1,
- has_default_value=False, default_value=b"".decode('utf-8'),
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data', full_name='mgmtd.FeGetReply.data', index=6,
- number=7, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2662,
- serialized_end=2836,
+ name="FeGetReply",
+ full_name="mgmtd.FeGetReply",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeGetReply.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="config",
+ full_name="mgmtd.FeGetReply.config",
+ index=1,
+ number=2,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="ds_id",
+ full_name="mgmtd.FeGetReply.ds_id",
+ index=2,
+ number=3,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeGetReply.req_id",
+ index=3,
+ number=4,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="success",
+ full_name="mgmtd.FeGetReply.success",
+ index=4,
+ number=5,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="error_if_any",
+ full_name="mgmtd.FeGetReply.error_if_any",
+ index=5,
+ number=6,
+ type=9,
+ cpp_type=9,
+ label=1,
+ has_default_value=False,
+ default_value=b"".decode("utf-8"),
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="data",
+ full_name="mgmtd.FeGetReply.data",
+ index=6,
+ number=7,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=2662,
+ serialized_end=2836,
)
_FENOTIFYDATAREQ = _descriptor.Descriptor(
- name='FeNotifyDataReq',
- full_name='mgmtd.FeNotifyDataReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='data', full_name='mgmtd.FeNotifyDataReq.data', index=0,
- number=1, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2838,
- serialized_end=2886,
+ name="FeNotifyDataReq",
+ full_name="mgmtd.FeNotifyDataReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="data",
+ full_name="mgmtd.FeNotifyDataReq.data",
+ index=0,
+ number=1,
+ type=11,
+ cpp_type=10,
+ label=3,
+ has_default_value=False,
+ default_value=[],
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=2838,
+ serialized_end=2886,
)
_FEREGISTERNOTIFYREQ = _descriptor.Descriptor(
- name='FeRegisterNotifyReq',
- full_name='mgmtd.FeRegisterNotifyReq',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='session_id', full_name='mgmtd.FeRegisterNotifyReq.session_id', index=0,
- number=1, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='ds_id', full_name='mgmtd.FeRegisterNotifyReq.ds_id', index=1,
- number=2, type=14, cpp_type=8, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='register_req', full_name='mgmtd.FeRegisterNotifyReq.register_req', index=2,
- number=3, type=8, cpp_type=7, label=2,
- has_default_value=False, default_value=False,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='req_id', full_name='mgmtd.FeRegisterNotifyReq.req_id', index=3,
- number=4, type=4, cpp_type=4, label=2,
- has_default_value=False, default_value=0,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='data_xpath', full_name='mgmtd.FeRegisterNotifyReq.data_xpath', index=4,
- number=5, type=11, cpp_type=10, label=3,
- has_default_value=False, default_value=[],
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- ],
- serialized_start=2889,
- serialized_end=3045,
+ name="FeRegisterNotifyReq",
+ full_name="mgmtd.FeRegisterNotifyReq",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="session_id",
+ full_name="mgmtd.FeRegisterNotifyReq.session_id",
+ index=0,
+ number=1,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="ds_id",
+ full_name="mgmtd.FeRegisterNotifyReq.ds_id",
+ index=1,
+ number=2,
+ type=14,
+ cpp_type=8,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="register_req",
+ full_name="mgmtd.FeRegisterNotifyReq.register_req",
+ index=2,
+ number=3,
+ type=8,
+ cpp_type=7,
+ label=2,
+ has_default_value=False,
+ default_value=False,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="req_id",
+ full_name="mgmtd.FeRegisterNotifyReq.req_id",
+ index=3,
+ number=4,
+ type=4,
+ cpp_type=4,
+ label=2,
+ has_default_value=False,
+ default_value=0,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="data_xpath",
+ full_name="mgmtd.FeRegisterNotifyReq.data_xpath",
+ index=4,
+ number=5,
+ type=11,
+ cpp_type=10,
+ label=3,
+ has_default_value=False,
+ default_value=[],
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[],
+ serialized_start=2889,
+ serialized_end=3045,
)
_FEMESSAGE = _descriptor.Descriptor(
- name='FeMessage',
- full_name='mgmtd.FeMessage',
- filename=None,
- file=DESCRIPTOR,
- containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[
- _descriptor.FieldDescriptor(
- name='register_req', full_name='mgmtd.FeMessage.register_req', index=0,
- number=2, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='session_req', full_name='mgmtd.FeMessage.session_req', index=1,
- number=3, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='session_reply', full_name='mgmtd.FeMessage.session_reply', index=2,
- number=4, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='lockds_req', full_name='mgmtd.FeMessage.lockds_req', index=3,
- number=5, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='lockds_reply', full_name='mgmtd.FeMessage.lockds_reply', index=4,
- number=6, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='setcfg_req', full_name='mgmtd.FeMessage.setcfg_req', index=5,
- number=7, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='setcfg_reply', full_name='mgmtd.FeMessage.setcfg_reply', index=6,
- number=8, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='commcfg_req', full_name='mgmtd.FeMessage.commcfg_req', index=7,
- number=9, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='commcfg_reply', full_name='mgmtd.FeMessage.commcfg_reply', index=8,
- number=10, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='get_req', full_name='mgmtd.FeMessage.get_req', index=9,
- number=11, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='get_reply', full_name='mgmtd.FeMessage.get_reply', index=10,
- number=12, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='notify_data_req', full_name='mgmtd.FeMessage.notify_data_req', index=11,
- number=15, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- _descriptor.FieldDescriptor(
- name='regnotify_req', full_name='mgmtd.FeMessage.regnotify_req', index=12,
- number=16, type=11, cpp_type=10, label=1,
- has_default_value=False, default_value=None,
- message_type=None, enum_type=None, containing_type=None,
- is_extension=False, extension_scope=None,
- serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key),
- ],
- extensions=[
- ],
- nested_types=[],
- enum_types=[
- ],
- serialized_options=None,
- is_extendable=False,
- syntax='proto2',
- extension_ranges=[],
- oneofs=[
- _descriptor.OneofDescriptor(
- name='message', full_name='mgmtd.FeMessage.message',
- index=0, containing_type=None,
- create_key=_descriptor._internal_create_key,
- fields=[]),
- ],
- serialized_start=3048,
- serialized_end=3672,
-)
-
-_YANGDATAVALUE.oneofs_by_name['value'].fields.append(
- _YANGDATAVALUE.fields_by_name['encoded_str_val'])
-_YANGDATAVALUE.fields_by_name['encoded_str_val'].containing_oneof = _YANGDATAVALUE.oneofs_by_name['value']
-_YANGDATA.fields_by_name['value'].message_type = _YANGDATAVALUE
-_YANGCFGDATAREQ.fields_by_name['data'].message_type = _YANGDATA
-_YANGCFGDATAREQ.fields_by_name['req_type'].enum_type = _CFGDATAREQTYPE
-_YANGGETDATAREQ.fields_by_name['data'].message_type = _YANGDATA
-_BECFGDATACREATEREQ.fields_by_name['data_req'].message_type = _YANGCFGDATAREQ
-_YANGDATAREPLY.fields_by_name['data'].message_type = _YANGDATA
-_BEMESSAGE.fields_by_name['subscr_req'].message_type = _BESUBSCRIBEREQ
-_BEMESSAGE.fields_by_name['subscr_reply'].message_type = _BESUBSCRIBEREPLY
-_BEMESSAGE.fields_by_name['txn_req'].message_type = _BETXNREQ
-_BEMESSAGE.fields_by_name['txn_reply'].message_type = _BETXNREPLY
-_BEMESSAGE.fields_by_name['cfg_data_req'].message_type = _BECFGDATACREATEREQ
-_BEMESSAGE.fields_by_name['cfg_data_reply'].message_type = _BECFGDATACREATEREPLY
-_BEMESSAGE.fields_by_name['cfg_apply_req'].message_type = _BECFGDATAAPPLYREQ
-_BEMESSAGE.fields_by_name['cfg_apply_reply'].message_type = _BECFGDATAAPPLYREPLY
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['subscr_req'])
-_BEMESSAGE.fields_by_name['subscr_req'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['subscr_reply'])
-_BEMESSAGE.fields_by_name['subscr_reply'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['txn_req'])
-_BEMESSAGE.fields_by_name['txn_req'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['txn_reply'])
-_BEMESSAGE.fields_by_name['txn_reply'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['cfg_data_req'])
-_BEMESSAGE.fields_by_name['cfg_data_req'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['cfg_data_reply'])
-_BEMESSAGE.fields_by_name['cfg_data_reply'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['cfg_apply_req'])
-_BEMESSAGE.fields_by_name['cfg_apply_req'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_BEMESSAGE.oneofs_by_name['message'].fields.append(
- _BEMESSAGE.fields_by_name['cfg_apply_reply'])
-_BEMESSAGE.fields_by_name['cfg_apply_reply'].containing_oneof = _BEMESSAGE.oneofs_by_name['message']
-_FESESSIONREQ.oneofs_by_name['id'].fields.append(
- _FESESSIONREQ.fields_by_name['client_conn_id'])
-_FESESSIONREQ.fields_by_name['client_conn_id'].containing_oneof = _FESESSIONREQ.oneofs_by_name['id']
-_FESESSIONREQ.oneofs_by_name['id'].fields.append(
- _FESESSIONREQ.fields_by_name['session_id'])
-_FESESSIONREQ.fields_by_name['session_id'].containing_oneof = _FESESSIONREQ.oneofs_by_name['id']
-_FELOCKDSREQ.fields_by_name['ds_id'].enum_type = _DATASTOREID
-_FELOCKDSREPLY.fields_by_name['ds_id'].enum_type = _DATASTOREID
-_FESETCONFIGREQ.fields_by_name['ds_id'].enum_type = _DATASTOREID
-_FESETCONFIGREQ.fields_by_name['data'].message_type = _YANGCFGDATAREQ
-_FESETCONFIGREQ.fields_by_name['commit_ds_id'].enum_type = _DATASTOREID
-_FESETCONFIGREPLY.fields_by_name['ds_id'].enum_type = _DATASTOREID
-_FECOMMITCONFIGREQ.fields_by_name['src_ds_id'].enum_type = _DATASTOREID
-_FECOMMITCONFIGREQ.fields_by_name['dst_ds_id'].enum_type = _DATASTOREID
-_FECOMMITCONFIGREPLY.fields_by_name['src_ds_id'].enum_type = _DATASTOREID
-_FECOMMITCONFIGREPLY.fields_by_name['dst_ds_id'].enum_type = _DATASTOREID
-_FEGETREQ.fields_by_name['ds_id'].enum_type = _DATASTOREID
-_FEGETREQ.fields_by_name['data'].message_type = _YANGGETDATAREQ
-_FEGETREPLY.fields_by_name['ds_id'].enum_type = _DATASTOREID
-_FEGETREPLY.fields_by_name['data'].message_type = _YANGDATAREPLY
-_FENOTIFYDATAREQ.fields_by_name['data'].message_type = _YANGDATA
-_FEREGISTERNOTIFYREQ.fields_by_name['ds_id'].enum_type = _DATASTOREID
-_FEREGISTERNOTIFYREQ.fields_by_name['data_xpath'].message_type = _YANGDATAXPATH
-_FEMESSAGE.fields_by_name['register_req'].message_type = _FEREGISTERREQ
-_FEMESSAGE.fields_by_name['session_req'].message_type = _FESESSIONREQ
-_FEMESSAGE.fields_by_name['session_reply'].message_type = _FESESSIONREPLY
-_FEMESSAGE.fields_by_name['lockds_req'].message_type = _FELOCKDSREQ
-_FEMESSAGE.fields_by_name['lockds_reply'].message_type = _FELOCKDSREPLY
-_FEMESSAGE.fields_by_name['setcfg_req'].message_type = _FESETCONFIGREQ
-_FEMESSAGE.fields_by_name['setcfg_reply'].message_type = _FESETCONFIGREPLY
-_FEMESSAGE.fields_by_name['commcfg_req'].message_type = _FECOMMITCONFIGREQ
-_FEMESSAGE.fields_by_name['commcfg_reply'].message_type = _FECOMMITCONFIGREPLY
-_FEMESSAGE.fields_by_name['get_req'].message_type = _FEGETREQ
-_FEMESSAGE.fields_by_name['get_reply'].message_type = _FEGETREPLY
-_FEMESSAGE.fields_by_name['notify_data_req'].message_type = _FENOTIFYDATAREQ
-_FEMESSAGE.fields_by_name['regnotify_req'].message_type = _FEREGISTERNOTIFYREQ
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['register_req'])
-_FEMESSAGE.fields_by_name['register_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['session_req'])
-_FEMESSAGE.fields_by_name['session_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['session_reply'])
-_FEMESSAGE.fields_by_name['session_reply'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['lockds_req'])
-_FEMESSAGE.fields_by_name['lockds_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['lockds_reply'])
-_FEMESSAGE.fields_by_name['lockds_reply'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['setcfg_req'])
-_FEMESSAGE.fields_by_name['setcfg_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['setcfg_reply'])
-_FEMESSAGE.fields_by_name['setcfg_reply'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['commcfg_req'])
-_FEMESSAGE.fields_by_name['commcfg_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['commcfg_reply'])
-_FEMESSAGE.fields_by_name['commcfg_reply'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['get_req'])
-_FEMESSAGE.fields_by_name['get_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['get_reply'])
-_FEMESSAGE.fields_by_name['get_reply'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['notify_data_req'])
-_FEMESSAGE.fields_by_name['notify_data_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-_FEMESSAGE.oneofs_by_name['message'].fields.append(
- _FEMESSAGE.fields_by_name['regnotify_req'])
-_FEMESSAGE.fields_by_name['regnotify_req'].containing_oneof = _FEMESSAGE.oneofs_by_name['message']
-DESCRIPTOR.message_types_by_name['YangDataXPath'] = _YANGDATAXPATH
-DESCRIPTOR.message_types_by_name['YangDataValue'] = _YANGDATAVALUE
-DESCRIPTOR.message_types_by_name['YangData'] = _YANGDATA
-DESCRIPTOR.message_types_by_name['YangCfgDataReq'] = _YANGCFGDATAREQ
-DESCRIPTOR.message_types_by_name['YangGetDataReq'] = _YANGGETDATAREQ
-DESCRIPTOR.message_types_by_name['BeSubscribeReq'] = _BESUBSCRIBEREQ
-DESCRIPTOR.message_types_by_name['BeSubscribeReply'] = _BESUBSCRIBEREPLY
-DESCRIPTOR.message_types_by_name['BeTxnReq'] = _BETXNREQ
-DESCRIPTOR.message_types_by_name['BeTxnReply'] = _BETXNREPLY
-DESCRIPTOR.message_types_by_name['BeCfgDataCreateReq'] = _BECFGDATACREATEREQ
-DESCRIPTOR.message_types_by_name['BeCfgDataCreateReply'] = _BECFGDATACREATEREPLY
-DESCRIPTOR.message_types_by_name['BeCfgDataApplyReq'] = _BECFGDATAAPPLYREQ
-DESCRIPTOR.message_types_by_name['BeCfgDataApplyReply'] = _BECFGDATAAPPLYREPLY
-DESCRIPTOR.message_types_by_name['YangDataReply'] = _YANGDATAREPLY
-DESCRIPTOR.message_types_by_name['BeMessage'] = _BEMESSAGE
-DESCRIPTOR.message_types_by_name['FeRegisterReq'] = _FEREGISTERREQ
-DESCRIPTOR.message_types_by_name['FeSessionReq'] = _FESESSIONREQ
-DESCRIPTOR.message_types_by_name['FeSessionReply'] = _FESESSIONREPLY
-DESCRIPTOR.message_types_by_name['FeLockDsReq'] = _FELOCKDSREQ
-DESCRIPTOR.message_types_by_name['FeLockDsReply'] = _FELOCKDSREPLY
-DESCRIPTOR.message_types_by_name['FeSetConfigReq'] = _FESETCONFIGREQ
-DESCRIPTOR.message_types_by_name['FeSetConfigReply'] = _FESETCONFIGREPLY
-DESCRIPTOR.message_types_by_name['FeCommitConfigReq'] = _FECOMMITCONFIGREQ
-DESCRIPTOR.message_types_by_name['FeCommitConfigReply'] = _FECOMMITCONFIGREPLY
-DESCRIPTOR.message_types_by_name['FeGetReq'] = _FEGETREQ
-DESCRIPTOR.message_types_by_name['FeGetReply'] = _FEGETREPLY
-DESCRIPTOR.message_types_by_name['FeNotifyDataReq'] = _FENOTIFYDATAREQ
-DESCRIPTOR.message_types_by_name['FeRegisterNotifyReq'] = _FEREGISTERNOTIFYREQ
-DESCRIPTOR.message_types_by_name['FeMessage'] = _FEMESSAGE
-DESCRIPTOR.enum_types_by_name['CfgDataReqType'] = _CFGDATAREQTYPE
-DESCRIPTOR.enum_types_by_name['DatastoreId'] = _DATASTOREID
+ name="FeMessage",
+ full_name="mgmtd.FeMessage",
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name="register_req",
+ full_name="mgmtd.FeMessage.register_req",
+ index=0,
+ number=2,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="session_req",
+ full_name="mgmtd.FeMessage.session_req",
+ index=1,
+ number=3,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="session_reply",
+ full_name="mgmtd.FeMessage.session_reply",
+ index=2,
+ number=4,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="lockds_req",
+ full_name="mgmtd.FeMessage.lockds_req",
+ index=3,
+ number=5,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="lockds_reply",
+ full_name="mgmtd.FeMessage.lockds_reply",
+ index=4,
+ number=6,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="setcfg_req",
+ full_name="mgmtd.FeMessage.setcfg_req",
+ index=5,
+ number=7,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="setcfg_reply",
+ full_name="mgmtd.FeMessage.setcfg_reply",
+ index=6,
+ number=8,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="commcfg_req",
+ full_name="mgmtd.FeMessage.commcfg_req",
+ index=7,
+ number=9,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="commcfg_reply",
+ full_name="mgmtd.FeMessage.commcfg_reply",
+ index=8,
+ number=10,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="get_req",
+ full_name="mgmtd.FeMessage.get_req",
+ index=9,
+ number=11,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="get_reply",
+ full_name="mgmtd.FeMessage.get_reply",
+ index=10,
+ number=12,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="notify_data_req",
+ full_name="mgmtd.FeMessage.notify_data_req",
+ index=11,
+ number=15,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ _descriptor.FieldDescriptor(
+ name="regnotify_req",
+ full_name="mgmtd.FeMessage.regnotify_req",
+ index=12,
+ number=16,
+ type=11,
+ cpp_type=10,
+ label=1,
+ has_default_value=False,
+ default_value=None,
+ message_type=None,
+ enum_type=None,
+ containing_type=None,
+ is_extension=False,
+ extension_scope=None,
+ serialized_options=None,
+ file=DESCRIPTOR,
+ create_key=_descriptor._internal_create_key,
+ ),
+ ],
+ extensions=[],
+ nested_types=[],
+ enum_types=[],
+ serialized_options=None,
+ is_extendable=False,
+ syntax="proto2",
+ extension_ranges=[],
+ oneofs=[
+ _descriptor.OneofDescriptor(
+ name="message",
+ full_name="mgmtd.FeMessage.message",
+ index=0,
+ containing_type=None,
+ create_key=_descriptor._internal_create_key,
+ fields=[],
+ ),
+ ],
+ serialized_start=3048,
+ serialized_end=3672,
+)
+
+_YANGDATAVALUE.oneofs_by_name["value"].fields.append(
+ _YANGDATAVALUE.fields_by_name["encoded_str_val"]
+)
+_YANGDATAVALUE.fields_by_name[
+ "encoded_str_val"
+].containing_oneof = _YANGDATAVALUE.oneofs_by_name["value"]
+_YANGDATA.fields_by_name["value"].message_type = _YANGDATAVALUE
+_YANGCFGDATAREQ.fields_by_name["data"].message_type = _YANGDATA
+_YANGCFGDATAREQ.fields_by_name["req_type"].enum_type = _CFGDATAREQTYPE
+_YANGGETDATAREQ.fields_by_name["data"].message_type = _YANGDATA
+_BECFGDATACREATEREQ.fields_by_name["data_req"].message_type = _YANGCFGDATAREQ
+_YANGDATAREPLY.fields_by_name["data"].message_type = _YANGDATA
+_BEMESSAGE.fields_by_name["subscr_req"].message_type = _BESUBSCRIBEREQ
+_BEMESSAGE.fields_by_name["subscr_reply"].message_type = _BESUBSCRIBEREPLY
+_BEMESSAGE.fields_by_name["txn_req"].message_type = _BETXNREQ
+_BEMESSAGE.fields_by_name["txn_reply"].message_type = _BETXNREPLY
+_BEMESSAGE.fields_by_name["cfg_data_req"].message_type = _BECFGDATACREATEREQ
+_BEMESSAGE.fields_by_name["cfg_data_reply"].message_type = _BECFGDATACREATEREPLY
+_BEMESSAGE.fields_by_name["cfg_apply_req"].message_type = _BECFGDATAAPPLYREQ
+_BEMESSAGE.fields_by_name["cfg_apply_reply"].message_type = _BECFGDATAAPPLYREPLY
+_BEMESSAGE.oneofs_by_name["message"].fields.append(
+ _BEMESSAGE.fields_by_name["subscr_req"]
+)
+_BEMESSAGE.fields_by_name["subscr_req"].containing_oneof = _BEMESSAGE.oneofs_by_name[
+ "message"
+]
+_BEMESSAGE.oneofs_by_name["message"].fields.append(
+ _BEMESSAGE.fields_by_name["subscr_reply"]
+)
+_BEMESSAGE.fields_by_name["subscr_reply"].containing_oneof = _BEMESSAGE.oneofs_by_name[
+ "message"
+]
+_BEMESSAGE.oneofs_by_name["message"].fields.append(_BEMESSAGE.fields_by_name["txn_req"])
+_BEMESSAGE.fields_by_name["txn_req"].containing_oneof = _BEMESSAGE.oneofs_by_name[
+ "message"
+]
+_BEMESSAGE.oneofs_by_name["message"].fields.append(
+ _BEMESSAGE.fields_by_name["txn_reply"]
+)
+_BEMESSAGE.fields_by_name["txn_reply"].containing_oneof = _BEMESSAGE.oneofs_by_name[
+ "message"
+]
+_BEMESSAGE.oneofs_by_name["message"].fields.append(
+ _BEMESSAGE.fields_by_name["cfg_data_req"]
+)
+_BEMESSAGE.fields_by_name["cfg_data_req"].containing_oneof = _BEMESSAGE.oneofs_by_name[
+ "message"
+]
+_BEMESSAGE.oneofs_by_name["message"].fields.append(
+ _BEMESSAGE.fields_by_name["cfg_data_reply"]
+)
+_BEMESSAGE.fields_by_name[
+ "cfg_data_reply"
+].containing_oneof = _BEMESSAGE.oneofs_by_name["message"]
+_BEMESSAGE.oneofs_by_name["message"].fields.append(
+ _BEMESSAGE.fields_by_name["cfg_apply_req"]
+)
+_BEMESSAGE.fields_by_name["cfg_apply_req"].containing_oneof = _BEMESSAGE.oneofs_by_name[
+ "message"
+]
+_BEMESSAGE.oneofs_by_name["message"].fields.append(
+ _BEMESSAGE.fields_by_name["cfg_apply_reply"]
+)
+_BEMESSAGE.fields_by_name[
+ "cfg_apply_reply"
+].containing_oneof = _BEMESSAGE.oneofs_by_name["message"]
+_FESESSIONREQ.oneofs_by_name["id"].fields.append(
+ _FESESSIONREQ.fields_by_name["client_conn_id"]
+)
+_FESESSIONREQ.fields_by_name[
+ "client_conn_id"
+].containing_oneof = _FESESSIONREQ.oneofs_by_name["id"]
+_FESESSIONREQ.oneofs_by_name["id"].fields.append(
+ _FESESSIONREQ.fields_by_name["session_id"]
+)
+_FESESSIONREQ.fields_by_name[
+ "session_id"
+].containing_oneof = _FESESSIONREQ.oneofs_by_name["id"]
+_FELOCKDSREQ.fields_by_name["ds_id"].enum_type = _DATASTOREID
+_FELOCKDSREPLY.fields_by_name["ds_id"].enum_type = _DATASTOREID
+_FESETCONFIGREQ.fields_by_name["ds_id"].enum_type = _DATASTOREID
+_FESETCONFIGREQ.fields_by_name["data"].message_type = _YANGCFGDATAREQ
+_FESETCONFIGREQ.fields_by_name["commit_ds_id"].enum_type = _DATASTOREID
+_FESETCONFIGREPLY.fields_by_name["ds_id"].enum_type = _DATASTOREID
+_FECOMMITCONFIGREQ.fields_by_name["src_ds_id"].enum_type = _DATASTOREID
+_FECOMMITCONFIGREQ.fields_by_name["dst_ds_id"].enum_type = _DATASTOREID
+_FECOMMITCONFIGREPLY.fields_by_name["src_ds_id"].enum_type = _DATASTOREID
+_FECOMMITCONFIGREPLY.fields_by_name["dst_ds_id"].enum_type = _DATASTOREID
+_FEGETREQ.fields_by_name["ds_id"].enum_type = _DATASTOREID
+_FEGETREQ.fields_by_name["data"].message_type = _YANGGETDATAREQ
+_FEGETREPLY.fields_by_name["ds_id"].enum_type = _DATASTOREID
+_FEGETREPLY.fields_by_name["data"].message_type = _YANGDATAREPLY
+_FENOTIFYDATAREQ.fields_by_name["data"].message_type = _YANGDATA
+_FEREGISTERNOTIFYREQ.fields_by_name["ds_id"].enum_type = _DATASTOREID
+_FEREGISTERNOTIFYREQ.fields_by_name["data_xpath"].message_type = _YANGDATAXPATH
+_FEMESSAGE.fields_by_name["register_req"].message_type = _FEREGISTERREQ
+_FEMESSAGE.fields_by_name["session_req"].message_type = _FESESSIONREQ
+_FEMESSAGE.fields_by_name["session_reply"].message_type = _FESESSIONREPLY
+_FEMESSAGE.fields_by_name["lockds_req"].message_type = _FELOCKDSREQ
+_FEMESSAGE.fields_by_name["lockds_reply"].message_type = _FELOCKDSREPLY
+_FEMESSAGE.fields_by_name["setcfg_req"].message_type = _FESETCONFIGREQ
+_FEMESSAGE.fields_by_name["setcfg_reply"].message_type = _FESETCONFIGREPLY
+_FEMESSAGE.fields_by_name["commcfg_req"].message_type = _FECOMMITCONFIGREQ
+_FEMESSAGE.fields_by_name["commcfg_reply"].message_type = _FECOMMITCONFIGREPLY
+_FEMESSAGE.fields_by_name["get_req"].message_type = _FEGETREQ
+_FEMESSAGE.fields_by_name["get_reply"].message_type = _FEGETREPLY
+_FEMESSAGE.fields_by_name["notify_data_req"].message_type = _FENOTIFYDATAREQ
+_FEMESSAGE.fields_by_name["regnotify_req"].message_type = _FEREGISTERNOTIFYREQ
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["register_req"]
+)
+_FEMESSAGE.fields_by_name["register_req"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["session_req"]
+)
+_FEMESSAGE.fields_by_name["session_req"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["session_reply"]
+)
+_FEMESSAGE.fields_by_name["session_reply"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["lockds_req"]
+)
+_FEMESSAGE.fields_by_name["lockds_req"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["lockds_reply"]
+)
+_FEMESSAGE.fields_by_name["lockds_reply"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["setcfg_req"]
+)
+_FEMESSAGE.fields_by_name["setcfg_req"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["setcfg_reply"]
+)
+_FEMESSAGE.fields_by_name["setcfg_reply"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["commcfg_req"]
+)
+_FEMESSAGE.fields_by_name["commcfg_req"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["commcfg_reply"]
+)
+_FEMESSAGE.fields_by_name["commcfg_reply"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(_FEMESSAGE.fields_by_name["get_req"])
+_FEMESSAGE.fields_by_name["get_req"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["get_reply"]
+)
+_FEMESSAGE.fields_by_name["get_reply"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["notify_data_req"]
+)
+_FEMESSAGE.fields_by_name[
+ "notify_data_req"
+].containing_oneof = _FEMESSAGE.oneofs_by_name["message"]
+_FEMESSAGE.oneofs_by_name["message"].fields.append(
+ _FEMESSAGE.fields_by_name["regnotify_req"]
+)
+_FEMESSAGE.fields_by_name["regnotify_req"].containing_oneof = _FEMESSAGE.oneofs_by_name[
+ "message"
+]
+DESCRIPTOR.message_types_by_name["YangDataXPath"] = _YANGDATAXPATH
+DESCRIPTOR.message_types_by_name["YangDataValue"] = _YANGDATAVALUE
+DESCRIPTOR.message_types_by_name["YangData"] = _YANGDATA
+DESCRIPTOR.message_types_by_name["YangCfgDataReq"] = _YANGCFGDATAREQ
+DESCRIPTOR.message_types_by_name["YangGetDataReq"] = _YANGGETDATAREQ
+DESCRIPTOR.message_types_by_name["BeSubscribeReq"] = _BESUBSCRIBEREQ
+DESCRIPTOR.message_types_by_name["BeSubscribeReply"] = _BESUBSCRIBEREPLY
+DESCRIPTOR.message_types_by_name["BeTxnReq"] = _BETXNREQ
+DESCRIPTOR.message_types_by_name["BeTxnReply"] = _BETXNREPLY
+DESCRIPTOR.message_types_by_name["BeCfgDataCreateReq"] = _BECFGDATACREATEREQ
+DESCRIPTOR.message_types_by_name["BeCfgDataCreateReply"] = _BECFGDATACREATEREPLY
+DESCRIPTOR.message_types_by_name["BeCfgDataApplyReq"] = _BECFGDATAAPPLYREQ
+DESCRIPTOR.message_types_by_name["BeCfgDataApplyReply"] = _BECFGDATAAPPLYREPLY
+DESCRIPTOR.message_types_by_name["YangDataReply"] = _YANGDATAREPLY
+DESCRIPTOR.message_types_by_name["BeMessage"] = _BEMESSAGE
+DESCRIPTOR.message_types_by_name["FeRegisterReq"] = _FEREGISTERREQ
+DESCRIPTOR.message_types_by_name["FeSessionReq"] = _FESESSIONREQ
+DESCRIPTOR.message_types_by_name["FeSessionReply"] = _FESESSIONREPLY
+DESCRIPTOR.message_types_by_name["FeLockDsReq"] = _FELOCKDSREQ
+DESCRIPTOR.message_types_by_name["FeLockDsReply"] = _FELOCKDSREPLY
+DESCRIPTOR.message_types_by_name["FeSetConfigReq"] = _FESETCONFIGREQ
+DESCRIPTOR.message_types_by_name["FeSetConfigReply"] = _FESETCONFIGREPLY
+DESCRIPTOR.message_types_by_name["FeCommitConfigReq"] = _FECOMMITCONFIGREQ
+DESCRIPTOR.message_types_by_name["FeCommitConfigReply"] = _FECOMMITCONFIGREPLY
+DESCRIPTOR.message_types_by_name["FeGetReq"] = _FEGETREQ
+DESCRIPTOR.message_types_by_name["FeGetReply"] = _FEGETREPLY
+DESCRIPTOR.message_types_by_name["FeNotifyDataReq"] = _FENOTIFYDATAREQ
+DESCRIPTOR.message_types_by_name["FeRegisterNotifyReq"] = _FEREGISTERNOTIFYREQ
+DESCRIPTOR.message_types_by_name["FeMessage"] = _FEMESSAGE
+DESCRIPTOR.enum_types_by_name["CfgDataReqType"] = _CFGDATAREQTYPE
+DESCRIPTOR.enum_types_by_name["DatastoreId"] = _DATASTOREID
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-YangDataXPath = _reflection.GeneratedProtocolMessageType('YangDataXPath', (_message.Message,), {
- 'DESCRIPTOR' : _YANGDATAXPATH,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.YangDataXPath)
- })
+YangDataXPath = _reflection.GeneratedProtocolMessageType(
+ "YangDataXPath",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _YANGDATAXPATH,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.YangDataXPath)
+ },
+)
_sym_db.RegisterMessage(YangDataXPath)
-YangDataValue = _reflection.GeneratedProtocolMessageType('YangDataValue', (_message.Message,), {
- 'DESCRIPTOR' : _YANGDATAVALUE,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.YangDataValue)
- })
+YangDataValue = _reflection.GeneratedProtocolMessageType(
+ "YangDataValue",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _YANGDATAVALUE,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.YangDataValue)
+ },
+)
_sym_db.RegisterMessage(YangDataValue)
-YangData = _reflection.GeneratedProtocolMessageType('YangData', (_message.Message,), {
- 'DESCRIPTOR' : _YANGDATA,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.YangData)
- })
+YangData = _reflection.GeneratedProtocolMessageType(
+ "YangData",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _YANGDATA,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.YangData)
+ },
+)
_sym_db.RegisterMessage(YangData)
-YangCfgDataReq = _reflection.GeneratedProtocolMessageType('YangCfgDataReq', (_message.Message,), {
- 'DESCRIPTOR' : _YANGCFGDATAREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.YangCfgDataReq)
- })
+YangCfgDataReq = _reflection.GeneratedProtocolMessageType(
+ "YangCfgDataReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _YANGCFGDATAREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.YangCfgDataReq)
+ },
+)
_sym_db.RegisterMessage(YangCfgDataReq)
-YangGetDataReq = _reflection.GeneratedProtocolMessageType('YangGetDataReq', (_message.Message,), {
- 'DESCRIPTOR' : _YANGGETDATAREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.YangGetDataReq)
- })
+YangGetDataReq = _reflection.GeneratedProtocolMessageType(
+ "YangGetDataReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _YANGGETDATAREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.YangGetDataReq)
+ },
+)
_sym_db.RegisterMessage(YangGetDataReq)
-BeSubscribeReq = _reflection.GeneratedProtocolMessageType('BeSubscribeReq', (_message.Message,), {
- 'DESCRIPTOR' : _BESUBSCRIBEREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeSubscribeReq)
- })
+BeSubscribeReq = _reflection.GeneratedProtocolMessageType(
+ "BeSubscribeReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BESUBSCRIBEREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeSubscribeReq)
+ },
+)
_sym_db.RegisterMessage(BeSubscribeReq)
-BeSubscribeReply = _reflection.GeneratedProtocolMessageType('BeSubscribeReply', (_message.Message,), {
- 'DESCRIPTOR' : _BESUBSCRIBEREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeSubscribeReply)
- })
+BeSubscribeReply = _reflection.GeneratedProtocolMessageType(
+ "BeSubscribeReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BESUBSCRIBEREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeSubscribeReply)
+ },
+)
_sym_db.RegisterMessage(BeSubscribeReply)
-BeTxnReq = _reflection.GeneratedProtocolMessageType('BeTxnReq', (_message.Message,), {
- 'DESCRIPTOR' : _BETXNREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeTxnReq)
- })
+BeTxnReq = _reflection.GeneratedProtocolMessageType(
+ "BeTxnReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BETXNREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeTxnReq)
+ },
+)
_sym_db.RegisterMessage(BeTxnReq)
-BeTxnReply = _reflection.GeneratedProtocolMessageType('BeTxnReply', (_message.Message,), {
- 'DESCRIPTOR' : _BETXNREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeTxnReply)
- })
+BeTxnReply = _reflection.GeneratedProtocolMessageType(
+ "BeTxnReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BETXNREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeTxnReply)
+ },
+)
_sym_db.RegisterMessage(BeTxnReply)
-BeCfgDataCreateReq = _reflection.GeneratedProtocolMessageType('BeCfgDataCreateReq', (_message.Message,), {
- 'DESCRIPTOR' : _BECFGDATACREATEREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataCreateReq)
- })
+BeCfgDataCreateReq = _reflection.GeneratedProtocolMessageType(
+ "BeCfgDataCreateReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BECFGDATACREATEREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataCreateReq)
+ },
+)
_sym_db.RegisterMessage(BeCfgDataCreateReq)
-BeCfgDataCreateReply = _reflection.GeneratedProtocolMessageType('BeCfgDataCreateReply', (_message.Message,), {
- 'DESCRIPTOR' : _BECFGDATACREATEREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataCreateReply)
- })
+BeCfgDataCreateReply = _reflection.GeneratedProtocolMessageType(
+ "BeCfgDataCreateReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BECFGDATACREATEREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataCreateReply)
+ },
+)
_sym_db.RegisterMessage(BeCfgDataCreateReply)
-BeCfgDataApplyReq = _reflection.GeneratedProtocolMessageType('BeCfgDataApplyReq', (_message.Message,), {
- 'DESCRIPTOR' : _BECFGDATAAPPLYREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataApplyReq)
- })
+BeCfgDataApplyReq = _reflection.GeneratedProtocolMessageType(
+ "BeCfgDataApplyReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BECFGDATAAPPLYREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataApplyReq)
+ },
+)
_sym_db.RegisterMessage(BeCfgDataApplyReq)
-BeCfgDataApplyReply = _reflection.GeneratedProtocolMessageType('BeCfgDataApplyReply', (_message.Message,), {
- 'DESCRIPTOR' : _BECFGDATAAPPLYREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataApplyReply)
- })
+BeCfgDataApplyReply = _reflection.GeneratedProtocolMessageType(
+ "BeCfgDataApplyReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BECFGDATAAPPLYREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeCfgDataApplyReply)
+ },
+)
_sym_db.RegisterMessage(BeCfgDataApplyReply)
-YangDataReply = _reflection.GeneratedProtocolMessageType('YangDataReply', (_message.Message,), {
- 'DESCRIPTOR' : _YANGDATAREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.YangDataReply)
- })
+YangDataReply = _reflection.GeneratedProtocolMessageType(
+ "YangDataReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _YANGDATAREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.YangDataReply)
+ },
+)
_sym_db.RegisterMessage(YangDataReply)
-BeMessage = _reflection.GeneratedProtocolMessageType('BeMessage', (_message.Message,), {
- 'DESCRIPTOR' : _BEMESSAGE,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.BeMessage)
- })
+BeMessage = _reflection.GeneratedProtocolMessageType(
+ "BeMessage",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _BEMESSAGE,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.BeMessage)
+ },
+)
_sym_db.RegisterMessage(BeMessage)
-FeRegisterReq = _reflection.GeneratedProtocolMessageType('FeRegisterReq', (_message.Message,), {
- 'DESCRIPTOR' : _FEREGISTERREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeRegisterReq)
- })
+FeRegisterReq = _reflection.GeneratedProtocolMessageType(
+ "FeRegisterReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FEREGISTERREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeRegisterReq)
+ },
+)
_sym_db.RegisterMessage(FeRegisterReq)
-FeSessionReq = _reflection.GeneratedProtocolMessageType('FeSessionReq', (_message.Message,), {
- 'DESCRIPTOR' : _FESESSIONREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeSessionReq)
- })
+FeSessionReq = _reflection.GeneratedProtocolMessageType(
+ "FeSessionReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FESESSIONREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeSessionReq)
+ },
+)
_sym_db.RegisterMessage(FeSessionReq)
-FeSessionReply = _reflection.GeneratedProtocolMessageType('FeSessionReply', (_message.Message,), {
- 'DESCRIPTOR' : _FESESSIONREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeSessionReply)
- })
+FeSessionReply = _reflection.GeneratedProtocolMessageType(
+ "FeSessionReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FESESSIONREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeSessionReply)
+ },
+)
_sym_db.RegisterMessage(FeSessionReply)
-FeLockDsReq = _reflection.GeneratedProtocolMessageType('FeLockDsReq', (_message.Message,), {
- 'DESCRIPTOR' : _FELOCKDSREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeLockDsReq)
- })
+FeLockDsReq = _reflection.GeneratedProtocolMessageType(
+ "FeLockDsReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FELOCKDSREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeLockDsReq)
+ },
+)
_sym_db.RegisterMessage(FeLockDsReq)
-FeLockDsReply = _reflection.GeneratedProtocolMessageType('FeLockDsReply', (_message.Message,), {
- 'DESCRIPTOR' : _FELOCKDSREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeLockDsReply)
- })
+FeLockDsReply = _reflection.GeneratedProtocolMessageType(
+ "FeLockDsReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FELOCKDSREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeLockDsReply)
+ },
+)
_sym_db.RegisterMessage(FeLockDsReply)
-FeSetConfigReq = _reflection.GeneratedProtocolMessageType('FeSetConfigReq', (_message.Message,), {
- 'DESCRIPTOR' : _FESETCONFIGREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeSetConfigReq)
- })
+FeSetConfigReq = _reflection.GeneratedProtocolMessageType(
+ "FeSetConfigReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FESETCONFIGREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeSetConfigReq)
+ },
+)
_sym_db.RegisterMessage(FeSetConfigReq)
-FeSetConfigReply = _reflection.GeneratedProtocolMessageType('FeSetConfigReply', (_message.Message,), {
- 'DESCRIPTOR' : _FESETCONFIGREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeSetConfigReply)
- })
+FeSetConfigReply = _reflection.GeneratedProtocolMessageType(
+ "FeSetConfigReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FESETCONFIGREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeSetConfigReply)
+ },
+)
_sym_db.RegisterMessage(FeSetConfigReply)
-FeCommitConfigReq = _reflection.GeneratedProtocolMessageType('FeCommitConfigReq', (_message.Message,), {
- 'DESCRIPTOR' : _FECOMMITCONFIGREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeCommitConfigReq)
- })
+FeCommitConfigReq = _reflection.GeneratedProtocolMessageType(
+ "FeCommitConfigReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FECOMMITCONFIGREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeCommitConfigReq)
+ },
+)
_sym_db.RegisterMessage(FeCommitConfigReq)
-FeCommitConfigReply = _reflection.GeneratedProtocolMessageType('FeCommitConfigReply', (_message.Message,), {
- 'DESCRIPTOR' : _FECOMMITCONFIGREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeCommitConfigReply)
- })
+FeCommitConfigReply = _reflection.GeneratedProtocolMessageType(
+ "FeCommitConfigReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FECOMMITCONFIGREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeCommitConfigReply)
+ },
+)
_sym_db.RegisterMessage(FeCommitConfigReply)
-FeGetReq = _reflection.GeneratedProtocolMessageType('FeGetReq', (_message.Message,), {
- 'DESCRIPTOR' : _FEGETREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeGetReq)
- })
+FeGetReq = _reflection.GeneratedProtocolMessageType(
+ "FeGetReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FEGETREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeGetReq)
+ },
+)
_sym_db.RegisterMessage(FeGetReq)
-FeGetReply = _reflection.GeneratedProtocolMessageType('FeGetReply', (_message.Message,), {
- 'DESCRIPTOR' : _FEGETREPLY,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeGetReply)
- })
+FeGetReply = _reflection.GeneratedProtocolMessageType(
+ "FeGetReply",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FEGETREPLY,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeGetReply)
+ },
+)
_sym_db.RegisterMessage(FeGetReply)
-FeNotifyDataReq = _reflection.GeneratedProtocolMessageType('FeNotifyDataReq', (_message.Message,), {
- 'DESCRIPTOR' : _FENOTIFYDATAREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeNotifyDataReq)
- })
+FeNotifyDataReq = _reflection.GeneratedProtocolMessageType(
+ "FeNotifyDataReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FENOTIFYDATAREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeNotifyDataReq)
+ },
+)
_sym_db.RegisterMessage(FeNotifyDataReq)
-FeRegisterNotifyReq = _reflection.GeneratedProtocolMessageType('FeRegisterNotifyReq', (_message.Message,), {
- 'DESCRIPTOR' : _FEREGISTERNOTIFYREQ,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeRegisterNotifyReq)
- })
+FeRegisterNotifyReq = _reflection.GeneratedProtocolMessageType(
+ "FeRegisterNotifyReq",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FEREGISTERNOTIFYREQ,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeRegisterNotifyReq)
+ },
+)
_sym_db.RegisterMessage(FeRegisterNotifyReq)
-FeMessage = _reflection.GeneratedProtocolMessageType('FeMessage', (_message.Message,), {
- 'DESCRIPTOR' : _FEMESSAGE,
- '__module__' : 'mgmt_pb2'
- # @@protoc_insertion_point(class_scope:mgmtd.FeMessage)
- })
+FeMessage = _reflection.GeneratedProtocolMessageType(
+ "FeMessage",
+ (_message.Message,),
+ {
+ "DESCRIPTOR": _FEMESSAGE,
+ "__module__": "mgmt_pb2",
+ # @@protoc_insertion_point(class_scope:mgmtd.FeMessage)
+ },
+)
_sym_db.RegisterMessage(FeMessage)
diff --git a/tests/topotests/mgmt_oper/oper.py b/tests/topotests/mgmt_oper/oper.py
index 0f6c3cd..162c1eb 100644
--- a/tests/topotests/mgmt_oper/oper.py
+++ b/tests/topotests/mgmt_oper/oper.py
@@ -62,7 +62,8 @@ def disable_debug(router):
router.vtysh_cmd("no debug northbound callbacks configuration")
-def do_oper_test(tgen, query_results):
+@retry(retry_timeout=30, initial_wait=1)
+def _do_oper_test(tgen, qr):
r1 = tgen.gears["r1"].net
qcmd = (
@@ -73,50 +74,55 @@ def do_oper_test(tgen, query_results):
r"""| sed -e 's/"if-index": [0-9][0-9]*/"if-index": "rubout"/'"""
r"""| sed -e 's/"id": [0-9][0-9]*/"id": "rubout"/'"""
)
-
- doreset = True
+ # Don't use this for now.
dd_json_cmp = None
- for qr in query_results:
- step(f"Perform query '{qr[0]}'", reset=doreset)
- if doreset:
- doreset = False
- expected = open(qr[1], encoding="ascii").read()
- output = r1.cmd_nostatus(qcmd.format(qr[0], qr[2] if len(qr) > 2 else ""))
-
- try:
- ojson = json.loads(output)
- except json.decoder.JSONDecodeError as error:
- logging.error("Error decoding json: %s\noutput:\n%s", error, output)
- raise
-
- try:
- ejson = json.loads(expected)
- except json.decoder.JSONDecodeError as error:
- logging.error(
- "Error decoding json exp result: %s\noutput:\n%s", error, expected
+
+ expected = open(qr[1], encoding="ascii").read()
+ output = r1.cmd_nostatus(qcmd.format(qr[0], qr[2] if len(qr) > 2 else ""))
+
+ try:
+ ojson = json.loads(output)
+ except json.decoder.JSONDecodeError as error:
+ logging.error("Error decoding json: %s\noutput:\n%s", error, output)
+ raise
+
+ try:
+ ejson = json.loads(expected)
+ except json.decoder.JSONDecodeError as error:
+ logging.error(
+ "Error decoding json exp result: %s\noutput:\n%s", error, expected
+ )
+ raise
+
+ if dd_json_cmp:
+ cmpout = json_cmp(ojson, ejson, exact_match=True)
+ if cmpout:
+ logging.warning(
+ "-------DIFF---------\n%s\n---------DIFF----------",
+ pprint.pformat(cmpout),
)
- raise
-
- if dd_json_cmp:
- cmpout = json_cmp(ojson, ejson, exact_match=True)
- if cmpout:
- logging.warning(
- "-------DIFF---------\n%s\n---------DIFF----------",
- pprint.pformat(cmpout),
- )
- else:
- cmpout = tt_json_cmp(ojson, ejson, exact=True)
- if cmpout:
- logging.warning(
- "-------EXPECT--------\n%s\n------END-EXPECT------",
- json.dumps(ejson, indent=4),
- )
- logging.warning(
- "--------GOT----------\n%s\n-------END-GOT--------",
- json.dumps(ojson, indent=4),
- )
-
- assert cmpout is None
+ else:
+ cmpout = tt_json_cmp(ojson, ejson, exact=True)
+ if cmpout:
+ logging.warning(
+ "-------EXPECT--------\n%s\n------END-EXPECT------",
+ json.dumps(ejson, indent=4),
+ )
+ logging.warning(
+ "--------GOT----------\n%s\n-------END-GOT--------",
+ json.dumps(ojson, indent=4),
+ )
+
+ assert cmpout is None
+
+
+def do_oper_test(tgen, query_results):
+ reset = True
+ for qr in query_results:
+ step(f"Perform query '{qr[0]}'", reset=reset)
+ if reset:
+ reset = False
+ _do_oper_test(tgen, qr)
def get_ip_networks(super_prefix, count):
diff --git a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-exact.json b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-exact.json
index f04e3a5..04591b6 100644
--- a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-exact.json
+++ b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-exact.json
@@ -14,7 +14,8 @@
"frr-zebra:zebra": {
"state": {
"up-count": 0,
- "down-count": 0
+ "down-count": 0,
+ "zif-type": "zif-veth"
}
}
}
diff --git a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json
index 84ad82c..c770db4 100644
--- a/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json
+++ b/tests/topotests/mgmt_oper/simple-results/result-intf-eth0-with-config.json
@@ -25,7 +25,8 @@
},
"state": {
"up-count": 0,
- "down-count": 0
+ "down-count": 0,
+ "zif-type": "zif-veth"
}
}
}
diff --git a/tests/topotests/mgmt_oper/test_oper.py b/tests/topotests/mgmt_oper/test_oper.py
index 6971eaf..8b8a51c 100644
--- a/tests/topotests/mgmt_oper/test_oper.py
+++ b/tests/topotests/mgmt_oper/test_oper.py
@@ -95,7 +95,6 @@ def test_oper(tgen):
check_kernel_32(r1, "12.12.12.12", 1, "")
check_kernel_32(r1, "13.13.13.13", 1, "red")
check_kernel_32(r1, "14.14.14.14", 1, "red")
- time.sleep(2)
do_oper_test(tgen, query_results)
diff --git a/tests/topotests/mgmt_oper/test_scale.py b/tests/topotests/mgmt_oper/test_scale.py
index 41c2b8c..87794d7 100644
--- a/tests/topotests/mgmt_oper/test_scale.py
+++ b/tests/topotests/mgmt_oper/test_scale.py
@@ -52,7 +52,6 @@ def test_oper_simple(tgen):
r1 = tgen.gears["r1"].net
- time.sleep(2)
count = 20 * 1000
vrf = None # "red"
diff --git a/tests/topotests/isis_tilfa_topo1/rt2/step10/show_ipv6_route.ref.diff b/tests/topotests/mgmt_rpc/r1/frr.conf
index e69de29..e69de29 100644
--- a/tests/topotests/isis_tilfa_topo1/rt2/step10/show_ipv6_route.ref.diff
+++ b/tests/topotests/mgmt_rpc/r1/frr.conf
diff --git a/tests/topotests/mgmt_rpc/test_rpc.py b/tests/topotests/mgmt_rpc/test_rpc.py
new file mode 100644
index 0000000..618d902
--- /dev/null
+++ b/tests/topotests/mgmt_rpc/test_rpc.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 eval: (blacken-mode 1) -*-
+# SPDX-License-Identifier: ISC
+#
+# March 21 2024, Igor Ryzhov <iryzhov@nfware.com>
+#
+# Copyright (c) 2024, NFWare Inc.
+#
+
+"""
+Test YANG Notifications
+"""
+import json
+import os
+import threading
+
+import pytest
+from lib.topogen import Topogen
+from lib.topotest import json_cmp
+
+pytestmark = [pytest.mark.ripd, pytest.mark.mgmtd]
+
+CWD = os.path.dirname(os.path.realpath(__file__))
+
+
+@pytest.fixture(scope="module")
+def tgen(request):
+ "Setup/Teardown the environment and provide tgen argument to tests"
+
+ topodef = {"s1": ("r1",)}
+
+ tgen = Topogen(topodef, request.module.__name__)
+ tgen.start_topology()
+
+ router_list = tgen.routers()
+ for rname, router in router_list.items():
+ router.load_frr_config("frr.conf")
+
+ tgen.start_router()
+ yield tgen
+ tgen.stop_topology()
+
+
+def test_backend_rpc(tgen):
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ r1 = tgen.gears["r1"]
+
+ be_client_path = "/usr/lib/frr/mgmtd_testc"
+ rc, _, _ = r1.net.cmd_status(be_client_path + " --help")
+
+ if rc:
+ pytest.skip("No mgmtd_testc")
+
+ out = []
+
+ def run_testc():
+ output = r1.net.cmd_raises(
+ be_client_path + " --timeout 10 --log file:mgmt_testc.log"
+ )
+ out.append(json.loads(output))
+
+ t = threading.Thread(target=run_testc)
+ t.start()
+
+ r1.vtysh_cmd("clear ip rip vrf testname")
+
+ t.join()
+
+ jsout = out[0]
+
+ expected = {"frr-ripd:clear-rip-route": {"vrf": "testname"}}
+ result = json_cmp(jsout, expected)
+ assert result is None
diff --git a/tests/topotests/mgmt_tests/test_yang_mgmt.py b/tests/topotests/mgmt_tests/test_yang_mgmt.py
index bf4e95b..605c142 100644
--- a/tests/topotests/mgmt_tests/test_yang_mgmt.py
+++ b/tests/topotests/mgmt_tests/test_yang_mgmt.py
@@ -36,6 +36,7 @@ import time
import os
import pytest
import platform
+import json
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -45,7 +46,7 @@ sys.path.append(os.path.join(CWD, "../lib/"))
# pylint: disable=C0413
# Import topogen and topotest helpers
from lib.topogen import Topogen, get_topogen
-from lib.topotest import version_cmp
+from lib.topotest import version_cmp, router_json_cmp
# Import topoJson from lib, to create topology and initial configuration
from lib.common_config import (
@@ -401,6 +402,242 @@ def test_mgmt_delete_config(request):
write_test_footer(tc_name)
+def test_mgmt_edit_config(request):
+ """
+ Verify mgmt edit config.
+ """
+ tc_name = request.node.name
+ write_test_header(tc_name)
+ tgen = get_topogen()
+ # Don't run this test if we have any failure.
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ reset_config_on_routers(tgen)
+
+ r1 = tgen.gears["r1"]
+
+ # check "create" operation
+ data = {"frr-interface:interface": [{"name": "eth0", "description": "eth0-desc"}]}
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit create /frr-interface:lib lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ data_out = data
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-interface:lib/interface[name='eth0'] only-config exact",
+ data_out,
+ exact=True,
+ )
+ == None
+ )
+
+ # check error on "create" for an existing object
+ data = {"frr-interface:interface": [{"name": "eth0", "description": "eth0-desc"}]}
+ ret = r1.vtysh_cmd(
+ f"conf\nmgmt edit create /frr-interface:lib lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ assert "Data already exists" in ret
+
+ # check adding a leaf to an existing object using "merge"
+ data = {
+ "frr-interface:interface": [
+ {"name": "eth0", "frr-zebra:zebra": {"bandwidth": 100}}
+ ]
+ }
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit merge /frr-interface:lib/interface[name='eth0'] lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ data_out = {
+ "frr-interface:interface": [
+ {
+ "name": "eth0",
+ "description": "eth0-desc",
+ "frr-zebra:zebra": {"bandwidth": 100},
+ }
+ ]
+ }
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-interface:lib/interface[name='eth0'] only-config exact",
+ data_out,
+ exact=True,
+ )
+ == None
+ )
+
+ # check replacing an existing object using "replace"
+ data = {
+ "frr-interface:interface": [{"name": "eth0", "description": "eth0-desc-new"}]
+ }
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit replace /frr-interface:lib/interface[name='eth0'] lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ data_out = data
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-interface:lib/interface[name='eth0'] only-config exact",
+ data_out,
+ exact=True,
+ )
+ == None
+ )
+
+ # check error on "replace" when keys in xpath and data are different
+ data = {
+ "frr-interface:interface": [{"name": "eth1", "description": "eth0-desc-new"}]
+ }
+ ret = r1.vtysh_cmd(
+ f"conf\nmgmt edit replace /frr-interface:lib/interface[name='eth0'] lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ assert "List keys in xpath and data tree are different" in ret
+
+ # check deleting an existing object using "delete"
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit delete /frr-interface:lib/interface[name='eth0'] lock commit"
+ )
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-interface:lib/interface[name='eth0'] only-config exact",
+ {},
+ exact=True,
+ )
+ == None
+ )
+
+ # check error on "delete" for a non-existing object
+ ret = r1.vtysh_cmd(
+ f"conf\nmgmt edit delete /frr-interface:lib/interface[name='eth0'] lock commit"
+ )
+ assert "Data missing" in ret
+
+ # check no error on "remove" for a non-existing object
+ ret = r1.vtysh_cmd(
+ f"conf\nmgmt edit remove /frr-interface:lib/interface[name='eth0'] lock commit"
+ )
+ assert "Data missing" not in ret
+
+ # check "remove" for an existing object
+ data = {"frr-interface:interface": [{"name": "eth0", "description": "eth0-desc"}]}
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit create /frr-interface:lib lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit remove /frr-interface:lib/interface[name='eth0'] lock commit"
+ )
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-interface:lib/interface[name='eth0'] only-config exact",
+ {},
+ exact=True,
+ )
+ == None
+ )
+
+ # check "create" of a top-level node
+ data = {"frr-vrf:lib": {"vrf": [{"name": "vrf1"}]}}
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit create / lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ data_out = data
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-vrf:lib only-config exact",
+ data_out,
+ exact=True,
+ )
+ == None
+ )
+
+ # check "replace" of a top-level node
+ data = {"frr-vrf:lib": {"vrf": [{"name": "vrf2"}]}}
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit replace /frr-vrf:lib lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ data_out = data
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-vrf:lib only-config exact",
+ data_out,
+ exact=True,
+ )
+ == None
+ )
+
+ # check "delete" of a top-level node
+ r1.vtysh_cmd(f"conf\nmgmt edit delete /frr-vrf:lib lock commit")
+ assert (
+ router_json_cmp(
+ r1, "show mgmt get-data /frr-vrf:lib only-config exact", {}, exact=True
+ )
+ == None
+ )
+
+ # check replace of the whole config
+ # this test won't work at the moment, because we don't allow to delete
+ # interfaces from the config if they are present in the system
+ # another problem is that we don't allow "/" as an xpath in get-data command
+ # therefore, commenting it out for now
+ # data = {
+ # "frr-interface:lib": {
+ # "interface": [{"name": "eth1", "description": "eth1-desc"}]
+ # },
+ # "frr-vrf:lib": {"vrf": [{"name": "vrf3"}]},
+ # }
+ # r1.vtysh_cmd(
+ # f"conf\nmgmt edit replace / lock commit {json.dumps(data, separators=(',', ':'))}"
+ # )
+ # data_out = data
+ # assert (
+ # router_json_cmp(
+ # r1,
+ # "show mgmt get-data / only-config exact",
+ # data_out,
+ # exact=True,
+ # )
+ # == None
+ # )
+
+ # check "merge" of the whole config
+ data = {
+ "frr-interface:lib": {
+ "interface": [{"name": "eth2", "description": "eth2-desc"}]
+ },
+ "frr-vrf:lib": {"vrf": [{"name": "vrf4"}]},
+ }
+ r1.vtysh_cmd(
+ f"conf\nmgmt edit merge / lock commit {json.dumps(data, separators=(',', ':'))}"
+ )
+ data_out = data
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-interface:lib only-config exact",
+ {
+ "frr-interface:lib": {
+ "interface": [{"name": "eth2", "description": "eth2-desc"}]
+ }
+ },
+ )
+ == None
+ )
+ assert (
+ router_json_cmp(
+ r1,
+ "show mgmt get-data /frr-vrf:lib only-config exact",
+ {"frr-vrf:lib": {"vrf": [{"name": "vrf4"}]}},
+ )
+ == None
+ )
+
+
def test_mgmt_chaos_stop_start_frr(request):
"""
Kill mgmtd - verify that watch frr restarts.
diff --git a/tests/topotests/msdp_topo1/test_msdp_topo1.py b/tests/topotests/msdp_topo1/test_msdp_topo1.py
index 1af58b0..2fbff44 100755
--- a/tests/topotests/msdp_topo1/test_msdp_topo1.py
+++ b/tests/topotests/msdp_topo1/test_msdp_topo1.py
@@ -359,7 +359,7 @@ def test_msdp():
"192.168.10.100": {
"source": "192.168.10.100",
"group": "229.1.2.3",
- "rp": "192.168.1.1",
+ "rp": "10.254.254.1",
"local": "no",
"sptSetup": "no",
}
@@ -394,7 +394,7 @@ def test_msdp():
"192.168.10.100": {
"source": "192.168.10.100",
"group": "229.1.2.3",
- "rp": "192.168.1.1",
+ "rp": "10.254.254.1",
"local": "no",
"sptSetup": "yes",
}
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 9ee4112..1775c9b 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
@@ -202,7 +202,6 @@ def teardown_module():
def clear_bsrp_data(tgen, topo):
-
"""
clear bsm databas after test"
Parameters
@@ -218,7 +217,6 @@ def clear_bsrp_data(tgen, topo):
"""
for dut in tgen.routers():
-
rnode = tgen.routers()[dut]
logger.info("[DUT: %s]: clear_bsrp_data")
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 302a778..e4df508 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
@@ -182,7 +182,6 @@ def teardown_module():
def clear_bsrp_data(tgen, topo):
-
"""
clear bsm databas after test"
Parameters
@@ -198,7 +197,6 @@ def clear_bsrp_data(tgen, topo):
"""
for dut in tgen.routers():
-
rnode = tgen.routers()[dut]
logger.info("[DUT: %s]: clear_bsrp_data")
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 1de6eac..f87a90d 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
@@ -42,7 +42,7 @@ import time
from time import sleep
import pytest
-pytestmark = pytest.mark.pimd
+pytestmark = [pytest.mark.pimd]
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -83,8 +83,6 @@ from lib.topolog import logger
from lib.topojson import build_config_from_json
-pytestmark = [pytest.mark.pimd]
-
TOPOLOGY = """
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 17f52cb..b62f7bb 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
@@ -37,7 +37,7 @@ import sys
import time
import pytest
-pytestmark = pytest.mark.pimd
+pytestmark = [pytest.mark.pimd]
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -81,8 +81,6 @@ from lib.topolog import logger
from lib.topojson import build_config_from_json
-pytestmark = [pytest.mark.pimd]
-
TOPOLOGY = """
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 2c1241c..ae27546 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
@@ -45,7 +45,7 @@ from time import sleep
import json
import functools
-pytestmark = pytest.mark.pimd
+pytestmark = [pytest.mark.pimd]
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -91,7 +91,6 @@ from lib.topolog import logger
from lib.topojson import build_config_from_json
CWD = os.path.dirname(os.path.realpath(__file__))
-pytestmark = pytest.mark.pimd
TOPOLOGY = """
@@ -265,11 +264,14 @@ def verify_state_incremented(state_before, state_after):
for intf, v2 in v1.items():
for state, value in v2.items():
if value >= state_after[ttype][intf][state]:
- errormsg = "[DUT: %s]: state %s value has not incremented, Initial value: %s, Current value: %s [FAILED!!]" % (
- intf,
- state,
- value,
- state_after[ttype][intf][state],
+ errormsg = (
+ "[DUT: %s]: state %s value has not incremented, Initial value: %s, Current value: %s [FAILED!!]"
+ % (
+ intf,
+ state,
+ value,
+ state_after[ttype][intf][state],
+ )
)
return errormsg
@@ -328,7 +330,6 @@ def find_tos_in_tcpdump(tgen, router, message, cap_file):
filepath = os.path.join(tgen.logdir, router, cap_file)
with open(filepath) as f:
-
if len(re.findall(message, f.read())) < 1:
errormsg = "[DUT: %s]: Verify Message: %s in tcpdump" " [FAILED!!]" % (
router,
diff --git a/tests/topotests/munet/__main__.py b/tests/topotests/munet/__main__.py
index 4419ab9..145eb26 100644
--- a/tests/topotests/munet/__main__.py
+++ b/tests/topotests/munet/__main__.py
@@ -16,8 +16,10 @@ import sys
from . import cli
from . import parser
+from .args import add_launch_args
from .base import get_event_loop
from .cleanup import cleanup_previous
+from .cleanup import is_running_in_rundir
from .compat import PytestConfig
@@ -106,66 +108,43 @@ def main(*args):
cap.add_argument(
"--project-root", help="directory to stop searching for kinds config at"
)
+
rap = ap.add_argument_group(title="Runtime", description="runtime related options")
+ add_launch_args(rap.add_argument)
+
+ # Move to munet.args?
rap.add_argument(
"-C",
"--cleanup",
action="store_true",
help="Remove the entire rundir (not just node subdirs) prior to running.",
)
- rap.add_argument(
- "--gdb", metavar="NODE-LIST", help="comma-sep list of hosts to run gdb on"
- )
- rap.add_argument(
- "--gdb-breakpoints",
- metavar="BREAKPOINT-LIST",
- help="comma-sep list of breakpoints to set",
- )
- rap.add_argument(
- "--host",
- action="store_true",
- help="no isolation for top namespace, bridges exposed to default namespace",
- )
- rap.add_argument(
- "--pcap",
- metavar="TARGET-LIST",
- help="comma-sep list of capture targets (NETWORK or NODE:IFNAME)",
- )
- rap.add_argument(
- "--shell", metavar="NODE-LIST", help="comma-sep list of nodes to open shells on"
- )
- rap.add_argument(
- "--stderr",
- metavar="NODE-LIST",
- help="comma-sep list of nodes to open windows viewing stderr",
- )
- rap.add_argument(
- "--stdout",
- metavar="NODE-LIST",
- help="comma-sep list of nodes to open windows viewing stdout",
- )
+ # Move to munet.args?
rap.add_argument(
"--topology-only",
action="store_true",
help="Do not run any node commands",
)
- rap.add_argument("--unshare-inline", action="store_true", help=argparse.SUPPRESS)
rap.add_argument(
"--validate-only",
action="store_true",
help="Validate the config against the schema definition",
)
+ rap.add_argument("--unshare-inline", action="store_true", help=argparse.SUPPRESS)
+
rap.add_argument("-v", "--verbose", action="store_true", help="be verbose")
rap.add_argument(
"-V", "--version", action="store_true", help="print the verison number and exit"
)
+
eap = ap.add_argument_group(title="Uncommon", description="uncommonly used options")
eap.add_argument("--log-config", help="logging config file (yaml, toml, json, ...)")
eap.add_argument(
- "--no-kill",
+ "--kill",
action="store_true",
- help="Do not kill previous running processes",
+ help="Kill previous running processes using same rundir and exit",
)
+ eap.add_argument("--no-kill", action="store_true", help=argparse.SUPPRESS)
eap.add_argument(
"--no-cli", action="store_true", help="Do not run the interactive CLI"
)
@@ -180,8 +159,18 @@ def main(*args):
sys.exit(0)
rundir = args.rundir if args.rundir else "/tmp/munet"
+ rundir = os.path.abspath(rundir)
args.rundir = rundir
+ if args.kill:
+ logging.info("Killing any previous run using rundir: {rundir}")
+ cleanup_previous(args.rundir)
+ elif is_running_in_rundir(args.rundir):
+ logging.fatal(
+ "Munet processes using rundir: %s, use `--kill` to cleanup first", rundir
+ )
+ return 1
+
if args.cleanup:
if os.path.exists(rundir):
if not os.path.exists(f"{rundir}/config.json"):
@@ -194,6 +183,9 @@ def main(*args):
else:
subprocess.run(["/usr/bin/rm", "-rf", rundir], check=True)
+ if args.kill:
+ return 0
+
subprocess.run(f"mkdir -p {rundir} && chmod 755 {rundir}", check=True, shell=True)
os.environ["MUNET_RUNDIR"] = rundir
@@ -208,9 +200,6 @@ def main(*args):
logger.critical("No nodes defined in config file")
return 1
- if not args.no_kill:
- cleanup_previous()
-
loop = None
status = 4
try:
diff --git a/tests/topotests/munet/args.py b/tests/topotests/munet/args.py
new file mode 100644
index 0000000..49ad891
--- /dev/null
+++ b/tests/topotests/munet/args.py
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 eval: (blacken-mode 1) -*-
+#
+# April 14 2024, Christian Hopps <chopps@labn.net>
+#
+# Copyright (c) 2024, LabN Consulting, L.L.C.
+#
+"""Common CLI execute argument."""
+
+
+def add_launch_args(add_func):
+
+ add_func("--gdb", metavar="NODE-LIST", help="comma-sep list of hosts to run gdb on")
+ add_func(
+ "--gdb-breakpoints",
+ metavar="BREAKPOINT-LIST",
+ help="comma-sep list of breakpoints to set",
+ )
+ add_func(
+ "--gdb-use-emacs",
+ action="store_true",
+ help="Use emacsclient to run gdb instead of a shell",
+ )
+
+ add_func(
+ "--host",
+ action="store_true",
+ help="no isolation for top namespace, bridges exposed to default namespace",
+ )
+ add_func(
+ "--pcap",
+ metavar="TARGET-LIST",
+ help="comma-sep list of capture targets (NETWORK or NODE:IFNAME) or 'all'",
+ )
+ add_func(
+ "--shell", metavar="NODE-LIST", help="comma-sep list of nodes to open shells on"
+ )
+ add_func(
+ "--stderr",
+ metavar="NODE-LIST",
+ help="comma-sep list of nodes to open windows viewing stderr",
+ )
+ add_func(
+ "--stdout",
+ metavar="NODE-LIST",
+ help="comma-sep list of nodes to open windows viewing stdout",
+ )
+
+
+def add_testing_args(add_func):
+ add_func(
+ "--cli-on-error",
+ action="store_true",
+ help="CLI on test failure",
+ )
+
+ add_func(
+ "--coverage",
+ action="store_true",
+ help="Enable coverage gathering if supported",
+ )
+
+ add_func(
+ "--cov-build-dir",
+ help="Specify the build dir for locating coverage data files",
+ )
+
+ add_launch_args(add_func)
+
+ add_func(
+ "--pause",
+ action="store_true",
+ help="Pause after each test",
+ )
+ add_func(
+ "--pause-at-end",
+ action="store_true",
+ help="Pause before taking munet down",
+ )
+ add_func(
+ "--pause-on-error",
+ action="store_true",
+ help="Pause after (disables default when --shell or -vtysh given)",
+ )
+ add_func(
+ "--no-pause-on-error",
+ dest="pause_on_error",
+ action="store_false",
+ help="Do not pause after (disables default when --shell or -vtysh given)",
+ )
diff --git a/tests/topotests/munet/base.py b/tests/topotests/munet/base.py
index 72b5df5..e77eb15 100644
--- a/tests/topotests/munet/base.py
+++ b/tests/topotests/munet/base.py
@@ -21,6 +21,7 @@ import subprocess
import sys
import tempfile
import time as time_mod
+
from collections import defaultdict
from pathlib import Path
from typing import Union
@@ -28,8 +29,10 @@ from typing import Union
from . import config as munet_config
from . import linux
+
try:
import pexpect
+
from pexpect.fdpexpect import fdspawn
from pexpect.popen_spawn import PopenSpawn
@@ -273,6 +276,9 @@ def get_event_loop():
"""
policy = asyncio.get_event_loop_policy()
loop = policy.get_event_loop()
+ if not hasattr(os, "pidfd_open"):
+ return loop
+
owatcher = policy.get_child_watcher()
logging.debug(
"event_loop_fixture: global policy %s, current loop %s, current watcher %s",
@@ -463,6 +469,8 @@ class Commander: # pylint: disable=R0904
env = {**(kwargs["env"] if "env" in kwargs else os.environ)}
if "MUNET_NODENAME" not in env:
env["MUNET_NODENAME"] = self.name
+ if "MUNET_PID" not in env and "MUNET_PID" in os.environ:
+ env["MUNET_PID"] = os.environ["MUNET_PID"]
kwargs["env"] = env
defaults.update(kwargs)
@@ -774,8 +782,14 @@ class Commander: # pylint: disable=R0904
ps1 = re.escape(ps1)
ps2 = re.escape(ps2)
-
- extra = "PAGER=cat; export PAGER; TERM=dumb; unset HISTFILE; set +o emacs +o vi"
+ extra = [
+ "TERM=dumb",
+ "set +o emacs",
+ "set +o vi",
+ "unset HISTFILE",
+ "PAGER=cat",
+ "export PAGER",
+ ]
pchg = "PS1='{0}' PS2='{1}' PROMPT_COMMAND=''\n".format(ps1p, ps2p)
p.send(pchg)
return ShellWrapper(p, ps1, ps2, extra_init_cmd=extra, will_echo=will_echo)
@@ -928,15 +942,25 @@ class Commander: # pylint: disable=R0904
def _cmd_status(self, cmds, raises=False, warn=True, stdin=None, **kwargs):
"""Execute a command."""
+ timeout = None
+ if "timeout" in kwargs:
+ timeout = kwargs["timeout"]
+ del kwargs["timeout"]
+
pinput, stdin = Commander._cmd_status_input(stdin)
p, actual_cmd = self._popen("cmd_status", cmds, stdin=stdin, **kwargs)
- o, e = p.communicate(pinput)
+ o, e = p.communicate(pinput, timeout=timeout)
return self._cmd_status_finish(p, cmds, actual_cmd, o, e, raises, warn)
async def _async_cmd_status(
self, cmds, raises=False, warn=True, stdin=None, text=None, **kwargs
):
"""Execute a command."""
+ timeout = None
+ if "timeout" in kwargs:
+ timeout = kwargs["timeout"]
+ del kwargs["timeout"]
+
pinput, stdin = Commander._cmd_status_input(stdin)
p, actual_cmd = await self._async_popen(
"async_cmd_status", cmds, stdin=stdin, **kwargs
@@ -949,7 +973,12 @@ class Commander: # pylint: disable=R0904
if encoding is not None and isinstance(pinput, str):
pinput = pinput.encode(encoding)
- o, e = await p.communicate(pinput)
+ try:
+ o, e = await asyncio.wait_for(p.communicate(), timeout=timeout)
+ except (TimeoutError, asyncio.TimeoutError) as error:
+ raise subprocess.TimeoutExpired(
+ cmd=actual_cmd, timeout=timeout, output=None, stderr=None
+ ) from error
if encoding is not None:
o = o.decode(encoding) if o is not None else o
e = e.decode(encoding) if e is not None else e
@@ -1214,7 +1243,13 @@ class Commander: # pylint: disable=R0904
if self.is_vm and self.use_ssh and not ns_only: # pylint: disable=E1101
if isinstance(cmd, str):
cmd = shlex.split(cmd)
- cmd = ["/usr/bin/env", f"MUNET_NODENAME={self.name}"] + cmd
+ cmd = [
+ "/usr/bin/env",
+ f"MUNET_NODENAME={self.name}",
+ ]
+ if "MUNET_PID" in os.environ:
+ cmd.append(f"MUNET_PID={os.environ.get('MUNET_PID')}")
+ cmd += cmd
# get the ssh cmd
cmd = self._get_pre_cmd(False, True, ns_only=ns_only) + [shlex.join(cmd)]
@@ -1234,6 +1269,8 @@ class Commander: # pylint: disable=R0904
envvars = f"MUNET_NODENAME={self.name} NODENAME={self.name}"
if hasattr(self, "rundir"):
envvars += f" RUNDIR={self.rundir}"
+ if "MUNET_PID" in os.environ:
+ envvars += f" MUNET_PID={os.environ.get('MUNET_PID')}"
if hasattr(self.unet, "config_dirname") and self.unet.config_dirname:
envvars += f" CONFIGDIR={self.unet.config_dirname}"
elif "CONFIGDIR" in os.environ:
@@ -2514,7 +2551,7 @@ class Bridge(SharedNamespace, InterfaceMixin):
self.logger.debug("Bridge: Creating")
- assert len(self.name) <= 16 # Make sure fits in IFNAMSIZE
+ # assert len(self.name) <= 16 # Make sure fits in IFNAMSIZE
self.cmd_raises(f"ip link delete {name} || true")
self.cmd_raises(f"ip link add {name} type bridge")
if self.mtu:
@@ -2638,10 +2675,6 @@ class BaseMunet(LinuxNamespace):
self.cfgopt = munet_config.ConfigOptionsProxy(pytestconfig)
- super().__init__(
- name, mount=True, net=isolated, uts=isolated, pid=pid, unet=None, **kwargs
- )
-
# This allows us to cleanup any leftover running munet's
if "MUNET_PID" in os.environ:
if os.environ["MUNET_PID"] != str(our_pid):
@@ -2652,6 +2685,10 @@ class BaseMunet(LinuxNamespace):
)
os.environ["MUNET_PID"] = str(our_pid)
+ super().__init__(
+ name, mount=True, net=isolated, uts=isolated, pid=pid, unet=None, **kwargs
+ )
+
# this is for testing purposes do not use
if not BaseMunet.g_unet:
BaseMunet.g_unet = self
@@ -2759,7 +2796,7 @@ class BaseMunet(LinuxNamespace):
self.logger.error('"%s" len %s > 16', nsif1, len(nsif1))
elif len(nsif2) > 16:
self.logger.error('"%s" len %s > 16', nsif2, len(nsif2))
- assert len(nsif1) <= 16 and len(nsif2) <= 16 # Make sure fits in IFNAMSIZE
+ assert len(nsif1) < 16 and len(nsif2) < 16 # Make sure fits in IFNAMSIZE
self.logger.debug("%s: Creating veth pair for link %s", self, lname)
@@ -2987,8 +3024,11 @@ if True: # pylint: disable=using-constant-test
self._expectf = self.child.expect
if extra_init_cmd:
- self.expect_prompt()
- self.child.sendline(extra_init_cmd)
+ if isinstance(extra_init_cmd, str):
+ extra_init_cmd = [extra_init_cmd]
+ for ecmd in extra_init_cmd:
+ self.expect_prompt()
+ self.child.sendline(ecmd)
self.expect_prompt()
def expect_prompt(self, timeout=-1):
diff --git a/tests/topotests/munet/cleanup.py b/tests/topotests/munet/cleanup.py
index c641cda..12ea6e2 100644
--- a/tests/topotests/munet/cleanup.py
+++ b/tests/topotests/munet/cleanup.py
@@ -59,25 +59,33 @@ def _get_our_pids():
return {}
-def _get_other_pids():
- piddict = get_pids_with_env("MUNET_PID")
- unet_pids = {d["MUNET_PID"] for d in piddict.values()}
+def _get_other_pids(rundir):
+ if rundir:
+ # get only munet pids using the given rundir
+ piddict = get_pids_with_env("MUNET_RUNDIR", str(rundir))
+ else:
+ # Get all munet pids
+ piddict = get_pids_with_env("MUNET_PID")
+ unet_pids = {d["MUNET_PID"] for d in piddict.values() if "MUNET_PID" in d}
pids_by_upid = {p: set() for p in unet_pids}
for pid, envdict in piddict.items():
+ if "MUNET_PID" not in envdict:
+ continue
unet_pid = envdict["MUNET_PID"]
pids_by_upid[unet_pid].add(pid)
# Filter out any child pid sets whos munet pid is still running
return {x: y for x, y in pids_by_upid.items() if x not in y}
-def _get_pids_by_upid(ours):
+def _get_pids_by_upid(ours, rundir):
if ours:
+ assert rundir is None
return _get_our_pids()
- return _get_other_pids()
+ return _get_other_pids(rundir)
-def _cleanup_pids(ours):
- pids_by_upid = _get_pids_by_upid(ours).items()
+def _cleanup_pids(ours, rundir):
+ pids_by_upid = _get_pids_by_upid(ours, rundir).items()
if not pids_by_upid:
return
@@ -94,7 +102,7 @@ def _cleanup_pids(ours):
# return
# time.sleep(1)
- pids_by_upid = _get_pids_by_upid(ours).items()
+ pids_by_upid = _get_pids_by_upid(ours, rundir).items()
_kill_piddict(pids_by_upid, signal.SIGKILL)
@@ -103,12 +111,16 @@ def cleanup_current():
Currently this only scans for old processes.
"""
- _cleanup_pids(True)
+ _cleanup_pids(True, None)
-def cleanup_previous():
+def cleanup_previous(rundir=None):
"""Attempt to cleanup preview runs.
Currently this only scans for old processes.
"""
- _cleanup_pids(False)
+ _cleanup_pids(False, rundir)
+
+
+def is_running_in_rundir(rundir):
+ return bool(get_pids_with_env("MUNET_RUNDIR", str(rundir)))
diff --git a/tests/topotests/munet/cli.py b/tests/topotests/munet/cli.py
index 133644e..01a7091 100644
--- a/tests/topotests/munet/cli.py
+++ b/tests/topotests/munet/cli.py
@@ -106,9 +106,13 @@ def is_host_regex(restr):
def get_host_regex(restr):
- if len(restr) < 3 or restr[0] != "/" or restr[-1] != "/":
+ try:
+ if len(restr) < 3 or restr[0] != "/" or restr[-1] != "/":
+ return None
+ return re.compile(restr[1:-1])
+ except re.error:
+ logging.error("Invalid regex")
return None
- return re.compile(restr[1:-1])
def host_in(restr, names):
@@ -126,8 +130,8 @@ def expand_host(restr, names):
hosts = []
regexp = get_host_regex(restr)
if not regexp:
- assert restr in names
- hosts.append(restr)
+ if restr in names:
+ hosts.append(restr)
else:
for name in names:
if regexp.fullmatch(name):
diff --git a/tests/topotests/munet/logconf-mutest.yaml b/tests/topotests/munet/logconf-mutest.yaml
index b450fb9..c0b636c 100644
--- a/tests/topotests/munet/logconf-mutest.yaml
+++ b/tests/topotests/munet/logconf-mutest.yaml
@@ -1,5 +1,8 @@
version: 1
formatters:
+ result_color:
+ class: munet.mulog.ResultColorFormatter
+ format: '%(levelname)5s: %(message)s'
brief:
format: '%(levelname)5s: %(message)s'
operfmt:
@@ -22,7 +25,7 @@ handlers:
info_console:
level: INFO
class: logging.StreamHandler
- formatter: brief
+ formatter: result_color
stream: ext://sys.stderr
oper_console:
level: DEBUG
diff --git a/tests/topotests/munet/mucmd.py b/tests/topotests/munet/mucmd.py
index 5518c6d..cd356f3 100644
--- a/tests/topotests/munet/mucmd.py
+++ b/tests/topotests/munet/mucmd.py
@@ -9,7 +9,6 @@
import argparse
import json
import os
-import subprocess
import sys
from pathlib import Path
@@ -90,19 +89,14 @@ def main(*args):
ecmd = "/usr/bin/nsenter"
eargs = [ecmd]
- output = subprocess.check_output(["/usr/bin/nsenter", "--help"], encoding="utf-8")
- if " -a," in output:
- eargs.append("-a")
- else:
- # -U doesn't work
- for flag in ["-u", "-i", "-m", "-n", "-C", "-T"]:
- if f" {flag}," in output:
- eargs.append(flag)
+ #start mucmd same way base process is started
+ eargs.append(f"--mount=/proc/{pid}/ns/mnt")
+ eargs.append(f"--net=/proc/{pid}/ns/net")
eargs.append(f"--pid=/proc/{pid}/ns/pid_for_children")
+ eargs.append(f"--uts=/proc/{pid}/ns/uts")
eargs.append(f"--wd={rundir}")
- eargs.extend(["-t", pid])
eargs += args.shellcmd
- # print("Using ", eargs)
+ #print("Using ", eargs)
return os.execvpe(ecmd, eargs, {**env, **envcfg})
diff --git a/tests/topotests/munet/mulog.py b/tests/topotests/munet/mulog.py
index f840eae..968acd9 100644
--- a/tests/topotests/munet/mulog.py
+++ b/tests/topotests/munet/mulog.py
@@ -12,6 +12,9 @@ import logging
from pathlib import Path
+do_color = True
+
+
class MultiFileHandler(logging.FileHandler):
"""A logging handler that logs to new files based on the logger name.
@@ -118,5 +121,28 @@ class ColorFormatter(logging.Formatter):
super().__init__(fmt, datefmt, style, **kwargs)
def format(self, record):
+ if not do_color:
+ return super().format(record)
formatter = self.formatters.get(record.levelno)
return formatter.format(record)
+
+
+class ResultColorFormatter(logging.Formatter):
+ """A formatter that colorizes PASS/FAIL strings based on level."""
+
+ green = "\x1b[32m"
+ red = "\x1b[31m"
+ reset = "\x1b[0m"
+
+ def format(self, record):
+ s = super().format(record)
+ if not do_color:
+ return s
+ idx = s.find("FAIL")
+ if idx >= 0 and record.levelno > logging.INFO:
+ s = s[:idx] + self.red + "FAIL" + self.reset + s[idx + 4 :]
+ elif record.levelno == logging.INFO:
+ idx = s.find("PASS")
+ if idx >= 0:
+ s = s[:idx] + self.green + "PASS" + self.reset + s[idx + 4 :]
+ return s
diff --git a/tests/topotests/munet/munet-schema.json b/tests/topotests/munet/munet-schema.json
index a1dcd87..6ebc368 100644
--- a/tests/topotests/munet/munet-schema.json
+++ b/tests/topotests/munet/munet-schema.json
@@ -93,12 +93,24 @@
"image": {
"type": "string"
},
+ "hostnet": {
+ "type": "boolean"
+ },
"server": {
"type": "string"
},
"server-port": {
"type": "number"
},
+ "ssh-identity-file": {
+ "type": "string"
+ },
+ "ssh-user": {
+ "type": "string"
+ },
+ "ssh-password": {
+ "type": "string"
+ },
"qemu": {
"type": "object",
"properties": {
@@ -108,6 +120,15 @@
"disk": {
"type": "string"
},
+ "disk-driver": {
+ "type": "string"
+ },
+ "disk-template": {
+ "type": "string"
+ },
+ "initial-cmd": {
+ "type": "string"
+ },
"kerenel": {
"type": "string"
},
@@ -141,6 +162,9 @@
"password": {
"type": "string"
},
+ "initial-password": {
+ "type": "string"
+ },
"expects": {
"type": "array",
"items": {
@@ -362,6 +386,9 @@
},
"ipv6": {
"type": "string"
+ },
+ "external": {
+ "type": "boolean"
}
}
}
@@ -401,12 +428,24 @@
"image": {
"type": "string"
},
+ "hostnet": {
+ "type": "boolean"
+ },
"server": {
"type": "string"
},
"server-port": {
"type": "number"
},
+ "ssh-identity-file": {
+ "type": "string"
+ },
+ "ssh-user": {
+ "type": "string"
+ },
+ "ssh-password": {
+ "type": "string"
+ },
"qemu": {
"type": "object",
"properties": {
@@ -416,6 +455,15 @@
"disk": {
"type": "string"
},
+ "disk-driver": {
+ "type": "string"
+ },
+ "disk-template": {
+ "type": "string"
+ },
+ "initial-cmd": {
+ "type": "string"
+ },
"kerenel": {
"type": "string"
},
@@ -449,6 +497,9 @@
"password": {
"type": "string"
},
+ "initial-password": {
+ "type": "string"
+ },
"expects": {
"type": "array",
"items": {
diff --git a/tests/topotests/munet/mutest/__main__.py b/tests/topotests/munet/mutest/__main__.py
index c870311..a78c69e 100644
--- a/tests/topotests/munet/mutest/__main__.py
+++ b/tests/topotests/munet/mutest/__main__.py
@@ -20,9 +20,13 @@ from copy import deepcopy
from pathlib import Path
from typing import Union
+from munet import mulog
from munet import parser
+from munet.args import add_testing_args
from munet.base import Bridge
from munet.base import get_event_loop
+from munet.cli import async_cli
+from munet.compat import PytestConfig
from munet.mutest import userapi as uapi
from munet.native import L3NodeMixin
from munet.native import Munet
@@ -36,7 +40,9 @@ root_logger = logging.getLogger("")
exec_formatter = logging.Formatter("%(asctime)s %(levelname)5s: %(name)s: %(message)s")
-async def get_unet(config: dict, croot: Path, rundir: Path, unshare: bool = False):
+async def get_unet(
+ config: dict, croot: Path, rundir: Path, args: Namespace, unshare: bool = False
+):
"""Create and run a new Munet topology.
The topology is built from the given ``config`` to run inside the path indicated
@@ -48,6 +54,7 @@ async def get_unet(config: dict, croot: Path, rundir: Path, unshare: bool = Fals
value will be modified and stored in the built ``Munet`` object.
croot: common root of all tests, used to search for ``kinds.yaml`` files.
rundir: the path to the run directory for this topology.
+ args: argparse args
unshare: True to unshare the process into it's own private namespace.
Yields:
@@ -58,7 +65,11 @@ async def get_unet(config: dict, croot: Path, rundir: Path, unshare: bool = Fals
try:
try:
unet = await async_build_topology(
- config, rundir=str(rundir), unshare_inline=unshare
+ config,
+ rundir=str(rundir),
+ args=args,
+ pytestconfig=PytestConfig(args),
+ unshare_inline=unshare,
)
except Exception as error:
logging.debug("unet build failed: %s", error, exc_info=True)
@@ -221,9 +232,13 @@ async def execute_test(
targets["."] = unet
tc = uapi.TestCase(
- str(test_num), test_name, test, targets, logger, reslog, args.full_summary
+ str(test_num), test_name, test, targets, args, logger, reslog, args.full_summary
)
- passed, failed, e = tc.execute()
+ try:
+ passed, failed, e = tc.execute()
+ except uapi.CLIOnErrorError as error:
+ await async_cli(unet)
+ passed, failed, e = 0, 0, error
run_time = time.time() - tc.info.start_time
@@ -278,6 +293,10 @@ async def run_tests(args):
start_time = time.time()
try:
for dirpath in tests:
+ if args.validate_only:
+ parser.validate_config(configs[dirpath], reslog, args)
+ continue
+
test_files = tests[dirpath]
for test in test_files:
tnum += 1
@@ -294,10 +313,12 @@ async def run_tests(args):
root_logger.addHandler(exec_handler)
try:
- async for unet in get_unet(config, common, rundir):
+ async for unet in get_unet(config, common, rundir, args):
+
if not printed_header:
print_header(reslog, unet)
printed_header = True
+
passed, failed, e = await execute_test(
unet, test, args, tnum, exec_handler
)
@@ -321,6 +342,9 @@ async def run_tests(args):
except KeyboardInterrupt:
pass
+ if args.validate_only:
+ return False
+
run_time = time.time() - start_time
tnum = 0
tpassed = 0
@@ -357,8 +381,10 @@ async def run_tests(args):
for result in results:
test_name, passed, failed, e = result
tnum += 1
- s = "FAIL" if failed or e else "PASS"
- reslog.info(" %s %s:%s", s, tnum, test_name)
+ if failed or e:
+ reslog.warning(" FAIL %s:%s", tnum, test_name)
+ else:
+ reslog.info(" PASS %s:%s", tnum, test_name)
reslog.info("-" * 70)
reslog.info(
@@ -386,35 +412,47 @@ async def async_main(args):
def main():
ap = ArgumentParser()
ap.add_argument(
- "--dist",
- type=int,
- nargs="?",
- const=-1,
- default=0,
- action="store",
- metavar="NUM-THREADS",
- help="Run in parallel, value is num. of threads or no value for auto",
+ "-v", dest="verbose", action="count", default=0, help="More -v's, more verbose"
)
- ap.add_argument("-d", "--rundir", help="runtime directory for tempfiles, logs, etc")
ap.add_argument(
+ "-V", "--version", action="store_true", help="print the verison number and exit"
+ )
+ ap.add_argument("paths", nargs="*", help="Paths to collect tests from")
+
+ rap = ap.add_argument_group(title="Runtime", description="runtime related options")
+ rap.add_argument(
+ "-d", "--rundir", help="runtime directory for tempfiles, logs, etc"
+ )
+ add_testing_args(rap.add_argument)
+
+ eap = ap.add_argument_group(title="Uncommon", description="uncommonly used options")
+ eap.add_argument(
"--file-select", default="mutest_*.py", help="shell glob for finding tests"
)
- ap.add_argument("--log-config", help="logging config file (yaml, toml, json, ...)")
- ap.add_argument(
- "-V",
+ eap.add_argument(
"--full-summary",
action="store_true",
help="print full summary headers from docstrings",
)
- ap.add_argument(
- "-v", dest="verbose", action="count", default=0, help="More -v's, more verbose"
+ eap.add_argument("--log-config", help="logging config file (yaml, toml, json, ...)")
+ eap.add_argument(
+ "--validate-only",
+ action="store_true",
+ help="Validate the munet configs against the schema definition",
)
- ap.add_argument("paths", nargs="*", help="Paths to collect tests from")
+
args = ap.parse_args()
+ if args.version:
+ from importlib import metadata # pylint: disable=C0415
+
+ print(metadata.version("munet"))
+ sys.exit(0)
+
rundir = args.rundir if args.rundir else "/tmp/mutest"
- args.rundir = Path(rundir)
- os.environ["MUNET_RUNDIR"] = rundir
+ rundir = Path(rundir).absolute()
+ args.rundir = rundir
+ os.environ["MUNET_RUNDIR"] = str(rundir)
subprocess.run(f"mkdir -p {rundir} && chmod 755 {rundir}", check=True, shell=True)
config = parser.setup_logging(args, config_base="logconf-mutest")
@@ -425,6 +463,9 @@ def main():
fconfig.get("format"), fconfig.get("datefmt")
)
+ if not hasattr(sys.stderr, "isatty") or not sys.stderr.isatty():
+ mulog.do_color = False
+
loop = None
status = 4
try:
diff --git a/tests/topotests/munet/mutest/userapi.py b/tests/topotests/munet/mutest/userapi.py
index 7967dd0..abc63af 100644
--- a/tests/topotests/munet/mutest/userapi.py
+++ b/tests/topotests/munet/mutest/userapi.py
@@ -65,8 +65,11 @@ import json
import logging
import pprint
import re
+import subprocess
+import sys
import time
+from argparse import Namespace
from pathlib import Path
from typing import Any
from typing import Union
@@ -76,6 +79,51 @@ from deepdiff import DeepDiff as json_cmp
from munet.base import Commander
+class ScriptError(Exception):
+ """An unrecoverable script failure."""
+
+
+class CLIOnErrorError(Exception):
+ """Enter CLI after error."""
+
+
+def pause_test(desc=""):
+ isatty = sys.stdout.isatty()
+ if not isatty:
+ desc = f" for {desc}" if desc else ""
+ logging.info("NO PAUSE on non-tty terminal%s", desc)
+ return
+
+ while True:
+ if desc:
+ print(f"\n== PAUSING: {desc} ==")
+ try:
+ user = input('PAUSED, "cli" for CLI, "pdb" to debug, "Enter" to continue: ')
+ except EOFError:
+ print("^D...continuing")
+ break
+ user = user.strip()
+ if user == "cli":
+ raise CLIOnErrorError()
+ if user == "pdb":
+ breakpoint() # pylint: disable=W1515
+ elif user:
+ print(f'Unrecognized input: "{user}"')
+ else:
+ break
+
+
+def act_on_result(success, args, desc=""):
+ if args.pause:
+ pause_test(desc)
+ elif success:
+ return
+ if args.cli_on_error:
+ raise CLIOnErrorError()
+ if args.pause_on_error:
+ pause_test(desc)
+
+
class TestCaseInfo:
"""Object to hold nestable TestCase Results."""
@@ -140,6 +188,7 @@ class TestCase:
name: str,
path: Path,
targets: dict,
+ args: Namespace,
output_logger: logging.Logger = None,
result_logger: logging.Logger = None,
full_summary: bool = False,
@@ -157,6 +206,7 @@ class TestCase:
self.__in_section = False
self.targets = targets
+ self.args = args
self.last = ""
self.last_m = None
@@ -285,7 +335,10 @@ class TestCase:
# Extract any docstring as a title.
if print_header:
- title = locals()[f"_{name}"].__doc__.lstrip()
+ title = locals()[f"_{name}"].__doc__
+ if title is None:
+ title = ""
+ title = title.lstrip()
if self.__short_doc_header and (title := title.lstrip()):
if (idx := title.find("\n")) != -1:
title = title[:idx].strip()
@@ -299,6 +352,10 @@ class TestCase:
# Here's where we can do async in the future if we want.
# result = await locals()[f"_{name}"](_ok_result)
+ except ScriptError as error:
+ return error
+ except CLIOnErrorError:
+ raise
except Exception as error:
logging.error(
"Unexpected exception executing %s: %s", name, error, exc_info=True
@@ -381,7 +438,9 @@ class TestCase:
target: the target to execute the command on.
cmd: string to execut on the target.
"""
- out = self.targets[target].cmd_nostatus(cmd, warn=False)
+ out = self.targets[target].cmd_nostatus(
+ cmd, stdin=subprocess.DEVNULL, warn=False
+ )
self.last = out = out.rstrip()
report = out if out else "<no output>"
self.logf("COMMAND OUTPUT:\n%s", report)
@@ -398,12 +457,14 @@ class TestCase:
target: the target to execute the command on.
cmd: string to execute on the target.
"""
- out = self.targets[target].cmd_nostatus(cmd, warn=False)
+ out = self.targets[target].cmd_nostatus(
+ cmd, stdin=subprocess.DEVNULL, warn=False
+ )
self.last = out = out.rstrip()
try:
js = json.loads(out)
except Exception as error:
- js = {}
+ js = None
self.olog.warning(
"JSON load failed. Check command output is in JSON format: %s",
error,
@@ -482,20 +543,33 @@ class TestCase:
exact_match: if True then the json must exactly match.
"""
js = self._command_json(target, cmd)
+ if js is None:
+ # Always fail on bad json, even if user expected failure
+ # return expect_fail, {}
+ return False, {}
+
try:
+ # Convert to string to validate the input is valid JSON
+ if not isinstance(match, str):
+ match = json.dumps(match)
expect = json.loads(match)
except Exception as error:
expect = {}
self.olog.warning(
"JSON load failed. Check match value is in JSON format: %s", error
)
+ # Always fail on bad json, even if user expected failure
+ # return expect_fail, {}
+ return False, {}
if exact_match:
deep_diff = json_cmp(expect, js)
# Convert DeepDiff completely into dicts or lists at all levels
json_diff = json.loads(deep_diff.to_json())
else:
- deep_diff = json_cmp(expect, js, ignore_order=True)
+ deep_diff = json_cmp(
+ expect, js, ignore_order=True, cutoff_intersection_for_pairs=1
+ )
# Convert DeepDiff completely into dicts or lists at all levels
json_diff = json.loads(deep_diff.to_json())
# Remove new fields in json object from diff
@@ -570,6 +644,7 @@ class TestCase:
"""
path = Path(pathname)
path = self.info.path.parent.joinpath(path)
+ do_cli = False
self.oplogf(
"include: new path: %s create section: %s currently __in_section: %s",
@@ -589,7 +664,12 @@ class TestCase:
self.info.path = path
self.oplogf("include: swapped info path: new %s old %s", path, old_path)
- self.__exec_script(path, print_header=new_section, add_newline=new_section)
+ try:
+ e = self.__exec_script(
+ path, print_header=new_section, add_newline=new_section
+ )
+ except CLIOnErrorError:
+ do_cli = True
if new_section:
# Something within the section creating include has also created a section
@@ -616,6 +696,11 @@ class TestCase:
self.info.path = old_path
self.oplogf("include: restored info path: %s", old_path)
+ if do_cli:
+ raise CLIOnErrorError()
+ if e:
+ raise ScriptError(e)
+
def __end_section(self):
self.oplogf("__end_section: __in_section: %s", self.__in_section)
info = self.__pop_execinfo()
@@ -719,6 +804,7 @@ class TestCase:
)
if desc:
self.__post_result(target, success, desc)
+ act_on_result(success, self.args, desc)
return success, ret
def test_step(self, expr_or_value: Any, desc: str, target: str = "") -> bool:
@@ -728,6 +814,7 @@ class TestCase:
"""
success = bool(expr_or_value)
self.__post_result(target, success, desc)
+ act_on_result(success, self.args, desc)
return success
def match_step_json(
@@ -760,6 +847,7 @@ class TestCase:
)
if desc:
self.__post_result(target, success, desc)
+ act_on_result(success, self.args, desc)
return success, ret
def wait_step(
@@ -808,6 +896,7 @@ class TestCase:
)
if desc:
self.__post_result(target, success, desc)
+ act_on_result(success, self.args, desc)
return success, ret
def wait_step_json(
@@ -846,6 +935,7 @@ class TestCase:
)
if desc:
self.__post_result(target, success, desc)
+ act_on_result(success, self.args, desc)
return success, ret
diff --git a/tests/topotests/munet/native.py b/tests/topotests/munet/native.py
index 4fbbb85..5747d5e 100644
--- a/tests/topotests/munet/native.py
+++ b/tests/topotests/munet/native.py
@@ -8,8 +8,10 @@
# pylint: disable=protected-access
"""A module that defines objects for standalone use."""
import asyncio
+import base64
import errno
import getpass
+import glob
import ipaddress
import logging
import os
@@ -26,8 +28,10 @@ from . import cli
from .base import BaseMunet
from .base import Bridge
from .base import Commander
+from .base import InterfaceMixin
from .base import LinuxNamespace
from .base import MunetError
+from .base import SharedNamespace
from .base import Timeout
from .base import _async_get_exec_path
from .base import _get_exec_path
@@ -130,6 +134,22 @@ def convert_ranges_to_bitmask(ranges):
return bitmask
+class ExternalNetwork(SharedNamespace, InterfaceMixin):
+ """A network external to munet."""
+
+ def __init__(self, name=None, unet=None, logger=None, mtu=None, config=None):
+ """Create an external network."""
+ del logger # avoid linter
+ del mtu # avoid linter
+ # Do we want to use os.getpid() rather than unet.pid?
+ super().__init__(name, pid=unet.pid, nsflags=unet.nsflags, unet=unet)
+ self.config = config if config else {}
+
+ async def _async_delete(self):
+ self.logger.debug("%s: deleting", self)
+ await super()._async_delete()
+
+
class L2Bridge(Bridge):
"""A linux bridge with no IP network address."""
@@ -394,6 +414,10 @@ class NodeMixin:
async def async_cleanup_cmd(self):
"""Run the configured cleanup commands for this node."""
+ if self.cleanup_called:
+ return
+ self.cleanup_called = True
+
return await self._async_cleanup_cmd()
def has_ready_cmd(self) -> bool:
@@ -433,14 +457,14 @@ class NodeMixin:
outopt = outopt if outopt is not None else ""
if outopt == "all" or self.name in outopt.split(","):
outname = stdout.name if hasattr(stdout, "name") else stdout
- self.run_in_window(f"tail -F {outname}", title=f"O:{self.name}")
+ self.run_in_window(f"tail -n+1 -F {outname}", title=f"O:{self.name}")
if stderr:
erropt = self.unet.cfgopt.getoption("--stderr")
erropt = erropt if erropt is not None else ""
if erropt == "all" or self.name in erropt.split(","):
errname = stderr.name if hasattr(stderr, "name") else stderr
- self.run_in_window(f"tail -F {errname}", title=f"E:{self.name}")
+ self.run_in_window(f"tail -n+1 -F {errname}", title=f"E:{self.name}")
def pytest_hook_open_shell(self):
if not self.unet:
@@ -549,17 +573,38 @@ class NodeMixin:
await super()._async_delete()
+class HostnetNode(NodeMixin, LinuxNamespace):
+ """A node for running commands in the host network namespace."""
+
+ def __init__(self, name, pid=True, **kwargs):
+ if "net" in kwargs:
+ del kwargs["net"]
+ super().__init__(name, pid=pid, net=False, **kwargs)
+
+ self.logger.debug("%s: creating", self)
+
+ self.mgmt_ip = None
+ self.mgmt_ip6 = None
+ self.set_ns_cwd(self.rundir)
+
+ super().pytest_hook_open_shell()
+ self.logger.info("%s: created", self)
+
+ def get_ifname(self, netname): # pylint: disable=useless-return
+ del netname
+ return None
+
+ async def _async_delete(self):
+ self.logger.debug("%s: deleting", self)
+ await super()._async_delete()
+
+
class SSHRemote(NodeMixin, Commander):
"""SSHRemote a node representing an ssh connection to something."""
def __init__(
self,
name,
- server,
- port=22,
- user=None,
- password=None,
- idfile=None,
**kwargs,
):
super().__init__(name, **kwargs)
@@ -574,32 +619,33 @@ class SSHRemote(NodeMixin, Commander):
self.mgmt_ip = None
self.mgmt_ip6 = None
- self.port = port
-
- if user:
- self.user = user
- elif "SUDO_USER" in os.environ:
- self.user = os.environ["SUDO_USER"]
- else:
+ self.server = self.config["server"]
+ self.port = int(self.config.get("server-port", 22))
+ self.sudo_user = os.environ.get("SUDO_USER")
+ self.user = self.config.get("ssh-user")
+ if not self.user:
+ self.user = self.sudo_user
+ if not self.user:
self.user = getpass.getuser()
- self.password = password
- self.idfile = idfile
-
- self.server = f"{self.user}@{server}"
+ self.password = self.config.get("ssh-password")
+ self.idfile = self.config.get("ssh-identity-file")
+ self.use_host_network = None
# Setup our base `pre-cmd` values
#
# We maybe should add environment variable transfer here in particular
# MUNET_NODENAME. The problem is the user has to explicitly approve
# of SendEnv variables.
- self.__base_cmd = [
- get_exec_path_host("sudo"),
- "-E",
- f"-u{self.user}",
- get_exec_path_host("ssh"),
- ]
- if port != 22:
- self.__base_cmd.append(f"-p{port}")
+ self.__base_cmd = []
+ if self.idfile and self.sudo_user:
+ self.__base_cmd += [
+ get_exec_path_host("sudo"),
+ "-E",
+ f"-u{self.sudo_user}",
+ ]
+ self.__base_cmd.append(get_exec_path_host("ssh"))
+ if self.port != 22:
+ self.__base_cmd.append(f"-p{self.port}")
self.__base_cmd.append("-q")
self.__base_cmd.append("-oStrictHostKeyChecking=no")
self.__base_cmd.append("-oUserKnownHostsFile=/dev/null")
@@ -609,18 +655,34 @@ class SSHRemote(NodeMixin, Commander):
# self.__base_cmd.append("-oSendVar='TEST'")
self.__base_cmd_pty = list(self.__base_cmd)
self.__base_cmd_pty.append("-t")
- self.__base_cmd.append(self.server)
- self.__base_cmd_pty.append(self.server)
+ server_str = f"{self.user}@{self.server}"
+ self.__base_cmd.append(server_str)
+ self.__base_cmd_pty.append(server_str)
# self.set_pre_cmd(pre_cmd, pre_cmd_tty)
self.logger.info("%s: created", self)
- def has_ready_cmd(self) -> bool:
- return bool(self.config.get("ready-cmd", "").strip())
-
def _get_pre_cmd(self, use_str, use_pty, ns_only=False, **kwargs):
- pre_cmd = []
- if self.unet:
+ # None on first use, set after
+ if self.use_host_network is None:
+ # We have networks now so try and ping the server in the namespace
+ if not self.unet:
+ self.use_host_network = True
+ else:
+ rc, _, _ = self.unet.cmd_status(f"ping -w1 -c1 {self.server}")
+ if rc:
+ self.use_host_network = True
+ else:
+ self.use_host_network = False
+
+ if self.use_host_network:
+ self.logger.debug("Using host namespace for ssh connection")
+ else:
+ self.logger.debug("Using munet namespace for ssh connection")
+
+ if self.use_host_network:
+ pre_cmd = []
+ else:
pre_cmd = self.unet._get_pre_cmd(False, use_pty, ns_only=False, **kwargs)
if ns_only:
return pre_cmd
@@ -976,17 +1038,16 @@ ff02::2\tip6-allrouters
)
self.unet.rootcmd.cmd_status(f"ip link set {dname} name {hname}")
- rc, o, _ = self.unet.rootcmd.cmd_status("ip -o link show")
- m = re.search(rf"\d+:\s+{re.escape(hname)}:.*", o)
- if m:
- self.unet.rootcmd.cmd_nostatus(f"ip link set {hname} down ")
- self.unet.rootcmd.cmd_raises(f"ip link set {hname} netns {self.pid}")
+ # Make sure the interface is there.
+ self.unet.rootcmd.cmd_raises(f"ip -o link show {hname}")
+ self.unet.rootcmd.cmd_nostatus(f"ip link set {hname} down ")
+ self.unet.rootcmd.cmd_raises(f"ip link set {hname} netns {self.pid}")
+
# Wait for interface to show up in namespace
for retry in range(0, 10):
rc, o, _ = self.cmd_status(f"ip -o link show {hname}")
if not rc:
- if re.search(rf"\d+: {re.escape(hname)}:.*", o):
- break
+ break
if retry > 0:
await asyncio.sleep(1)
self.cmd_raises(f"ip link set {hname} name {lname}")
@@ -998,12 +1059,11 @@ ff02::2\tip6-allrouters
lname = self.host_intfs[hname]
self.cmd_raises(f"ip link set {lname} down")
self.cmd_raises(f"ip link set {lname} name {hname}")
- self.cmd_status(f"ip link set netns 1 dev {hname}")
- # The above is failing sometimes and not sure why
- # logging.error(
- # "XXX after setns %s",
- # self.unet.rootcmd.cmd_nostatus(f"ip link show {hname}"),
- # )
+ # We need to NOT run this command in the new pid namespace so that pid 1 is the
+ # root init process and so the interface gets returned to the root namespace
+ self.unet.rootcmd.cmd_raises(
+ f"nsenter -t {self.pid} -n ip link set netns 1 dev {hname}"
+ )
del self.host_intfs[hname]
async def add_phy_intf(self, devaddr, lname):
@@ -1522,11 +1582,14 @@ class L3ContainerNode(L3NodeMixin, LinuxNamespace):
async def async_cleanup_cmd(self):
"""Run the configured cleanup commands for this node."""
+ if self.cleanup_called:
+ return
self.cleanup_called = True
if "cleanup-cmd" not in self.config:
return
+ # The opposite of other types, the container needs cmd_p running
if not self.cmd_p:
self.logger.warning("async_cleanup_cmd: container no longer running")
return
@@ -1639,7 +1702,15 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
rundir=os.path.join(self.rundir, self.name),
configdir=self.unet.config_dirname,
)
- self.ssh_keyfile = self.qemu_config.get("sshkey")
+ self.ssh_keyfile = self.config.get("ssh-identity-file")
+ if not self.ssh_keyfile:
+ self.ssh_keyfile = self.qemu_config.get("sshkey")
+
+ self.ssh_user = self.config.get("ssh-user")
+ if not self.ssh_user:
+ self.ssh_user = self.qemu_config.get("sshuser", "root")
+
+ self.disk_created = False
@property
def is_vm(self):
@@ -1680,10 +1751,9 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
self.__base_cmd_pty = list(self.__base_cmd)
self.__base_cmd_pty.append("-t")
- user = self.qemu_config.get("sshuser", "root")
- self.__base_cmd.append(f"{user}@{mgmt_ip}")
+ self.__base_cmd.append(f"{self.ssh_user}@{mgmt_ip}")
self.__base_cmd.append("--")
- self.__base_cmd_pty.append(f"{user}@{mgmt_ip}")
+ self.__base_cmd_pty.append(f"{self.ssh_user}@{mgmt_ip}")
# self.__base_cmd_pty.append("--")
return True
@@ -1810,15 +1880,15 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
if args:
self.extra_mounts += args
- async def run_cmd(self):
+ async def _run_cmd(self, cmd_node):
"""Run the configured commands for this node inside VM."""
self.logger.debug(
"[rundir %s exists %s]", self.rundir, os.path.exists(self.rundir)
)
- cmd = self.config.get("cmd", "").strip()
+ cmd = self.config.get(cmd_node, "").strip()
if not cmd:
- self.logger.debug("%s: no `cmd` to run", self)
+ self.logger.debug("%s: no `%s` to run", self, cmd_node)
return None
shell_cmd = self.config.get("shell", "/bin/bash")
@@ -1837,15 +1907,17 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
cmd += "\n"
# Write a copy to the rundir
- cmdpath = os.path.join(self.rundir, "cmd.shebang")
+ cmdpath = os.path.join(self.rundir, f"{cmd_node}.shebang")
with open(cmdpath, mode="w+", encoding="utf-8") as cmdfile:
cmdfile.write(cmd)
commander.cmd_raises(f"chmod 755 {cmdpath}")
# Now write a copy inside the VM
- self.conrepl.cmd_status("cat > /tmp/cmd.shebang << EOF\n" + cmd + "\nEOF")
- self.conrepl.cmd_status("chmod 755 /tmp/cmd.shebang")
- cmds = "/tmp/cmd.shebang"
+ self.conrepl.cmd_status(
+ f"cat > /tmp/{cmd_node}.shebang << EOF\n" + cmd + "\nEOF"
+ )
+ self.conrepl.cmd_status(f"chmod 755 /tmp/{cmd_node}.shebang")
+ cmds = f"/tmp/{cmd_node}.shebang"
else:
cmd = cmd.replace("%CONFIGDIR%", str(self.unet.config_dirname))
cmd = cmd.replace("%RUNDIR%", str(self.rundir))
@@ -1883,20 +1955,30 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
# When run_command supports async_ arg we can use the above...
self.cmd_p = now_proc(self.cmdrepl.run_command(cmds, timeout=120))
-
- # stdout and err both combined into logfile from the spawned repl
- stdout = os.path.join(self.rundir, "_cmdcon-log.txt")
- self.pytest_hook_run_cmd(stdout, None)
else:
# If we only have a console we can't run in parallel, so run to completion
self.cmd_p = now_proc(self.conrepl.run_command(cmds, timeout=120))
return self.cmd_p
+ async def run_cmd(self):
+ if self.disk_created:
+ await self._run_cmd("initial-cmd")
+ await self._run_cmd("cmd")
+
+ # stdout and err both combined into logfile from the spawned repl
+ if self.cmdrepl:
+ stdout = os.path.join(self.rundir, "_cmdcon-log.txt")
+ self.pytest_hook_run_cmd(stdout, None)
+
# InterfaceMixin override
# We need a name unique in the shared namespace.
def get_ns_ifname(self, ifname):
- return self.name + ifname
+ ifname = self.name + ifname
+ ifname = re.sub("gigabitethernet", "GE", ifname, flags=re.I)
+ if len(ifname) >= 16:
+ ifname = ifname[0:7] + ifname[-8:]
+ return ifname
async def add_host_intf(self, hname, lname, mtu=None):
# L3QemuVM needs it's own add_host_intf for macvtap, We need to create the tap
@@ -2044,24 +2126,50 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
async def gather_coverage_data(self):
con = self.conrepl
+ gcda_root = "/sys/kernel/debug/gcov"
+ dest = "/tmp/gcov-data.tgz"
- gcda = "/sys/kernel/debug/gcov"
- tmpdir = con.cmd_raises("mktemp -d").strip()
- dest = "/gcov-data.tgz"
- con.cmd_raises(rf"find {gcda} -type d -exec mkdir -p {tmpdir}/{{}} \;")
- con.cmd_raises(
- rf"find {gcda} -name '*.gcda' -exec sh -c 'cat < $0 > {tmpdir}/$0' {{}} \;"
- )
- con.cmd_raises(
- rf"find {gcda} -name '*.gcno' -exec sh -c 'cp -d $0 {tmpdir}/$0' {{}} \;"
- )
- con.cmd_raises(rf"tar cf - -C {tmpdir} sys | gzip -c > {dest}")
- con.cmd_raises(rf"rm -rf {tmpdir}")
- self.logger.info("Saved coverage data in VM at %s", dest)
+ if gcda_root != "/sys/kernel/debug/gcov":
+ con.cmd_raises(
+ rf"cd {gcda_root} && find * -name '*.gc??' "
+ "| tar -cf - -T - | gzip -c > {dest}"
+ )
+ else:
+ # Some tars dont try and read 0 length files so we need to copy them.
+ tmpdir = con.cmd_raises("mktemp -d").strip()
+ con.cmd_raises(
+ rf"cd {gcda_root} && find -type d -exec mkdir -p {tmpdir}/{{}} \;"
+ )
+ con.cmd_raises(
+ rf"cd {gcda_root} && "
+ rf"find -name '*.gcda' -exec sh -c 'cat < $0 > {tmpdir}/$0' {{}} \;"
+ )
+ con.cmd_raises(
+ rf"cd {gcda_root} && "
+ rf"find -name '*.gcno' -exec sh -c 'cp -d $0 {tmpdir}/$0' {{}} \;"
+ )
+ con.cmd_raises(
+ rf"cd {tmpdir} && "
+ rf"find * -name '*.gc??' | tar -cf - -T - | gzip -c > {dest}"
+ )
+ con.cmd_raises(rf"rm -rf {tmpdir}")
+
+ self.logger.debug("Saved coverage data in VM at %s", dest)
+ ldest = os.path.join(self.rundir, "gcov-data.tgz")
if self.use_ssh:
- ldest = os.path.join(self.rundir, "gcov-data.tgz")
self.cmd_raises(["/bin/cat", dest], stdout=open(ldest, "wb"))
- self.logger.info("Saved coverage data on host at %s", ldest)
+ self.logger.debug("Saved coverage data on host at %s", ldest)
+ else:
+ output = con.cmd_raises(rf"base64 {dest}")
+ with open(ldest, "wb") as f:
+ f.write(base64.b64decode(output))
+ self.logger.debug("Saved coverage data on host at %s", ldest)
+ self.logger.info("Extracting coverage for %s into %s", self.name, ldest)
+
+ # We need to place the gcda files where munet expects to find them
+ gcdadir = Path(os.environ["GCOV_PREFIX"]) / self.name
+ self.unet.cmd_raises_nsonly(f"mkdir -p {gcdadir}")
+ self.unet.cmd_raises_nsonly(f"tar -C {gcdadir} -xzf {ldest}")
async def _opencons(
self,
@@ -2119,6 +2227,7 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
expects=expects,
sends=sends,
timeout=timeout,
+ init_newline=True,
trace=True,
)
)
@@ -2247,30 +2356,45 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
if not nnics:
args += ["-nic", "none"]
- dtpl = qc.get("disk-template")
+ dtplpath = dtpl = qc.get("disk-template")
diskpath = disk = qc.get("disk")
- if dtpl and not disk:
- disk = qc["disk"] = f"{self.name}-{os.path.basename(dtpl)}"
- diskpath = os.path.join(self.rundir, disk)
+ if diskpath:
+ if diskpath[0] != "/":
+ diskpath = os.path.join(self.unet.config_dirname, diskpath)
+
+ if dtpl and (not disk or not os.path.exists(diskpath)):
+ if not disk:
+ disk = qc["disk"] = f"{self.name}-{os.path.basename(dtpl)}"
+ diskpath = os.path.join(self.rundir, disk)
if self.path_exists(diskpath):
logging.debug("Disk '%s' file exists, using.", diskpath)
else:
- dtplpath = os.path.abspath(
- os.path.join(
- os.path.dirname(self.unet.config["config_pathname"]), dtpl
- )
- )
+ if dtplpath[0] != "/":
+ dtplpath = os.path.join(self.unet.config_dirname, dtpl)
logging.info("Create disk '%s' from template '%s'", diskpath, dtplpath)
self.cmd_raises(
f"qemu-img create -f qcow2 -F qcow2 -b {dtplpath} {diskpath}"
)
+ self.disk_created = True
+ disk_driver = qc.get("disk-driver", "virtio")
if diskpath:
- args.extend(
- ["-drive", f"file={diskpath},if=none,id=sata-disk0,format=qcow2"]
- )
- args.extend(["-device", "ahci,id=ahci"])
- args.extend(["-device", "ide-hd,bus=ahci.0,drive=sata-disk0"])
+ if disk_driver == "virtio":
+ args.extend(["-drive", f"file={diskpath},if=virtio,format=qcow2"])
+ else:
+ args.extend(
+ ["-drive", f"file={diskpath},if=none,id=sata-disk0,format=qcow2"]
+ )
+ args.extend(["-device", "ahci,id=ahci"])
+ args.extend(["-device", "ide-hd,bus=ahci.0,drive=sata-disk0"])
+
+ cidiskpath = qc.get("cloud-init-disk")
+ if cidiskpath:
+ if cidiskpath[0] != "/":
+ cidiskpath = os.path.join(self.unet.config_dirname, cidiskpath)
+ args.extend(["-drive", f"file={cidiskpath},if=virtio,format=qcow2"])
+
+ # args.extend(["-display", "vnc=0.0.0.0:40"])
use_stdio = cc.get("stdio", True)
has_cmd = self.config.get("cmd")
@@ -2360,6 +2484,10 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
if use_cmdcon:
confiles.append("_cmdcon")
+ password = cc.get("password", "")
+ if self.disk_created:
+ password = cc.get("initial-password", password)
+
#
# Connect to the console socket, retrying
#
@@ -2369,7 +2497,7 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
prompt=prompt,
is_bourne=not bool(prompt),
user=cc.get("user", "root"),
- password=cc.get("password", ""),
+ password=password,
expects=cc.get("expects"),
sends=cc.get("sends"),
timeout=int(cc.get("timeout", 60)),
@@ -2425,6 +2553,8 @@ class L3QemuVM(L3NodeMixin, LinuxNamespace):
async def async_cleanup_cmd(self):
"""Run the configured cleanup commands for this node."""
+ if self.cleanup_called:
+ return
self.cleanup_called = True
if "cleanup-cmd" not in self.config:
@@ -2815,7 +2945,9 @@ ff02::2\tip6-allrouters
else:
node2.set_lan_addr(node1, c2)
- if "physical" not in c1 and not node1.is_vm:
+ if isinstance(node1, ExternalNetwork):
+ pass
+ elif "physical" not in c1 and not node1.is_vm:
node1.set_intf_constraints(if1, **c1)
if "physical" not in c2 and not node2.is_vm:
node2.set_intf_constraints(if2, **c2)
@@ -2828,14 +2960,8 @@ ff02::2\tip6-allrouters
cls = L3QemuVM
elif config and config.get("server"):
cls = SSHRemote
- kwargs["server"] = config["server"]
- kwargs["port"] = int(config.get("server-port", 22))
- if "ssh-identity-file" in config:
- kwargs["idfile"] = config.get("ssh-identity-file")
- if "ssh-user" in config:
- kwargs["user"] = config.get("ssh-user")
- if "ssh-password" in config:
- kwargs["password"] = config.get("ssh-password")
+ elif config and config.get("hostnet"):
+ cls = HostnetNode
else:
cls = L3NamespaceNode
return super().add_host(name, cls=cls, config=config, **kwargs)
@@ -2845,20 +2971,113 @@ ff02::2\tip6-allrouters
if config is None:
config = {}
- cls = L3Bridge if config.get("ip") else L2Bridge
+ if config.get("external"):
+ cls = ExternalNetwork
+ elif config.get("ip"):
+ cls = L3Bridge
+ else:
+ cls = L2Bridge
mtu = kwargs.get("mtu", config.get("mtu"))
return super().add_switch(name, cls=cls, config=config, mtu=mtu, **kwargs)
- async def run(self):
+ def coverage_setup(self):
+ bdir = self.cfgopt.getoption("--cov-build-dir")
+ if not bdir:
+ # Try and find the build dir using common prefix of gcno files
+ common = None
+ cwd = os.getcwd()
+ for f in glob.iglob(rf"{cwd}/**/*.gcno", recursive=True):
+ if not common:
+ common = os.path.dirname(f)
+ else:
+ common = os.path.commonprefix([common, f])
+ if not common:
+ break
+ assert (
+ bdir
+ ), "Can't locate build directory for coverage data, use --cov-build-dir"
+
+ bdir = Path(bdir).resolve()
+ rundir = Path(self.rundir).resolve()
+ gcdadir = rundir / "gcda"
+ os.environ["GCOV_BUILD_DIR"] = str(bdir)
+ os.environ["GCOV_PREFIX_STRIP"] = str(len(bdir.parts) - 1)
+ os.environ["GCOV_PREFIX"] = str(gcdadir)
+
+ # commander.cmd_raises(f"find {bdir} -name '*.gc??' -exec chmod o+rw {{}} +")
+ group_id = bdir.stat().st_gid
+ commander.cmd_raises(f"mkdir -p {gcdadir}")
+ commander.cmd_raises(f"chown -R root:{group_id} {gcdadir}")
+ commander.cmd_raises(f"chmod 2775 {gcdadir}")
+
+ async def coverage_finish(self):
+ rundir = Path(self.rundir).resolve()
+ bdir = Path(os.environ["GCOV_BUILD_DIR"])
+ gcdadir = Path(os.environ["GCOV_PREFIX"])
+
+ # Create .gcno symlinks if they don't already exist, for kernel they will
+ self.logger.info("Creating .gcno symlinks from '%s' to '%s'", gcdadir, bdir)
+ commander.cmd_raises(
+ f'cd "{gcdadir}"; bdir="{bdir}"'
+ + """
+for f in $(find . -name '*.gcda'); do
+ f=${f#./};
+ f=${f%.gcda}.gcno;
+ if [ ! -h "$f" ]; then
+ ln -fs $bdir/$f $f;
+ touch -h -r $bdir/$f $f;
+ echo $f;
+ fi;
+done"""
+ )
+
+ # Get the results into a summary file
+ data_file = rundir / "coverage.info"
+ self.logger.info("Gathering coverage data into: %s", data_file)
+ commander.cmd_raises(
+ f"lcov --directory {gcdadir} --capture --output-file {data_file}"
+ )
+
+ # Get coverage info filtered to a specific set of files
+ report_file = rundir / "coverage.info"
+ self.logger.debug("Generating coverage summary: %s", report_file)
+ output = commander.cmd_raises(f"lcov --summary {data_file}")
+ self.logger.info("\nCOVERAGE-SUMMARY-START\n%s\nCOVERAGE-SUMMARY-END", output)
+ # terminalreporter.write(
+ # f"\nCOVERAGE-SUMMARY-START\n{output}\nCOVERAGE-SUMMARY-END\n"
+ # )
+
+ async def load_images(self, images):
tasks = []
+ for image in images:
+ logging.debug("Checking for image %s", image)
+ rc, _, _ = self.rootcmd.cmd_status(
+ f"podman image inspect {image}", warn=False
+ )
+ if not rc:
+ continue
+ logging.info("Pulling missing image %s", image)
+ aw = self.rootcmd.async_cmd_raises(f"podman pull {image}")
+ tasks.append(asyncio.create_task(aw))
+ if not tasks:
+ return
+ _, pending = await asyncio.wait(tasks, timeout=600)
+ assert not pending, "Failed to pull container images"
+ async def run(self):
+ tasks = []
hosts = self.hosts.values()
+
+ images = {x.container_image for x in hosts if hasattr(x, "container_image")}
+ await self.load_images(images)
+
launch_nodes = [x for x in hosts if hasattr(x, "launch")]
launch_nodes = [x for x in launch_nodes if x.config.get("qemu")]
- run_nodes = [x for x in hosts if hasattr(x, "has_run_cmd") and x.has_run_cmd()]
- ready_nodes = [
- x for x in hosts if hasattr(x, "has_ready_cmd") and x.has_ready_cmd()
- ]
+ run_nodes = [x for x in hosts if x.has_run_cmd()]
+ ready_nodes = [x for x in hosts if x.has_ready_cmd()]
+
+ if self.cfgopt.getoption("--coverage"):
+ self.coverage_setup()
pcapopt = self.cfgopt.getoption("--pcap")
pcapopt = pcapopt if pcapopt else ""
@@ -2920,10 +3139,10 @@ ff02::2\tip6-allrouters
await asyncio.sleep(0.25)
logging.debug("%s is ready!", x)
+ tasks = [asyncio.create_task(wait_until_ready(x)) for x in ready_nodes]
+
logging.debug("Waiting for ready on nodes: %s", ready_nodes)
- _, pending = await asyncio.wait(
- [wait_until_ready(x) for x in ready_nodes], timeout=30
- )
+ _, pending = await asyncio.wait(tasks, timeout=30)
if pending:
logging.warning("Timeout waiting for ready: %s", pending)
for nr in pending:
@@ -2940,15 +3159,6 @@ ff02::2\tip6-allrouters
self.logger.debug("%s: deleting.", self)
- if self.cfgopt.getoption("--coverage"):
- nodes = (
- x for x in self.hosts.values() if hasattr(x, "gather_coverage_data")
- )
- try:
- await asyncio.gather(*(x.gather_coverage_data() for x in nodes))
- except Exception as error:
- logging.warning("Error gathering coverage data: %s", error)
-
pause = bool(self.cfgopt.getoption("--pause-at-end"))
pause = pause or bool(self.cfgopt.getoption("--pause"))
if pause:
@@ -2959,6 +3169,25 @@ ff02::2\tip6-allrouters
except Exception as error:
self.logger.error("\n...continuing after error: %s", error)
+ # Run cleanup-cmd's.
+ nodes = (x for x in self.hosts.values() if x.has_cleanup_cmd())
+ try:
+ await asyncio.gather(*(x.async_cleanup_cmd() for x in nodes))
+ except Exception as error:
+ logging.warning("Error running cleanup cmds: %s", error)
+
+ # Gather any coverage data
+ if self.cfgopt.getoption("--coverage"):
+ nodes = (
+ x for x in self.hosts.values() if hasattr(x, "gather_coverage_data")
+ )
+ try:
+ await asyncio.gather(*(x.gather_coverage_data() for x in nodes))
+ except Exception as error:
+ logging.warning("Error gathering coverage data: %s", error)
+
+ await self.coverage_finish()
+
# XXX should we cancel launch and run tasks?
try:
diff --git a/tests/topotests/munet/parser.py b/tests/topotests/munet/parser.py
index 4fc0c75..a8b73a2 100644
--- a/tests/topotests/munet/parser.py
+++ b/tests/topotests/munet/parser.py
@@ -230,7 +230,7 @@ def load_kinds(args, search=None):
if args:
os.chdir(args.rundir)
- args_config = args.kinds_config if args else None
+ args_config = args.kinds_config if args and hasattr(args, "kinds_config") else None
try:
if search is None:
search = [cwd]
@@ -305,7 +305,7 @@ async def async_build_topology(
# create search directories from common root if given
cpath = Path(config["config_pathname"]).absolute()
- project_root = args.project_root if args else None
+ project_root = args.project_root if args and hasattr(args, "project_root") else None
if not search_root:
search_root = find_project_root(cpath, project_root)
if not search_root:
@@ -341,7 +341,11 @@ async def async_build_topology(
pytestconfig=pytestconfig,
isolated=isolated,
pid=top_level_pidns,
- unshare_inline=args.unshare_inline if args else unshare_inline,
+ unshare_inline=(
+ args.unshare_inline
+ if args and hasattr(args, "unshare_inline")
+ else unshare_inline
+ ),
logger=logger,
)
diff --git a/tests/topotests/munet/testing/fixtures.py b/tests/topotests/munet/testing/fixtures.py
index 3c6d946..3c6ddf9 100644
--- a/tests/topotests/munet/testing/fixtures.py
+++ b/tests/topotests/munet/testing/fixtures.py
@@ -25,7 +25,6 @@ from ..base import BaseMunet
from ..base import Bridge
from ..base import get_event_loop
from ..cleanup import cleanup_current
-from ..cleanup import cleanup_previous
from ..native import L3NodeMixin
from ..parser import async_build_topology
from ..parser import get_config
@@ -130,9 +129,12 @@ def session_autouse():
else:
is_worker = True
- if not is_worker:
- # This is unfriendly to multi-instance
- cleanup_previous()
+ # We dont want to kill all munet and we don't have the rundir here yet
+ # This was more useful back when we used to leave processes around a lot
+ # more.
+ # if not is_worker:
+ # # This is unfriendly to multi-instance
+ # cleanup_previous()
# We never pop as we want to keep logging
_push_log_handler("session", "/tmp/unet-test/pytest-session.log")
@@ -150,8 +152,9 @@ def session_autouse():
@pytest.fixture(autouse=True, scope="module")
def module_autouse(request):
- logpath = get_test_logdir(request.node.name, True)
- logpath = os.path.join("/tmp/unet-test", logpath, "pytest-exec.log")
+ root_path = os.environ.get("MUNET_RUNDIR", "/tmp/unet-test")
+ logpath = get_test_logdir(request.node.nodeid, True)
+ logpath = os.path.join(root_path, logpath, "pytest-exec.log")
with log_handler("module", logpath):
sdir = os.path.dirname(os.path.realpath(request.fspath))
with chdir(sdir, "module autouse fixture"):
@@ -161,7 +164,7 @@ def module_autouse(request):
raise Exception("Base Munet was not cleaned up/deleted")
-@pytest.fixture(scope="module")
+@pytest.fixture(scope="session")
def event_loop():
"""Create an instance of the default event loop for the session."""
loop = get_event_loop()
@@ -174,7 +177,8 @@ def event_loop():
@pytest.fixture(scope="module")
def rundir_module():
- d = os.path.join("/tmp/unet-test", get_test_logdir(module=True))
+ root_path = os.environ.get("MUNET_RUNDIR", "/tmp/unet-test")
+ d = os.path.join(root_path, get_test_logdir(module=True))
logging.debug("conftest: test module rundir %s", d)
return d
@@ -213,18 +217,14 @@ async def _unet_impl(
param,
exc_info=True,
)
- pytest.skip(
- f"unet fixture: unet build failed: {error}", allow_module_level=True
- )
- raise
+ pytest.fail(f"unet fixture: unet build failed: {error}")
try:
tasks = await _unet.run()
except Exception as error:
logging.debug("unet fixture: unet run failed: %s", error, exc_info=True)
await _unet.async_delete()
- pytest.skip(f"unet fixture: unet run failed: {error}", allow_module_level=True)
- raise
+ pytest.fail(f"unet fixture: unet run failed: {error}")
logging.debug("unet fixture: containers running")
@@ -379,7 +379,8 @@ async def astepf(pytestconfig):
@pytest.fixture(scope="function")
def rundir():
- d = os.path.join("/tmp/unet-test", get_test_logdir(module=False))
+ root_path = os.environ.get("MUNET_RUNDIR", "/tmp/unet-test")
+ d = os.path.join(root_path, get_test_logdir(module=False))
logging.debug("conftest: test function rundir %s", d)
return d
@@ -387,9 +388,8 @@ def rundir():
# Configure logging
@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_setup(item):
- d = os.path.join(
- "/tmp/unet-test", get_test_logdir(nodeid=item.nodeid, module=False)
- )
+ root_path = os.environ.get("MUNET_RUNDIR", "/tmp/unet-test")
+ d = os.path.join(root_path, get_test_logdir(nodeid=item.nodeid, module=False))
config = item.config
logging_plugin = config.pluginmanager.get_plugin("logging-plugin")
filename = Path(d, "pytest-exec.log")
diff --git a/tests/topotests/munet/testing/hooks.py b/tests/topotests/munet/testing/hooks.py
index 985eef9..f6f2115 100644
--- a/tests/topotests/munet/testing/hooks.py
+++ b/tests/topotests/munet/testing/hooks.py
@@ -18,6 +18,7 @@ import traceback
import pytest
+from ..args import add_testing_args
from ..base import BaseMunet # pylint: disable=import-error
from ..cli import cli # pylint: disable=import-error
from .util import pause_test
@@ -29,85 +30,7 @@ from .util import pause_test
def pytest_addoption(parser):
- parser.addoption(
- "--cli-on-error",
- action="store_true",
- help="CLI on test failure",
- )
-
- parser.addoption(
- "--coverage",
- action="store_true",
- help="Enable coverage gathering if supported",
- )
-
- parser.addoption(
- "--gdb",
- default="",
- metavar="HOST[,HOST...]",
- help="Comma-separated list of nodes to launch gdb on, or 'all'",
- )
- parser.addoption(
- "--gdb-breakpoints",
- default="",
- metavar="BREAKPOINT[,BREAKPOINT...]",
- help="Comma-separated list of breakpoints",
- )
- parser.addoption(
- "--gdb-use-emacs",
- action="store_true",
- help="Use emacsclient to run gdb instead of a shell",
- )
-
- parser.addoption(
- "--pcap",
- default="",
- metavar="NET[,NET...]",
- help="Comma-separated list of networks to capture packets on, or 'all'",
- )
-
- parser.addoption(
- "--pause",
- action="store_true",
- help="Pause after each test",
- )
- parser.addoption(
- "--pause-at-end",
- action="store_true",
- help="Pause before taking munet down",
- )
- parser.addoption(
- "--pause-on-error",
- action="store_true",
- help="Pause after (disables default when --shell or -vtysh given)",
- )
- parser.addoption(
- "--no-pause-on-error",
- dest="pause_on_error",
- action="store_false",
- help="Do not pause after (disables default when --shell or -vtysh given)",
- )
-
- parser.addoption(
- "--shell",
- default="",
- metavar="NODE[,NODE...]",
- help="Comma-separated list of nodes to spawn shell on, or 'all'",
- )
-
- parser.addoption(
- "--stdout",
- default="",
- metavar="NODE[,NODE...]",
- help="Comma-separated list of nodes to open tail-f stdout window on, or 'all'",
- )
-
- parser.addoption(
- "--stderr",
- default="",
- metavar="NODE[,NODE...]",
- help="Comma-separated list of nodes to open tail-f stderr window on, or 'all'",
- )
+ add_testing_args(parser.addoption)
def pytest_configure(config):
@@ -146,6 +69,18 @@ def pytest_configure(config):
elif b and not is_xdist and not have_windows:
pytest.exit(f"{winopt} use requires byobu/TMUX/SCREEN/XTerm")
+ cli_pause = (
+ config.getoption("--cli-on-error")
+ or config.getoption("--pause")
+ or config.getoption("--pause-at-end")
+ or config.getoption("--pause-on-error")
+ )
+ if config.getoption("--capture") == "fd" and cli_pause:
+ pytest.exit(
+ "CLI is not compatible with `--capture=fd`, "
+ "please run again with `-s` or other `--capture` value"
+ )
+
def pytest_runtest_makereport(item, call):
"""Pause or invoke CLI as directed by config."""
diff --git a/tests/topotests/nb_config/test_nb_config.py b/tests/topotests/nb_config/test_nb_config.py
index f699a4e..9099ef1 100644
--- a/tests/topotests/nb_config/test_nb_config.py
+++ b/tests/topotests/nb_config/test_nb_config.py
@@ -24,9 +24,7 @@ CWD = os.path.dirname(os.path.realpath(__file__))
def tgen(request):
"Setup/Teardown the environment and provide tgen argument to tests"
- topodef = {
- "s1": ("r1",)
- }
+ topodef = {"s1": ("r1",)}
tgen = Topogen(topodef, request.module.__name__)
tgen.start_topology()
@@ -46,12 +44,14 @@ def test_access_list_config_ordering(tgen):
r1 = tgen.gears["r1"]
- output = r1.vtysh_multicmd([
- "conf t",
- "access-list test seq 1 permit host 10.0.0.1"])
+ output = r1.vtysh_multicmd(
+ ["conf t", "access-list test seq 1 permit host 10.0.0.1"]
+ )
output = r1.vtysh_cmd("show ip access-list test json")
got = json.loads(output)
- expected = json.loads('{"ZEBRA":{"test":{"type":"Standard", "addressFamily":"IPv4", "rules":[{"sequenceNumber":1, "filterType":"permit", "address":"10.0.0.1", "mask":"0.0.0.0"}]}}}')
+ expected = json.loads(
+ '{"zebra":{"test":{"type":"Standard", "addressFamily":"IPv4", "rules":[{"sequenceNumber":1, "filterType":"permit", "address":"10.0.0.1", "mask":"0.0.0.0"}]}}}'
+ )
result = json_cmp(got, expected)
assert result is None
@@ -59,11 +59,11 @@ def test_access_list_config_ordering(tgen):
# If the northbound mis-orders the create/delete then this test fails.
# https://github.com/FRRouting/frr/pull/15423/commits/38b85e0c2bc555b8827dbd2cb6515b6febf548b4
#
- output = r1.vtysh_multicmd([
- "conf t",
- "access-list test seq 1 permit 10.0.0.0/8"])
+ output = r1.vtysh_multicmd(["conf t", "access-list test seq 1 permit 10.0.0.0/8"])
output = r1.vtysh_cmd("show ip access-list test json")
got = json.loads(output)
- expected = json.loads('{"ZEBRA":{"test":{"type":"Zebra", "addressFamily":"IPv4", "rules":[{"sequenceNumber":1, "filterType":"permit", "prefix":"10.0.0.0/8", "exact-match":false}]}}}')
+ expected = json.loads(
+ '{"zebra":{"test":{"type":"Zebra", "addressFamily":"IPv4", "rules":[{"sequenceNumber":1, "filterType":"permit", "prefix":"10.0.0.0/8", "exact-match":false}]}}}'
+ )
result = json_cmp(got, expected)
assert result is None
diff --git a/tests/topotests/nhrp_topo/test_nhrp_topo.py b/tests/topotests/nhrp_topo/test_nhrp_topo.py
index 26115de..284c58a 100644
--- a/tests/topotests/nhrp_topo/test_nhrp_topo.py
+++ b/tests/topotests/nhrp_topo/test_nhrp_topo.py
@@ -189,7 +189,7 @@ def test_protocols_convergence():
expected = {
"{}-gre0".format(rname): {
- "flags": "<UP,RUNNING>",
+ "flags": "<UP,LOWER_UP,RUNNING>",
}
}
test_func = partial(
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r5/ospf6d.conf b/tests/topotests/ospf6_ecmp_inter_area/r5/ospf6d.conf
index 2a6c9ab..24cd354 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/r5/ospf6d.conf
+++ b/tests/topotests/ospf6_ecmp_inter_area/r5/ospf6d.conf
@@ -4,31 +4,11 @@ interface r5-eth0
ipv6 ospf6 dead-interval 10
!
interface r5-eth1
- ipv6 ospf6 area 0
- ipv6 ospf6 hello-interval 2
- ipv6 ospf6 dead-interval 10
-!
-interface r5-eth2
- ipv6 ospf6 area 0
- ipv6 ospf6 hello-interval 2
- ipv6 ospf6 dead-interval 10
-!
-interface r5-eth3
ipv6 ospf6 area 1
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
!
-interface r5-eth4
- ipv6 ospf6 area 1
- ipv6 ospf6 hello-interval 2
- ipv6 ospf6 dead-interval 10
-!
-interface r5-eth5
- ipv6 ospf6 area 0
- ipv6 ospf6 hello-interval 2
- ipv6 ospf6 dead-interval 10
-!
-interface r5-eth6
+interface r5-eth2
ipv6 ospf6 area 0
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r6/ospf6d.conf b/tests/topotests/ospf6_ecmp_inter_area/r6/ospf6d.conf
index a1f48b5..4efaa31 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/r6/ospf6d.conf
+++ b/tests/topotests/ospf6_ecmp_inter_area/r6/ospf6d.conf
@@ -1,8 +1,23 @@
interface r6-eth0
+ ipv6 ospf6 area 0
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+interface r6-eth1
+ ipv6 ospf6 area 0
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+interface r6-eth2
ipv6 ospf6 area 1
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
!
+interface r6-eth3
+ ipv6 ospf6 area 0
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
router ospf6
ospf6 router-id 10.254.254.6
redistribute connected
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r7/ospf6d.conf b/tests/topotests/ospf6_ecmp_inter_area/r7/ospf6d.conf
index 0e49b0d..9b7756e 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/r7/ospf6d.conf
+++ b/tests/topotests/ospf6_ecmp_inter_area/r7/ospf6d.conf
@@ -1,11 +1,22 @@
-interface lo
+interface r7-eth0
ipv6 ospf6 area 1
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
!
-interface r7-eth0
+interface r7-eth1
ipv6 ospf6 area 1
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
!
+interface r7-eth2
+ ipv6 ospf6 area 1
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+interface r7-eth3
+ shutdown
+!
router ospf6
ospf6 router-id 10.254.254.7
+ redistribute connected
!
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r7/zebra.conf b/tests/topotests/ospf6_ecmp_inter_area/r7/zebra.conf
index a410be8..1608cad 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/r7/zebra.conf
+++ b/tests/topotests/ospf6_ecmp_inter_area/r7/zebra.conf
@@ -3,3 +3,6 @@ ipv6 forwarding
interface lo
ipv6 address 2001:db8:7::1/64
!
+interface r7-eth2
+ ipv6 address 2001:db8:8007::1/64
+!
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r8/ospf6d.conf b/tests/topotests/ospf6_ecmp_inter_area/r8/ospf6d.conf
index fb5483c..33c6497 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/r8/ospf6d.conf
+++ b/tests/topotests/ospf6_ecmp_inter_area/r8/ospf6d.conf
@@ -3,6 +3,19 @@ interface r8-eth0
ipv6 ospf6 hello-interval 2
ipv6 ospf6 dead-interval 10
!
+interface r8-eth1
+ ipv6 ospf6 area 0
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+interface r8-eth2
+ ipv6 ospf6 area 0
+ ipv6 ospf6 hello-interval 2
+ ipv6 ospf6 dead-interval 10
+!
+interface r8-eth3
+ shutdown
+!
router ospf6
ospf6 router-id 10.254.254.8
redistribute connected
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r8/zebra.conf b/tests/topotests/ospf6_ecmp_inter_area/r8/zebra.conf
index 8e343d8..e756cd4 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/r8/zebra.conf
+++ b/tests/topotests/ospf6_ecmp_inter_area/r8/zebra.conf
@@ -3,3 +3,6 @@ ipv6 forwarding
interface lo
ipv6 address 2001:db8:8::1/64
!
+interface r8-eth2
+ ipv6 address 2001:db8:8008::1/64
+!
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r9/ospf6d.conf b/tests/topotests/ospf6_ecmp_inter_area/r9/ospf6d.conf
deleted file mode 100644
index 57fa8e3..0000000
--- a/tests/topotests/ospf6_ecmp_inter_area/r9/ospf6d.conf
+++ /dev/null
@@ -1,11 +0,0 @@
-interface lo
- ipv6 ospf6 area 0
-!
-interface r9-eth0
- ipv6 ospf6 area 0
- ipv6 ospf6 hello-interval 2
- ipv6 ospf6 dead-interval 10
-!
-router ospf6
- ospf6 router-id 10.254.254.9
-!
diff --git a/tests/topotests/ospf6_ecmp_inter_area/r9/zebra.conf b/tests/topotests/ospf6_ecmp_inter_area/r9/zebra.conf
deleted file mode 100644
index e267496..0000000
--- a/tests/topotests/ospf6_ecmp_inter_area/r9/zebra.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-ipv6 forwarding
-!
-interface lo
- ipv6 address 2001:db8:9::1/64
-!
diff --git a/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py b/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py
index 2eaccb8..adf289e 100644
--- a/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py
+++ b/tests/topotests/ospf6_ecmp_inter_area/test_ospf6_ecmp_inter_area.py
@@ -3,7 +3,7 @@
# test_ospf6_ecmp_inter_area.py
#
-# Copyright (c) 2021, 2022 by Martin Buck
+# Copyright (c) 2021, 2022, 2024 by Martin Buck
# Copyright (c) 2016 by
# Network Device Education Foundation, Inc. ("NetDEF")
#
@@ -11,35 +11,42 @@
r"""
test_ospf6_ecmp_inter_area.py: Test OSPFv3 ECMP inter-area nexthop update
-Check proper removal of ECMP nexthops after a path used by one nexthop
-disappears. We remove a path by bringing down a link required by that
-path which is not adjacent to the router being checked. This is important
-because when bringing down adjacent links, the kernel might remove the
-nexthops itself without ospf6d having to do anything.
+Check proper addition and removal of ECMP nexthops in 2 cases: Parallel
+paths to one ABR and parallel ABRs. We test nexthop removal triggered by
+path removal by bringing down a link required by that path which is not
+adjacent to the router being checked. This is important because when
+bringing down adjacent links, the kernel might remove the nexthops itself
+without ospf6d having to do anything.
-Useful as a regression test for #9720.
+Useful as a regression test for #9720 and #15777.
Topology:
- .
- Area 0 . Area 1
- .
- -- R2 -- . ---- R6
- / \ ./
-R1 -- R3 -- R5 ---- R7 Area 1
- \ / \\ ..............
- -- R4 -- \--- R8 Area 0
- \
- -- R9
-
-We check routes on R1, primarily those towards R6/7/8/9. Those to R6/7 are
-inter-area routes with R5 being ABR, those to R8/9 are intra-area routes
-and are used for reference. R6/R8 announce external routes, R7/R9 announce
-internal routes.
+ .
+ Area 0 . Area 1
+ .
+ -- R2 ------ R5 -----
+ / .\ \
+ / . | \
+R1 --- R3 ------ R6 ------ R7
+ \ / |. |
+ \ / |. |
+ -- R4 ---- |. |
+ / ./
+ R8 --
+ .
+
+We check routes on R1, primarily those towards R7/8. Those to R7 are
+inter-area routes with R5/6 being ABRs, those to R8 are intra-area routes
+and are used for reference. R7/R8 announce one internal and one external
+route each.
With all links up, we expect 3 ECMP paths and 3 nexthops on R1 towards each
-of R6/7/8/9. Then we bring down the R2-R5 link, causing only 2 remaining
-paths and 2 nexthops on R1. The test is successful if the number of nexthops
-for the routes on R1 is as expected.
+of R7/8. Then we bring down the R3-R6 link, causing only 2 remaining
+paths and 2 nexthops on R1. Then we bring down the R2-R5 link, causing only
+1 remaining path and 1 nexthop on R1.
+
+The test is successful if the number of nexthops for the routes on R1 is as
+expected.
"""
import os
@@ -65,20 +72,24 @@ pytestmark = [pytest.mark.ospf6d]
def build_topo(tgen):
"Build function"
- # Create 9 routers
- for routern in range(1, 10):
+ # Create 8 routers
+ for routern in range(1, 9):
tgen.add_router("r{}".format(routern))
-
tgen.gears["r1"].add_link(tgen.gears["r2"])
tgen.gears["r1"].add_link(tgen.gears["r3"])
tgen.gears["r1"].add_link(tgen.gears["r4"])
tgen.gears["r2"].add_link(tgen.gears["r5"])
- tgen.gears["r3"].add_link(tgen.gears["r5"])
- tgen.gears["r4"].add_link(tgen.gears["r5"])
- tgen.gears["r5"].add_link(tgen.gears["r6"])
+ tgen.gears["r3"].add_link(tgen.gears["r6"])
+ tgen.gears["r4"].add_link(tgen.gears["r6"])
tgen.gears["r5"].add_link(tgen.gears["r7"])
tgen.gears["r5"].add_link(tgen.gears["r8"])
- tgen.gears["r5"].add_link(tgen.gears["r9"])
+ tgen.gears["r6"].add_link(tgen.gears["r7"])
+ tgen.gears["r6"].add_link(tgen.gears["r8"])
+ # Additional "loopback" interfaces. Not used for communication, just to
+ # hold an address we use to inject intra-/inter-area routes (the one on
+ # the real "lo" loopback is used for external routes).
+ tgen.gears["r7"].add_link(tgen.gears["r7"])
+ tgen.gears["r8"].add_link(tgen.gears["r8"])
def setup_module(mod):
@@ -131,20 +142,19 @@ def test_wait_protocol_convergence():
expect_neighbor_full("r2", "10.254.254.1")
expect_neighbor_full("r2", "10.254.254.5")
expect_neighbor_full("r3", "10.254.254.1")
- expect_neighbor_full("r3", "10.254.254.5")
+ expect_neighbor_full("r3", "10.254.254.6")
expect_neighbor_full("r4", "10.254.254.1")
- expect_neighbor_full("r4", "10.254.254.5")
+ expect_neighbor_full("r4", "10.254.254.6")
expect_neighbor_full("r5", "10.254.254.2")
- expect_neighbor_full("r5", "10.254.254.3")
- expect_neighbor_full("r5", "10.254.254.4")
- expect_neighbor_full("r5", "10.254.254.6")
expect_neighbor_full("r5", "10.254.254.7")
expect_neighbor_full("r5", "10.254.254.8")
- expect_neighbor_full("r5", "10.254.254.9")
- expect_neighbor_full("r6", "10.254.254.5")
+ expect_neighbor_full("r6", "10.254.254.3")
+ expect_neighbor_full("r6", "10.254.254.7")
+ expect_neighbor_full("r6", "10.254.254.8")
expect_neighbor_full("r7", "10.254.254.5")
+ expect_neighbor_full("r7", "10.254.254.6")
expect_neighbor_full("r8", "10.254.254.5")
- expect_neighbor_full("r9", "10.254.254.5")
+ expect_neighbor_full("r8", "10.254.254.6")
def test_ecmp_inter_area():
@@ -154,9 +164,16 @@ def test_ecmp_inter_area():
pytest.skip(tgen.errors)
def num_nexthops(router):
- routes = tgen.gears[router].vtysh_cmd("show ipv6 ospf6 route json", isjson=True)
- route_prefixes_infos = sorted(routes.get("routes", {}).items())
- return [len(ri.get("nextHops", [])) for rp, ri in route_prefixes_infos]
+ # Careful: "show ipv6 ospf6 route json" doesn't work here. It will
+ # only list one route type per prefix and that might not necessarily
+ # be the best/selected route. "show ipv6 route ospf6 json" only
+ # lists selected routes, so that's more useful in this case.
+ routes = tgen.gears[router].vtysh_cmd("show ipv6 route ospf6 json", isjson=True)
+ route_prefixes_infos = sorted(routes.items())
+ # Note: ri may contain one entry per routing protocol, but since
+ # we've explicitly requested only ospf6 above, we can count on ri[0]
+ # being the entry we're looking for.
+ return [ri[0]["internalNextHopActiveNum"] for rp, ri in route_prefixes_infos]
def expect_num_nexthops(router, expected_num_nexthops, count):
"Wait until number of nexthops for routes matches expectation"
@@ -174,14 +191,22 @@ def test_ecmp_inter_area():
), "'{}' wrong number of route nexthops".format(router)
# Check nexthops pre link-down
- expect_num_nexthops("r1", [1, 1, 1, 3, 3, 3, 3, 3, 3, 3], 4)
+ # tgen.mininet_cli()
+ expect_num_nexthops("r1", [1, 1, 1, 1, 2, 3, 3, 3, 3], 4)
+
+ logger.info("triggering R3-R6 link down")
+ tgen.gears["r3"].run("ip link set r3-eth1 down")
+
+ # tgen.mininet_cli()
+ # Check nexthops post link-down
+ expect_num_nexthops("r1", [1, 1, 1, 1, 1, 2, 2, 2, 2], 8)
- logger.info("triggering R2-R4 link down")
+ logger.info("triggering R2-R5 link down")
tgen.gears["r2"].run("ip link set r2-eth1 down")
# tgen.mininet_cli()
# Check nexthops post link-down
- expect_num_nexthops("r1", [1, 1, 1, 2, 2, 2, 2, 2, 2, 2], 8)
+ expect_num_nexthops("r1", [1, 1, 1, 1, 1, 1, 1, 1, 1], 8)
def teardown_module(_mod):
diff --git a/tests/topotests/ospf_basic_functionality/test_ospf_flood_reduction.py b/tests/topotests/ospf_basic_functionality/test_ospf_flood_reduction.py
index bd7db64..62b8212 100644
--- a/tests/topotests/ospf_basic_functionality/test_ospf_flood_reduction.py
+++ b/tests/topotests/ospf_basic_functionality/test_ospf_flood_reduction.py
@@ -183,7 +183,6 @@ def teardown_module(mod):
logger.info("=" * 40)
-
def red_static(dut, config=True):
"""Local def for Redstribute static routes inside ospf."""
global topo
@@ -367,7 +366,13 @@ def test_ospf_flood_red_tc1_p0(request):
},
}
result = verify_ospf_database(
- tgen, topo, dut, input_dict_db, lsatype="router", rid="100.1.1.0", expected=False
+ tgen,
+ topo,
+ dut,
+ input_dict_db,
+ lsatype="router",
+ rid="100.1.1.0",
+ expected=False,
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -573,7 +578,9 @@ def test_ospf_flood_red_tc2_p0(request):
result = verify_ospf_database(
tgen, topo, dut, input_dict_db, lsatype="router", rid=lsid
)
- assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
+ assert result is True, "Testcase {} : Failed \n Error: {}".format(
+ tc_name, result
+ )
step("Wait for 120 secs and verify that LSA's are not refreshed. ")
# get LSA age
@@ -636,7 +643,13 @@ def test_ospf_flood_red_tc2_p0(request):
},
}
result = verify_ospf_database(
- tgen, topo, dut, input_dict_db, lsatype="router", rid="100.1.1.0", expected=False
+ tgen,
+ topo,
+ dut,
+ input_dict_db,
+ lsatype="router",
+ rid="100.1.1.0",
+ expected=False,
)
assert result is not True, (
"Testcase {} : Failed \n "
@@ -815,7 +828,9 @@ def test_ospf_flood_red_tc3_p0(request):
result = verify_ospf_database(
tgen, topo, dut, input_dict_db, lsatype="router", rid=lsid
)
- assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
+ assert result is True, "Testcase {} : Failed \n Error: {}".format(
+ tc_name, result
+ )
step("Wait for 120 secs and verify that LSA's are not refreshed. ")
# get LSA age
@@ -1022,7 +1037,13 @@ def test_ospf_flood_red_tc3_p0(request):
},
}
result = verify_ospf_database(
- tgen, topo, dut, input_dict_db, lsatype="router", rid="100.1.1.0", expected=False
+ tgen,
+ topo,
+ dut,
+ input_dict_db,
+ lsatype="router",
+ rid="100.1.1.0",
+ expected=False,
)
assert result is not True, (
diff --git a/tests/topotests/ospf_basic_functionality/test_ospf_nssa.py b/tests/topotests/ospf_basic_functionality/test_ospf_nssa.py
index d669e21..4a40b3e 100644
--- a/tests/topotests/ospf_basic_functionality/test_ospf_nssa.py
+++ b/tests/topotests/ospf_basic_functionality/test_ospf_nssa.py
@@ -165,7 +165,7 @@ def test_ospf_learning_tc15_p0(request):
step("Verify that Type 3 summary LSA is originated for the same Area 0")
ip = topo["routers"]["r1"]["links"]["r3-link0"]["ipv4"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
dut = "r0"
input_dict = {
diff --git a/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py b/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py
index f0950a2..d169245 100644
--- a/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py
+++ b/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py
@@ -49,7 +49,7 @@ from lib.ospf import (
verify_ospf_interface,
)
-pytestmark = [pytest.mark.ospfd, pytest.mark.staticd]
+pytestmark = [pytest.mark.bgpd, pytest.mark.ospfd, pytest.mark.staticd]
# Global variables
@@ -177,7 +177,7 @@ def test_ospf_redistribution_tc5_p0(request):
step("verify intra area route is calculated for r0-r3 interface ip in R1")
ip = topo["routers"]["r0"]["links"]["r3"]["ipv4"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
nh = topo["routers"]["r0"]["links"]["r1"]["ipv4"].split("/")[0]
input_dict = {
"r1": {"static_routes": [{"network": ip_net, "no_of_ip": 1, "routeType": "N"}]}
@@ -301,7 +301,7 @@ def test_ospf_redistribution_tc6_p0(request):
step("verify intra area route is calculated for r0-r3 interface ip in R1")
ip = topo["routers"]["r0"]["links"]["r3"]["ipv4"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
nh = topo["routers"]["r0"]["links"]["r1"]["ipv4"].split("/")[0]
input_dict = {
"r1": {"static_routes": [{"network": ip_net, "no_of_ip": 1, "routeType": "N"}]}
diff --git a/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py b/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py
index 757d6fb..59afc7a 100644
--- a/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py
+++ b/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py
@@ -607,7 +607,7 @@ def test_ospf_show_p1(request):
"r0": {
"ospf": {
"ifUp": True,
- "ifFlags": "<UP,BROADCAST,RUNNING,MULTICAST>",
+ "ifFlags": "<UP,LOWER_UP,BROADCAST,RUNNING,MULTICAST>",
"ospfEnabled": True,
"ipAddressPrefixlen": 24,
"ospfIfType": "Broadcast",
@@ -634,7 +634,7 @@ def test_ospf_show_p1(request):
# show ip ospf route
ip = topo["routers"]["r0"]["links"]["r3"]["ipv4"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
nh = topo["routers"]["r0"]["links"]["r1"]["ipv4"].split("/")[0]
input_dict = {
"r1": {"static_routes": [{"network": ip_net, "no_of_ip": 1, "routeType": "N"}]}
diff --git a/tests/topotests/ospf_gr_helper/test_ospf_gr_helper2.py b/tests/topotests/ospf_gr_helper/test_ospf_gr_helper2.py
index 46c0da3..3468a65 100644
--- a/tests/topotests/ospf_gr_helper/test_ospf_gr_helper2.py
+++ b/tests/topotests/ospf_gr_helper/test_ospf_gr_helper2.py
@@ -190,8 +190,10 @@ def test_ospf_gr_helper_tc3_p1(request):
ospf_covergence is True
), "OSPF is not after reset config \n Error: {}".format(ospf_covergence)
- step("Configure DR priority 100 on R0 and clear ospf neighbors "
- "on all the routers.")
+ step(
+ "Configure DR priority 100 on R0 and clear ospf neighbors "
+ "on all the routers."
+ )
input_dict = {
"r0": {
diff --git a/tests/topotests/ospf_instance_redistribute/test_ospf_instance_redistribute.py b/tests/topotests/ospf_instance_redistribute/test_ospf_instance_redistribute.py
index 9dfe5e1..590b0d5 100644
--- a/tests/topotests/ospf_instance_redistribute/test_ospf_instance_redistribute.py
+++ b/tests/topotests/ospf_instance_redistribute/test_ospf_instance_redistribute.py
@@ -64,16 +64,9 @@ def setup_module(module):
# This is a sample of configuration loading.
r1 = tgen.gears["r1"]
- r1.load_config(
- TopoRouter.RD_ZEBRA, os.path.join(CWD, "r1/zebra.conf")
- )
- r1.load_config(
- TopoRouter.RD_OSPF, os.path.join(CWD, "r1/ospfd-3.conf"),
- "-n 3"
- )
- r1.load_config(
- TopoRouter.RD_SHARP, os.path.join(CWD, "r1/sharpd.conf")
- )
+ r1.load_config(TopoRouter.RD_ZEBRA, os.path.join(CWD, "r1/zebra.conf"))
+ r1.load_config(TopoRouter.RD_OSPF, os.path.join(CWD, "r1/ospfd-3.conf"), "-n 3")
+ r1.load_config(TopoRouter.RD_SHARP, os.path.join(CWD, "r1/sharpd.conf"))
tgen.start_router()
@@ -103,13 +96,15 @@ def test_install_sharp_instance_routes():
expected = json.loads(open(json_file).read())
test_func = partial(
- topotest.router_json_cmp, r1, "show ip route summ json", expected)
+ topotest.router_json_cmp, r1, "show ip route summ json", expected
+ )
logger.info("Ensuring that they exist in the rib/fib")
_, result = topotest.run_and_expect(test_func, None, count=10, wait=1)
assertmsg = '"r1" sharp routes are not installed'
assert result is None, assertmsg
+
def test_ospf_instance_redistribute():
tgen = get_topogen()
@@ -124,7 +119,8 @@ def test_ospf_instance_redistribute():
expected = json.loads(open(json_file).read())
test_func = partial(
- topotest.router_json_cmp, r1, "show ip ospf 3 data json", expected)
+ topotest.router_json_cmp, r1, "show ip ospf 3 data json", expected
+ )
_, result = topotest.run_and_expect(test_func, None, count=10, wait=1)
assertmsg = '"r1" ospf instance 3 does not have the proper redistributed routes'
@@ -139,7 +135,8 @@ def test_ospf_instance_redistribute():
expected = json.loads(open(json_file).read())
test_func = partial(
- topotest.router_json_cmp, r1, "show ip ospf 3 data json", expected)
+ topotest.router_json_cmp, r1, "show ip ospf 3 data json", expected
+ )
_, result = topotest.run_and_expect(test_func, None, count=10, wait=1)
assertmsg = '"r1" ospf instance 3 does not have the proper redistributed routes'
@@ -161,15 +158,14 @@ def test_ospf_instance_default_information():
expected = json.loads(open(json_file).read())
test_func = partial(
- topotest.router_json_cmp, r1, "show ip ospf 3 data json", expected)
+ topotest.router_json_cmp, r1, "show ip ospf 3 data json", expected
+ )
_, result = topotest.run_and_expect(test_func, None, count=10, wait=1)
assertmsg = '"r1" ospf instance 3 does not properly redistribute the default route'
assert result is None, assertmsg
-
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
-
diff --git a/tests/topotests/ospf_metric_propagation/r1/frr.conf b/tests/topotests/ospf_metric_propagation/r1/frr.conf
index 8523049..4966e6a 100644
--- a/tests/topotests/ospf_metric_propagation/r1/frr.conf
+++ b/tests/topotests/ospf_metric_propagation/r1/frr.conf
@@ -8,18 +8,18 @@ interface r1-eth0
ip address 10.0.1.1/24
ip ospf cost 100
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface r1-eth1 vrf blue
ip address 10.0.10.1/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
!
interface r1-eth2 vrf green
ip address 10.0.91.1/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
!
router ospf
diff --git a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-1.json b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-1.json
index 4f1ced8..2392b40 100644
--- a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-1.json
+++ b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-1.json
@@ -2,32 +2,15 @@
"10.0.94.0/24":[
{
"prefix":"10.0.94.0/24",
- "prefixLen":24,
"protocol":"bgp",
"vrfName":"green",
- "selected":true,
- "destSelected":true,
- "distance":20,
"metric":34,
"installed":true,
- "table":12,
- "internalStatus":16,
- "internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
- "nexthopGroupId":"*",
- "installedNexthopGroupId":"*",
- "uptime":"*",
"nexthops":[
{
- "flags":3,
- "fib":true,
"ip":"10.0.10.5",
- "afi":"ipv4",
"interfaceName":"r1-eth1",
- "vrf":"blue",
- "active":true,
- "weight":1
+ "vrf":"blue"
}
]
}
diff --git a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-2.json b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-2.json
index 882d3ca..9a3d3d8 100644
--- a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-2.json
+++ b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-2.json
@@ -2,32 +2,15 @@
"10.0.94.0/24":[
{
"prefix":"10.0.94.0/24",
- "prefixLen":24,
"protocol":"bgp",
"vrfName":"green",
- "selected":true,
- "destSelected":true,
- "distance":20,
"metric":136,
"installed":true,
- "table":12,
- "internalStatus":16,
- "internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
- "nexthopGroupId":"*",
- "installedNexthopGroupId":"*",
- "uptime":"*",
"nexthops":[
{
- "flags":3,
- "fib":true,
"ip":"10.0.1.2",
- "afi":"ipv4",
"interfaceName":"r1-eth0",
- "vrf":"default",
- "active":true,
- "weight":1
+ "vrf":"default"
}
]
}
diff --git a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-3.json b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-3.json
index cd52845..5f0331f 100644
--- a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-3.json
+++ b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-3.json
@@ -2,32 +2,15 @@
"10.0.94.0/24":[
{
"prefix":"10.0.94.0/24",
- "prefixLen":24,
"protocol":"bgp",
"vrfName":"green",
- "selected":true,
- "destSelected":true,
- "distance":20,
"metric":1138,
"installed":true,
- "table":12,
- "internalStatus":16,
- "internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
- "nexthopGroupId":"*",
- "installedNexthopGroupId":"*",
- "uptime":"*",
"nexthops":[
{
- "flags":3,
- "fib":true,
"ip":"10.0.1.2",
- "afi":"ipv4",
"interfaceName":"r1-eth0",
- "vrf":"default",
- "active":true,
- "weight":1
+ "vrf":"default"
}
]
}
diff --git a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-4.json b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-4.json
index 133f375..f312291 100644
--- a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-4.json
+++ b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-4.json
@@ -2,32 +2,15 @@
"10.0.94.0/24":[
{
"prefix":"10.0.94.0/24",
- "prefixLen":24,
"protocol":"bgp",
"vrfName":"green",
- "selected":true,
- "destSelected":true,
- "distance":20,
"metric":1218,
"installed":true,
- "table":12,
- "internalStatus":16,
- "internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
- "nexthopGroupId":"*",
- "installedNexthopGroupId":"*",
- "uptime":"*",
"nexthops":[
{
- "flags":3,
- "fib":true,
"ip":"10.0.1.2",
- "afi":"ipv4",
"interfaceName":"r1-eth0",
- "vrf":"default",
- "active":true,
- "weight":1
+ "vrf":"default"
}
]
}
diff --git a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-5.json b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-5.json
index 5d80509..e88c037 100644
--- a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-5.json
+++ b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-5.json
@@ -2,32 +2,15 @@
"10.0.94.0/24":[
{
"prefix":"10.0.94.0/24",
- "prefixLen":24,
"protocol":"bgp",
"vrfName":"green",
- "selected":true,
- "destSelected":true,
- "distance":20,
"metric":238,
"installed":true,
- "table":12,
- "internalStatus":16,
- "internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
- "nexthopGroupId":"*",
- "installedNexthopGroupId":"*",
- "uptime":"*",
"nexthops":[
{
- "flags":3,
- "fib":true,
"ip":"10.0.1.2",
- "afi":"ipv4",
"interfaceName":"r1-eth0",
- "vrf":"default",
- "active":true,
- "weight":1
+ "vrf":"default"
}
]
}
diff --git a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-6.json b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-6.json
index 1b59707..f1fec86 100644
--- a/tests/topotests/ospf_metric_propagation/r1/show_ip_route-6.json
+++ b/tests/topotests/ospf_metric_propagation/r1/show_ip_route-6.json
@@ -2,32 +2,15 @@
"10.0.94.0/24":[
{
"prefix":"10.0.94.0/24",
- "prefixLen":24,
"protocol":"bgp",
"vrfName":"green",
- "selected":true,
- "destSelected":true,
- "distance":20,
"metric":136,
"installed":true,
- "table":12,
- "internalStatus":16,
- "internalFlags":8,
- "internalNextHopNum":1,
- "internalNextHopActiveNum":1,
- "nexthopGroupId":"*",
- "installedNexthopGroupId":"*",
- "uptime":"*",
"nexthops":[
{
- "flags":3,
- "fib":true,
"ip":"10.0.10.5",
- "afi":"ipv4",
"interfaceName":"r1-eth1",
- "vrf":"blue",
- "active":true,
- "weight":1
+ "vrf":"blue"
}
]
}
diff --git a/tests/topotests/ospf_metric_propagation/r2/frr.conf b/tests/topotests/ospf_metric_propagation/r2/frr.conf
index e67a374..0ac5001 100644
--- a/tests/topotests/ospf_metric_propagation/r2/frr.conf
+++ b/tests/topotests/ospf_metric_propagation/r2/frr.conf
@@ -8,18 +8,18 @@ interface r2-eth0
ip address 10.0.1.2/24
ip ospf cost 100
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface r2-eth1 vrf blue
ip address 10.0.20.2/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface r2-eth2 vrf green
ip address 10.0.70.2/24
ip ospf cost 1000
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
router ospf
ospf router-id 10.0.255.2
diff --git a/tests/topotests/ospf_metric_propagation/r3/frr.conf b/tests/topotests/ospf_metric_propagation/r3/frr.conf
index 175851d..0859173 100644
--- a/tests/topotests/ospf_metric_propagation/r3/frr.conf
+++ b/tests/topotests/ospf_metric_propagation/r3/frr.conf
@@ -8,18 +8,18 @@ interface r3-eth0
ip address 10.0.3.3/24
ip ospf cost 100
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface r3-eth1 vrf blue
ip address 10.0.30.3/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface r3-eth2 vrf green
ip address 10.0.80.3/24
ip ospf cost 1000
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
router ospf
ospf router-id 10.0.255.3
diff --git a/tests/topotests/ospf_metric_propagation/r4/frr.conf b/tests/topotests/ospf_metric_propagation/r4/frr.conf
index 70a47e3..743da27 100644
--- a/tests/topotests/ospf_metric_propagation/r4/frr.conf
+++ b/tests/topotests/ospf_metric_propagation/r4/frr.conf
@@ -8,17 +8,17 @@ interface r4-eth0
ip address 10.0.3.4/24
ip ospf cost 100
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface r4-eth1 vrf blue
ip address 10.0.40.4/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface r4-eth2 vrf green
ip address 10.0.94.4/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
router ospf
ospf router-id 10.0.255.4
diff --git a/tests/topotests/ospf_metric_propagation/ra/frr.conf b/tests/topotests/ospf_metric_propagation/ra/frr.conf
index 7be9e5c..2434fae 100644
--- a/tests/topotests/ospf_metric_propagation/ra/frr.conf
+++ b/tests/topotests/ospf_metric_propagation/ra/frr.conf
@@ -7,17 +7,17 @@ ip forwarding
interface ra-eth0
ip address 10.0.50.5/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface ra-eth1
ip address 10.0.10.5/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface ra-eth2
ip address 10.0.20.5/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
router ospf
ospf router-id 10.0.255.5
diff --git a/tests/topotests/ospf_metric_propagation/rb/frr.conf b/tests/topotests/ospf_metric_propagation/rb/frr.conf
index a7dbf82..b83532a 100644
--- a/tests/topotests/ospf_metric_propagation/rb/frr.conf
+++ b/tests/topotests/ospf_metric_propagation/rb/frr.conf
@@ -7,17 +7,17 @@ ip forwarding
interface rb-eth0
ip address 10.0.50.6/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface rb-eth1
ip address 10.0.30.6/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface rb-eth2
ip address 10.0.40.6/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
router ospf
ospf router-id 10.0.255.6
diff --git a/tests/topotests/ospf_metric_propagation/rc/frr.conf b/tests/topotests/ospf_metric_propagation/rc/frr.conf
index f5a2ed7..dd8077c 100644
--- a/tests/topotests/ospf_metric_propagation/rc/frr.conf
+++ b/tests/topotests/ospf_metric_propagation/rc/frr.conf
@@ -7,12 +7,12 @@ ip forwarding
interface rc-eth0
ip address 10.0.70.7/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
interface rc-eth1
ip address 10.0.80.7/24
ip ospf hello-interval 1
- ip ospf dead-interval 30
+ ip ospf dead-interval 40
!
router ospf
ospf router-id 10.0.255.7
diff --git a/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py b/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py
index 085eb1f..ea96265 100644
--- a/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py
+++ b/tests/topotests/ospf_metric_propagation/test_ospf_metric_propagation.py
@@ -283,7 +283,7 @@ def test_link_1_2_3_4_down():
assert result is None, assertmsg
-def test_link_1_2_4_down():
+def test_link_1_2_4_down_3_up():
"Test path R1 -> R2 -> Rc -> R3 -> R4"
tgen = get_topogen()
@@ -305,7 +305,7 @@ def test_link_1_2_4_down():
assert result is None, assertmsg
-def test_link_1_4_down():
+def test_link_1_4_down_2_up():
"Test path R1 -> R2 -> Ra -> Rb -> R3 -> R4"
tgen = get_topogen()
@@ -321,13 +321,13 @@ def test_link_1_4_down():
test_func = partial(
topotest.router_json_cmp, r1, "show ip route vrf green 10.0.94.2 json", expected
)
- _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ _, result = topotest.run_and_expect(test_func, None, count=120, wait=2)
assertmsg = "r1 JSON output mismatches"
assert result is None, assertmsg
-def test_link_4_down():
+def test_link_4_down_1_up():
"Test path R1 -> Ra -> Rb -> R3 -> R4"
tgen = get_topogen()
@@ -343,7 +343,7 @@ def test_link_4_down():
test_func = partial(
topotest.router_json_cmp, r1, "show ip route vrf green 10.0.94.2 json", expected
)
- _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ _, result = topotest.run_and_expect(test_func, None, count=120, wait=2)
assertmsg = "r1 JSON output mismatches"
assert result is None, assertmsg
@@ -365,7 +365,7 @@ def test_link_1_2_3_4_up():
test_func = partial(
topotest.router_json_cmp, r1, "show ip route vrf green 10.0.94.2 json", expected
)
- _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ _, result = topotest.run_and_expect(test_func, None, count=120, wait=2)
assertmsg = "r1 JSON output mismatches"
assert result is None, assertmsg
diff --git a/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py b/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py
index 792304e..ee0a0f6 100644
--- a/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py
+++ b/tests/topotests/ospf_multi_vrf_bgp_route_leak/test_ospf_multi_vrf_bgp_route_leak.py
@@ -182,9 +182,7 @@ def test_ospf_convergence():
"show ip ospf vrf {} route".format(vrf),
expected,
)
- result, diff = topotest.run_and_expect(
- test_func, "", count=80, wait=1
- )
+ result, diff = topotest.run_and_expect(test_func, "", count=80, wait=1)
assertmsg = "OSPF did not converge on {}:\n{}".format(rname, diff)
assert result, assertmsg
@@ -207,9 +205,7 @@ def test_ospf_kernel_route():
test_func = partial(
compare_show_ip_route_vrf, router.name, expected, vrf
)
- result, diff = topotest.run_and_expect(
- test_func, "", count=80, wait=1
- )
+ result, diff = topotest.run_and_expect(test_func, "", count=80, wait=1)
assertmsg = 'OSPF IPv4 route mismatch in router "{}": {}'.format(
router.name, diff
)
diff --git a/tests/topotests/ospf_nssa_topo1/test_ospf_nssa_topo1.py b/tests/topotests/ospf_nssa_topo1/test_ospf_nssa_topo1.py
index 432ddf0..d8cd132 100644
--- a/tests/topotests/ospf_nssa_topo1/test_ospf_nssa_topo1.py
+++ b/tests/topotests/ospf_nssa_topo1/test_ospf_nssa_topo1.py
@@ -199,9 +199,7 @@ def test_rib_step3():
pytest.skip(tgen.errors)
logger.info("Removing NSSA default on rt4")
- tgen.net["rt3"].cmd(
- 'vtysh -c "conf t" -c "router ospf" -c "area 1 nssa"'
- )
+ tgen.net["rt3"].cmd('vtysh -c "conf t" -c "router ospf" -c "area 1 nssa"')
for rname in ["rt1", "rt2", "rt3", "rt4"]:
router_compare_json_output(
diff --git a/tests/topotests/ospf_p2mp/r1/frr-p2mp-non-broadcast.conf b/tests/topotests/ospf_p2mp/r1/frr-p2mp-non-broadcast.conf
new file mode 100644
index 0000000..ca84349
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r1/frr-p2mp-non-broadcast.conf
@@ -0,0 +1,26 @@
+!
+hostname r1
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r1-eth0
+ ip address 10.1.0.1/24
+ ip ospf network point-to-multipoint non-broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+interface r1-eth1
+ ip address 10.1.1.1/24
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+router ospf
+ ospf router-id 1.1.1.1
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.1.0/24 area 0
+ neighbor 10.1.0.2 poll-interval 5
+ neighbor 10.1.0.3 poll-interval 5
+ neighbor 10.1.0.4 poll-interval 5
+!
diff --git a/tests/topotests/ospf_p2mp/r1/frr-p2mp.conf b/tests/topotests/ospf_p2mp/r1/frr-p2mp.conf
new file mode 100644
index 0000000..cb4538c
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r1/frr-p2mp.conf
@@ -0,0 +1,23 @@
+!
+hostname r1
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r1-eth0
+ ip address 10.1.0.1/24
+ ip ospf network point-to-multipoint
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+interface r1-eth1
+ ip address 10.1.1.1/24
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+router ospf
+ ospf router-id 1.1.1.1
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.1.0/24 area 0
+!
diff --git a/tests/topotests/ospf_p2mp/r2/frr-p2mp-non-broadcast.conf b/tests/topotests/ospf_p2mp/r2/frr-p2mp-non-broadcast.conf
new file mode 100644
index 0000000..6e26897
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r2/frr-p2mp-non-broadcast.conf
@@ -0,0 +1,29 @@
+!
+hostname r2
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r2-eth0
+ ip address 10.1.0.2/24
+ ip ospf network point-to-multipoint non-broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+interface r2-eth1
+ ip address 10.1.2.2/24
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+!
+!
+router ospf
+ ospf router-id 2.2.2.2
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.2.0/24 area 0
+ neighbor 10.1.0.1 poll-interval 5
+ neighbor 10.1.0.3 poll-interval 5
+ neighbor 10.1.0.4 poll-interval 5
+!
diff --git a/tests/topotests/ospf_p2mp/r2/frr-p2mp.conf b/tests/topotests/ospf_p2mp/r2/frr-p2mp.conf
new file mode 100644
index 0000000..0ca8aec
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r2/frr-p2mp.conf
@@ -0,0 +1,26 @@
+!
+hostname r2
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r2-eth0
+ ip address 10.1.0.2/24
+ ip ospf network point-to-multipoint
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+interface r2-eth1
+ ip address 10.1.2.2/24
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+!
+!
+router ospf
+ ospf router-id 2.2.2.2
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.2.0/24 area 0
+!
diff --git a/tests/topotests/ospf_p2mp/r3/frr-p2mp-non-broadcast.conf b/tests/topotests/ospf_p2mp/r3/frr-p2mp-non-broadcast.conf
new file mode 100644
index 0000000..a69e055
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r3/frr-p2mp-non-broadcast.conf
@@ -0,0 +1,28 @@
+!
+hostname r3
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r3-eth0
+ ip address 10.1.0.3/24
+ ip ospf network point-to-multipoint non-broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+interface r3-eth1
+ ip address 10.1.3.3/24
+ ip ospf network broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+router ospf
+ ospf router-id 3.3.3.3
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.3.0/24 area 0
+ neighbor 10.1.0.1 poll-interval 5
+ neighbor 10.1.0.2 poll-interval 5
+ neighbor 10.1.0.4 poll-interval 5
diff --git a/tests/topotests/ospf_p2mp/r3/frr-p2mp.conf b/tests/topotests/ospf_p2mp/r3/frr-p2mp.conf
new file mode 100644
index 0000000..41ea70d
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r3/frr-p2mp.conf
@@ -0,0 +1,25 @@
+!
+hostname r3
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r3-eth0
+ ip address 10.1.0.3/24
+ ip ospf network point-to-multipoint
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+interface r3-eth1
+ ip address 10.1.3.3/24
+ ip ospf network broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+router ospf
+ ospf router-id 3.3.3.3
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.3.0/24 area 0
diff --git a/tests/topotests/ospf_p2mp/r4/frr-p2mp-non-broadcast.conf b/tests/topotests/ospf_p2mp/r4/frr-p2mp-non-broadcast.conf
new file mode 100644
index 0000000..1b83885
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r4/frr-p2mp-non-broadcast.conf
@@ -0,0 +1,28 @@
+!
+hostname r4
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r4-eth0
+ ip address 10.1.0.4/24
+ ip ospf network point-to-multipoint non-broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+interface r4-eth1
+ ip address 10.1.4.4/24
+ ip ospf network broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+router ospf
+ ospf router-id 4.4.4.4
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.4.0/24 area 0
+ neighbor 10.1.0.1 poll-interval 5
+ neighbor 10.1.0.2 poll-interval 5
+ neighbor 10.1.0.3 poll-interval 5
diff --git a/tests/topotests/ospf_p2mp/r4/frr-p2mp.conf b/tests/topotests/ospf_p2mp/r4/frr-p2mp.conf
new file mode 100644
index 0000000..21fa9c7
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/r4/frr-p2mp.conf
@@ -0,0 +1,25 @@
+!
+hostname r4
+password zebra
+log file /tmp/r1-frr.log
+ip forwarding
+!
+interface r4-eth0
+ ip address 10.1.0.4/24
+ ip ospf network point-to-multipoint
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+interface r4-eth1
+ ip address 10.1.4.4/24
+ ip ospf network broadcast
+ ip ospf hello-interval 1
+ ip ospf dead-interval 30
+!
+!
+router ospf
+ ospf router-id 4.4.4.4
+ distance 20
+ network 10.1.0.0/24 area 0
+ network 10.1.4.0/24 area 0
diff --git a/tests/topotests/ospf_p2mp/test_ospf_p2mp_broadcast.py b/tests/topotests/ospf_p2mp/test_ospf_p2mp_broadcast.py
new file mode 100644
index 0000000..1f0f879
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/test_ospf_p2mp_broadcast.py
@@ -0,0 +1,472 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+#
+# test_ospf_prefix_p2mp_broadcast.py
+#
+# Copyright (c) 2024 LabN Consulting
+# Acee Lindem
+#
+
+import os
+import sys
+import json
+from time import sleep
+from functools import partial
+import pytest
+
+# 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.common_config import (
+ run_frr_cmd,
+ shutdown_bringup_interface,
+ start_router_daemons,
+ step,
+)
+
+
+"""
+test_ospf_p2mp_broadcast.py: Test OSPF Point-to-multipoint
+"""
+
+TOPOLOGY = """
+ +-----+ +-----+
+10.1.1.0/24 | r1 | | r2 | 10.1.2.0/24
+ -----------+ | | +----------
+ +--+--+ +--+--+
+ | 10.1.0.0/24 |
+ | +-------+ |
+ +---- | |-----+
+ | P2MP |
+ +---- | |-----+
+ | +-------+ |
+ | |
+ | |
+ +--+--+ +-+---+
+10.1.3.0/24 | r3 | | r4 | 10.1.4.0/24
+ -----------+ | | +----------
+ +-----+ +-----+
+
+
+"""
+
+# Save the Current Working Directory to find configuration files.
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# Required to instantiate the topology builder class.
+
+pytestmark = [pytest.mark.ospfd, pytest.mark.bgpd]
+
+
+def build_topo(tgen):
+ "Build function"
+
+ # Create 4 routers
+ tgen.add_router("r1")
+ tgen.add_router("r2")
+ tgen.add_router("r3")
+ tgen.add_router("r4")
+
+ # Interconect them all to the P2MP network
+ switch = tgen.add_switch("s0-p2mp")
+ switch.add_link(tgen.gears["r1"])
+ switch.add_link(tgen.gears["r2"])
+ switch.add_link(tgen.gears["r3"])
+ switch.add_link(tgen.gears["r4"])
+
+ # Add standalone network to router 1
+ switch = tgen.add_switch("s-r1-1")
+ switch.add_link(tgen.gears["r1"])
+
+ # Add standalone network to router 2
+ switch = tgen.add_switch("s-r2-1")
+ switch.add_link(tgen.gears["r2"])
+
+ # Add standalone network to router 3
+ switch = tgen.add_switch("s-r3-1")
+ switch.add_link(tgen.gears["r3"])
+
+ # Add standalone network to router 4
+ switch = tgen.add_switch("s-r4-1")
+ switch.add_link(tgen.gears["r4"])
+
+
+def setup_module(mod):
+ logger.info("OSPF Point-to-MultiPoint:\n {}".format(TOPOLOGY))
+
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ # Starting Routers
+ router_list = tgen.routers()
+
+ for rname, router in router_list.items():
+ logger.info("Loading router %s" % rname)
+ router.load_frr_config(os.path.join(CWD, "{}/frr-p2mp.conf".format(rname)))
+
+ # Initialize all routers.
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ "Teardown the pytest environment"
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def verify_p2mp_interface(tgen, router, nbr_cnt, nbr_adj_cnt, nbr_filter):
+ "Verify the P2MP Configuration and interface settings"
+
+ topo_router = tgen.gears[router]
+
+ step("Test running configuration for P2MP configuration")
+ rc = 0
+ rc, _, _ = tgen.net[router].cmd_status(
+ "show running ospfd | grep 'ip ospf network point-to-multipoint'", warn=False
+ )
+ assertmsg = (
+ "'ip ospf network point-to-multipoint' applied, but not present in "
+ + router
+ + "configuration"
+ )
+ assert rc, assertmsg
+
+ step("Test OSPF interface for P2MP settings")
+ input_dict = {
+ "interfaces": {
+ "r1-eth0": {
+ "ospfEnabled": True,
+ "interfaceIp": {
+ "10.1.0.1": {
+ "ipAddress": "10.1.0.1",
+ "ipAddressPrefixlen": 24,
+ "ospfIfType": "Broadcast",
+ "routerId": "1.1.1.1",
+ "networkType": "POINTOMULTIPOINT",
+ "cost": 10,
+ "state": "Point-To-Point",
+ "nbrCount": nbr_cnt,
+ "nbrAdjacentCount": nbr_adj_cnt,
+ "prefixSuppression": False,
+ "p2mpDelayReflood": False,
+ "nbrFilterPrefixList": nbr_filter,
+ }
+ },
+ "ipAddress": "10.1.0.1",
+ "ipAddressPrefixlen": 24,
+ "ospfIfType": "Broadcast",
+ "area": "0.0.0.0",
+ "routerId": "1.1.1.1",
+ "networkType": "POINTOMULTIPOINT",
+ "cost": 10,
+ "state": "Point-To-Point",
+ "opaqueCapable": True,
+ "nbrCount": nbr_cnt,
+ "nbrAdjacentCount": nbr_adj_cnt,
+ "prefixSuppression": False,
+ "p2mpDelayReflood": False,
+ "nbrFilterPrefixList": nbr_filter,
+ }
+ }
+ }
+ test_func = partial(
+ topotest.router_json_cmp,
+ topo_router,
+ "show ip ospf interface r1-eth0 json",
+ input_dict,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = "P2MP Interface Mismatch on router r1"
+ assert result is None, assertmsg
+
+
+def verify_non_p2mp_interface(tgen):
+ "Verify the removal of P2MP Configuration and interface settings"
+ r1 = tgen.gears["r1"]
+
+ step("Test running configuration for removal of P2MP configuration")
+ rc = 0
+ rc, _, _ = tgen.net["r1"].cmd_status(
+ "show running ospfd | grep -q 'ip ospf network point-to-multipoint'", warn=False
+ )
+ assertmsg = "'ip ospf network point-to-multipoint' not applied, but present in r1 configuration"
+ assert rc, assertmsg
+
+ step("Test OSPF interface for default settings")
+ input_dict = {
+ "interfaces": {
+ "r1-eth0": {
+ "ospfEnabled": True,
+ "interfaceIp": {
+ "10.1.0.1": {
+ "ipAddress": "10.1.0.1",
+ "ipAddressPrefixlen": 24,
+ "ospfIfType": "Broadcast",
+ "routerId": "1.1.1.1",
+ "networkType": "BROADCAST",
+ "cost": 10,
+ "prefixSuppression": False,
+ }
+ },
+ "ipAddress": "10.1.0.1",
+ "ipAddressPrefixlen": 24,
+ "ospfIfType": "Broadcast",
+ "area": "0.0.0.0",
+ "routerId": "1.1.1.1",
+ "networkType": "BROADCAST",
+ "cost": 10,
+ "opaqueCapable": True,
+ "prefixSuppression": False,
+ }
+ }
+ }
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show ip ospf interface r1-eth0 json", input_dict
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = "P2MP Interface Mismatch on router r1"
+ assert result is None, assertmsg
+
+
+def verify_p2mp_neighbor(tgen, router, neighbor, state, intf_addr, interface):
+ topo_router = tgen.gears[router]
+
+ step("Verify neighbor " + neighbor + " in " + state + " state")
+ input_dict = {
+ "default": {
+ neighbor: [
+ {
+ "nbrState": state,
+ "ifaceAddress": intf_addr,
+ "ifaceName": interface,
+ }
+ ],
+ }
+ }
+ test_func = partial(
+ topotest.router_json_cmp,
+ topo_router,
+ "show ip ospf neighbor " + neighbor + " json",
+ input_dict,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = "P2MP Neighbor " + neighbor + " not in " + state
+ assert result is None, assertmsg
+
+
+def verify_p2mp_neighbor_missing(tgen, router, neighbor):
+ topo_router = tgen.gears[router]
+
+ step("Verify neighbor " + neighbor + " missing")
+ input_dict = {"default": {}}
+ test_func = partial(
+ topotest.router_json_cmp,
+ topo_router,
+ "show ip ospf neighbor " + neighbor + " json",
+ input_dict,
+ True, # Require exact match for missing neighbor
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = "P2MP Neighbor " + neighbor + " not missing"
+ assert result is None, assertmsg
+
+
+def verify_p2mp_route(tgen, router, prefix, prefix_len, nexthop, interface):
+ topo_router = tgen.gears[router]
+
+ step("Verify router " + router + " p2mp route " + prefix + " installed")
+ input_dict = {
+ prefix: [
+ {
+ "prefix": prefix,
+ "prefixLen": prefix_len,
+ "protocol": "ospf",
+ "nexthops": [
+ {
+ "ip": nexthop,
+ "interfaceName": interface,
+ }
+ ],
+ }
+ ]
+ }
+ test_func = partial(
+ topotest.router_json_cmp,
+ topo_router,
+ "show ip route " + prefix + " json",
+ input_dict,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = prefix + " not installed on router " + router
+ assert result is None, assertmsg
+
+
+def test_p2mp_broadcast_interface():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip("Skipped because of router(s) failure")
+
+ step("Verify router r1 interface r1-eth0 p2mp configuration")
+ verify_p2mp_interface(tgen, "r1", 3, 3, "N/A")
+
+ step("Verify router r1 p2mp interface r1-eth0 neighbors")
+ verify_p2mp_neighbor(
+ tgen, "r1", "2.2.2.2", "Full/DROther", "10.1.0.2", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "3.3.3.3", "Full/DROther", "10.1.0.3", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "4.4.4.4", "Full/DROther", "10.1.0.4", "r1-eth0:10.1.0.1"
+ )
+
+ step("Verify router r1 p2mp routes installed")
+ verify_p2mp_route(tgen, "r1", "10.1.2.0/24", 24, "10.1.0.2", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.3.0/24", 24, "10.1.0.3", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.4.0/24", 24, "10.1.0.4", "r1-eth0")
+
+ step("Verify router r1 interface r1-eth0 p2mp configuration removal")
+ r1 = tgen.gears["r1"]
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nno ip ospf network point-to-multipoint")
+ verify_non_p2mp_interface(tgen)
+
+ step("Verify router r1 interface r1-eth0 p2mp configuration application")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nip ospf network point-to-multipoint")
+ verify_p2mp_interface(tgen, "r1", 3, 3, "N/A")
+
+ step("Verify restablishment of r1-eth0 p2mp neighbors")
+ verify_p2mp_neighbor(
+ tgen, "r1", "2.2.2.2", "Full/DROther", "10.1.0.2", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "3.3.3.3", "Full/DROther", "10.1.0.3", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "4.4.4.4", "Full/DROther", "10.1.0.4", "r1-eth0:10.1.0.1"
+ )
+
+ step("Verify router r1 p2mp routes reinstalled")
+ verify_p2mp_route(tgen, "r1", "10.1.2.0/24", 24, "10.1.0.2", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.3.0/24", 24, "10.1.0.3", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.4.0/24", 24, "10.1.0.4", "r1-eth0")
+
+
+def test_p2mp_broadcast_neighbor_filter():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip("Skipped because of router(s) failure")
+
+ step("Verify router r1 interface r1-eth0 p2mp configuration")
+ verify_p2mp_interface(tgen, "r1", 3, 3, "N/A")
+
+ step("Verify router r1 p2mp interface r1-eth0 neighbors")
+ verify_p2mp_neighbor(
+ tgen, "r1", "2.2.2.2", "Full/DROther", "10.1.0.2", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "3.3.3.3", "Full/DROther", "10.1.0.3", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "4.4.4.4", "Full/DROther", "10.1.0.4", "r1-eth0:10.1.0.1"
+ )
+
+ step("Add OSPF interface neighbor-filter to r1")
+ r1 = tgen.gears["r1"]
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nip ospf neighbor-filter nbr-filter")
+
+ step("Verify the R1 configuration of 'ip ospf neighbor-filter nbr-filter'")
+ neighbor_filter_cfg = (
+ tgen.net["r1"]
+ .cmd(
+ 'vtysh -c "show running ospfd" | grep "^ ip ospf neighbor-filter nbr-filter"'
+ )
+ .rstrip()
+ )
+ assertmsg = (
+ "'ip ospf neighbor-filter nbr-filter' applied, but not present in configuration"
+ )
+ assert neighbor_filter_cfg == " ip ospf neighbor-filter nbr-filter", assertmsg
+
+ step("Verify non-existent neighbor-filter is not applied to r1 interfaces")
+ verify_p2mp_interface(tgen, "r1", 3, 3, "N/A")
+
+ step("Add nbr-filter prefix-list configuration to r1")
+ r1.vtysh_cmd("conf t\nip prefix-list nbr-filter seq 200 permit any")
+
+ step(
+ "Verify neighbor-filter is now applied to r1 interface and neighbors still adjacent"
+ )
+ verify_p2mp_interface(tgen, "r1", 3, 3, "nbr-filter")
+
+ step("Add nbr-filter prefix-list configuration to block r4")
+ r1.vtysh_cmd("conf t\nip prefix-list nbr-filter seq 10 deny 10.1.0.4/32")
+
+ step(
+ "Verify neighbor-filter is now applied to r1 interface and r4 is no longer adjacent"
+ )
+ verify_p2mp_interface(tgen, "r1", 2, 2, "nbr-filter")
+ verify_p2mp_neighbor_missing(tgen, "r1", "4.4.4.4")
+
+ step("Verify route to r4 subnet is now through r2")
+ verify_p2mp_route(tgen, "r1", "10.1.4.0/24", 24, "10.1.0.2", "r1-eth0")
+
+ step("Add nbr-filter prefix-list configuration to block r2")
+ r1.vtysh_cmd("conf t\nip prefix-list nbr-filter seq 20 deny 10.1.0.2/32")
+
+ step(
+ "Verify neighbor-filter is now applied to r1 interface and r2 is no longer adjacent"
+ )
+ verify_p2mp_interface(tgen, "r1", 1, 1, "nbr-filter")
+ verify_p2mp_neighbor_missing(tgen, "r1", "2.2.2.2")
+
+ step("Verify route to r4 and r2 subnet are now through r3")
+ verify_p2mp_route(tgen, "r1", "10.1.2.0/24", 24, "10.1.0.3", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.4.0/24", 24, "10.1.0.3", "r1-eth0")
+
+ step("Remove neighbor filter configuration and verify")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nno ip ospf neighbor-filter")
+ rc, _, _ = tgen.net["r1"].cmd_status(
+ "show running ospfd | grep -q 'ip ospf neighbor-filter'", warn=False
+ )
+ assertmsg = "'ip ospf neighbor' not applied, but present in R1 configuration"
+ assert rc, assertmsg
+
+ step("Verify interface neighbor-filter is removed and neighbors present")
+ verify_p2mp_interface(tgen, "r1", 3, 3, "N/A")
+
+ step("Add neighbor filter configuration and verify neighbors are filtered")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nip ospf neighbor-filter nbr-filter")
+ verify_p2mp_interface(tgen, "r1", 1, 1, "nbr-filter")
+ verify_p2mp_neighbor_missing(tgen, "r1", "2.2.2.2")
+ verify_p2mp_neighbor_missing(tgen, "r1", "4.4.4.4")
+
+ step("Remove nbr-filter prefix-list configuration to block r2 and verify neighbor")
+ r1.vtysh_cmd("conf t\nno ip prefix-list nbr-filter seq 20")
+ verify_p2mp_interface(tgen, "r1", 2, 2, "nbr-filter")
+ verify_p2mp_neighbor(
+ tgen, "r1", "2.2.2.2", "Full/DROther", "10.1.0.2", "r1-eth0:10.1.0.1"
+ )
+
+ step("Delete nbr-filter prefix-list and verify neighbors are present")
+ r1.vtysh_cmd("conf t\nno ip prefix-list nbr-filter")
+ verify_p2mp_interface(tgen, "r1", 3, 3, "N/A")
+
+
+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/ospf_p2mp/test_ospf_p2mp_non_broadcast.py b/tests/topotests/ospf_p2mp/test_ospf_p2mp_non_broadcast.py
new file mode 100644
index 0000000..175dca7
--- /dev/null
+++ b/tests/topotests/ospf_p2mp/test_ospf_p2mp_non_broadcast.py
@@ -0,0 +1,467 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# test_ospf_prefix_p2mp_non_broadcast.py
+#
+# Copyright (c) 2024 LabN Consulting
+# Acee Lindem
+#
+
+import os
+import sys
+import json
+from time import sleep
+from functools import partial
+import pytest
+
+# 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.common_config import (
+ run_frr_cmd,
+ shutdown_bringup_interface,
+ start_router_daemons,
+ step,
+)
+
+
+"""
+test_ospf_p2mp_non_broadcast.py: Test OSPF Point-to-multipoint Non-Broadcast
+ Full Mesh
+"""
+
+TOPOLOGY = """
+ +-----+ +-----+
+10.1.1.0/24 | r1 | | r2 | 10.1.2.0/24
+ -----------+ | | +----------
+ +--+--+ +--+--+
+ | 10.1.0.0/24 |
+ | +-------+ |
+ +---- | |-----+
+ | P2MP |
+ +---- | |-----+
+ | +-------+ |
+ | |
+ | |
+ +--+--+ +-+---+
+10.1.3.0/24 | r3 | | r4 | 10.1.4.0/24
+ -----------+ | | +----------
+ +-----+ +-----+
+
+
+"""
+
+# Save the Current Working Directory to find configuration files.
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# Required to instantiate the topology builder class.
+
+pytestmark = [pytest.mark.ospfd, pytest.mark.bgpd]
+
+
+def build_topo(tgen):
+ "Build function"
+
+ # Create 4 routers
+ tgen.add_router("r1")
+ tgen.add_router("r2")
+ tgen.add_router("r3")
+ tgen.add_router("r4")
+
+ # Interconect them all to the P2MP network
+ switch = tgen.add_switch("s0-p2mp")
+ switch.add_link(tgen.gears["r1"])
+ switch.add_link(tgen.gears["r2"])
+ switch.add_link(tgen.gears["r3"])
+ switch.add_link(tgen.gears["r4"])
+
+ # Add standalone network to router 1
+ switch = tgen.add_switch("s-r1-1")
+ switch.add_link(tgen.gears["r1"])
+
+ # Add standalone network to router 2
+ switch = tgen.add_switch("s-r2-1")
+ switch.add_link(tgen.gears["r2"])
+
+ # Add standalone network to router 3
+ switch = tgen.add_switch("s-r3-1")
+ switch.add_link(tgen.gears["r3"])
+
+ # Add standalone network to router 4
+ switch = tgen.add_switch("s-r4-1")
+ switch.add_link(tgen.gears["r4"])
+
+
+def setup_module(mod):
+ logger.info("OSPF Point-to-MultiPoint Non-Broadcast:\n {}".format(TOPOLOGY))
+
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ # Starting Routers
+ router_list = tgen.routers()
+
+ for rname, router in router_list.items():
+ logger.info("Loading router %s" % rname)
+ router.load_frr_config(
+ os.path.join(CWD, "{}/frr-p2mp-non-broadcast.conf".format(rname))
+ )
+
+ # Initialize all routers.
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ "Teardown the pytest environment"
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def verify_p2mp_interface(tgen, router, nbr_cnt, nbr_adj_cnt, non_broadcast):
+ "Verify the P2MP Configuration and interface settings"
+
+ topo_router = tgen.gears[router]
+
+ step("Test running configuration for P2MP configuration")
+ rc = 0
+ rc, _, _ = tgen.net[router].cmd_status(
+ "show running ospfd | grep 'ip ospf network point-to-multipoint'", warn=False
+ )
+ assertmsg = (
+ "'ip ospf network point-to-multipoint' applied, but not present in "
+ + router
+ + "configuration"
+ )
+ assert rc, assertmsg
+
+ step("Test OSPF interface for P2MP settings")
+ input_dict = {
+ "interfaces": {
+ "r1-eth0": {
+ "ospfEnabled": True,
+ "interfaceIp": {
+ "10.1.0.1": {
+ "ipAddress": "10.1.0.1",
+ "ipAddressPrefixlen": 24,
+ "ospfIfType": "Broadcast",
+ "routerId": "1.1.1.1",
+ "networkType": "POINTOMULTIPOINT",
+ "cost": 10,
+ "state": "Point-To-Point",
+ "nbrCount": nbr_cnt,
+ "nbrAdjacentCount": nbr_adj_cnt,
+ "prefixSuppression": False,
+ "p2mpDelayReflood": False,
+ "p2mpNonBroadcast": non_broadcast,
+ }
+ },
+ "ipAddress": "10.1.0.1",
+ "ipAddressPrefixlen": 24,
+ "ospfIfType": "Broadcast",
+ "area": "0.0.0.0",
+ "routerId": "1.1.1.1",
+ "networkType": "POINTOMULTIPOINT",
+ "cost": 10,
+ "state": "Point-To-Point",
+ "opaqueCapable": True,
+ "nbrCount": nbr_cnt,
+ "nbrAdjacentCount": nbr_adj_cnt,
+ "prefixSuppression": False,
+ "p2mpDelayReflood": False,
+ "p2mpNonBroadcast": non_broadcast,
+ }
+ }
+ }
+ test_func = partial(
+ topotest.router_json_cmp,
+ topo_router,
+ "show ip ospf interface r1-eth0 json",
+ input_dict,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = "P2MP Interface Mismatch on router r1"
+ assert result is None, assertmsg
+
+
+def verify_p2mp_neighbor(tgen, router, neighbor, state, intf_addr, interface):
+ topo_router = tgen.gears[router]
+
+ step("Verify neighbor " + neighbor + " in " + state + " state")
+ input_dict = {
+ "default": {
+ neighbor: [
+ {
+ "nbrState": state,
+ "ifaceAddress": intf_addr,
+ "ifaceName": interface,
+ }
+ ],
+ }
+ }
+ test_func = partial(
+ topotest.router_json_cmp,
+ topo_router,
+ "show ip ospf neighbor " + neighbor + " json",
+ input_dict,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = "P2MP Neighbor " + neighbor + " not in " + state
+ assert result is None, assertmsg
+
+
+def verify_p2mp_route(tgen, router, prefix, prefix_len, nexthop, interface):
+ topo_router = tgen.gears[router]
+
+ step("Verify router " + router + " p2mp route " + prefix + " installed")
+ input_dict = {
+ prefix: [
+ {
+ "prefix": prefix,
+ "prefixLen": prefix_len,
+ "protocol": "ospf",
+ "nexthops": [
+ {
+ "ip": nexthop,
+ "interfaceName": interface,
+ }
+ ],
+ }
+ ]
+ }
+ test_func = partial(
+ topotest.router_json_cmp,
+ topo_router,
+ "show ip route " + prefix + " json",
+ input_dict,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = prefix + " not installed on router " + router
+ assert result is None, assertmsg
+
+
+def test_p2mp_non_broadcast_connectivity():
+ tgen = get_topogen()
+ r1 = tgen.gears["r1"]
+
+ if tgen.routers_have_failure():
+ pytest.skip("Skipped because of router(s) failure")
+
+ step("Verify router r1 interface OSPF point-to-multipoint non-broadcast interface")
+ verify_p2mp_interface(tgen, "r1", 3, 3, True)
+
+ step("Verify router r1 interface r1-eth0 p2mp non-broadcast configuration")
+ rc, _, _ = tgen.net["r1"].cmd_status(
+ "show running ospfd | grep -q 'ip ospf network point-to-multipoint non-broadcast'",
+ warn=False,
+ )
+ assertmsg = "'ip ospf network point-to-multipoint non-broadcast' applied, but not present in R1 configuration"
+ assert rc, assertmsg
+
+ step("Verify router r1 OSPF point-to-multipoint neighbors")
+ verify_p2mp_neighbor(
+ tgen, "r1", "2.2.2.2", "Full/DROther", "10.1.0.2", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "3.3.3.3", "Full/DROther", "10.1.0.3", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "4.4.4.4", "Full/DROther", "10.1.0.4", "r1-eth0:10.1.0.1"
+ )
+
+ step("Verify router r1 OSPF point-to-multipoint routes are installed")
+ verify_p2mp_route(tgen, "r1", "10.1.2.0/24", 24, "10.1.0.2", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.3.0/24", 24, "10.1.0.3", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.4.0/24", 24, "10.1.0.4", "r1-eth0")
+
+ step("Remove r1 interface r1-eth0 p2mp non-broadcast configuration")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nip ospf network point-to-multipoint")
+ rc, _, _ = tgen.net["r1"].cmd_status(
+ "show running ospfd | grep -q 'ip ospf network point-to-multipoint non-broadcast'",
+ warn=False,
+ )
+ assertmsg = "'ip ospf network point-to-multipoint non-broadcast' not applied, but present in r1 configuration"
+ assert rc, assertmsg
+
+ step("Verify router r1 interface OSPF point-to-multipoint broadcast interface")
+ verify_p2mp_interface(tgen, "r1", 3, 3, False)
+
+ step("Add r1 interface r1-eth0 p2mp non-broadcast configuration back")
+ r1.vtysh_cmd(
+ "conf t\ninterface r1-eth0\nip ospf network point-to-multipoint non-broadcast"
+ )
+ rc, _, _ = tgen.net["r1"].cmd_status(
+ "show running ospfd | grep 'ip ospf network point-to-multipoint non-broadcast'",
+ warn=False,
+ )
+ assertmsg = "'ip ospf netrwork point-to-multipoint non-broadcast' applied, but not present in R1 configuration"
+ assert rc, assertmsg
+
+ step("Verify router r1 interface OSPF point-to-multipoint non-broadcast interface")
+ verify_p2mp_interface(tgen, "r1", 3, 3, True)
+
+ step(
+ "Verify router r1 OSPF point-to-multipoint neighbors adjacencies restablished."
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "2.2.2.2", "Full/DROther", "10.1.0.2", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "3.3.3.3", "Full/DROther", "10.1.0.3", "r1-eth0:10.1.0.1"
+ )
+ verify_p2mp_neighbor(
+ tgen, "r1", "4.4.4.4", "Full/DROther", "10.1.0.4", "r1-eth0:10.1.0.1"
+ )
+
+
+def test_p2mp_non_broadcast_partial_mesh_connectivity():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip("Skipped because of router(s) failure")
+
+ """
+ test_ospf_p2mp_non_broadcast.py: Test OSPF Point-to-multipoint Non-Broadcast
+ Partial Mesh
+ """
+
+ TOPOLOGY = """
+ +-----+ +------+
+ 10.1.1.0/24 | r1 | | r4 | 10.1.4.0/24
+ -----------+ | | +----------
+ +-+---+ +--+-+-+
+ | P2MP |
+ | Non-Broadcast |
+ | 10.1.0.0/24 |
+ +-+---+ +-+---+
+ 10.1.2.0/24 | r2 | | r3 | 10.1.3.0/24
+ -----------+ +--------------+ +----------
+ +-----+ +-----+
+
+
+ """
+ logger.info("OSPF Point-to-MultiPoint Non-Broadcast:\n {}".format(TOPOLOGY))
+
+ step("Change configuration to a partial mesh")
+ step("Delete neighbors in full mesh")
+ r1 = tgen.gears["r1"]
+ r1.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.3")
+ r1.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.4")
+ r2 = tgen.gears["r2"]
+ r2.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.4")
+ r3 = tgen.gears["r3"]
+ r3.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.1")
+ r4 = tgen.gears["r4"]
+ r4.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.1")
+ r4.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.2")
+
+ step("Flap interfaces on P2MP network to avoid transients")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nshut")
+ r2.vtysh_cmd("conf t\ninterface r2-eth0\nshut")
+ r3.vtysh_cmd("conf t\ninterface r3-eth0\nshut")
+ r4.vtysh_cmd("conf t\ninterface r4-eth0\nshut")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nno shut")
+ r2.vtysh_cmd("conf t\ninterface r2-eth0\nno shut")
+ r3.vtysh_cmd("conf t\ninterface r3-eth0\nno shut")
+ r4.vtysh_cmd("conf t\ninterface r4-eth0\nno shut")
+
+ step("Verify router r1 interface OSPF point-to-multipoint non-broadcast interface")
+ verify_p2mp_interface(tgen, "r1", 1, 1, True)
+
+ step("Verify router r1 interface r1-eth0 p2mp neighbor")
+ verify_p2mp_neighbor(
+ tgen, "r1", "2.2.2.2", "Full/DROther", "10.1.0.2", "r1-eth0:10.1.0.1"
+ )
+
+ step("Verify router r1 p2mp routes are installed")
+ verify_p2mp_route(tgen, "r1", "10.1.2.0/24", 24, "10.1.0.2", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.3.0/24", 24, "10.1.0.2", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.4.0/24", 24, "10.1.0.2", "r1-eth0")
+
+ """
+ test_ospf_p2mp_non_broadcast.py: Test OSPF Point-to-multipoint Non-Broadcast
+ Modified Partial Mesh
+ """
+
+ TOPOLOGY = """
+ +-----+ +------+
+ 10.1.1.0/24 | r1 | | r4 | 10.1.4.0/24
+ -----------+ +-------------+ +----------
+ +-----+ +--+-+-+
+ P2MP |
+ Non-Broadcast |
+ 10.1.0.0/24 |
+ +-+---+ +-+---+
+ 10.1.2.0/24 | r2 | | r3 | 10.1.3.0/24
+ -----------+ +--------------+ +----------
+ +-----+ +-----+
+
+
+ """
+ logger.info("OSPF Point-to-MultiPoint Non-Broadcast:\n {}".format(TOPOLOGY))
+
+ step("Change configuration to a partial mesh")
+ step("Modify neighbors in partial mesh")
+ r1 = tgen.gears["r1"]
+ r1.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.2")
+ r1.vtysh_cmd("conf t\nrouter ospf\nneighbor 10.1.0.4 poll-interval 5")
+ r2 = tgen.gears["r2"]
+ r2.vtysh_cmd("conf t\nrouter ospf\nno neighbor 10.1.0.1")
+ r4 = tgen.gears["r4"]
+ r4.vtysh_cmd("conf t\nrouter ospf\nneighbor 10.1.0.1")
+
+ step("Flap interfaces on P2MP network to avoid transients")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nshut")
+ r2.vtysh_cmd("conf t\ninterface r2-eth0\nshut")
+ r3.vtysh_cmd("conf t\ninterface r3-eth0\nshut")
+ r4.vtysh_cmd("conf t\ninterface r4-eth0\nshut")
+ r1.vtysh_cmd("conf t\ninterface r1-eth0\nno shut")
+ r2.vtysh_cmd("conf t\ninterface r2-eth0\nno shut")
+ r3.vtysh_cmd("conf t\ninterface r3-eth0\nno shut")
+ r4.vtysh_cmd("conf t\ninterface r4-eth0\nno shut")
+
+ step("Verify router r1 interface r1-eth0")
+ step("Verify router r1 interface OSPF point-to-multipoint non-broadcast interface")
+ verify_p2mp_interface(tgen, "r1", 1, 1, True)
+
+ step("Verify router r1 interface r1-eth0 p2mp neighbor")
+ input_dict = {
+ "neighbors": {
+ "4.4.4.4": [
+ {
+ "nbrState": "Full/DROther",
+ "ifaceAddress": "10.1.0.4",
+ "ifaceName": "r1-eth0:10.1.0.1",
+ }
+ ],
+ }
+ }
+ test_func = partial(
+ topotest.router_json_cmp, r1, "show ip ospf neighbor json", input_dict
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assertmsg = "P2MP Non-Broadcast Neighbors not adjacent on router r1"
+ assert result is None, assertmsg
+
+ step("Verify router r1 interface r1-eth0 p2mp routes are installed")
+ verify_p2mp_route(tgen, "r1", "10.1.2.0/24", 24, "10.1.0.4", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.3.0/24", 24, "10.1.0.4", "r1-eth0")
+ verify_p2mp_route(tgen, "r1", "10.1.4.0/24", 24, "10.1.0.4", "r1-eth0")
+
+
+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/ospf_single_switch/r1_frr.conf b/tests/topotests/ospf_single_switch/r1_frr.conf
new file mode 100644
index 0000000..8fbb241
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r1_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r1
+ip forwarding
+!
+interface r1-eth0
+ ip address 203.0.113.1/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r1-eth1
+ ip address 10.0.1.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.1
+!
diff --git a/tests/topotests/ospf_single_switch/r2_frr.conf b/tests/topotests/ospf_single_switch/r2_frr.conf
new file mode 100644
index 0000000..ea75ad6
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r2_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r2
+ip forwarding
+!
+interface r2-eth0
+ ip address 203.0.113.2/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r2-eth1
+ ip address 10.0.2.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.2
+!
diff --git a/tests/topotests/ospf_single_switch/r3_frr.conf b/tests/topotests/ospf_single_switch/r3_frr.conf
new file mode 100644
index 0000000..e04e76e
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r3_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r3
+ip forwarding
+!
+interface r3-eth0
+ ip address 203.0.113.3/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r3-eth1
+ ip address 10.0.3.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.3
+!
diff --git a/tests/topotests/ospf_single_switch/r4_frr.conf b/tests/topotests/ospf_single_switch/r4_frr.conf
new file mode 100644
index 0000000..9f01158
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r4_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r4
+ip forwarding
+!
+interface r4-eth0
+ ip address 203.0.113.4/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r4-eth1
+ ip address 10.0.4.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.4
+!
diff --git a/tests/topotests/ospf_single_switch/r5_frr.conf b/tests/topotests/ospf_single_switch/r5_frr.conf
new file mode 100644
index 0000000..c9f3497
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r5_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r5
+ip forwarding
+!
+interface r5-eth0
+ ip address 203.0.113.5/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r5-eth1
+ ip address 10.0.5.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.5
+!
diff --git a/tests/topotests/ospf_single_switch/r6_frr.conf b/tests/topotests/ospf_single_switch/r6_frr.conf
new file mode 100644
index 0000000..ba4b0bd
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r6_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r6
+ip forwarding
+!
+interface r6-eth0
+ ip address 203.0.113.6/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r6-eth1
+ ip address 10.0.6.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.6
+!
diff --git a/tests/topotests/ospf_single_switch/r7_frr.conf b/tests/topotests/ospf_single_switch/r7_frr.conf
new file mode 100644
index 0000000..3b28381
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r7_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r7
+ip forwarding
+!
+interface r7-eth0
+ ip address 203.0.113.7/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r7-eth1
+ ip address 10.0.7.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.7
+!
diff --git a/tests/topotests/ospf_single_switch/r8_frr.conf b/tests/topotests/ospf_single_switch/r8_frr.conf
new file mode 100644
index 0000000..3b1b0e5
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/r8_frr.conf
@@ -0,0 +1,18 @@
+!
+hostname r8
+ip forwarding
+!
+interface r8-eth0
+ ip address 203.0.113.8/24
+ ip ospf network point-to-multipoint
+ ip ospf area 0.0.0.0
+ !ip ospf prefix-suppression
+!
+interface r8-eth1
+ ip address 10.0.8.1/24
+ ip ospf passive
+ ip ospf area 0.0.0.0
+!
+router ospf
+ ospf router-id 10.0.0.8
+!
diff --git a/tests/topotests/ospf_single_switch/test_ospf_single_switch.py b/tests/topotests/ospf_single_switch/test_ospf_single_switch.py
new file mode 100644
index 0000000..e53b5f5
--- /dev/null
+++ b/tests/topotests/ospf_single_switch/test_ospf_single_switch.py
@@ -0,0 +1,199 @@
+#!/usr/bin/env python
+# SPDX-License-Identifier: ISC
+
+#
+# Copyright (c) 2023 by
+# Adriano Marto Reis <adrianomarto@gmail.com>
+#
+
+import os
+import sys
+import json
+import subprocess
+from functools import partial
+import pytest
+
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.topolog import logger
+
+from lib.common_config import verify_rib
+from lib.ospf import verify_ospf_rib
+from _ast import Try
+
+pytestmark = pytest.mark.ospfd
+
+"""
+A large set of routers are connected to the same switch. Each router shares a
+single network. All shared networks must be reachable from all routers.
+"""
+
+TOPOLOGY = """
+ net1 net2 netN
+ --- --- ---
+ | | OSPF-passive |
+ | | |
+ +---+---+ +---+---+ +---+---+
+ | | | | | |
+ | r1 | | r2 | (...) | rN |
+ | | | | | |
+ +---+---+ +---+---+ +---+---+
+ | | OSPF-active |
+ | | |
+ +----------------+--------------------------------+
+ switch
+
+
+"""
+
+N_ROUTERS = 8
+
+# Save the Current Working Directory to find configuration files.
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+
+def build_topo(tgen):
+ "Build the topology"
+
+ # Create a single switch to connect all the routers
+ switch = tgen.add_switch("switch")
+
+ # Create routers
+ for router_id in range(1, N_ROUTERS + 1):
+ router = tgen.add_router(f"r{router_id}")
+ switch.add_link(router)
+
+ # The shared network needs to be connected to something
+ dummy = tgen.add_switch(f"s{router_id}")
+ dummy.add_link(router)
+
+
+def setup_module(mod):
+ logger.info("OSPF single switch:\n {}".format(TOPOLOGY))
+
+ tgen = Topogen(build_topo, mod.__name__)
+ tgen.start_topology()
+
+ # Starting Routers
+ router_list = tgen.routers()
+
+ for rname, router in router_list.items():
+ logger.info("Loading router %s" % rname)
+ router.load_frr_config(os.path.join(CWD, "{}_frr.conf".format(rname)))
+
+ # Initialize all routers.
+ tgen.start_router()
+
+
+def teardown_module(mod):
+ "Tear-down the test environment"
+ tgen = get_topogen()
+ tgen.stop_topology()
+
+
+def is_iproute2_json_supported():
+ """
+ Checks if the command 'ip -j route' is supported.
+ """
+ try:
+ output = subprocess.run(
+ ["ip", "-j", "route", "get", "0.0.0.0"], stdout=subprocess.PIPE
+ ).stdout.decode()
+ json.loads(output)
+ return True
+ except json.decoder.JSONDecodeError:
+ return False
+
+
+@pytest.mark.skipif(
+ not is_iproute2_json_supported(), reason="'ip -j route' not supported"
+)
+def test_all_routes_advertised():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip("Skipped because of router(s) failure")
+
+ # networks advertised by each router and the expected next hops
+ networks = {
+ "r1": ("10.0.1.0/24", "203.0.113.1"),
+ "r2": ("10.0.2.0/24", "203.0.113.2"),
+ "r3": ("10.0.3.0/24", "203.0.113.3"),
+ "r4": ("10.0.4.0/24", "203.0.113.4"),
+ "r5": ("10.0.5.0/24", "203.0.113.5"),
+ "r6": ("10.0.6.0/24", "203.0.113.6"),
+ "r7": ("10.0.7.0/24", "203.0.113.7"),
+ "r8": ("10.0.8.0/24", "203.0.113.8"),
+ }
+
+ for router_orig in tgen.routers().keys():
+ for router_dest, network in networks.items():
+ if router_orig != router_dest:
+ input_dict = {
+ router_orig: {
+ "static_routes": [
+ {
+ "network": network[0],
+ }
+ ]
+ }
+ }
+ result = verify_ospf_rib(
+ tgen, router_orig, input_dict, next_hop=network[1]
+ )
+ assert result is True, "Error: {}".format(result)
+ result = verify_rib(
+ tgen, "ipv4", router_orig, input_dict, next_hop=network[1]
+ )
+ assert result is True, "Error: {}".format(result)
+
+ check_route(router_orig, network[0], network[1])
+
+
+def check_route(router_name, network, expected_nexthop):
+ """
+ Checks if the given network is present on the given router and has the
+ expected next hop.
+ """
+ tgen = get_topogen()
+ router = tgen.gears[router_name]
+
+ expected_response = {
+ network: [
+ {
+ "prefix": network,
+ "protocol": "ospf",
+ "nexthops": [
+ {
+ "ip": expected_nexthop,
+ "active": True,
+ },
+ ],
+ },
+ ],
+ }
+
+ test_func = partial(
+ topotest.router_json_cmp,
+ router,
+ f"show ip route {network} json",
+ expected_response,
+ )
+ _, result = topotest.run_and_expect(test_func, None, count=60, wait=1)
+ assert (
+ result is None
+ ), f"{router_name} (ospfd): no route {network} via {expected_nexthop}"
+
+ address = network.split("/")[0]
+ output = router.cmd(f"ip -j route get {address}")
+ logger.info(output)
+ routes = json.loads(output)
+ assert (
+ routes[0]["gateway"] == expected_nexthop
+ ), f"{router_name} (kernel): no route {address} via {expected_nexthop}"
+
+
+if __name__ == "__main__":
+ args = ["-s"] + sys.argv[1:]
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/ospf_suppress_fa/r2/ospfd.conf b/tests/topotests/ospf_suppress_fa/r2/ospfd.conf
index ebc7d25..ecc35f7 100644
--- a/tests/topotests/ospf_suppress_fa/r2/ospfd.conf
+++ b/tests/topotests/ospf_suppress_fa/r2/ospfd.conf
@@ -10,6 +10,7 @@ interface r2-eth1
ip ospf dead-interval 10
!
router ospf
+ ospf router-id 10.0.23.2
network 10.0.12.0/24 area 0
network 10.0.23.0/24 area 1
area 1 nssa
diff --git a/tests/topotests/ospfapi/test_ospf_clientapi.py b/tests/topotests/ospfapi/test_ospf_clientapi.py
index 49dd34d..626a9d3 100644
--- a/tests/topotests/ospfapi/test_ospf_clientapi.py
+++ b/tests/topotests/ospfapi/test_ospf_clientapi.py
@@ -277,9 +277,7 @@ def _test_add_data(tgen, apibin):
"linkStateId": "230.0.0.2",
"advertisingRouter": "1.0.0.0",
"lsaSeqNumber": "80000001",
- "opaqueValues": {
- "opaqueData": "00000202"
- }
+ "opaqueValues": {"opaqueData": "00000202"},
},
],
}
@@ -330,8 +328,8 @@ def _test_add_data(tgen, apibin):
"advertisingRouter": "1.0.0.0",
"lsaSeqNumber": "80000001",
"opaqueValues": {
- "opaqueData": "00010101",
- }
+ "opaqueData": "00010101",
+ },
},
],
}
@@ -381,8 +379,8 @@ def _test_add_data(tgen, apibin):
"advertisingRouter": "1.0.0.0",
"lsaSeqNumber": "80000001",
"opaqueValues": {
- "opaqueData": "deadbeaf01234567",
- }
+ "opaqueData": "deadbeaf01234567",
+ },
},
]
}
@@ -434,8 +432,8 @@ def _test_add_data(tgen, apibin):
"advertisingRouter": "1.0.0.0",
"lsaSeqNumber": "80000002",
"opaqueValues": {
- "opaqueData": "ebadf00d",
- }
+ "opaqueData": "ebadf00d",
+ },
},
]
}
@@ -1664,8 +1662,8 @@ def _test_opaque_link_local_lsa_crash(tgen, apibin):
"advertisingRouter": "1.0.0.0",
"lsaSeqNumber": "80000001",
"opaqueValues": {
- "opaqueData": "feedaceedeadbeef",
- }
+ "opaqueData": "feedaceedeadbeef",
+ },
},
],
}
@@ -1695,8 +1693,8 @@ def _test_opaque_link_local_lsa_crash(tgen, apibin):
"advertisingRouter": "1.0.0.0",
"lsaSeqNumber": "80000001",
"opaqueValues": {
- "opaqueData": "feedaceecafebeef",
- }
+ "opaqueData": "feedaceecafebeef",
+ },
},
],
}
diff --git a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_authentication.py b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_authentication.py
index 58608e2..00c98ac 100644
--- a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_authentication.py
+++ b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_authentication.py
@@ -175,7 +175,7 @@ def test_ospf6_auth_trailer_tc1_md5(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -208,7 +208,7 @@ def test_ospf6_auth_trailer_tc1_md5(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -266,7 +266,7 @@ def test_ospf6_auth_trailer_tc1_md5(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 using"
+ "Verify that the neighbor is FULL between R1 and R2 using"
" show ip ospf6 neighbor cmd."
)
@@ -283,7 +283,7 @@ def test_ospf6_auth_trailer_tc1_md5(request):
dut = "r2"
step(
- "Verify that the neighbour is not FULL between R1 and R2 using "
+ "Verify that the neighbor is not FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
ospf6_covergence = verify_ospf6_neighbor(tgen, topo, dut=dut, expected=False)
@@ -295,7 +295,7 @@ def test_ospf6_auth_trailer_tc1_md5(request):
shutdown_bringup_interface(tgen, dut, intf, True)
step(
- "Verify that the neighbour is FULL between R1 and R2 using "
+ "Verify that the neighbor is FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
@@ -341,7 +341,7 @@ def test_ospf6_auth_trailer_tc2_sha256(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -374,7 +374,7 @@ def test_ospf6_auth_trailer_tc2_sha256(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -432,7 +432,7 @@ def test_ospf6_auth_trailer_tc2_sha256(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 using"
+ "Verify that the neighbor is FULL between R1 and R2 using"
" show ip ospf6 neighbor cmd."
)
@@ -449,7 +449,7 @@ def test_ospf6_auth_trailer_tc2_sha256(request):
dut = "r2"
step(
- "Verify that the neighbour is not FULL between R1 and R2 using "
+ "Verify that the neighbor is not FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
ospf6_covergence = verify_ospf6_neighbor(tgen, topo, dut=dut, expected=False)
@@ -461,7 +461,66 @@ def test_ospf6_auth_trailer_tc2_sha256(request):
shutdown_bringup_interface(tgen, dut, intf, True)
step(
- "Verify that the neighbour is FULL between R1 and R2 using "
+ "Verify that the neighbor is FULL between R1 and R2 using "
+ "show ip ospf6 neighbor cmd."
+ )
+
+ dut = "r2"
+ ospf6_covergence = verify_ospf6_neighbor(tgen, topo, dut=dut)
+ assert ospf6_covergence is True, "Testcase {} :Failed \n Error: {}".format(
+ tc_name, ospf6_covergence
+ )
+
+ step("Change the key ID on R2 to not match R1")
+ r2_ospf6_auth = {
+ "r2": {
+ "links": {
+ "r1": {
+ "ospf6": {
+ "hash-algo": "hmac-sha-256",
+ "key": "ospf6",
+ "key-id": "30",
+ }
+ }
+ }
+ }
+ }
+ result = config_ospf6_interface(tgen, topo, r2_ospf6_auth)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
+
+ step(
+ "Verify on R1 that R2 nbr is deleted due to key-id mismatch "
+ "after dead interval expiry"
+ )
+ # wait till the dead timer expiry
+ sleep(6)
+ dut = "r2"
+ ospf6_covergence = verify_ospf6_neighbor(
+ tgen, topo, dut=dut, expected=False, retry_timeout=5
+ )
+ assert ospf6_covergence is not True, "Testcase {} :Failed \n Error: {}".format(
+ tc_name, ospf6_covergence
+ )
+
+ step("Correct the key ID on R2 so that it matches R1")
+ r2_ospf6_auth = {
+ "r2": {
+ "links": {
+ "r1": {
+ "ospf6": {
+ "hash-algo": "hmac-sha-256",
+ "key": "ospf6",
+ "key-id": "10",
+ }
+ }
+ }
+ }
+ }
+ result = config_ospf6_interface(tgen, topo, r2_ospf6_auth)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
+
+ step(
+ "Verify that the neighbor is FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
@@ -524,7 +583,7 @@ def test_ospf6_auth_trailer_tc3_keychain_md5(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -555,7 +614,7 @@ def test_ospf6_auth_trailer_tc3_keychain_md5(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -600,7 +659,7 @@ def test_ospf6_auth_trailer_tc3_keychain_md5(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 using"
+ "Verify that the neighbor is FULL between R1 and R2 using"
" show ip ospf6 neighbor cmd."
)
@@ -617,7 +676,7 @@ def test_ospf6_auth_trailer_tc3_keychain_md5(request):
dut = "r2"
step(
- "Verify that the neighbour is not FULL between R1 and R2 using "
+ "Verify that the neighbor is not FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
ospf6_covergence = verify_ospf6_neighbor(tgen, topo, dut=dut, expected=False)
@@ -629,7 +688,7 @@ def test_ospf6_auth_trailer_tc3_keychain_md5(request):
shutdown_bringup_interface(tgen, dut, intf, True)
step(
- "Verify that the neighbour is FULL between R1 and R2 using "
+ "Verify that the neighbor is FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
@@ -692,7 +751,7 @@ def test_ospf6_auth_trailer_tc4_keychain_sha256(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -723,7 +782,7 @@ def test_ospf6_auth_trailer_tc4_keychain_sha256(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -768,7 +827,7 @@ def test_ospf6_auth_trailer_tc4_keychain_sha256(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 using"
+ "Verify that the neighbor is FULL between R1 and R2 using"
" show ip ospf6 neighbor cmd."
)
@@ -785,7 +844,7 @@ def test_ospf6_auth_trailer_tc4_keychain_sha256(request):
dut = "r2"
step(
- "Verify that the neighbour is not FULL between R1 and R2 using "
+ "Verify that the neighbor is not FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
ospf6_covergence = verify_ospf6_neighbor(tgen, topo, dut=dut, expected=False)
@@ -797,7 +856,7 @@ def test_ospf6_auth_trailer_tc4_keychain_sha256(request):
shutdown_bringup_interface(tgen, dut, intf, True)
step(
- "Verify that the neighbour is FULL between R1 and R2 using "
+ "Verify that the neighbor is FULL between R1 and R2 using "
"show ip ospf6 neighbor cmd."
)
@@ -843,7 +902,7 @@ def test_ospf6_auth_trailer_tc5_md5_keymissmatch(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -876,11 +935,11 @@ def test_ospf6_auth_trailer_tc5_md5_keymissmatch(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is not FULL between R1 and R2 "
+ "Verify that the neighbor is not FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
- step("Verify that the neighbour is FULL between R1 and R2.")
+ step("Verify that the neighbor is FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r2"
@@ -913,7 +972,7 @@ def test_ospf6_auth_trailer_tc5_md5_keymissmatch(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -959,7 +1018,7 @@ def test_ospf6_auth_trailer_tc6_sha256_mismatch(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -991,7 +1050,7 @@ def test_ospf6_auth_trailer_tc6_sha256_mismatch(request):
result = config_ospf6_interface(tgen, topo, r2_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r2"
@@ -1024,7 +1083,7 @@ def test_ospf6_auth_trailer_tc6_sha256_mismatch(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -1095,7 +1154,7 @@ def test_ospf6_auth_trailer_tc7_keychain_md5_missmatch(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -1125,7 +1184,7 @@ def test_ospf6_auth_trailer_tc7_keychain_md5_missmatch(request):
result = config_ospf6_interface(tgen, topo, r2_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r2"
@@ -1156,7 +1215,7 @@ def test_ospf6_auth_trailer_tc7_keychain_md5_missmatch(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -1227,7 +1286,7 @@ def test_ospf6_auth_trailer_tc8_keychain_sha256_missmatch(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -1257,7 +1316,7 @@ def test_ospf6_auth_trailer_tc8_keychain_sha256_missmatch(request):
result = config_ospf6_interface(tgen, topo, r2_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r2"
@@ -1288,7 +1347,7 @@ def test_ospf6_auth_trailer_tc8_keychain_sha256_missmatch(request):
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
@@ -1335,7 +1394,7 @@ def test_ospf6_auth_trailer_tc9_keychain_not_configured(request):
result = config_ospf6_interface(tgen, topo, r1_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r1"
@@ -1365,7 +1424,7 @@ def test_ospf6_auth_trailer_tc9_keychain_not_configured(request):
result = config_ospf6_interface(tgen, topo, r2_ospf6_auth)
assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
- step("Verify that the neighbour is not FULL between R1 and R2.")
+ step("Verify that the neighbor is not FULL between R1 and R2.")
# wait for dead time expiry.
sleep(6)
dut = "r2"
@@ -1396,7 +1455,7 @@ def test_ospf6_auth_trailer_tc10_no_auth_trailer(request):
router2 = tgen.gears["r2"]
step(
- "Verify that the neighbour is FULL between R1 and R2 "
+ "Verify that the neighbor is FULL between R1 and R2 "
"using show ipv6 ospf6 neighbor cmd."
)
diff --git a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_nssa2.py b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_nssa2.py
index 90548fb..5a6c377 100644
--- a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_nssa2.py
+++ b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_nssa2.py
@@ -410,7 +410,7 @@ def test_ospfv3_learning_tc15_p0(request):
step("Verify that Type 3 summary LSA is originated for the same Area 0")
ip = topo["routers"]["r1"]["links"]["r3-link0"]["ipv6"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
input_dict = {
"r1": {
diff --git a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_rte_calc.py b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_rte_calc.py
index 645dea8..916f655 100644
--- a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_rte_calc.py
+++ b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_rte_calc.py
@@ -262,7 +262,7 @@ def test_ospfv3_redistribution_tc5_p0(request):
step("verify intra area route is calculated for r0-r3 interface ip in R1")
ip = topo["routers"]["r0"]["links"]["r3"]["ipv6"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
llip = get_llip("r0", "r1")
assert llip is not None, "Testcase {} : Failed \n Error: {}".format(tc_name, llip)
@@ -379,7 +379,7 @@ def test_ospfv3_redistribution_tc6_p0(request):
step("verify intra area route is calculated for r0-r3 interface ip in R1")
ip = topo["routers"]["r0"]["links"]["r3"]["ipv6"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
llip = get_llip("r0", "r1")
assert llip is not None, "Testcase {} : Failed \n Error: {}".format(tc_name, llip)
nh = llip
diff --git a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_single_area.py b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_single_area.py
index 7199f16..3bafd27 100644
--- a/tests/topotests/ospfv3_basic_functionality/test_ospfv3_single_area.py
+++ b/tests/topotests/ospfv3_basic_functionality/test_ospfv3_single_area.py
@@ -1124,7 +1124,7 @@ def test_ospfv3_show_p1(request):
assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
ip = topo["routers"]["r0"]["links"]["r3"]["ipv6"]
- ip_net = str(ipaddress.ip_interface(u"{}".format(ip)).network)
+ ip_net = str(ipaddress.ip_interface("{}".format(ip)).network)
nh = topo["routers"]["r0"]["links"]["r1"]["ipv6"].split("/")[0]
input_dict = {
"r1": {
diff --git a/tests/topotests/pim_basic/test_pim.py b/tests/topotests/pim_basic/test_pim.py
index 24987e5..85b49aa 100644
--- a/tests/topotests/pim_basic/test_pim.py
+++ b/tests/topotests/pim_basic/test_pim.py
@@ -18,7 +18,7 @@ import pytest
import json
from functools import partial
-pytestmark = pytest.mark.pimd
+pytestmark = [pytest.mark.pimd]
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(CWD, "../"))
@@ -29,9 +29,6 @@ from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-pytestmark = [pytest.mark.pimd]
-
-
def build_topo(tgen):
"Build function"
diff --git a/tests/topotests/pim_igmp_vrf/r1/ospf_blue_route.json b/tests/topotests/pim_igmp_vrf/r1/ospf_blue_route.json
new file mode 100644
index 0000000..c5e89d1
--- /dev/null
+++ b/tests/topotests/pim_igmp_vrf/r1/ospf_blue_route.json
@@ -0,0 +1,54 @@
+{
+ "blue": {
+ "vrfName": "blue",
+ "192.168.0.1/32": {
+ "routeType": "N",
+ "transit": false,
+ "cost": 0,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": " ",
+ "directlyAttachedTo": "blue"
+ }
+ ]
+ },
+ "192.168.0.11/32": {
+ "routeType": "N",
+ "transit": false,
+ "cost": 10,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": "192.168.101.11",
+ "via": "r1-eth1",
+ "advertisedRouter": "192.168.0.11"
+ }
+ ]
+ },
+ "192.168.100.0/24": {
+ "routeType": "N",
+ "transit": false,
+ "cost": 10,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": " ",
+ "directlyAttachedTo": "r1-eth0"
+ }
+ ]
+ },
+ "192.168.101.0/24": {
+ "routeType": "N",
+ "transit": true,
+ "cost": 10,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": " ",
+ "directlyAttachedTo": "r1-eth1"
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/pim_igmp_vrf/r1/ospf_red_route.json b/tests/topotests/pim_igmp_vrf/r1/ospf_red_route.json
new file mode 100644
index 0000000..2fc340d
--- /dev/null
+++ b/tests/topotests/pim_igmp_vrf/r1/ospf_red_route.json
@@ -0,0 +1,54 @@
+{
+ "red": {
+ "vrfName": "red",
+ "192.168.0.1/32": {
+ "routeType": "N",
+ "transit": false,
+ "cost": 0,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": " ",
+ "directlyAttachedTo": "red"
+ }
+ ]
+ },
+ "192.168.0.12/32": {
+ "routeType": "N",
+ "transit": false,
+ "cost": 10,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": "192.168.101.12",
+ "via": "r1-eth3",
+ "advertisedRouter": "192.168.0.12"
+ }
+ ]
+ },
+ "192.168.100.0/24": {
+ "routeType": "N",
+ "transit": false,
+ "cost": 10,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": " ",
+ "directlyAttachedTo": "r1-eth2"
+ }
+ ]
+ },
+ "192.168.101.0/24": {
+ "routeType": "N",
+ "transit": true,
+ "cost": 10,
+ "area": "0.0.0.0",
+ "nexthops": [
+ {
+ "ip": " ",
+ "directlyAttachedTo": "r1-eth3"
+ }
+ ]
+ }
+ }
+}
diff --git a/tests/topotests/pim_igmp_vrf/r1/ospfd.conf b/tests/topotests/pim_igmp_vrf/r1/ospfd.conf
index 88eb5a8..9b9a261 100644
--- a/tests/topotests/pim_igmp_vrf/r1/ospfd.conf
+++ b/tests/topotests/pim_igmp_vrf/r1/ospfd.conf
@@ -1,6 +1,8 @@
hostname r1
!
! debug ospf event
+! debug ospf nsm
+! debug ospf packet hello
!
!
interface r1-eth1
diff --git a/tests/topotests/pim_igmp_vrf/r1/pimd.conf b/tests/topotests/pim_igmp_vrf/r1/pimd.conf
index 040c3d0..c4ddced 100644
--- a/tests/topotests/pim_igmp_vrf/r1/pimd.conf
+++ b/tests/topotests/pim_igmp_vrf/r1/pimd.conf
@@ -2,6 +2,7 @@ hostname r1
!
! debug igmp events
! debug igmp packets
+! debug mroute detail
! debug pim events
! debug pim packets
! debug pim trace
diff --git a/tests/topotests/pim_igmp_vrf/r11/ospfd.conf b/tests/topotests/pim_igmp_vrf/r11/ospfd.conf
index 86fb66d..e52737c 100644
--- a/tests/topotests/pim_igmp_vrf/r11/ospfd.conf
+++ b/tests/topotests/pim_igmp_vrf/r11/ospfd.conf
@@ -1,6 +1,8 @@
hostname r11
!
! debug ospf event
+! debug ospf nsm
+! debug ospf packet hello
!
interface r11-eth0
ip ospf hello-interval 2
diff --git a/tests/topotests/pim_igmp_vrf/r12/ospfd.conf b/tests/topotests/pim_igmp_vrf/r12/ospfd.conf
index f0dcabe..cd94406 100644
--- a/tests/topotests/pim_igmp_vrf/r12/ospfd.conf
+++ b/tests/topotests/pim_igmp_vrf/r12/ospfd.conf
@@ -1,6 +1,8 @@
hostname r12
!
! debug ospf event
+! debug ospf nsm
+! debug ospf packet hello
!
interface r12-eth0
ip ospf hello-interval 2
diff --git a/tests/topotests/pim_igmp_vrf/test_pim_vrf.py b/tests/topotests/pim_igmp_vrf/test_pim_vrf.py
index ddc4303..01c496d 100755
--- a/tests/topotests/pim_igmp_vrf/test_pim_vrf.py
+++ b/tests/topotests/pim_igmp_vrf/test_pim_vrf.py
@@ -60,7 +60,7 @@ TOPOLOGY = """
+---------+ +------------+ | +---------+
| Host H1 | 192.168.100.0/24 | | .1 | .11 | Host H2 |
| receive |------------------| VRF Blue |---------+--------| PIM RP |
-|IGMP JOIN| .10 .1 | | 192.168.101.0/24 | |
+|IGMP JOIN| .10 .1 | | 192.168.101.0/24 | |
+---------+ | | +---------+
=| = = R1 = = |=
+---------+ | | +---------+
@@ -68,7 +68,7 @@ TOPOLOGY = """
| receive |------------------| VRF Red |---------+--------| PIM RP |
|IGMP JOIN| .20 .1 | | .1 | .12 | |
+---------+ +------------+ | +---------+
- .4 |
+ .4 |
+----------+
| Host H4 |
| Source |
@@ -80,6 +80,7 @@ import functools
import os
import sys
import pytest
+import logging
# Save the Current Working Directory to find configuration files.
CWD = os.path.dirname(os.path.realpath(__file__))
@@ -91,7 +92,7 @@ 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
+from lib.common_config import required_linux_kernel_version, retry
from lib.pim import McastTesterHelper
@@ -192,6 +193,17 @@ def setup_module(module):
tgen.start_router()
+ # 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", allow_module_level=True
+ )
+
+ if os.getenv("MROUTE_VRF_MISSING"):
+ pytest.skip(
+ "Kernel does not support vrf mroute tables.", allow_module_level=True
+ )
+
def teardown_module(module):
tgen = get_topogen()
@@ -202,16 +214,13 @@ def test_ospf_convergence():
"Test for OSPFv2 convergence"
tgen = get_topogen()
- # 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")
-
# Skip if previous fatal error condition is raised
if tgen.routers_have_failure():
pytest.skip(tgen.errors)
logger.info("Checking OSPFv2 convergence on router r1 for VRF blue")
+ # Check for blue neighbor
router = tgen.gears["r1"]
reffile = os.path.join(CWD, "r1/ospf_blue_neighbor.json")
expected = json.loads(open(reffile).read())
@@ -223,7 +232,22 @@ def test_ospf_convergence():
expected,
)
_, res = topotest.run_and_expect(test_func, None, count=60, wait=2)
- assertmsg = "OSPF router R1 did not converge on VRF blue"
+ assertmsg = "OSPF router R1 did not converge on VRF blue (nbr)"
+ assert res is None, assertmsg
+
+ # Check for blue loopback route
+ router = tgen.gears["r1"]
+ reffile = os.path.join(CWD, "r1/ospf_blue_route.json")
+ expected = json.loads(open(reffile).read())
+
+ test_func = functools.partial(
+ topotest.router_json_cmp,
+ router,
+ "show ip ospf vrf blue route json",
+ expected,
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=30, wait=2)
+ assertmsg = "OSPF router R1 did not converge on VRF blue (route)"
assert res is None, assertmsg
logger.info("Checking OSPFv2 convergence on router r1 for VRF red")
@@ -236,7 +260,22 @@ def test_ospf_convergence():
topotest.router_json_cmp, router, "show ip ospf vrf red neighbor json", expected
)
_, res = topotest.run_and_expect(test_func, None, count=60, wait=2)
- assertmsg = "OSPF router R1 did not converge on VRF red"
+ assertmsg = "OSPF router R1 did not converge on VRF red (nbr)"
+ assert res is None, assertmsg
+
+ # Check for red loopback route
+ router = tgen.gears["r1"]
+ reffile = os.path.join(CWD, "r1/ospf_red_route.json")
+ expected = json.loads(open(reffile).read())
+
+ test_func = functools.partial(
+ topotest.router_json_cmp,
+ router,
+ "show ip ospf vrf red route json",
+ expected,
+ )
+ _, res = topotest.run_and_expect(test_func, None, count=30, wait=2)
+ assertmsg = "OSPF router R1 did not converge on VRF red (route)"
assert res is None, assertmsg
@@ -275,10 +314,13 @@ def test_pim_convergence():
assert res is None, assertmsg
-def test_vrf_pimreg_interfaces():
+def _test_vrf_pimreg_interfaces():
"Adding PIM RP in VRF information and verify pimreg interfaces"
tgen = get_topogen()
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
r1 = tgen.gears["r1"]
r1.vtysh_cmd("conf\ninterface blue\nip pim")
r1.vtysh_cmd("conf\nvrf blue\nip pim rp 192.168.0.11 239.100.0.1/32\nexit-vrf")
@@ -292,7 +334,7 @@ def test_vrf_pimreg_interfaces():
"show ip pim vrf blue inter pimreg11 json",
expected,
)
- _, res = topotest.run_and_expect(test_func, None, count=5, wait=2)
+ _, res = topotest.run_and_expect(test_func, None, count=15, wait=2)
assertmsg = "PIM router R1, VRF blue (table 11) pimreg11 interface missing or incorrect status"
assert res is None, assertmsg
@@ -308,10 +350,20 @@ def test_vrf_pimreg_interfaces():
"show ip pim vrf red inter pimreg12 json",
expected,
)
- _, res = topotest.run_and_expect(test_func, None, count=5, wait=2)
+ _, res = topotest.run_and_expect(test_func, None, count=15, wait=2)
assertmsg = "PIM router R1, VRF red (table 12) pimreg12 interface missing or incorrect status"
assert res is None, assertmsg
+def test_vrf_pimreg_interfaces():
+ tgen = get_topogen()
+ r1 = tgen.gears["r1"]
+ try:
+ _test_vrf_pimreg_interfaces()
+ except Exception:
+ # get some debug info.
+ output = r1.net.cmd_nostatus("ip -o link")
+ logging.error("ip link info after failure: %s", output)
+ raise
##################################
### Test PIM / IGMP with VRF
diff --git a/tests/topotests/pytest.ini b/tests/topotests/pytest.ini
index 98fcfbc..db806fe 100644
--- a/tests/topotests/pytest.ini
+++ b/tests/topotests/pytest.ini
@@ -43,6 +43,7 @@ markers =
bfdd: Tests that run against BFDD
bgpd: Tests that run against BGPD
eigrpd: Tests that run against EIGRPD
+ fpm: Tests that run against the FPM
isisd: Tests that run against ISISD
ldpd: Tests that run against LDPD
mgmtd: Tests that run against MGMTD
diff --git a/tests/topotests/rip_bfd_topo1/test_rip_bfd_topo1.py b/tests/topotests/rip_bfd_topo1/test_rip_bfd_topo1.py
index 71c9093..d03d547 100644
--- a/tests/topotests/rip_bfd_topo1/test_rip_bfd_topo1.py
+++ b/tests/topotests/rip_bfd_topo1/test_rip_bfd_topo1.py
@@ -32,10 +32,7 @@ pytestmark = [
def tgen(request):
"Setup/Teardown the environment and provide tgen argument to tests"
- topodef = {
- "s1": ("r1", "r2"),
- "s2": ("r1", "r3")
- }
+ topodef = {"s1": ("r1", "r2"), "s2": ("r1", "r3")}
tgen = Topogen(topodef, request.module.__name__)
tgen.start_topology()
@@ -68,16 +65,17 @@ def show_rip_json(router):
for route in routes:
match = re.match(
- r"(.)\((.)\)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)", route)
+ r"(.)\((.)\)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)", route
+ )
if match is None:
continue
route_entry = {
- "code": match[1],
- "subCode": match[2],
- "nextHop": match[4],
- "metric": int(match[5]),
- "from": match[6],
+ "code": match[1],
+ "subCode": match[2],
+ "nextHop": match[4],
+ "metric": int(match[5]),
+ "from": match[6],
}
if json.get(match[3]) is None:
@@ -95,12 +93,8 @@ def expect_routes(router, routes, time_amount):
"Internal test function."
return topotest.json_cmp(show_rip_json(router), routes)
- _, result = topotest.run_and_expect(test_function,
- None,
- count=time_amount,
- wait=1)
- assert result is None, "Unexpected routing table in {}".format(
- router.name)
+ _, result = topotest.run_and_expect(test_function, None, count=time_amount, wait=1)
+ assert result is None, "Unexpected routing table in {}".format(router.name)
def expect_bfd_peers(router, peers):
@@ -119,91 +113,87 @@ def test_rip_convergence(tgen):
"Test that RIP learns the neighbor routes."
expect_routes(
- tgen.gears["r1"], {
- "10.254.254.2/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.0.2"
- }],
- "10.254.254.3/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.1.2"
- }],
- "10.254.254.100/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.0.2",
- }, {
- "code": "R",
- "subCode": "n",
- "from": "192.168.1.2",
- }]
- }, 40)
-
- expect_bfd_peers(tgen.gears["r1"], [{
- "peer": "192.168.0.2",
- "status": "up",
- "receive-interval": 1000,
- "transmit-interval": 1000,
- }, {
- "peer": "192.168.1.2",
- "status": "up",
- "receive-interval": 1000,
- "transmit-interval": 1000,
- }])
+ tgen.gears["r1"],
+ {
+ "10.254.254.2/32": [{"code": "R", "subCode": "n", "from": "192.168.0.2"}],
+ "10.254.254.3/32": [{"code": "R", "subCode": "n", "from": "192.168.1.2"}],
+ "10.254.254.100/32": [
+ {
+ "code": "R",
+ "subCode": "n",
+ "from": "192.168.0.2",
+ },
+ {
+ "code": "R",
+ "subCode": "n",
+ "from": "192.168.1.2",
+ },
+ ],
+ },
+ 40,
+ )
+
+ expect_bfd_peers(
+ tgen.gears["r1"],
+ [
+ {
+ "peer": "192.168.0.2",
+ "status": "up",
+ "receive-interval": 1000,
+ "transmit-interval": 1000,
+ },
+ {
+ "peer": "192.168.1.2",
+ "status": "up",
+ "receive-interval": 1000,
+ "transmit-interval": 1000,
+ },
+ ],
+ )
expect_routes(
- tgen.gears["r2"], {
- "10.254.254.1/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.0.1"
- }],
- "10.254.254.3/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.0.1"
- }],
- "10.254.254.100/32": [{
- "code": "S",
- "subCode": "r",
- "from": "self"
- }]
- }, 40)
-
- expect_bfd_peers(tgen.gears["r2"], [{
- "peer": "192.168.0.1",
- "status": "up",
- "receive-interval": 1000,
- "transmit-interval": 1000,
- }])
+ tgen.gears["r2"],
+ {
+ "10.254.254.1/32": [{"code": "R", "subCode": "n", "from": "192.168.0.1"}],
+ "10.254.254.3/32": [{"code": "R", "subCode": "n", "from": "192.168.0.1"}],
+ "10.254.254.100/32": [{"code": "S", "subCode": "r", "from": "self"}],
+ },
+ 40,
+ )
+
+ expect_bfd_peers(
+ tgen.gears["r2"],
+ [
+ {
+ "peer": "192.168.0.1",
+ "status": "up",
+ "receive-interval": 1000,
+ "transmit-interval": 1000,
+ }
+ ],
+ )
expect_routes(
- tgen.gears["r3"], {
- "10.254.254.1/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.1.1"
- }],
- "10.254.254.2/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.1.1"
- }],
- "10.254.254.100/32": [{
- "code": "S",
- "subCode": "r",
- "from": "self"
- }]
- }, 40)
-
- expect_bfd_peers(tgen.gears["r3"], [{
- "peer": "192.168.1.1",
- "status": "up",
- "receive-interval": 1000,
- "transmit-interval": 1000,
- }])
+ tgen.gears["r3"],
+ {
+ "10.254.254.1/32": [{"code": "R", "subCode": "n", "from": "192.168.1.1"}],
+ "10.254.254.2/32": [{"code": "R", "subCode": "n", "from": "192.168.1.1"}],
+ "10.254.254.100/32": [{"code": "S", "subCode": "r", "from": "self"}],
+ },
+ 40,
+ )
+
+ expect_bfd_peers(
+ tgen.gears["r3"],
+ [
+ {
+ "peer": "192.168.1.1",
+ "status": "up",
+ "receive-interval": 1000,
+ "transmit-interval": 1000,
+ }
+ ],
+ )
def test_rip_bfd_convergence(tgen):
@@ -212,30 +202,30 @@ def test_rip_bfd_convergence(tgen):
tgen.gears["r3"].link_enable("r3-eth0", False)
expect_routes(
- tgen.gears["r1"], {
- "10.254.254.2/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.0.2"
- }],
+ tgen.gears["r1"],
+ {
+ "10.254.254.2/32": [{"code": "R", "subCode": "n", "from": "192.168.0.2"}],
"10.254.254.3/32": None,
- "10.254.254.100/32": [{
- "code": "R",
- "subCode": "n",
- "from": "192.168.0.2",
- }]
- }, 6)
+ "10.254.254.100/32": [
+ {
+ "code": "R",
+ "subCode": "n",
+ "from": "192.168.0.2",
+ }
+ ],
+ },
+ 6,
+ )
expect_routes(
- tgen.gears["r3"], {
+ tgen.gears["r3"],
+ {
"10.254.254.1/32": None,
"10.254.254.2/32": None,
- "10.254.254.100/32": [{
- "code": "S",
- "subCode": "r",
- "from": "self"
- }]
- }, 6)
+ "10.254.254.100/32": [{"code": "S", "subCode": "r", "from": "self"}],
+ },
+ 6,
+ )
def test_memory_leak(tgen):
diff --git a/tests/topotests/route_scale/scale_test_common.py b/tests/topotests/route_scale/scale_test_common.py
index 6227e81..b3cba1c 100644
--- a/tests/topotests/route_scale/scale_test_common.py
+++ b/tests/topotests/route_scale/scale_test_common.py
@@ -151,7 +151,7 @@ def route_install_helper(iter):
logger.info(
"Limited memory available: {}, skipping x32 testcase".format(total_mem)
)
- return;
+ return
installed_file = "{}/r1/installed.routes.json".format(CWD)
expected_installed = json.loads(open(installed_file).read())
diff --git a/tests/topotests/route_scale/test_route_scale1.py b/tests/topotests/route_scale/test_route_scale1.py
index 0f25b28..ccbdd51 100644
--- a/tests/topotests/route_scale/test_route_scale1.py
+++ b/tests/topotests/route_scale/test_route_scale1.py
@@ -30,35 +30,51 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from scale_test_common import scale_build_common, scale_setup_module, route_install_helper, scale_test_memory_leak, scale_converge_protocols, scale_teardown_module
+from scale_test_common import (
+ scale_build_common,
+ scale_setup_module,
+ route_install_helper,
+ scale_test_memory_leak,
+ scale_converge_protocols,
+ scale_teardown_module,
+)
pytestmark = [pytest.mark.sharpd]
+
def build(tgen):
scale_build_common(tgen)
+
def setup_module(module):
scale_setup_module(module)
+
def teardown_module(_mod):
scale_teardown_module(_mod)
+
def test_converge_protocols():
scale_converge_protocols()
+
def test_route_install_2nh():
route_install_helper(1)
+
def test_route_install_4nh():
route_install_helper(2)
+
def test_route_install_16nh():
route_install_helper(4)
+
def test_memory_leak():
scale_test_memory_leak()
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
diff --git a/tests/topotests/route_scale/test_route_scale2.py b/tests/topotests/route_scale/test_route_scale2.py
index 3b55fcd..e244d4f 100644
--- a/tests/topotests/route_scale/test_route_scale2.py
+++ b/tests/topotests/route_scale/test_route_scale2.py
@@ -30,35 +30,51 @@ from lib import topotest
from lib.topogen import Topogen, TopoRouter, get_topogen
from lib.topolog import logger
-from scale_test_common import scale_build_common, scale_setup_module, route_install_helper, scale_test_memory_leak, scale_converge_protocols, scale_teardown_module
+from scale_test_common import (
+ scale_build_common,
+ scale_setup_module,
+ route_install_helper,
+ scale_test_memory_leak,
+ scale_converge_protocols,
+ scale_teardown_module,
+)
pytestmark = [pytest.mark.sharpd]
+
def build(tgen):
scale_build_common(tgen)
+
def setup_module(module):
scale_setup_module(module)
+
def teardown_module(_mod):
scale_teardown_module(_mod)
+
def test_converge_protocols():
scale_converge_protocols()
+
def test_route_install_1nh():
route_install_helper(0)
+
def test_route_install_8nh():
route_install_helper(3)
+
def test_route_install_32nh():
route_install_helper(5)
+
def test_memory_leak():
scale_test_memory_leak()
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))
diff --git a/tests/topotests/srv6_encap_src_addr/test_srv6_encap_src_addr.py b/tests/topotests/srv6_encap_src_addr/test_srv6_encap_src_addr.py
index 4239193..b8bcab8 100755
--- a/tests/topotests/srv6_encap_src_addr/test_srv6_encap_src_addr.py
+++ b/tests/topotests/srv6_encap_src_addr/test_srv6_encap_src_addr.py
@@ -63,16 +63,16 @@ def teardown_module(mod):
def test_zebra_srv6_encap_src_addr(tgen):
"Test SRv6 encapsulation source address."
- logger.info(
- "Test SRv6 encapsulation source address."
- )
+ logger.info("Test SRv6 encapsulation source address.")
r1 = tgen.gears["r1"]
# Generate expected results
json_file = "{}/r1/expected_srv6_encap_src_addr.json".format(CWD)
expected = json.loads(open(json_file).read())
- ok = topotest.router_json_cmp_retry(r1, "show segment-routing srv6 manager json", expected)
+ ok = topotest.router_json_cmp_retry(
+ r1, "show segment-routing srv6 manager json", expected
+ )
assert ok, '"r1" JSON output mismatches'
output = r1.cmd("ip sr tunsrc show")
@@ -81,9 +81,7 @@ def test_zebra_srv6_encap_src_addr(tgen):
def test_zebra_srv6_encap_src_addr_unset(tgen):
"Test SRv6 encapsulation source address unset."
- logger.info(
- "Test SRv6 encapsulation source address unset."
- )
+ logger.info("Test SRv6 encapsulation source address unset.")
r1 = tgen.gears["r1"]
# Unset SRv6 encapsulation source address
@@ -101,7 +99,9 @@ def test_zebra_srv6_encap_src_addr_unset(tgen):
json_file = "{}/r1/expected_srv6_encap_src_addr_unset.json".format(CWD)
expected = json.loads(open(json_file).read())
- ok = topotest.router_json_cmp_retry(r1, "show segment-routing srv6 manager json", expected)
+ ok = topotest.router_json_cmp_retry(
+ r1, "show segment-routing srv6 manager json", expected
+ )
assert ok, '"r1" JSON output mismatches'
output = r1.cmd("ip sr tunsrc show")
@@ -110,9 +110,7 @@ def test_zebra_srv6_encap_src_addr_unset(tgen):
def test_zebra_srv6_encap_src_addr_set(tgen):
"Test SRv6 encapsulation source address set."
- logger.info(
- "Test SRv6 encapsulation source address set."
- )
+ logger.info("Test SRv6 encapsulation source address set.")
r1 = tgen.gears["r1"]
# Set SRv6 encapsulation source address
@@ -130,7 +128,9 @@ def test_zebra_srv6_encap_src_addr_set(tgen):
json_file = "{}/r1/expected_srv6_encap_src_addr_set.json".format(CWD)
expected = json.loads(open(json_file).read())
- ok = topotest.router_json_cmp_retry(r1, "show segment-routing srv6 manager json", expected)
+ ok = topotest.router_json_cmp_retry(
+ r1, "show segment-routing srv6 manager json", expected
+ )
assert ok, '"r1" JSON output mismatches'
output = r1.cmd("ip sr tunsrc show")
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 2efc0fd..3e03055 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
@@ -65,8 +65,6 @@ ADDR_TYPES = check_address_types()
NETWORK = {"ipv4": "2.2.2.2/32", "ipv6": "22:22::2/128"}
NEXT_HOP_IP = {}
-pytestmark = [pytest.mark.bgpd, pytest.mark.staticd]
-
def setup_module(mod):
"""
@@ -551,7 +549,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
protocol = "bgp"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -571,7 +569,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
dut = "r2"
ntwk_r2_vm6 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
).network
)
input_dict = {"r3": {"static_routes": [{"network": ntwk_r2_vm6}]}}
@@ -914,7 +912,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
protocol = "bgp"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -931,7 +929,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
dut = "r1"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
+ "{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -945,7 +943,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
dut = "r2"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
+ "{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -959,7 +957,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ebgp(request):
protocol = "bgp"
ntwk_r2_vm6 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
).network
)
input_dict = {"r3": {"static_routes": [{"network": ntwk_r2_vm6}]}}
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 0378240..0fc81aa 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
@@ -547,7 +547,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
protocol = "bgp"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -567,7 +567,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
dut = "r2"
ntwk_r2_vm6 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
).network
)
input_dict = {"r3": {"static_routes": [{"network": ntwk_r2_vm6}]}}
@@ -910,7 +910,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
protocol = "bgp"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm1"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -927,7 +927,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
dut = "r1"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
+ "{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -941,7 +941,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
dut = "r2"
ntwk_r2_vm1 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
+ "{}".format(topo["routers"]["r1"]["links"]["vm4"][addr_type])
).network
)
input_dict = {"r1": {"static_routes": [{"network": ntwk_r2_vm1}]}}
@@ -955,7 +955,7 @@ def test_static_routes_rmap_pfxlist_p0_tc7_ibgp(request):
protocol = "bgp"
ntwk_r2_vm6 = str(
ipaddress.ip_interface(
- u"{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
+ "{}".format(topo["routers"]["r2"]["links"]["vm6"][addr_type])
).network
)
input_dict = {"r3": {"static_routes": [{"network": ntwk_r2_vm6}]}}
diff --git a/tests/topotests/tc_basic/test_tc_basic.py b/tests/topotests/tc_basic/test_tc_basic.py
index f64e83c..822d201 100755
--- a/tests/topotests/tc_basic/test_tc_basic.py
+++ b/tests/topotests/tc_basic/test_tc_basic.py
@@ -22,9 +22,8 @@ sys.path.append(os.path.join(CWD, "../lib/"))
from lib.topogen import Topogen, TopoRouter
from lib.topolog import logger
-pytestmark = [
- pytest.mark.sharpd
-]
+pytestmark = [pytest.mark.sharpd]
+
def build_topo(tgen):
"Build function"
@@ -42,6 +41,7 @@ def build_topo(tgen):
switch = tgen.add_switch("s2")
switch.add_link(r2)
+
# New form of setup/teardown using pytest fixture
@pytest.fixture(scope="module")
def tgen(request):
@@ -79,22 +79,28 @@ def skip_on_failure(tgen):
if tgen.routers_have_failure():
pytest.skip("skipped because of previous test failure")
+
def fetch_iproute2_tc_info(r, interface):
qdisc = r.cmd("tc qdisc show dev %s" % interface)
tclass = r.cmd("tc class show dev %s" % interface)
tfilter = r.cmd("tc filter show dev %s" % interface)
return qdisc, tclass, tfilter
+
# ===================
# The tests functions
# ===================
+
def test_tc_basic(tgen):
"Test installing one pair of filter & class by sharpd"
r1 = tgen.gears["r1"]
intf = "r1-eth0"
- r1.vtysh_cmd("sharp tc dev %s source 192.168.100.0/24 destination 192.168.101.0/24 ip-protocol tcp src-port 8000 dst-port 8001 rate 20mbit" % intf)
+ r1.vtysh_cmd(
+ "sharp tc dev %s source 192.168.100.0/24 destination 192.168.101.0/24 ip-protocol tcp src-port 8000 dst-port 8001 rate 20mbit"
+ % intf
+ )
time.sleep(3)
@@ -115,6 +121,7 @@ def test_tc_basic(tgen):
assert "dst_port 8001" in tfilter
assert "src_port 8000" in tfilter
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
- sys.exit(pytest.main(args)) \ No newline at end of file
+ sys.exit(pytest.main(args))
diff --git a/tests/topotests/zebra_netlink/test_zebra_netlink.py b/tests/topotests/zebra_netlink/test_zebra_netlink.py
index 522c390..d970c04 100644
--- a/tests/topotests/zebra_netlink/test_zebra_netlink.py
+++ b/tests/topotests/zebra_netlink/test_zebra_netlink.py
@@ -94,7 +94,7 @@ def test_zebra_netlink_batching(tgen):
}
match = {}
- base = int(ipaddress.ip_address(u"2.1.3.7"))
+ base = int(ipaddress.ip_address("2.1.3.7"))
for i in range(base, base + count):
pfx = str(ipaddress.ip_network((i, 32)))
match[pfx] = [dict(entry, prefix=pfx)]
diff --git a/tests/topotests/zebra_nht_resolution/test_verify_nh_resolution.py b/tests/topotests/zebra_nht_resolution/test_verify_nh_resolution.py
index 6956ab7..fbef0fe 100644
--- a/tests/topotests/zebra_nht_resolution/test_verify_nh_resolution.py
+++ b/tests/topotests/zebra_nht_resolution/test_verify_nh_resolution.py
@@ -33,30 +33,36 @@ sys.path.append(os.path.join(CWD, "../"))
pytestmark = [pytest.mark.sharpd]
-#GLOBAL VARIABLES
+# GLOBAL VARIABLES
NH1 = "2.2.2.32"
+
def build_topo(tgen):
tgen.add_router("r1")
switch = tgen.add_switch("sw1")
switch.add_link(tgen.gears["r1"])
+
def setup_module(mod):
tgen = Topogen(build_topo, mod.__name__)
tgen.start_topology()
router_list = tgen.routers()
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_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+ )
router.load_config(
TopoRouter.RD_SHARP, os.path.join(CWD, "{}/sharpd.conf".format(rname))
)
tgen.start_router()
+
def teardown_module(_mod):
tgen = get_topogen()
tgen.stop_topology()
+
def test_verify_zebra_nh_resolution(request):
tgen = get_topogen()
tc_name = request.node.name
@@ -67,31 +73,18 @@ def test_verify_zebra_nh_resolution(request):
step("Configure static route")
input_dict_1 = {
- "r1": {
- "static_routes": [
- {"network": "2.2.2.0/24", "next_hop": "r1-eth0"}
- ]
- }
- }
+ "r1": {"static_routes": [{"network": "2.2.2.0/24", "next_hop": "r1-eth0"}]}
+ }
result = create_static_routes(tgen, input_dict_1)
- assert result is True, "Testcase {} : Failed \n Error: {}".format(
- tc_name, result
- )
+ assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result)
step("Verify static routes in RIB of R1")
- input_dict_2 = {
- "r1": {
- "static_routes": [
- {"network": "2.2.2.0/24"}
- ]
- }
- }
+ input_dict_2 = {"r1": {"static_routes": [{"network": "2.2.2.0/24"}]}}
dut = "r1"
result = verify_rib(tgen, "ipv4", dut, input_dict_2)
- assert result is True, "Testcase {} :Failed \n Error: {}".format(
- tc_name, result)
+ assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result)
step("Set the connected flag on the NH tracking entry")
r1.vtysh_cmd("sharp watch nexthop 2.2.2.32 connected")
@@ -108,8 +101,7 @@ def test_verify_zebra_nh_resolution(request):
}
result = verify_ip_nht(tgen, input_dict_nh)
assert result is True, "Testcase {} : Failed \n"
- "Error: Nexthop is missing in RIB".format(
- tc_name, result)
+ "Error: Nexthop is missing in RIB".format(tc_name, result)
step("Add a .32/32 route with the NH as itself")
r1.vtysh_cmd("sharp install routes 2.2.2.32 nexthop 2.2.2.32 1")
@@ -126,11 +118,12 @@ def test_verify_zebra_nh_resolution(request):
}
result = verify_ip_nht(tgen, input_dict_nh)
assert result is True, "Testcase {} : Failed \n"
- "Error: Nexthop became unresolved".format(
- tc_name, result)
+ "Error: Nexthop became unresolved".format(tc_name, result)
- step("Add a .31/32 route with the NH as 2.2.2.32"
- "to verify the NH Resolution behaviour")
+ step(
+ "Add a .31/32 route with the NH as 2.2.2.32"
+ "to verify the NH Resolution behaviour"
+ )
r1.vtysh_cmd("sharp install routes 2.2.2.31 nexthop 2.2.2.32 1")
step("Verify that NH 2.2.2.2/32 doesn't become unresolved")
@@ -145,8 +138,8 @@ def test_verify_zebra_nh_resolution(request):
}
result = verify_ip_nht(tgen, input_dict_nh)
assert result is True, "Testcase {} : Failed \n"
- "Error: Nexthop became unresolved".format(
- tc_name, result)
+ "Error: Nexthop became unresolved".format(tc_name, result)
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
diff --git a/tests/topotests/zebra_seg6_route/r1/routes_setup.json b/tests/topotests/zebra_seg6_route/r1/routes_setup.json
new file mode 100644
index 0000000..d131e4a
--- /dev/null
+++ b/tests/topotests/zebra_seg6_route/r1/routes_setup.json
@@ -0,0 +1,28 @@
+{
+ "2001::/64":[
+ {
+ "prefix":"2001::/64",
+ "prefixLen":64,
+ "protocol":"connected",
+ "vrfName":"default",
+ "selected":true,
+ "destSelected":true,
+ "distance":0,
+ "metric":0,
+ "installed":true,
+ "internalStatus":16,
+ "internalFlags":8,
+ "internalNextHopNum":1,
+ "internalNextHopActiveNum":1,
+ "nexthops":[
+ {
+ "flags":3,
+ "fib":true,
+ "directlyConnected":true,
+ "interfaceName":"dum0",
+ "active":true
+ }
+ ]
+ }
+ ]
+}
diff --git a/tests/topotests/zebra_seg6_route/test_zebra_seg6_route.py b/tests/topotests/zebra_seg6_route/test_zebra_seg6_route.py
index f872f7a..4a4cf06 100755
--- a/tests/topotests/zebra_seg6_route/test_zebra_seg6_route.py
+++ b/tests/topotests/zebra_seg6_route/test_zebra_seg6_route.py
@@ -73,6 +73,16 @@ def test_zebra_seg6_routes():
return False
return topotest.json_cmp(output, expected)
+ def check_connected(router, dest, expected):
+ logger.info("Checking for connected")
+ output = json.loads(router.vtysh_cmd("show ipv6 route {} json".format(dest)))
+ return topotest.json_cmp(output, expected)
+
+ expected = open_json_file(os.path.join(CWD, "{}/routes_setup.json".format("r1")))
+ test_func = partial(check_connected, r1, "2001::/64", expected)
+ success, result = topotest.run_and_expect(test_func, None, count=20, wait=1)
+ assert result is None, "Failed to fully setup connected routes needed"
+
manifests = open_json_file(os.path.join(CWD, "{}/routes.json".format("r1")))
for manifest in manifests:
dest = manifest["in"]["dest"]