summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alpine/APKBUILD.in2
-rw-r--r--babeld/babeld.c14
-rw-r--r--bfdd/control.c21
-rw-r--r--bgpd/bgp_damp.c6
-rw-r--r--bgpd/bgp_dump.c7
-rw-r--r--bgpd/bgp_evpn_mh.c2
-rw-r--r--bgpd/bgp_fsm.c10
-rw-r--r--bgpd/bgp_fsm.h2
-rw-r--r--bgpd/bgp_io.c4
-rw-r--r--bgpd/bgp_nb_config.c2
-rw-r--r--bgpd/bgp_packet.c7
-rw-r--r--bgpd/bgp_route.c78
-rw-r--r--bgpd/bgp_trace.c4
-rw-r--r--bgpd/bgp_trace.h131
-rw-r--r--bgpd/bgp_updgrp.c6
-rw-r--r--bgpd/rfapi/rfapi_import.c41
-rw-r--r--bgpd/rfapi/rfapi_monitor.c26
-rw-r--r--bgpd/rfapi/rfapi_rib.c28
-rw-r--r--bgpd/rfapi/vnc_export_bgp.c31
-rw-r--r--bgpd/subdir.am6
-rwxr-xr-xconfigure.ac28
-rw-r--r--doc/developer/index.rst1
-rw-r--r--doc/developer/tracing.rst314
-rw-r--r--doc/user/isisd.rst12
-rw-r--r--eigrpd/eigrp_filter.c16
-rw-r--r--eigrpd/eigrp_interface.c4
-rw-r--r--isisd/fabricd.c27
-rw-r--r--isisd/isis_adjacency.c2
-rw-r--r--isisd/isis_circuit.c24
-rw-r--r--isisd/isis_cli.c17
-rw-r--r--isisd/isis_dr.c6
-rw-r--r--isisd/isis_events.c10
-rw-r--r--isisd/isis_ldp_sync.c18
-rw-r--r--isisd/isis_lfa.c65
-rw-r--r--isisd/isis_lfa.h6
-rw-r--r--isisd/isis_lsp.c8
-rw-r--r--isisd/isis_nb.c6
-rw-r--r--isisd/isis_nb.h2
-rw-r--r--isisd/isis_nb_config.c20
-rw-r--r--isisd/isis_pdu.c6
-rw-r--r--isisd/isis_route.c106
-rw-r--r--isisd/isis_route.h18
-rw-r--r--isisd/isis_spf.c432
-rw-r--r--isisd/isis_spf.h2
-rw-r--r--isisd/isis_spf_private.h19
-rw-r--r--isisd/isis_sr.c1418
-rw-r--r--isisd/isis_sr.h122
-rw-r--r--isisd/isis_tlvs.c4
-rw-r--r--isisd/isis_tlvs.h4
-rw-r--r--isisd/isis_tx_queue.c9
-rw-r--r--isisd/isis_zebra.c148
-rw-r--r--isisd/isis_zebra.h10
-rw-r--r--isisd/isisd.c16
-rw-r--r--ldpd/accept.c6
-rw-r--r--ldpd/adjacency.c8
-rw-r--r--ldpd/control.c4
-rw-r--r--ldpd/interface.c10
-rw-r--r--ldpd/lde.c8
-rw-r--r--ldpd/lde_lib.c4
-rw-r--r--ldpd/ldpd.c14
-rw-r--r--ldpd/ldpe.c14
-rw-r--r--ldpd/neighbor.c18
-rw-r--r--ldpd/packet.c6
-rw-r--r--lib/agentx.c7
-rw-r--r--lib/frr_pthread.c5
-rw-r--r--lib/frr_zmq.c22
-rw-r--r--lib/hash.c14
-rw-r--r--lib/ldp_sync.c2
-rw-r--r--lib/libfrr_trace.c4
-rw-r--r--lib/libfrr_trace.h240
-rw-r--r--lib/linklist.c9
-rw-r--r--lib/memory.c5
-rw-r--r--lib/northbound.c58
-rw-r--r--lib/northbound.h23
-rw-r--r--lib/northbound_cli.c8
-rw-r--r--lib/northbound_confd.c12
-rw-r--r--lib/northbound_sysrepo.c12
-rw-r--r--lib/spf_backoff.c9
-rw-r--r--lib/subdir.am8
-rw-r--r--lib/table.c7
-rw-r--r--lib/thread.c49
-rw-r--r--lib/thread.h19
-rw-r--r--lib/trace.h80
-rw-r--r--lib/workqueue.c4
-rw-r--r--lib/yang.c40
-rw-r--r--lib/yang.h28
-rw-r--r--lib/yang_translator.c22
-rw-r--r--lib/zassert.h2
-rw-r--r--lib/zlog.c29
-rw-r--r--nhrpd/netlink_arp.c2
-rw-r--r--nhrpd/nhrp_nhs.c2
-rw-r--r--ospfd/ospf_apiserver.c17
-rw-r--r--ospfd/ospf_ext.c25
-rw-r--r--ospfd/ospf_ism.h8
-rw-r--r--ospfd/ospf_ldp_sync.c23
-rw-r--r--ospfd/ospf_nsm.h8
-rw-r--r--ospfd/ospf_packet.c6
-rw-r--r--ospfd/ospf_sr.c8
-rw-r--r--ospfd/ospfd.c7
-rw-r--r--ospfd/ospfd.h8
-rw-r--r--pbrd/pbr_zebra.c4
-rw-r--r--pimd/pim_msdp.h4
-rw-r--r--pimd/pim_neighbor.c2
-rw-r--r--pimd/pim_upstream.c2
-rw-r--r--ripd/rip_interface.c5
-rw-r--r--ripd/rip_peer.c3
-rw-r--r--ripd/ripd.c2
-rw-r--r--ripd/ripd.h2
-rw-r--r--ripngd/ripng_interface.c5
-rw-r--r--ripngd/ripng_peer.c4
-rw-r--r--ripngd/ripngd.c21
-rw-r--r--ripngd/ripngd.h8
-rw-r--r--tests/isisd/test_isis_spf.c4
-rw-r--r--tests/isisd/test_isis_spf.refout815
-rw-r--r--tests/lib/test_timer_correctness.c2
-rw-r--r--tests/lib/test_timer_performance.c5
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref44
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref66
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref44
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref50
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref44
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref50
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref44
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref50
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref50
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref50
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref31
-rw-r--r--tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref50
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref45
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref48
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/isisd.conf2
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref19
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref14
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref47
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref47
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref45
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref16
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref61
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref47
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref18
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref47
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref39
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref47
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref12
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref47
-rw-r--r--tests/topotests/isis-sr-topo1/rt4/zebra.conf2
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/isisd.conf2
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref19
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref34
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref34
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref43
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref29
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref27
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref25
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref11
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref27
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref27
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref27
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref27
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref23
-rw-r--r--tests/topotests/isis-sr-topo1/rt5/zebra.conf2
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref63
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref65
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref168
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref33
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref35
-rw-r--r--tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref36
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref133
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step1/show_ipv6_route.ref56
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step1/show_mpls_table.ref68
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff36
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff20
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff36
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff20
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff105
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff96
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step4/show_mpls_table.ref.diff120
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step5/show_ip_route.ref.diff105
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff96
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step5/show_mpls_table.ref.diff130
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step7/show_ip_route.ref.diff169
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step7/show_ipv6_route.ref.diff63
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff80
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step8/show_ip_route.ref.diff169
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step8/show_ipv6_route.ref.diff63
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff70
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step9/show_ip_route.ref.diff82
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff55
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff152
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step1/show_ip_route.ref173
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step1/show_ipv6_route.ref56
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step1/show_mpls_table.ref92
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff193
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step4/show_ipv6_route.ref.diff71
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step4/show_mpls_table.ref.diff87
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step5/show_ip_route.ref.diff191
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step5/show_ipv6_route.ref.diff71
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step5/show_mpls_table.ref.diff86
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step6/show_ip_route.ref.diff83
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff71
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff48
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff41
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step7/show_ipv6_route.ref.diff40
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step7/show_mpls_table.ref.diff40
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step8/show_ip_route.ref.diff41
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step8/show_ipv6_route.ref.diff40
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step8/show_mpls_table.ref.diff40
-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.ref.diff11
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff63
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref100
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step1/show_ipv6_route.ref52
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step1/show_mpls_table.ref68
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff212
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff162
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff283
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff210
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff162
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff283
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff33
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff15
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff26
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff6
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff6
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff14
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref100
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step1/show_ipv6_route.ref44
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step1/show_mpls_table.ref68
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff112
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step4/show_ipv6_route.ref.diff66
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff99
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff112
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step5/show_ipv6_route.ref.diff66
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff97
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff58
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref20
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step1/show_ipv6_route.ref24
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step1/show_mpls_table.ref8
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff45
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step4/show_ipv6_route.ref.diff49
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff76
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff45
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff49
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff83
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff6
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff12
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff14
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step7/show_ipv6_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff18
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff4
-rw-r--r--tests/topotests/isis-topo1-vrf/r1/r1_route.json14
-rw-r--r--tests/topotests/isis-topo1-vrf/r2/r2_route.json14
-rw-r--r--tests/topotests/isis-topo1-vrf/r3/r3_route.json14
-rw-r--r--tests/topotests/isis-topo1-vrf/r4/r4_route.json12
-rw-r--r--tests/topotests/isis-topo1/r1/r1_route.json13
-rw-r--r--tests/topotests/isis-topo1/r2/r2_route.json13
-rw-r--r--tests/topotests/isis-topo1/r3/r3_route.json13
-rw-r--r--tests/topotests/isis-topo1/r4/r4_route.json13
-rw-r--r--tools/coccinelle/README.md14
-rw-r--r--tools/coccinelle/thread_cancel_api.cocci68
-rw-r--r--tools/gen_northbound_callbacks.c7
-rw-r--r--tools/gen_yang_deviations.c4
-rw-r--r--watchfrr/watchfrr.c13
-rw-r--r--yang/frr-isisd.yang6
-rw-r--r--zebra/irdp_main.c8
-rw-r--r--zebra/kernel_netlink.c4
-rw-r--r--zebra/main.c4
-rw-r--r--zebra/zebra_evpn_mh.c10
-rw-r--r--zebra/zebra_fpm.c8
-rw-r--r--zebra/zebra_mpls.c43
-rw-r--r--zebra/zebra_netns_notify.c2
-rw-r--r--zebra/zebra_nhg.c52
-rw-r--r--zebra/zebra_nhg.h9
-rw-r--r--zebra/zebra_ptm.c13
-rw-r--r--zebra/zebra_pw.c4
-rw-r--r--zebra/zebra_rib.c127
-rw-r--r--zebra/zebra_routemap.c4
422 files changed, 12518 insertions, 5403 deletions
diff --git a/alpine/APKBUILD.in b/alpine/APKBUILD.in
index 43a77832a9..d6c6c5f0af 100644
--- a/alpine/APKBUILD.in
+++ b/alpine/APKBUILD.in
@@ -6,7 +6,7 @@ pkgrel=0
pkgdesc="FRRouting is a fork of quagga"
url="https://frrouting.org/"
license="GPL-2.0"
-depends="json-c c-ares ipsec-tools iproute2 python3 py-ipaddr bash"
+depends="json-c c-ares iproute2 python3 bash"
makedepends="ncurses-dev net-snmp-dev gawk texinfo perl
acct autoconf automake bash binutils bison bsd-compat-headers build-base
c-ares c-ares-dev ca-certificates cryptsetup-libs curl device-mapper-libs
diff --git a/babeld/babeld.c b/babeld/babeld.c
index 09955cfbef..895ede7040 100644
--- a/babeld/babeld.c
+++ b/babeld/babeld.c
@@ -317,13 +317,9 @@ babel_clean_routing_process(void)
flush_all_routes();
babel_interface_close_all();
- /* cancel threads */
- if (babel_routing_process->t_read != NULL) {
- thread_cancel(babel_routing_process->t_read);
- }
- if (babel_routing_process->t_update != NULL) {
- thread_cancel(babel_routing_process->t_update);
- }
+ /* cancel events */
+ thread_cancel(&babel_routing_process->t_read);
+ thread_cancel(&babel_routing_process->t_update);
distribute_list_delete(&babel_routing_process->distribute_ctx);
XFREE(MTYPE_BABEL, babel_routing_process);
@@ -503,9 +499,7 @@ static void
babel_set_timer(struct timeval *timeout)
{
long msecs = timeout->tv_sec * 1000 + timeout->tv_usec / 1000;
- if (babel_routing_process->t_update != NULL) {
- thread_cancel(babel_routing_process->t_update);
- }
+ thread_cancel(&(babel_routing_process->t_update));
thread_add_timer_msec(master, babel_main_loop, NULL, msecs, &babel_routing_process->t_update);
}
diff --git a/bfdd/control.c b/bfdd/control.c
index 3b954c64f8..4929bf1998 100644
--- a/bfdd/control.c
+++ b/bfdd/control.c
@@ -145,10 +145,7 @@ void control_shutdown(void)
{
struct bfd_control_socket *bcs;
- if (bglobal.bg_csockev) {
- thread_cancel(bglobal.bg_csockev);
- bglobal.bg_csockev = NULL;
- }
+ thread_cancel(&bglobal.bg_csockev);
socket_close(&bglobal.bg_csock);
@@ -204,15 +201,8 @@ static void control_free(struct bfd_control_socket *bcs)
struct bfd_control_queue *bcq;
struct bfd_notify_peer *bnp;
- if (bcs->bcs_ev) {
- thread_cancel(bcs->bcs_ev);
- bcs->bcs_ev = NULL;
- }
-
- if (bcs->bcs_outev) {
- thread_cancel(bcs->bcs_outev);
- bcs->bcs_outev = NULL;
- }
+ thread_cancel(&(bcs->bcs_ev));
+ thread_cancel(&(bcs->bcs_outev));
close(bcs->bcs_sd);
@@ -318,10 +308,7 @@ static int control_queue_dequeue(struct bfd_control_socket *bcs)
return 1;
empty_list:
- if (bcs->bcs_outev) {
- thread_cancel(bcs->bcs_outev);
- bcs->bcs_outev = NULL;
- }
+ thread_cancel(&(bcs->bcs_outev));
bcs->bcs_bout = NULL;
return 0;
}
diff --git a/bgpd/bgp_damp.c b/bgpd/bgp_damp.c
index 9992168182..94a27ead0e 100644
--- a/bgpd/bgp_damp.c
+++ b/bgpd/bgp_damp.c
@@ -467,10 +467,8 @@ int bgp_damp_disable(struct bgp *bgp, afi_t afi, safi_t safi)
if (!CHECK_FLAG(bgp->af_flags[afi][safi], BGP_CONFIG_DAMPENING))
return 0;
- /* Cancel reuse thread. */
- if (bdc->t_reuse)
- thread_cancel(bdc->t_reuse);
- bdc->t_reuse = NULL;
+ /* Cancel reuse event. */
+ thread_cancel(&(bdc->t_reuse));
/* Clean BGP dampening information. */
bgp_damp_info_clean(afi, safi);
diff --git a/bgpd/bgp_dump.c b/bgpd/bgp_dump.c
index abd349a188..975bba9314 100644
--- a/bgpd/bgp_dump.c
+++ b/bgpd/bgp_dump.c
@@ -677,11 +677,8 @@ static int bgp_dump_unset(struct bgp_dump *bgp_dump)
bgp_dump->fp = NULL;
}
- /* Removing interval thread. */
- if (bgp_dump->t_interval) {
- thread_cancel(bgp_dump->t_interval);
- bgp_dump->t_interval = NULL;
- }
+ /* Removing interval event. */
+ thread_cancel(&bgp_dump->t_interval);
bgp_dump->interval = 0;
diff --git a/bgpd/bgp_evpn_mh.c b/bgpd/bgp_evpn_mh.c
index 1a58541a71..8f81278dee 100644
--- a/bgpd/bgp_evpn_mh.c
+++ b/bgpd/bgp_evpn_mh.c
@@ -2911,7 +2911,7 @@ void bgp_evpn_mh_finish(void)
es_next) {
bgp_evpn_es_local_info_clear(es);
}
- thread_cancel(bgp_mh_info->t_cons_check);
+ thread_cancel(&bgp_mh_info->t_cons_check);
list_delete(&bgp_mh_info->local_es_list);
list_delete(&bgp_mh_info->pend_es_list);
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index 61119ced80..4468408415 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -704,8 +704,8 @@ bool bgp_update_delay_configured(struct bgp *bgp)
on ending the update delay. */
void bgp_update_delay_end(struct bgp *bgp)
{
- THREAD_TIMER_OFF(bgp->t_update_delay);
- THREAD_TIMER_OFF(bgp->t_establish_wait);
+ THREAD_OFF(bgp->t_update_delay);
+ THREAD_OFF(bgp->t_establish_wait);
/* Reset update-delay related state */
bgp->update_delay_over = 1;
@@ -924,7 +924,7 @@ static int bgp_maxmed_onstartup_timer(struct thread *thread)
zlog_info("Max med on startup ended - timer expired.");
bgp = THREAD_ARG(thread);
- THREAD_TIMER_OFF(bgp->t_maxmed_onstartup);
+ THREAD_OFF(bgp->t_maxmed_onstartup);
bgp->maxmed_onstartup_over = 1;
bgp_maxmed_update(bgp);
@@ -968,7 +968,7 @@ static int bgp_update_delay_timer(struct thread *thread)
zlog_info("Update delay ended - timer expired.");
bgp = THREAD_ARG(thread);
- THREAD_TIMER_OFF(bgp->t_update_delay);
+ THREAD_OFF(bgp->t_update_delay);
bgp_update_delay_end(bgp);
return 0;
@@ -982,7 +982,7 @@ static int bgp_establish_wait_timer(struct thread *thread)
zlog_info("Establish wait - timer expired.");
bgp = THREAD_ARG(thread);
- THREAD_TIMER_OFF(bgp->t_establish_wait);
+ THREAD_OFF(bgp->t_establish_wait);
bgp_check_update_delay(bgp);
return 0;
diff --git a/bgpd/bgp_fsm.h b/bgpd/bgp_fsm.h
index aa98515c3f..b9156df617 100644
--- a/bgpd/bgp_fsm.h
+++ b/bgpd/bgp_fsm.h
@@ -31,7 +31,7 @@
#define BGP_TIMER_OFF(T) \
do { \
- THREAD_TIMER_OFF(T); \
+ THREAD_OFF(T); \
} while (0)
#define BGP_EVENT_ADD(P, E) \
diff --git a/bgpd/bgp_io.c b/bgpd/bgp_io.c
index 412c8e3e5e..38455b5e02 100644
--- a/bgpd/bgp_io.c
+++ b/bgpd/bgp_io.c
@@ -31,7 +31,7 @@
#include "network.h" // for ERRNO_IO_RETRY
#include "stream.h" // for stream_get_endp, stream_getw_from, str...
#include "ringbuf.h" // for ringbuf_remain, ringbuf_peek, ringbuf_...
-#include "thread.h" // for THREAD_OFF, THREAD_ARG, thread, thread...
+#include "thread.h" // for THREAD_OFF, THREAD_ARG, thread...
#include "zassert.h" // for assert
#include "bgpd/bgp_io.h"
@@ -39,6 +39,7 @@
#include "bgpd/bgp_errors.h" // for expanded error reference information
#include "bgpd/bgp_fsm.h" // for BGP_EVENT_ADD, bgp_event
#include "bgpd/bgp_packet.h" // for bgp_notify_send_with_data, bgp_notify...
+#include "bgpd/bgp_trace.h" // for frrtraces
#include "bgpd/bgpd.h" // for peer, BGP_MARKER_SIZE, bgp_master, bm
/* clang-format on */
@@ -234,6 +235,7 @@ static int bgp_process_reads(struct thread *thread)
assert(ringbuf_get(ibw, pkt->data, pktsize) == pktsize);
stream_set_endp(pkt, pktsize);
+ frrtrace(2, frr_bgp, packet_read, peer, pkt);
frr_with_mutex(&peer->io_mtx) {
stream_fifo_push(peer->ibuf, pkt);
}
diff --git a/bgpd/bgp_nb_config.c b/bgpd/bgp_nb_config.c
index f01325577c..3f0325eac6 100644
--- a/bgpd/bgp_nb_config.c
+++ b/bgpd/bgp_nb_config.c
@@ -509,7 +509,7 @@ int bgp_global_med_config_max_med_onstart_up_time_destroy(
/* Cancel max-med onstartup if its on */
if (bgp->t_maxmed_onstartup) {
- THREAD_TIMER_OFF(bgp->t_maxmed_onstartup);
+ THREAD_OFF(bgp->t_maxmed_onstartup);
bgp->maxmed_onstartup_over = 1;
}
diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c
index ed22f6711c..2ebac56670 100644
--- a/bgpd/bgp_packet.c
+++ b/bgpd/bgp_packet.c
@@ -63,6 +63,7 @@
#include "bgpd/bgp_io.h"
#include "bgpd/bgp_keepalives.h"
#include "bgpd/bgp_flowspec.h"
+#include "bgpd/bgp_trace.h"
DEFINE_HOOK(bgp_packet_dump,
(struct peer *peer, uint8_t type, bgp_size_t size,
@@ -2366,6 +2367,7 @@ int bgp_process_packet(struct thread *thread)
*/
switch (type) {
case BGP_MSG_OPEN:
+ frrtrace(2, frr_bgp, open_process, peer, size);
atomic_fetch_add_explicit(&peer->open_in, 1,
memory_order_relaxed);
mprc = bgp_open_receive(peer, size);
@@ -2376,6 +2378,7 @@ int bgp_process_packet(struct thread *thread)
__func__, peer->host);
break;
case BGP_MSG_UPDATE:
+ frrtrace(2, frr_bgp, update_process, peer, size);
atomic_fetch_add_explicit(&peer->update_in, 1,
memory_order_relaxed);
peer->readtime = monotime(NULL);
@@ -2387,6 +2390,7 @@ int bgp_process_packet(struct thread *thread)
__func__, peer->host);
break;
case BGP_MSG_NOTIFY:
+ frrtrace(2, frr_bgp, notification_process, peer, size);
atomic_fetch_add_explicit(&peer->notify_in, 1,
memory_order_relaxed);
mprc = bgp_notify_receive(peer, size);
@@ -2397,6 +2401,7 @@ int bgp_process_packet(struct thread *thread)
__func__, peer->host);
break;
case BGP_MSG_KEEPALIVE:
+ frrtrace(2, frr_bgp, keepalive_process, peer, size);
peer->readtime = monotime(NULL);
atomic_fetch_add_explicit(&peer->keepalive_in, 1,
memory_order_relaxed);
@@ -2409,6 +2414,7 @@ int bgp_process_packet(struct thread *thread)
break;
case BGP_MSG_ROUTE_REFRESH_NEW:
case BGP_MSG_ROUTE_REFRESH_OLD:
+ frrtrace(2, frr_bgp, refresh_process, peer, size);
atomic_fetch_add_explicit(&peer->refresh_in, 1,
memory_order_relaxed);
mprc = bgp_route_refresh_receive(peer, size);
@@ -2419,6 +2425,7 @@ int bgp_process_packet(struct thread *thread)
__func__, peer->host);
break;
case BGP_MSG_CAPABILITY:
+ frrtrace(2, frr_bgp, capability_process, peer, size);
atomic_fetch_add_explicit(&peer->dynamic_cap_in, 1,
memory_order_relaxed);
mprc = bgp_capability_receive(peer, size);
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index eba355fadd..b637191d10 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -70,6 +70,7 @@
#include "bgpd/bgp_addpath.h"
#include "bgpd/bgp_mac.h"
#include "bgpd/bgp_network.h"
+#include "bgpd/bgp_trace.h"
#ifdef ENABLE_BGP_VNC
#include "bgpd/rfapi/rfapi_backend.h"
@@ -1296,6 +1297,7 @@ static enum filter_type bgp_input_filter(struct peer *peer,
safi_t safi)
{
struct bgp_filter *filter;
+ enum filter_type ret = FILTER_PERMIT;
filter = &peer->filter[afi][safi];
@@ -1307,26 +1309,43 @@ static enum filter_type bgp_input_filter(struct peer *peer,
if (DISTRIBUTE_IN_NAME(filter)) {
FILTER_EXIST_WARN(DISTRIBUTE, distribute, filter);
- if (access_list_apply(DISTRIBUTE_IN(filter), p) == FILTER_DENY)
- return FILTER_DENY;
+ if (access_list_apply(DISTRIBUTE_IN(filter), p)
+ == FILTER_DENY) {
+ ret = FILTER_DENY;
+ goto done;
+ }
}
if (PREFIX_LIST_IN_NAME(filter)) {
FILTER_EXIST_WARN(PREFIX_LIST, prefix, filter);
- if (prefix_list_apply(PREFIX_LIST_IN(filter), p) == PREFIX_DENY)
- return FILTER_DENY;
+ if (prefix_list_apply(PREFIX_LIST_IN(filter), p)
+ == PREFIX_DENY) {
+ ret = FILTER_DENY;
+ goto done;
+ }
}
if (FILTER_LIST_IN_NAME(filter)) {
FILTER_EXIST_WARN(FILTER_LIST, as, filter);
if (as_list_apply(FILTER_LIST_IN(filter), attr->aspath)
- == AS_FILTER_DENY)
- return FILTER_DENY;
+ == AS_FILTER_DENY) {
+ ret = FILTER_DENY;
+ goto done;
+ }
}
- return FILTER_PERMIT;
+done:
+ if (frrtrace_enabled(frr_bgp, input_filter)) {
+ char pfxprint[PREFIX2STR_BUFFER];
+
+ prefix2str(p, pfxprint, sizeof(pfxprint));
+ frrtrace(5, frr_bgp, input_filter, peer, pfxprint, afi, safi,
+ ret == FILTER_PERMIT ? "permit" : "deny");
+ }
+
+ return ret;
#undef FILTER_EXIST_WARN
}
@@ -1336,6 +1355,7 @@ static enum filter_type bgp_output_filter(struct peer *peer,
safi_t safi)
{
struct bgp_filter *filter;
+ enum filter_type ret = FILTER_PERMIT;
filter = &peer->filter[afi][safi];
@@ -1347,27 +1367,43 @@ static enum filter_type bgp_output_filter(struct peer *peer,
if (DISTRIBUTE_OUT_NAME(filter)) {
FILTER_EXIST_WARN(DISTRIBUTE, distribute, filter);
- if (access_list_apply(DISTRIBUTE_OUT(filter), p) == FILTER_DENY)
- return FILTER_DENY;
+ if (access_list_apply(DISTRIBUTE_OUT(filter), p)
+ == FILTER_DENY) {
+ ret = FILTER_DENY;
+ goto done;
+ }
}
if (PREFIX_LIST_OUT_NAME(filter)) {
FILTER_EXIST_WARN(PREFIX_LIST, prefix, filter);
if (prefix_list_apply(PREFIX_LIST_OUT(filter), p)
- == PREFIX_DENY)
- return FILTER_DENY;
+ == PREFIX_DENY) {
+ ret = FILTER_DENY;
+ goto done;
+ }
}
if (FILTER_LIST_OUT_NAME(filter)) {
FILTER_EXIST_WARN(FILTER_LIST, as, filter);
if (as_list_apply(FILTER_LIST_OUT(filter), attr->aspath)
- == AS_FILTER_DENY)
- return FILTER_DENY;
+ == AS_FILTER_DENY) {
+ ret = FILTER_DENY;
+ goto done;
+ }
}
- return FILTER_PERMIT;
+ if (frrtrace_enabled(frr_bgp, output_filter)) {
+ char pfxprint[PREFIX2STR_BUFFER];
+
+ prefix2str(p, pfxprint, sizeof(pfxprint));
+ frrtrace(5, frr_bgp, output_filter, peer, pfxprint, afi, safi,
+ ret == FILTER_PERMIT ? "permit" : "deny");
+ }
+
+done:
+ return ret;
#undef FILTER_EXIST_WARN
}
@@ -3432,6 +3468,14 @@ int bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id,
uint8_t pi_type = 0;
uint8_t pi_sub_type = 0;
+ if (frrtrace_enabled(frr_bgp, process_update)) {
+ char pfxprint[PREFIX2STR_BUFFER];
+
+ prefix2str(p, pfxprint, sizeof(pfxprint));
+ frrtrace(6, frr_bgp, process_update, peer, pfxprint, addpath_id,
+ afi, safi, attr);
+ }
+
#ifdef ENABLE_BGP_VNC
int vnc_implicit_withdraw = 0;
#endif
@@ -4289,7 +4333,7 @@ void bgp_stop_announce_route_timer(struct peer_af *paf)
if (!paf->t_announce_route)
return;
- THREAD_TIMER_OFF(paf->t_announce_route);
+ thread_cancel(&paf->t_announce_route);
}
/*
@@ -5747,9 +5791,9 @@ void bgp_static_delete(struct bgp *bgp)
bgp_dest_get_prefix(
dest));
bgp_static_free(bgp_static);
- bgp_dest_set_bgp_static_info(dest,
+ bgp_dest_set_bgp_static_info(rm,
NULL);
- bgp_dest_unlock_node(dest);
+ bgp_dest_unlock_node(rm);
}
} else {
bgp_static = bgp_dest_get_bgp_static_info(dest);
diff --git a/bgpd/bgp_trace.c b/bgpd/bgp_trace.c
new file mode 100644
index 0000000000..2ebc63b6b5
--- /dev/null
+++ b/bgpd/bgp_trace.c
@@ -0,0 +1,4 @@
+#define TRACEPOINT_CREATE_PROBES
+#define TRACEPOINT_DEFINE
+
+#include "bgp_trace.h"
diff --git a/bgpd/bgp_trace.h b/bgpd/bgp_trace.h
new file mode 100644
index 0000000000..2566ffb928
--- /dev/null
+++ b/bgpd/bgp_trace.h
@@ -0,0 +1,131 @@
+/* Tracing for BGP
+ *
+ * Copyright (C) 2020 NVIDIA Corporation
+ * Quentin Young
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#if !defined(_BGP_TRACE_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define _BGP_TRACE_H
+
+#include "lib/trace.h"
+
+#ifdef HAVE_LTTNG
+
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER frr_bgp
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "bgpd/bgp_trace.h"
+
+#include <lttng/tracepoint.h>
+
+#include "bgpd/bgpd.h"
+#include "lib/stream.h"
+
+/* clang-format off */
+
+TRACEPOINT_EVENT_CLASS(
+ frr_bgp,
+ packet_process,
+ TP_ARGS(struct peer *, peer, bgp_size_t, size),
+ TP_FIELDS(
+ ctf_string(peer, peer->host ? peer->host : "(unknown peer)")
+ )
+)
+
+#define PKT_PROCESS_TRACEPOINT_INSTANCE(name) \
+ TRACEPOINT_EVENT_INSTANCE( \
+ frr_bgp, packet_process, name, \
+ TP_ARGS(struct peer *, peer, bgp_size_t, size)) \
+ TRACEPOINT_LOGLEVEL(frr_bgp, name, TRACE_INFO)
+
+PKT_PROCESS_TRACEPOINT_INSTANCE(open_process)
+PKT_PROCESS_TRACEPOINT_INSTANCE(keepalive_process)
+PKT_PROCESS_TRACEPOINT_INSTANCE(update_process)
+PKT_PROCESS_TRACEPOINT_INSTANCE(notification_process)
+PKT_PROCESS_TRACEPOINT_INSTANCE(capability_process)
+PKT_PROCESS_TRACEPOINT_INSTANCE(refresh_process)
+
+TRACEPOINT_EVENT(
+ frr_bgp,
+ packet_read,
+ TP_ARGS(struct peer *, peer, struct stream *, pkt),
+ TP_FIELDS(
+ ctf_string(peer, peer->host ? peer->host : "(unknown peer)")
+ ctf_sequence_hex(uint8_t, packet, pkt->data, size_t,
+ STREAM_READABLE(pkt))
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, packet_read, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+ frr_bgp,
+ process_update,
+ TP_ARGS(struct peer *, peer, char *, pfx, uint32_t, addpath_id, afi_t,
+ afi, safi_t, safi, struct attr *, attr),
+ TP_FIELDS(
+ ctf_string(peer, peer->host ? peer->host : "(unknown peer)")
+ ctf_string(prefix, pfx)
+ ctf_integer(uint32_t, addpath_id, addpath_id)
+ ctf_integer(afi_t, afi, afi)
+ ctf_integer(safi_t, safi, safi)
+ ctf_integer_hex(intptr_t, attribute_ptr, attr)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, process_update, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+ frr_bgp,
+ input_filter,
+ TP_ARGS(struct peer *, peer, char *, pfx, afi_t, afi, safi_t, safi,
+ const char *, result),
+ TP_FIELDS(
+ ctf_string(peer, peer->host ? peer->host : "(unknown peer)")
+ ctf_string(prefix, pfx)
+ ctf_integer(afi_t, afi, afi)
+ ctf_integer(safi_t, safi, safi)
+ ctf_string(action, result)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, input_filter, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+ frr_bgp,
+ output_filter,
+ TP_ARGS(struct peer *, peer, char *, pfx, afi_t, afi, safi_t, safi,
+ const char *, result),
+ TP_FIELDS(
+ ctf_string(peer, peer->host ? peer->host : "(unknown peer)")
+ ctf_string(prefix, pfx)
+ ctf_integer(afi_t, afi, afi)
+ ctf_integer(safi_t, safi, safi)
+ ctf_string(action, result)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_bgp, output_filter, TRACE_INFO)
+
+/* clang-format on */
+
+#include <lttng/tracepoint-event.h>
+
+#endif /* HAVE_LTTNG */
+
+#endif /* _BGP_TRACE_H */
diff --git a/bgpd/bgp_updgrp.c b/bgpd/bgp_updgrp.c
index 1685f98181..21eca78abc 100644
--- a/bgpd/bgp_updgrp.c
+++ b/bgpd/bgp_updgrp.c
@@ -796,13 +796,11 @@ static void update_subgroup_delete(struct update_subgroup *subgrp)
UPDGRP_INCR_STAT(subgrp->update_group, subgrps_deleted);
THREAD_OFF(subgrp->t_merge_check);
-
- THREAD_TIMER_OFF(subgrp->t_coalesce);
+ THREAD_OFF(subgrp->t_coalesce);
bpacket_queue_cleanup(SUBGRP_PKTQ(subgrp));
subgroup_clear_table(subgrp);
- THREAD_TIMER_OFF(subgrp->t_coalesce);
sync_delete(subgrp);
if (BGP_DEBUG(update_groups, UPDATE_GROUPS) && subgrp->update_group)
@@ -1768,7 +1766,7 @@ int update_group_refresh_default_originate_route_map(struct thread *thread)
bgp = THREAD_ARG(thread);
update_group_walk(bgp, update_group_default_originate_route_map_walkcb,
reason);
- THREAD_TIMER_OFF(bgp->t_rmap_def_originate_eval);
+ thread_cancel(&bgp->t_rmap_def_originate_eval);
bgp_unlock(bgp);
return 0;
diff --git a/bgpd/rfapi/rfapi_import.c b/bgpd/rfapi/rfapi_import.c
index 68d4f622ed..e3581addee 100644
--- a/bgpd/rfapi/rfapi_import.c
+++ b/bgpd/rfapi/rfapi_import.c
@@ -858,9 +858,9 @@ static void rfapiBgpInfoChainFree(struct bgp_path_info *bpi)
if (CHECK_FLAG(bpi->flags, BGP_PATH_REMOVED)
&& bpi->extra->vnc.import.timer) {
- struct thread *t =
- (struct thread *)bpi->extra->vnc.import.timer;
- struct rfapi_withdraw *wcb = t->arg;
+ struct thread **t =
+ &(bpi->extra->vnc.import.timer);
+ struct rfapi_withdraw *wcb = (*t)->arg;
XFREE(MTYPE_RFAPI_WITHDRAW, wcb);
thread_cancel(t);
@@ -3093,10 +3093,9 @@ static void rfapiBgpInfoFilteredImportEncap(
if (CHECK_FLAG(bpi->flags, BGP_PATH_REMOVED)
&& bpi->extra->vnc.import.timer) {
- struct thread *t =
- (struct thread *)bpi->extra->vnc
- .import.timer;
- struct rfapi_withdraw *wcb = t->arg;
+ struct thread **t =
+ &(bpi->extra->vnc.import.timer);
+ struct rfapi_withdraw *wcb = (*t)->arg;
XFREE(MTYPE_RFAPI_WITHDRAW, wcb);
thread_cancel(t);
@@ -3186,9 +3185,9 @@ static void rfapiBgpInfoFilteredImportEncap(
"%s: removing holddown bpi matching NVE of new route",
__func__);
if (bpi->extra->vnc.import.timer) {
- struct thread *t =
- (struct thread *)bpi->extra->vnc.import.timer;
- struct rfapi_withdraw *wcb = t->arg;
+ struct thread **t =
+ &(bpi->extra->vnc.import.timer);
+ struct rfapi_withdraw *wcb = (*t)->arg;
XFREE(MTYPE_RFAPI_WITHDRAW, wcb);
thread_cancel(t);
@@ -3549,10 +3548,9 @@ void rfapiBgpInfoFilteredImportVPN(
if (CHECK_FLAG(bpi->flags, BGP_PATH_REMOVED)
&& bpi->extra->vnc.import.timer) {
- struct thread *t =
- (struct thread *)bpi->extra->vnc
- .import.timer;
- struct rfapi_withdraw *wcb = t->arg;
+ struct thread **t =
+ &(bpi->extra->vnc.import.timer);
+ struct rfapi_withdraw *wcb = (*t)->arg;
XFREE(MTYPE_RFAPI_WITHDRAW, wcb);
thread_cancel(t);
@@ -3768,9 +3766,9 @@ void rfapiBgpInfoFilteredImportVPN(
"%s: removing holddown bpi matching NVE of new route",
__func__);
if (bpi->extra->vnc.import.timer) {
- struct thread *t =
- (struct thread *)bpi->extra->vnc.import.timer;
- struct rfapi_withdraw *wcb = t->arg;
+ struct thread **t =
+ &(bpi->extra->vnc.import.timer);
+ struct rfapi_withdraw *wcb = (*t)->arg;
XFREE(MTYPE_RFAPI_WITHDRAW, wcb);
thread_cancel(t);
@@ -4498,12 +4496,11 @@ static void rfapiDeleteRemotePrefixesIt(
continue;
if (bpi->extra->vnc.import.timer) {
- struct thread *t =
- (struct thread *)bpi
- ->extra->vnc
- .import.timer;
+ struct thread **t =
+ &(bpi->extra->vnc
+ .import.timer);
struct rfapi_withdraw *wcb =
- t->arg;
+ (*t)->arg;
wcb->import_table
->holddown_count[afi] -=
diff --git a/bgpd/rfapi/rfapi_monitor.c b/bgpd/rfapi/rfapi_monitor.c
index a4b0eff03e..ce916c104b 100644
--- a/bgpd/rfapi/rfapi_monitor.c
+++ b/bgpd/rfapi/rfapi_monitor.c
@@ -620,10 +620,7 @@ void rfapiMonitorDel(struct bgp *bgp, struct rfapi_descriptor *rfd,
rfapiMonitorDetachImport(m);
}
- if (m->timer) {
- thread_cancel(m->timer);
- m->timer = NULL;
- }
+ thread_cancel(&m->timer);
/*
* remove from rfd list
@@ -660,10 +657,7 @@ int rfapiMonitorDelHd(struct rfapi_descriptor *rfd)
rfapiMonitorDetachImport(m);
}
- if (m->timer) {
- thread_cancel(m->timer);
- m->timer = NULL;
- }
+ thread_cancel(&m->timer);
XFREE(MTYPE_RFAPI_MONITOR, m);
rn->info = NULL;
@@ -697,10 +691,7 @@ int rfapiMonitorDelHd(struct rfapi_descriptor *rfd)
#endif
}
- if (mon_eth->timer) {
- thread_cancel(mon_eth->timer);
- mon_eth->timer = NULL;
- }
+ thread_cancel(&mon_eth->timer);
/*
* remove from rfd list
@@ -766,8 +757,7 @@ static void rfapiMonitorTimerRestart(struct rfapi_monitor_vpn *m)
if (m->rfd->response_lifetime - remain < 2)
return;
- thread_cancel(m->timer);
- m->timer = NULL;
+ thread_cancel(&m->timer);
}
{
@@ -1078,8 +1068,7 @@ static void rfapiMonitorEthTimerRestart(struct rfapi_monitor_eth *m)
if (m->rfd->response_lifetime - remain < 2)
return;
- thread_cancel(m->timer);
- m->timer = NULL;
+ thread_cancel(&m->timer);
}
{
@@ -1418,10 +1407,7 @@ void rfapiMonitorEthDel(struct bgp *bgp, struct rfapi_descriptor *rfd,
rfapiMonitorEthDetachImport(bgp, val);
}
- if (val->timer) {
- thread_cancel(val->timer);
- val->timer = NULL;
- }
+ thread_cancel(&val->timer);
/*
* remove from rfd list
diff --git a/bgpd/rfapi/rfapi_rib.c b/bgpd/rfapi/rfapi_rib.c
index 09832b32ac..630a379ec2 100644
--- a/bgpd/rfapi/rfapi_rib.c
+++ b/bgpd/rfapi/rfapi_rib.c
@@ -269,9 +269,8 @@ static void rfapi_info_free(struct rfapi_info *goner)
struct rfapi_rib_tcb *tcb;
tcb = goner->timer->arg;
- thread_cancel(goner->timer);
+ thread_cancel(&goner->timer);
XFREE(MTYPE_RFAPI_RECENT_DELETE, tcb);
- goner->timer = NULL;
}
XFREE(MTYPE_RFAPI_INFO, goner);
}
@@ -338,13 +337,11 @@ static void rfapiRibStartTimer(struct rfapi_descriptor *rfd,
struct agg_node *rn, /* route node attached to */
int deleted)
{
- struct thread *t = ri->timer;
struct rfapi_rib_tcb *tcb = NULL;
- if (t) {
- tcb = t->arg;
- thread_cancel(t);
- ri->timer = NULL;
+ if (ri->timer) {
+ tcb = ri->timer->arg;
+ thread_cancel(&ri->timer);
} else {
tcb = XCALLOC(MTYPE_RFAPI_RECENT_DELETE,
sizeof(struct rfapi_rib_tcb));
@@ -917,10 +914,9 @@ static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
if (ri->timer) {
struct rfapi_rib_tcb *tcb;
- tcb = ((struct thread *)ri->timer)->arg;
- thread_cancel(ri->timer);
+ tcb = ri->timer->arg;
+ thread_cancel(&ri->timer);
XFREE(MTYPE_RFAPI_RECENT_DELETE, tcb);
- ri->timer = NULL;
}
vnc_zlog_debug_verbose(
@@ -1003,11 +999,9 @@ static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
if (ori->timer) {
struct rfapi_rib_tcb *tcb;
- tcb = ((struct thread *)ori->timer)
- ->arg;
- thread_cancel(ori->timer);
+ tcb = ori->timer->arg;
+ thread_cancel(&ori->timer);
XFREE(MTYPE_RFAPI_RECENT_DELETE, tcb);
- ori->timer = NULL;
}
#if DEBUG_PROCESS_PENDING_NODE
@@ -1351,11 +1345,9 @@ callback:
if (ri->timer) {
struct rfapi_rib_tcb *tcb;
- tcb = ((struct thread *)ri->timer)->arg;
- thread_cancel(
- (struct thread *)ri->timer);
+ tcb = ri->timer->arg;
+ thread_cancel(&ri->timer);
XFREE(MTYPE_RFAPI_RECENT_DELETE, tcb);
- ri->timer = NULL;
}
RFAPI_RIB_CHECK_COUNTS(0, delete_list->count);
diff --git a/bgpd/rfapi/vnc_export_bgp.c b/bgpd/rfapi/vnc_export_bgp.c
index b56261669c..11f39b2b82 100644
--- a/bgpd/rfapi/vnc_export_bgp.c
+++ b/bgpd/rfapi/vnc_export_bgp.c
@@ -1711,14 +1711,11 @@ void vnc_direct_bgp_rh_add_route(struct bgp *bgp, afi_t afi,
rfapiGetVncLifetime(attr, &eti->lifetime);
eti->lifetime = rfapiGetHolddownFromLifetime(eti->lifetime);
- if (eti->timer) {
- /*
- * export expiration timer is already running on
- * this route: cancel it
- */
- thread_cancel(eti->timer);
- eti->timer = NULL;
- }
+ /*
+ * export expiration timer is already running on
+ * this route: cancel it
+ */
+ thread_cancel(&eti->timer);
bgp_update(peer, prefix, /* prefix */
0, /* addpath_id */
@@ -1947,15 +1944,12 @@ void vnc_direct_bgp_rh_vpn_enable(struct bgp *bgp, afi_t afi)
rfapiGetVncLifetime(ri->attr,
&eti->lifetime);
- if (eti->timer) {
- /*
- * export expiration timer is
- * already running on
- * this route: cancel it
- */
- thread_cancel(eti->timer);
- eti->timer = NULL;
- }
+ /*
+ * export expiration timer is
+ * already running on
+ * this route: cancel it
+ */
+ thread_cancel(&eti->timer);
vnc_zlog_debug_verbose(
"%s: calling bgp_update",
@@ -2024,8 +2018,7 @@ void vnc_direct_bgp_rh_vpn_disable(struct bgp *bgp, afi_t afi)
ZEBRA_ROUTE_VNC_DIRECT_RH,
BGP_ROUTE_REDISTRIBUTE);
if (eti) {
- if (eti->timer)
- thread_cancel(eti->timer);
+ thread_cancel(&eti->timer);
vnc_eti_delete(eti);
}
diff --git a/bgpd/subdir.am b/bgpd/subdir.am
index 717e157078..3cb32b1f08 100644
--- a/bgpd/subdir.am
+++ b/bgpd/subdir.am
@@ -104,6 +104,7 @@ bgpd_libbgp_a_SOURCES = \
bgpd/bgpd.c \
bgpd/bgp_nb.c \
bgpd/bgp_nb_config.c \
+ bgpd/bgp_trace.c \
# end
if ENABLE_BGP_VNC
@@ -178,6 +179,7 @@ noinst_HEADERS += \
bgpd/bgp_zebra.h \
bgpd/bgpd.h \
bgpd/bgp_nb.h \
+ bgpd/bgp_trace.h \
\
bgpd/rfapi/bgp_rfapi_cfg.h \
bgpd/rfapi/rfapi_import.h \
@@ -208,8 +210,8 @@ bgpd_bgpd_CFLAGS = $(AM_CFLAGS)
bgpd_bgp_btoa_CFLAGS = $(AM_CFLAGS)
# RFPLDADD is set in bgpd/rfp-example/librfp/subdir.am
-bgpd_bgpd_LDADD = bgpd/libbgp.a $(RFPLDADD) lib/libfrr.la $(LIBCAP) $(LIBM)
-bgpd_bgp_btoa_LDADD = bgpd/libbgp.a $(RFPLDADD) lib/libfrr.la $(LIBCAP) $(LIBM)
+bgpd_bgpd_LDADD = bgpd/libbgp.a $(RFPLDADD) lib/libfrr.la $(LIBCAP) $(LIBM) $(UST_LIBS)
+bgpd_bgp_btoa_LDADD = bgpd/libbgp.a $(RFPLDADD) lib/libfrr.la $(LIBCAP) $(LIBM) $(UST_LIBS)
bgpd_bgpd_snmp_la_SOURCES = bgpd/bgp_snmp.c
bgpd_bgpd_snmp_la_CFLAGS = $(WERROR) $(SNMP_CFLAGS) -std=gnu99
diff --git a/configure.ac b/configure.ac
index 8e86ba87ff..bda9a34504 100755
--- a/configure.ac
+++ b/configure.ac
@@ -566,6 +566,10 @@ AC_ARG_ENABLE([grpc],
AS_HELP_STRING([--enable-grpc], [enable the gRPC northbound plugin]))
AC_ARG_ENABLE([zeromq],
AS_HELP_STRING([--enable-zeromq], [enable ZeroMQ handler (libfrrzmq)]))
+AC_ARG_ENABLE([lttng],
+ AS_HELP_STRING([--enable-lttng], [enable LTTng tracing]))
+AC_ARG_ENABLE([usdt],
+ AS_HELP_STRING([--enable-usdt], [enable USDT probes]))
AC_ARG_WITH([libpam],
AS_HELP_STRING([--with-libpam], [use libpam for PAM support in vtysh]))
AC_ARG_ENABLE([ospfapi],
@@ -1851,6 +1855,30 @@ if test "$enable_grpc" = "yes"; then
])
fi
+dnl -----
+dnl LTTng
+dnl -----
+if test "$enable_lttng" = "yes"; then
+ PKG_CHECK_MODULES([UST], [lttng-ust >= 2.12.0], [
+ AC_DEFINE([HAVE_LTTNG], [1], [Enable LTTng support])
+ LTTNG=true
+ ], [
+ AC_MSG_ERROR([configuration specifies --enable-lttng but lttng-ust was not found])
+ ])
+fi
+
+dnl ----
+dnl USDT
+dnl ----
+if test "$enable_usdt" = "yes"; then
+ AC_CHECK_HEADERS([sys/sdt.h], [
+ AC_DEFINE([HAVE_USDT], [1], [Enable USDT probes])
+ USDT=true
+ ], [
+ AC_MSG_ERROR([configuration specifies --enable-usdt but no USDT kernel headers (sys/sdt.h) found])
+ ])
+fi
+
dnl ------
dnl ZeroMQ
dnl ------
diff --git a/doc/developer/index.rst b/doc/developer/index.rst
index 1f803b3772..1ba0f31c8a 100644
--- a/doc/developer/index.rst
+++ b/doc/developer/index.rst
@@ -9,6 +9,7 @@ FRRouting Developer's Guide
packaging
process-architecture
library
+ tracing
testing
bgpd
fpm
diff --git a/doc/developer/tracing.rst b/doc/developer/tracing.rst
new file mode 100644
index 0000000000..ee0a6be008
--- /dev/null
+++ b/doc/developer/tracing.rst
@@ -0,0 +1,314 @@
+.. _tracing:
+
+Tracing
+=======
+
+FRR has a small but growing number of static tracepoints available for use with
+various tracing systems. These tracepoints can assist with debugging,
+performance analysis and to help understand program flow. They can also be used
+for monitoring.
+
+Developers are encouraged to write new static tracepoints where sensible. They
+are not compiled in by default, and even when they are, they have no overhead
+unless enabled by a tracer, so it is okay to be liberal with them.
+
+
+Supported tracers
+-----------------
+
+Presently two types of tracepoints are supported:
+
+- `LTTng tracepoints <https://lttng.org/>`_
+- `USDT probes <http://dtrace.org/guide/chp-usdt.html>`_
+
+LTTng is a tracing framework for Linux only. It offers extremely low overhead
+and very rich tracing capabilities. FRR supports LTTng-UST, which is the
+userspace implementation. LTTng tracepoints are very rich in detail. No kernel
+modules are needed. Besides only being available for Linux, the primary
+downside of LTTng is the need to link to ``lttng-ust``.
+
+USDT probes originate from Solaris, where they were invented for use with
+dtrace. They are a kernel feature. At least Linux and FreeBSD support them. No
+library is needed; support is compiled in via a system header
+(``<sys/sdt.h>``). USDT probes are much slower than LTTng tracepoints and offer
+less flexibility in what information can be gleaned from them.
+
+LTTng is capable of tracing USDT probes but has limited support for them.
+SystemTap and dtrace both work only with USDT probes.
+
+
+Usage
+-----
+
+To compile with tracepoints, use one of the following configure flags:
+
+.. program:: configure.ac
+
+.. option:: --enable-lttng=yes
+
+ Generate LTTng tracepoints
+
+.. option:: --enable-usdt=yes
+
+ Generate USDT probes
+
+To trace with LTTng, compile with either one (prefer :option:`--enable-lttng`
+run the target in non-forking mode (no ``-d``) and use LTTng as usual (refer to
+LTTng user manual). When using USDT probes with LTTng, follow the example in
+`this article
+<https://lttng.org/blog/2019/10/15/new-dynamic-user-space-tracing-in-lttng/>`_.
+To trace with dtrace or SystemTap, compile with :option:`--enable-usdt=yes` and
+use your tracer as usual.
+
+To see available USDT probes::
+
+ readelf -n /usr/lib/frr/bgpd
+
+Example::
+
+ root@host ~> readelf -n /usr/lib/frr/bgpd
+
+ Displaying notes found in: .note.ABI-tag
+ Owner Data size Description
+ GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
+ OS: Linux, ABI: 3.2.0
+
+ Displaying notes found in: .note.gnu.build-id
+ Owner Data size Description
+ GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
+ Build ID: 4f42933a69dcb42a519bc459b2105177c8adf55d
+
+ Displaying notes found in: .note.stapsdt
+ Owner Data size Description
+ stapsdt 0x00000045 NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: packet_read
+ Location: 0x000000000045ee48, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-96(%rbp) 8@-104(%rbp)
+ stapsdt 0x00000047 NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: open_process
+ Location: 0x000000000047c43b, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-224(%rbp) 2@-226(%rbp)
+ stapsdt 0x00000049 NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: update_process
+ Location: 0x000000000047c4bf, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-208(%rbp) 2@-210(%rbp)
+ stapsdt 0x0000004f NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: notification_process
+ Location: 0x000000000047c557, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-192(%rbp) 2@-194(%rbp)
+ stapsdt 0x0000004c NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: keepalive_process
+ Location: 0x000000000047c5db, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-176(%rbp) 2@-178(%rbp)
+ stapsdt 0x0000004a NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: refresh_process
+ Location: 0x000000000047c673, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-160(%rbp) 2@-162(%rbp)
+ stapsdt 0x0000004d NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: capability_process
+ Location: 0x000000000047c6f7, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-144(%rbp) 2@-146(%rbp)
+ stapsdt 0x0000006f NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: output_filter
+ Location: 0x000000000048e33a, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-144(%rbp) 8@-152(%rbp) 4@-156(%rbp) 4@-160(%rbp) 8@-168(%rbp)
+ stapsdt 0x0000007d NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: process_update
+ Location: 0x0000000000491f10, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-800(%rbp) 8@-808(%rbp) 4@-812(%rbp) 4@-816(%rbp) 4@-820(%rbp) 8@-832(%rbp)
+ stapsdt 0x0000006e NT_STAPSDT (SystemTap probe descriptors)
+ Provider: frr_bgp
+ Name: input_filter
+ Location: 0x00000000004940ed, Base: 0x00000000005a09d2, Semaphore: 0x0000000000000000
+ Arguments: 8@-144(%rbp) 8@-152(%rbp) 4@-156(%rbp) 4@-160(%rbp) 8@-168(%rbp)
+
+
+To see available LTTng probes, run the target, create a session and then::
+
+ lttng list --userspace | grep frr
+
+Example::
+
+ root@host ~> lttng list --userspace | grep frr
+ PID: 11157 - Name: /usr/lib/frr/bgpd
+ frr_libfrr:route_node_get (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:list_sort (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:list_delete_node (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:list_remove (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:list_add (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:memfree (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:memalloc (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:frr_pthread_stop (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:frr_pthread_run (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)
+ frr_libfrr:thread_call (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:thread_cancel_async (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:thread_cancel (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:schedule_write (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:schedule_read (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:schedule_event (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:schedule_timer (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:hash_release (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:hash_insert (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_libfrr:hash_get (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:output_filter (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:input_filter (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:process_update (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:packet_read (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:refresh_process (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:capability_process (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:notification_process (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:update_process (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:keepalive_process (loglevel: TRACE_INFO (6)) (type: tracepoint)
+ frr_bgp:open_process (loglevel: TRACE_INFO (6)) (type: tracepoint)
+
+When using LTTng, you can also get zlogs as trace events by enabling
+the ``lttng_ust_tracelog:*`` event class.
+
+Concepts
+--------
+
+Tracepoints are statically defined points in code where a developer has
+determined that outside observers might gain something from knowing what is
+going on at that point. It's like logging but with the ability to dump large
+amounts of internal data with much higher performance. LTTng has a good summary
+`here <https://lttng.org/docs/#doc-what-is-tracing>`_.
+
+Each tracepoint has a "provider" and name. The provider is basically a
+namespace; for example, ``bgpd`` uses the provider name ``frr_bgp``. The name
+is arbitrary, but because providers share a global namespace on the user's
+system, all providers from FRR should be prefixed by ``frr_``. The tracepoint
+name is just the name of the event. Events are globally named by their provider
+and name. For example, the event when BGP reads a packet from a peer is
+``frr_bgp:packet_read``.
+
+To do tracing, the tracing tool of choice is told which events to listen to.
+For example, to listen to all events from FRR's BGP implementation, you would
+enable the events ``frr_bgp:*``. In the same tracing session you could also
+choose to record all memory allocations by enabling the ``malloc`` tracepoints
+in ``libc`` as well as all kernel skb operations using the various in-kernel
+tracepoints. This allows you to build as complete a view as desired of what the
+system is doing during the tracing window (subject to what tracepoints are
+available).
+
+Of particular use are the tracepoints for FRR's internal event scheduler;
+tracing these allows you to see all events executed by all event loops for the
+target(s) in question. Here's a couple events selected from a trace of BGP
+during startup::
+
+ ...
+
+ [18:41:35.750131763] (+0.000048901) host frr_libfrr:thread_call: { cpu_id =
+ 1 }, { threadmaster_name = "default", function_name = "zclient_connect",
+ scheduled_from = "lib/zclient.c", scheduled_on_line = 3877, thread_addr =
+ 0x0, file_descriptor = 0, event_value = 0, argument_ptr = 0xA37F70, timer =
+ 0 }
+
+ [18:41:35.750175124] (+0.000020001) host frr_libfrr:thread_call: { cpu_id =
+ 1 }, { threadmaster_name = "default", function_name = "frr_config_read_in",
+ scheduled_from = "lib/libfrr.c", scheduled_on_line = 934, thread_addr = 0x0,
+ file_descriptor = 0, event_value = 0, argument_ptr = 0x0, timer = 0 }
+
+ [18:41:35.753341264] (+0.000010532) host frr_libfrr:thread_call: { cpu_id =
+ 1 }, { threadmaster_name = "default", function_name = "bgp_event",
+ scheduled_from = "bgpd/bgpd.c", scheduled_on_line = 142, thread_addr = 0x0,
+ file_descriptor = 2, event_value = 2, argument_ptr = 0xE4D780, timer = 2 }
+
+ [18:41:35.753404186] (+0.000004910) host frr_libfrr:thread_call: { cpu_id =
+ 1 }, { threadmaster_name = "default", function_name = "zclient_read",
+ scheduled_from = "lib/zclient.c", scheduled_on_line = 3891, thread_addr =
+ 0x0, file_descriptor = 40, event_value = 40, argument_ptr = 0xA37F70, timer
+ = 40 }
+
+ ...
+
+
+Very useful for getting a time-ordered look into what the process is doing.
+
+
+Adding Tracepoints
+------------------
+
+Adding new tracepoints is a two step process:
+
+1. Define the tracepoint
+2. Use the tracepoint
+
+Tracepoint definitions state the "provider" and name of the tracepoint, along
+with any values it will produce, and how to format them. This is done with
+macros provided by LTTng. USDT probes do not use definitions and are inserted
+at the trace site with a single macro. However, to maintain support for both
+platforms, you must define an LTTng tracepoint when adding a new one.
+``frrtrace()`` will expand to the appropriate ``DTRACE_PROBEn`` macro when USDT
+is in use.
+
+If you are adding new tracepoints to a daemon that has no tracepoints, that
+daemon's ``subdir.am`` must be updated to conditionally link ``lttng-ust``.
+Look at ``bgpd/subdir.am`` for an example of how to do this; grep for
+``UST_LIBS``. Create new files named ``<daemon>_trace.[ch]``. Use
+``bgpd/bgp_trace.[h]`` as boilerplate. If you are adding tracepoints to a
+daemon that already has them, look for the ``<daemon>_trace.h`` file;
+tracepoints are written here.
+
+Refer to the `LTTng developer docs
+<https://lttng.org/docs/#doc-c-application>`_ for details on how to define
+tracepoints.
+
+To use them, simply add a call to ``frrtrace()`` at the point you'd like the
+event to be emitted, like so:
+
+.. code-block:: c
+
+ ...
+
+ switch (type) {
+ case BGP_MSG_OPEN:
+ frrtrace(2, frr_bgp, open_process, peer, size); /* tracepoint */
+ atomic_fetch_add_explicit(&peer->open_in, 1,
+ memory_order_relaxed);
+ mprc = bgp_open_receive(peer, size);
+
+ ...
+
+After recompiling this tracepoint will now be available, either as a USDT probe
+or LTTng tracepoint, depending on your compilation choice.
+
+
+trace.h
+^^^^^^^
+
+Because FRR supports multiple types of tracepoints, the code for creating them
+abstracts away the underlying system being used. This abstraction code is in
+``lib/trace.h``. There are 2 function-like macros that are used for working
+with tracepoints.
+
+- ``frrtrace()`` defines tracepoints
+- ``frrtrace_enabled()`` checks whether a tracepoint is enabled
+
+There is also ``frrtracelog()``, which is used in zlog core code to make zlog
+messages available as trace events to LTTng. This should not be used elsewhere.
+
+There is additional documentation in the header. The key thing to note is that
+you should never include ``trace.h`` in source where you plan to put
+tracepoints; include the tracepoint definition header instead (e.g.
+:file:`bgp_trace.h`).
+
+
+Limitations
+-----------
+
+Tracers do not like ``fork()`` or ``dlopen()``. LTTng has some workarounds for
+this involving interceptor libraries using ``LD_PRELOAD``.
+
+USDT tracepoints are relatively high overhead and probably shouldn't be used
+for "flight recorder" functionality, i.e. enabling and passively recording all
+events for monitoring purposes. It's generally okay to use LTTng like this,
+though.
diff --git a/doc/user/isisd.rst b/doc/user/isisd.rst
index df7c72f8dc..98f5aff7db 100644
--- a/doc/user/isisd.rst
+++ b/doc/user/isisd.rst
@@ -423,8 +423,8 @@ Showing ISIS information
Show topology IS-IS paths to Intermediate Systems, globally, in area
(level-1) or domain (level-2).
-.. index:: show isis route [level-1|level-2] [backup]
-.. clicmd:: show isis route [level-1|level-2] [backup]
+.. index:: show isis route [level-1|level-2] [prefix-sid|backup]
+.. clicmd:: show isis route [level-1|level-2] [prefix-sid|backup]
Show the ISIS routing table, as determined by the most recent SPF
calculation.
@@ -515,14 +515,16 @@ Known limitations:
MPLS dataplane. E.g. for Linux kernel, since version 4.13 the maximum value
is 32.
-.. index:: [no] segment-routing prefix <A.B.C.D/M|X:X::X:X/M> <absolute (16-1048575)|index (0-65535)> [no-php-flag|explicit-null]
-.. clicmd:: [no] segment-routing prefix <A.B.C.D/M|X:X::X:X/M> <absolute (16-1048575)|index (0-65535) [no-php-flag|explicit-null]
+.. index:: [no] segment-routing prefix <A.B.C.D/M|X:X::X:X/M> <absolute (16-1048575)|index (0-65535)> [no-php-flag|explicit-null] [n-flag-clear]
+.. clicmd:: [no] segment-routing prefix <A.B.C.D/M|X:X::X:X/M> <absolute (16-1048575)|index (0-65535) [no-php-flag|explicit-null] [n-flag-clear]
Set the Segment Routing index or absolute label value for the specified
prefix. The 'no-php-flag' means NO Penultimate Hop Popping that allows SR
node to request to its neighbor to not pop the label. The 'explicit-null'
flag allows SR node to request to its neighbor to send IP packet with the
- EXPLICIT-NULL label.
+ EXPLICIT-NULL label. The 'n-flag-clear' option can be used to explicitly
+ clear the Node flag that is set by default for Prefix-SIDs associated to
+ loopback addresses. This option is necessary to configure Anycast-SIDs.
.. index:: show isis segment-routing prefix-sids
.. clicmd:: show isis segment-routing prefix-sids
diff --git a/eigrpd/eigrp_filter.c b/eigrpd/eigrp_filter.c
index 9d5d45ca50..009b57e05f 100644
--- a/eigrpd/eigrp_filter.c
+++ b/eigrpd/eigrp_filter.c
@@ -159,13 +159,10 @@ void eigrp_distribute_update(struct distribute_ctx *ctx,
#endif
// TODO: check Graceful restart after 10sec
- /* check if there is already GR scheduled */
- if (e->t_distribute != NULL) {
- /* if is, cancel schedule */
- thread_cancel(e->t_distribute);
- }
+ /* cancel GR scheduled */
+ thread_cancel(&(e->t_distribute));
+
/* schedule Graceful restart for whole process in 10sec */
- e->t_distribute = NULL;
thread_add_timer(master, eigrp_distribute_timer_process, e,
(10), &e->t_distribute);
@@ -267,11 +264,8 @@ void eigrp_distribute_update(struct distribute_ctx *ctx,
#endif
// TODO: check Graceful restart after 10sec
- /* check if there is already GR scheduled */
- if (ei->t_distribute != NULL) {
- /* if is, cancel schedule */
- thread_cancel(ei->t_distribute);
- }
+ /* Cancel GR scheduled */
+ thread_cancel(&(ei->t_distribute));
/* schedule Graceful restart for interface in 10sec */
e->t_distribute = NULL;
thread_add_timer(master, eigrp_distribute_timer_interface, ei, 10,
diff --git a/eigrpd/eigrp_interface.c b/eigrpd/eigrp_interface.c
index 2f3f347423..dd43dd0478 100644
--- a/eigrpd/eigrp_interface.c
+++ b/eigrpd/eigrp_interface.c
@@ -358,7 +358,7 @@ void eigrp_if_stream_unset(struct eigrp_interface *ei)
if (ei->on_write_q) {
listnode_delete(eigrp->oi_write_q, ei);
if (list_isempty(eigrp->oi_write_q))
- thread_cancel(eigrp->t_write);
+ thread_cancel(&(eigrp->t_write));
ei->on_write_q = 0;
}
}
@@ -420,7 +420,7 @@ void eigrp_if_free(struct eigrp_interface *ei, int source)
struct eigrp *eigrp = ei->eigrp;
if (source == INTERFACE_DOWN_BY_VTY) {
- THREAD_OFF(ei->t_hello);
+ thread_cancel(&ei->t_hello);
eigrp_hello_send(ei, EIGRP_HELLO_GRACEFUL_SHUTDOWN, NULL);
}
diff --git a/isisd/fabricd.c b/isisd/fabricd.c
index 1a081bbea6..57e9e91c15 100644
--- a/isisd/fabricd.c
+++ b/isisd/fabricd.c
@@ -239,14 +239,11 @@ struct fabricd *fabricd_new(struct isis_area *area)
void fabricd_finish(struct fabricd *f)
{
- if (f->initial_sync_timeout)
- thread_cancel(f->initial_sync_timeout);
+ thread_cancel(&(f->initial_sync_timeout));
- if (f->tier_calculation_timer)
- thread_cancel(f->tier_calculation_timer);
+ thread_cancel(&(f->tier_calculation_timer));
- if (f->tier_set_timer)
- thread_cancel(f->tier_set_timer);
+ thread_cancel(&(f->tier_set_timer));
isis_spftree_del(f->spftree);
neighbor_lists_clear(f);
@@ -340,8 +337,7 @@ void fabricd_initial_sync_finish(struct isis_area *area)
f->initial_sync_circuit->interface->name);
f->initial_sync_state = FABRICD_SYNC_COMPLETE;
f->initial_sync_circuit = NULL;
- thread_cancel(f->initial_sync_timeout);
- f->initial_sync_timeout = NULL;
+ thread_cancel(&(f->initial_sync_timeout));
}
static void fabricd_bump_tier_calculation_timer(struct fabricd *f);
@@ -437,22 +433,15 @@ static int fabricd_tier_calculation_cb(struct thread *thread)
static void fabricd_bump_tier_calculation_timer(struct fabricd *f)
{
/* Cancel timer if we already know our tier */
- if (f->tier != ISIS_TIER_UNDEFINED
- || f->tier_set_timer) {
- if (f->tier_calculation_timer) {
- thread_cancel(f->tier_calculation_timer);
- f->tier_calculation_timer = NULL;
- }
+ if (f->tier != ISIS_TIER_UNDEFINED || f->tier_set_timer) {
+ thread_cancel(&(f->tier_calculation_timer));
return;
}
/* If we need to calculate the tier, wait some
* time for the topology to settle before running
* the calculation */
- if (f->tier_calculation_timer) {
- thread_cancel(f->tier_calculation_timer);
- f->tier_calculation_timer = NULL;
- }
+ thread_cancel(&(f->tier_calculation_timer));
thread_add_timer(master, fabricd_tier_calculation_cb, f,
2 * f->area->lsp_gen_interval[ISIS_LEVEL2 - 1],
@@ -737,7 +726,7 @@ void fabricd_trigger_csnp(struct isis_area *area, bool circuit_scoped)
if (!circuit->t_send_csnp[1])
continue;
- thread_cancel(circuit->t_send_csnp[ISIS_LEVEL2 - 1]);
+ thread_cancel(&(circuit->t_send_csnp[ISIS_LEVEL2 - 1]));
thread_add_timer_msec(master, send_l2_csnp, circuit,
isis_jitter(f->csnp_delay, CSNP_JITTER),
&circuit->t_send_csnp[ISIS_LEVEL2 - 1]);
diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c
index 59403b6c23..71d4758163 100644
--- a/isisd/isis_adjacency.c
+++ b/isisd/isis_adjacency.c
@@ -147,7 +147,7 @@ void isis_delete_adj(void *arg)
if (!adj)
return;
- THREAD_TIMER_OFF(adj->t_expire);
+ thread_cancel(&adj->t_expire);
if (adj->adj_state != ISIS_ADJ_DOWN)
adj->adj_state = ISIS_ADJ_DOWN;
diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c
index 3eb3b900a5..730d224cb8 100644
--- a/isisd/isis_circuit.c
+++ b/isisd/isis_circuit.c
@@ -788,12 +788,12 @@ void isis_circuit_down(struct isis_circuit *circuit)
memset(circuit->u.bc.l2_desig_is, 0, ISIS_SYS_ID_LEN + 1);
memset(circuit->u.bc.snpa, 0, ETH_ALEN);
- THREAD_TIMER_OFF(circuit->u.bc.t_send_lan_hello[0]);
- THREAD_TIMER_OFF(circuit->u.bc.t_send_lan_hello[1]);
- THREAD_TIMER_OFF(circuit->u.bc.t_run_dr[0]);
- THREAD_TIMER_OFF(circuit->u.bc.t_run_dr[1]);
- THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[0]);
- THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[1]);
+ thread_cancel(&circuit->u.bc.t_send_lan_hello[0]);
+ thread_cancel(&circuit->u.bc.t_send_lan_hello[1]);
+ thread_cancel(&circuit->u.bc.t_run_dr[0]);
+ thread_cancel(&circuit->u.bc.t_run_dr[1]);
+ thread_cancel(&circuit->u.bc.t_refresh_pseudo_lsp[0]);
+ thread_cancel(&circuit->u.bc.t_refresh_pseudo_lsp[1]);
circuit->lsp_regenerate_pending[0] = 0;
circuit->lsp_regenerate_pending[1] = 0;
@@ -803,15 +803,15 @@ void isis_circuit_down(struct isis_circuit *circuit)
} else if (circuit->circ_type == CIRCUIT_T_P2P) {
isis_delete_adj(circuit->u.p2p.neighbor);
circuit->u.p2p.neighbor = NULL;
- THREAD_TIMER_OFF(circuit->u.p2p.t_send_p2p_hello);
+ thread_cancel(&circuit->u.p2p.t_send_p2p_hello);
}
/* Cancel all active threads */
- THREAD_TIMER_OFF(circuit->t_send_csnp[0]);
- THREAD_TIMER_OFF(circuit->t_send_csnp[1]);
- THREAD_TIMER_OFF(circuit->t_send_psnp[0]);
- THREAD_TIMER_OFF(circuit->t_send_psnp[1]);
- THREAD_OFF(circuit->t_read);
+ thread_cancel(&circuit->t_send_csnp[0]);
+ thread_cancel(&circuit->t_send_csnp[1]);
+ thread_cancel(&circuit->t_send_psnp[0]);
+ thread_cancel(&circuit->t_send_psnp[1]);
+ thread_cancel(&circuit->t_read);
if (circuit->tx_queue) {
isis_tx_queue_free(circuit->tx_queue);
diff --git a/isisd/isis_cli.c b/isisd/isis_cli.c
index a270636dde..383f23758a 100644
--- a/isisd/isis_cli.c
+++ b/isisd/isis_cli.c
@@ -1628,7 +1628,7 @@ DEFPY_YANG (isis_sr_prefix_sid,
"segment-routing prefix\
<A.B.C.D/M|X:X::X:X/M>$prefix\
<absolute$sid_type (16-1048575)$sid_value|index$sid_type (0-65535)$sid_value>\
- [<no-php-flag|explicit-null>$lh_behavior]",
+ [<no-php-flag|explicit-null>$lh_behavior] [n-flag-clear$n_flag_clear]",
SR_STR
"Prefix SID\n"
"IPv4 Prefix\n"
@@ -1638,7 +1638,8 @@ DEFPY_YANG (isis_sr_prefix_sid,
"Specify the index of Prefix Segement ID\n"
"The Prefix Segment ID index\n"
"Don't request Penultimate Hop Popping (PHP)\n"
- "Upstream neighbor must replace prefix-sid with explicit null label\n")
+ "Upstream neighbor must replace prefix-sid with explicit null label\n"
+ "Not a node SID\n")
{
nb_cli_enqueue_change(vty, ".", NB_OP_CREATE, NULL);
nb_cli_enqueue_change(vty, "./sid-value-type", NB_OP_MODIFY, sid_type);
@@ -1656,6 +1657,8 @@ DEFPY_YANG (isis_sr_prefix_sid,
} else
nb_cli_enqueue_change(vty, "./last-hop-behavior", NB_OP_MODIFY,
NULL);
+ nb_cli_enqueue_change(vty, "./n-flag-clear", NB_OP_MODIFY,
+ n_flag_clear ? "true" : "false");
return nb_cli_apply_changes(
vty, "./segment-routing/prefix-sid-map/prefix-sid[prefix='%s']",
@@ -1665,7 +1668,8 @@ DEFPY_YANG (isis_sr_prefix_sid,
DEFPY_YANG (no_isis_sr_prefix_sid,
no_isis_sr_prefix_sid_cmd,
"no segment-routing prefix <A.B.C.D/M|X:X::X:X/M>$prefix\
- [<absolute$sid_type (16-1048575)|index (0-65535)> [<no-php-flag|explicit-null>]]",
+ [<absolute$sid_type (16-1048575)|index (0-65535)> [<no-php-flag|explicit-null>]]\
+ [n-flag-clear]",
NO_STR
SR_STR
"Prefix SID\n"
@@ -1676,7 +1680,8 @@ DEFPY_YANG (no_isis_sr_prefix_sid,
"Specify the index of Prefix Segement ID\n"
"The Prefix Segment ID index\n"
"Don't request Penultimate Hop Popping (PHP)\n"
- "Upstream neighbor must replace prefix-sid with explicit null label\n")
+ "Upstream neighbor must replace prefix-sid with explicit null label\n"
+ "Not a node SID\n")
{
nb_cli_enqueue_change(vty, ".", NB_OP_DESTROY, NULL);
@@ -1692,11 +1697,13 @@ void cli_show_isis_prefix_sid(struct vty *vty, struct lyd_node *dnode,
const char *lh_behavior;
const char *sid_value_type;
const char *sid_value;
+ bool n_flag_clear;
prefix = yang_dnode_get_string(dnode, "./prefix");
lh_behavior = yang_dnode_get_string(dnode, "./last-hop-behavior");
sid_value_type = yang_dnode_get_string(dnode, "./sid-value-type");
sid_value = yang_dnode_get_string(dnode, "./sid-value");
+ n_flag_clear = yang_dnode_get_bool(dnode, "./n-flag-clear");
vty_out(vty, " segment-routing prefix %s", prefix);
if (strmatch(sid_value_type, "absolute"))
@@ -1708,6 +1715,8 @@ void cli_show_isis_prefix_sid(struct vty *vty, struct lyd_node *dnode,
vty_out(vty, " no-php-flag");
else if (strmatch(lh_behavior, "explicit-null"))
vty_out(vty, " explicit-null");
+ if (n_flag_clear)
+ vty_out(vty, " n-flag-clear");
vty_out(vty, "\n");
}
diff --git a/isisd/isis_dr.c b/isisd/isis_dr.c
index 3324d74e0f..d03f857a0c 100644
--- a/isisd/isis_dr.c
+++ b/isisd/isis_dr.c
@@ -221,8 +221,8 @@ int isis_dr_resign(struct isis_circuit *circuit, int level)
circuit->u.bc.is_dr[level - 1] = 0;
circuit->u.bc.run_dr_elect[level - 1] = 0;
- THREAD_TIMER_OFF(circuit->u.bc.t_run_dr[level - 1]);
- THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[level - 1]);
+ thread_cancel(&circuit->u.bc.t_run_dr[level - 1]);
+ thread_cancel(&circuit->u.bc.t_refresh_pseudo_lsp[level - 1]);
circuit->lsp_regenerate_pending[level - 1] = 0;
memcpy(id, circuit->isis->sysid, ISIS_SYS_ID_LEN);
@@ -246,7 +246,7 @@ int isis_dr_resign(struct isis_circuit *circuit, int level)
&circuit->t_send_psnp[1]);
}
- THREAD_TIMER_OFF(circuit->t_send_csnp[level - 1]);
+ thread_cancel(&circuit->t_send_csnp[level - 1]);
thread_add_timer(master, isis_run_dr,
&circuit->level_arg[level - 1],
diff --git a/isisd/isis_events.c b/isisd/isis_events.c
index c4c95138c4..0b987fc5cf 100644
--- a/isisd/isis_events.c
+++ b/isisd/isis_events.c
@@ -109,13 +109,13 @@ static void circuit_resign_level(struct isis_circuit *circuit, int level)
circuit->area->area_tag, circuit->circuit_id,
circuit->interface->name, level);
- THREAD_TIMER_OFF(circuit->t_send_csnp[idx]);
- THREAD_TIMER_OFF(circuit->t_send_psnp[idx]);
+ thread_cancel(&circuit->t_send_csnp[idx]);
+ thread_cancel(&circuit->t_send_psnp[idx]);
if (circuit->circ_type == CIRCUIT_T_BROADCAST) {
- THREAD_TIMER_OFF(circuit->u.bc.t_send_lan_hello[idx]);
- THREAD_TIMER_OFF(circuit->u.bc.t_run_dr[idx]);
- THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[idx]);
+ thread_cancel(&circuit->u.bc.t_send_lan_hello[idx]);
+ thread_cancel(&circuit->u.bc.t_run_dr[idx]);
+ thread_cancel(&circuit->u.bc.t_refresh_pseudo_lsp[idx]);
circuit->lsp_regenerate_pending[idx] = 0;
circuit->u.bc.run_dr_elect[idx] = 0;
circuit->u.bc.is_dr[idx] = 0;
diff --git a/isisd/isis_ldp_sync.c b/isisd/isis_ldp_sync.c
index 8360dfc59e..988af64c48 100644
--- a/isisd/isis_ldp_sync.c
+++ b/isisd/isis_ldp_sync.c
@@ -135,8 +135,8 @@ int isis_ldp_sync_announce_update(struct ldp_igp_sync_announce announce)
}
}
- THREAD_TIMER_OFF(isis->ldp_sync_cmd.t_hello);
- isis->ldp_sync_cmd.t_hello = NULL;
+ THREAD_OFF(isis->ldp_sync_cmd.t_hello);
+
isis->ldp_sync_cmd.sequence = 0;
isis_ldp_sync_hello_timer_add();
@@ -186,7 +186,7 @@ int isis_ldp_sync_hello_update(struct ldp_igp_sync_hello hello)
}
}
} else {
- THREAD_TIMER_OFF(isis->ldp_sync_cmd.t_hello);
+ THREAD_OFF(isis->ldp_sync_cmd.t_hello);
isis_ldp_sync_hello_timer_add();
}
isis->ldp_sync_cmd.sequence = hello.sequence;
@@ -280,8 +280,9 @@ void isis_ldp_sync_if_complete(struct isis_circuit *circuit)
if (ldp_sync_info && ldp_sync_info->enabled == LDP_IGP_SYNC_ENABLED) {
if (ldp_sync_info->state == LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP)
ldp_sync_info->state = LDP_IGP_SYNC_STATE_REQUIRED_UP;
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
- ldp_sync_info->t_holddown = NULL;
+
+ THREAD_OFF(ldp_sync_info->t_holddown);
+
isis_ldp_sync_set_if_metric(circuit, true);
}
}
@@ -300,7 +301,7 @@ void isis_ldp_sync_ldp_fail(struct isis_circuit *circuit)
if (ldp_sync_info &&
ldp_sync_info->enabled == LDP_IGP_SYNC_ENABLED &&
ldp_sync_info->state != LDP_IGP_SYNC_STATE_NOT_REQUIRED) {
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
+ THREAD_OFF(ldp_sync_info->t_holddown);
ldp_sync_info->state = LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP;
isis_ldp_sync_set_if_metric(circuit, true);
}
@@ -323,7 +324,7 @@ void isis_ldp_sync_if_remove(struct isis_circuit *circuit, bool remove)
ils_debug("ldp_sync: remove if %s", circuit->interface
? circuit->interface->name : "");
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
+ THREAD_OFF(ldp_sync_info->t_holddown);
ldp_sync_info->state = LDP_IGP_SYNC_STATE_NOT_REQUIRED;
isis_ldp_sync_set_if_metric(circuit, true);
if (remove) {
@@ -662,8 +663,7 @@ void isis_ldp_sync_gbl_exit(bool remove)
UNSET_FLAG(isis->ldp_sync_cmd.flags, LDP_SYNC_FLAG_ENABLE);
UNSET_FLAG(isis->ldp_sync_cmd.flags, LDP_SYNC_FLAG_HOLDDOWN);
isis->ldp_sync_cmd.holddown = LDP_IGP_SYNC_HOLDDOWN_DEFAULT;
- THREAD_TIMER_OFF(isis->ldp_sync_cmd.t_hello);
- isis->ldp_sync_cmd.t_hello = NULL;
+ THREAD_OFF(isis->ldp_sync_cmd.t_hello);
/* remove LDP-SYNC on all ISIS interfaces */
FOR_ALL_INTERFACES (vrf, ifp) {
diff --git a/isisd/isis_lfa.c b/isisd/isis_lfa.c
index 8ca432f895..f22e4a7085 100644
--- a/isisd/isis_lfa.c
+++ b/isisd/isis_lfa.c
@@ -180,23 +180,6 @@ bool isis_lfa_excise_node_check(const struct isis_spftree *spftree,
return false;
}
-/* Find SRGB associated to a System ID. */
-static struct isis_sr_block *tilfa_find_srgb(struct lspdb_head *lspdb,
- const uint8_t *sysid)
-{
- struct isis_lsp *lsp;
-
- lsp = isis_root_system_lsp(lspdb, sysid);
- if (!lsp)
- return NULL;
-
- if (!lsp->tlvs->router_cap
- || lsp->tlvs->router_cap->srgb.range_size == 0)
- return NULL;
-
- return &lsp->tlvs->router_cap->srgb;
-}
-
struct tilfa_find_pnode_prefix_sid_args {
uint32_t sid_index;
};
@@ -308,25 +291,30 @@ tilfa_compute_label_stack(struct lspdb_head *lspdb,
label_stack->num_labels = listcount(repair_list);
for (ALL_LIST_ELEMENTS_RO(repair_list, node, sid)) {
+ const uint8_t *target_node;
struct isis_sr_block *srgb;
mpls_label_t label;
switch (sid->type) {
case TILFA_SID_PREFIX:
- srgb = tilfa_find_srgb(lspdb, sadj->id);
+ if (sid->value.index.remote)
+ target_node = sid->value.index.remote_sysid;
+ else
+ target_node = sadj->id;
+ srgb = isis_sr_find_srgb(lspdb, target_node);
if (!srgb) {
zlog_warn("%s: SRGB not found for node %s",
__func__,
- print_sys_hostname(sadj->id));
+ print_sys_hostname(target_node));
goto error;
}
/* Check if the SID index falls inside the SRGB. */
- if (sid->value.index >= srgb->range_size) {
+ if (sid->value.index.value >= srgb->range_size) {
flog_warn(
EC_ISIS_SID_OVERFLOW,
"%s: SID index %u falls outside remote SRGB range",
- __func__, sid->value.index);
+ __func__, sid->value.index.value);
goto error;
}
@@ -334,7 +322,7 @@ tilfa_compute_label_stack(struct lspdb_head *lspdb,
* Prefix-SID: map SID index to label value within the
* SRGB.
*/
- label = srgb->lower_bound + sid->value.index;
+ label = srgb->lower_bound + sid->value.index.value;
break;
case TILFA_SID_ADJ:
/* Adj-SID: absolute label value can be used directly */
@@ -446,7 +434,8 @@ static int tilfa_build_repair_list(struct isis_spftree *spftree_pc,
struct listnode *node;
bool is_pnode, is_qnode;
char buf[VID2STR_BUFFER];
- struct isis_tilfa_sid sid_qnode, sid_pnode;
+ struct isis_tilfa_sid sid_dest = {}, sid_qnode = {}, sid_pnode = {};
+ uint32_t sid_index;
mpls_label_t label_qnode;
if (IS_DEBUG_TILFA) {
@@ -455,6 +444,24 @@ static int tilfa_build_repair_list(struct isis_spftree *spftree_pc,
vtype2string(vertex->type), buf);
}
+ /* Push original Prefix-SID label when necessary. */
+ if (VTYPE_IP(vertex->type) && vertex->N.ip.sr.present) {
+ pvertex = listnode_head(vertex->parents);
+ assert(pvertex);
+
+ sid_index = vertex->N.ip.sr.sid.value;
+ if (IS_DEBUG_TILFA)
+ zlog_debug(
+ "ISIS-TI-LFA: pushing Prefix-SID to %pFX (index %u)",
+ &vertex->N.ip.p.dest, sid_index);
+ sid_dest.type = TILFA_SID_PREFIX;
+ sid_dest.value.index.value = sid_index;
+ sid_dest.value.index.remote = true;
+ memcpy(sid_dest.value.index.remote_sysid, pvertex->N.id,
+ sizeof(sid_dest.value.index.remote_sysid));
+ listnode_add_head(repair_list, &sid_dest);
+ }
+
if (!vertex_child)
goto parents;
if (vertex->type != VTYPE_NONPSEUDO_IS
@@ -492,8 +499,6 @@ static int tilfa_build_repair_list(struct isis_spftree *spftree_pc,
/* Push Prefix-SID label when necessary. */
if (is_pnode) {
- uint32_t sid_index;
-
/* The same P-node can't be used more than once. */
if (isis_spf_node_find(used_pnodes, vertex->N.id)) {
if (IS_DEBUG_TILFA)
@@ -521,10 +526,10 @@ static int tilfa_build_repair_list(struct isis_spftree *spftree_pc,
if (IS_DEBUG_TILFA)
zlog_debug(
- "ISIS-TI-LFA: pushing Prefix-SID to %s (index %u)",
+ "ISIS-TI-LFA: pushing Node-SID to %s (index %u)",
print_sys_hostname(vertex->N.id), sid_index);
sid_pnode.type = TILFA_SID_PREFIX;
- sid_pnode.value.index = sid_index;
+ sid_pnode.value.index.value = sid_index;
listnode_add_head(repair_list, &sid_pnode);
/* Apply repair list. */
@@ -614,6 +619,10 @@ static bool lfa_check_needs_protection(const struct isis_spftree *spftree_pc,
size_t affected_nhs = 0;
struct isis_vertex_adj *vadj;
+ /* Local routes don't need protection. */
+ if (VTYPE_IP(vertex->type) && vertex->depth == 1)
+ return false;
+
/* Only local adjacencies need Adj-SID protection. */
if (VTYPE_IS(vertex->type)
&& !isis_adj_find(spftree_pc->area, spftree_pc->level,
@@ -700,7 +709,7 @@ int isis_lfa_check(struct isis_spftree *spftree_pc, struct isis_vertex *vertex)
struct route_table *route_table;
route_table = spftree_pc->lfa.old.spftree->route_table_backup;
- if (route_node_lookup(route_table, &vertex->N.ip.dest)) {
+ if (route_node_lookup(route_table, &vertex->N.ip.p.dest)) {
if (IS_DEBUG_TILFA)
zlog_debug(
"ISIS-TI-LFA: %s %s already covered by node protection",
diff --git a/isisd/isis_lfa.h b/isisd/isis_lfa.h
index 62a7666f9c..835618760c 100644
--- a/isisd/isis_lfa.h
+++ b/isisd/isis_lfa.h
@@ -28,7 +28,11 @@ enum isis_tilfa_sid_type {
struct isis_tilfa_sid {
enum isis_tilfa_sid_type type;
union {
- uint32_t index;
+ struct {
+ uint32_t value;
+ bool remote;
+ uint8_t remote_sysid[ISIS_SYS_ID_LEN];
+ } index;
mpls_label_t label;
} value;
};
diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c
index 2e38663d3f..d8ad4cd510 100644
--- a/isisd/isis_lsp.c
+++ b/isisd/isis_lsp.c
@@ -1241,7 +1241,7 @@ int lsp_generate(struct isis_area *area, int level)
refresh_time = lsp_refresh_time(newlsp, rem_lifetime);
- THREAD_TIMER_OFF(area->t_lsp_refresh[level - 1]);
+ thread_cancel(&area->t_lsp_refresh[level - 1]);
area->lsp_regenerate_pending[level - 1] = 0;
thread_add_timer(master, lsp_refresh,
&area->lsp_refresh_arg[level - 1], refresh_time,
@@ -1451,7 +1451,7 @@ int _lsp_regenerate_schedule(struct isis_area *area, int level,
"ISIS (%s): Will schedule regen timer. Last run was: %lld, Now is: %lld",
area->area_tag, (long long)lsp->last_generated,
(long long)now);
- THREAD_TIMER_OFF(area->t_lsp_refresh[lvl - 1]);
+ thread_cancel(&area->t_lsp_refresh[lvl - 1]);
diff = now - lsp->last_generated;
if (diff < area->lsp_gen_interval[lvl - 1]
&& !(area->bfd_signalled_down)) {
@@ -1628,7 +1628,7 @@ int lsp_generate_pseudo(struct isis_circuit *circuit, int level)
lsp_flood(lsp, NULL);
refresh_time = lsp_refresh_time(lsp, rem_lifetime);
- THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[level - 1]);
+ thread_cancel(&circuit->u.bc.t_refresh_pseudo_lsp[level - 1]);
circuit->lsp_regenerate_pending[level - 1] = 0;
if (level == IS_LEVEL_1)
thread_add_timer(
@@ -1819,7 +1819,7 @@ int lsp_regenerate_schedule_pseudo(struct isis_circuit *circuit, int level)
"ISIS (%s): Will schedule PSN regen timer. Last run was: %lld, Now is: %lld",
area->area_tag, (long long)lsp->last_generated,
(long long)now);
- THREAD_TIMER_OFF(circuit->u.bc.t_refresh_pseudo_lsp[lvl - 1]);
+ thread_cancel(&circuit->u.bc.t_refresh_pseudo_lsp[lvl - 1]);
diff = now - lsp->last_generated;
if (diff < circuit->area->lsp_gen_interval[lvl - 1]) {
timeout =
diff --git a/isisd/isis_nb.c b/isisd/isis_nb.c
index d04012c4da..2d3c7e1e38 100644
--- a/isisd/isis_nb.c
+++ b/isisd/isis_nb.c
@@ -538,6 +538,12 @@ const struct frr_yang_module_info frr_isisd_info = {
},
},
{
+ .xpath = "/frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/n-flag-clear",
+ .cbs = {
+ .modify = isis_instance_segment_routing_prefix_sid_map_prefix_sid_n_flag_clear_modify,
+ }
+ },
+ {
.xpath = "/frr-isisd:isis/instance/mpls/ldp-sync",
.cbs = {
.cli_show = cli_show_isis_mpls_ldp_sync,
diff --git a/isisd/isis_nb.h b/isisd/isis_nb.h
index 303a7b4696..fb843131d9 100644
--- a/isisd/isis_nb.h
+++ b/isisd/isis_nb.h
@@ -206,6 +206,8 @@ int isis_instance_segment_routing_prefix_sid_map_prefix_sid_sid_value_modify(
struct nb_cb_modify_args *args);
int isis_instance_segment_routing_prefix_sid_map_prefix_sid_last_hop_behavior_modify(
struct nb_cb_modify_args *args);
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_n_flag_clear_modify(
+ struct nb_cb_modify_args *args);
int isis_instance_mpls_ldp_sync_destroy(struct nb_cb_destroy_args *args);
int isis_instance_mpls_ldp_sync_create(struct nb_cb_create_args *args);
int isis_instance_mpls_ldp_sync_holddown_modify(struct nb_cb_modify_args *args);
diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c
index 2710c3c13f..6cb7d32c25 100644
--- a/isisd/isis_nb_config.c
+++ b/isisd/isis_nb_config.c
@@ -1838,6 +1838,23 @@ int isis_instance_segment_routing_prefix_sid_map_prefix_sid_last_hop_behavior_mo
}
/*
+ * XPath: /frr-isisd:isis/instance/segment-routing/prefix-sid-map/prefix-sid/n-flag-clear
+ */
+int isis_instance_segment_routing_prefix_sid_map_prefix_sid_n_flag_clear_modify(
+ struct nb_cb_modify_args *args)
+{
+ struct sr_prefix_cfg *pcfg;
+
+ if (args->event != NB_EV_APPLY)
+ return NB_OK;
+
+ pcfg = nb_running_get_entry(args->dnode, NULL, true);
+ pcfg->n_flag_clear = yang_dnode_get_bool(args->dnode, NULL);
+
+ return NB_OK;
+}
+
+/*
* XPath: /frr-isisd:isis/instance/mpls/ldp-sync
*/
int isis_instance_mpls_ldp_sync_create(struct nb_cb_create_args *args)
@@ -2844,8 +2861,7 @@ int lib_interface_isis_mpls_ldp_sync_modify(struct nb_cb_modify_args *args)
SET_FLAG(ldp_sync_info->flags, LDP_SYNC_FLAG_IF_CONFIG);
ldp_sync_info->enabled = LDP_IGP_SYNC_DEFAULT;
ldp_sync_info->state = LDP_IGP_SYNC_STATE_NOT_REQUIRED;
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
- ldp_sync_info->t_holddown = NULL;
+ THREAD_OFF(ldp_sync_info->t_holddown);
isis_ldp_sync_set_if_metric(circuit, true);
}
break;
diff --git a/isisd/isis_pdu.c b/isisd/isis_pdu.c
index d6f2571178..72de5d6543 100644
--- a/isisd/isis_pdu.c
+++ b/isisd/isis_pdu.c
@@ -205,7 +205,7 @@ static int process_p2p_hello(struct iih_info *iih)
adj);
/* lets take care of the expiry */
- THREAD_TIMER_OFF(adj->t_expire);
+ thread_cancel(&adj->t_expire);
thread_add_timer(master, isis_adj_expire, adj, (long)adj->hold_time,
&adj->t_expire);
@@ -497,7 +497,7 @@ static int process_lan_hello(struct iih_info *iih)
adj);
/* lets take care of the expiry */
- THREAD_TIMER_OFF(adj->t_expire);
+ thread_cancel(&adj->t_expire);
thread_add_timer(master, isis_adj_expire, adj, (long)adj->hold_time,
&adj->t_expire);
@@ -1987,7 +1987,7 @@ static void _send_hello_sched(struct isis_circuit *circuit,
if (thread_timer_remain_msec(*threadp) < (unsigned long)delay)
return;
- thread_cancel(*threadp);
+ thread_cancel(threadp);
}
thread_add_timer_msec(master, send_hello_cb,
diff --git a/isisd/isis_route.c b/isisd/isis_route.c
index 7e8c877bd0..d664a6f896 100644
--- a/isisd/isis_route.c
+++ b/isisd/isis_route.c
@@ -71,7 +71,6 @@ static struct isis_nexthop *isis_nexthop_create(int family, union g_addr *ip,
nexthop->family = family;
nexthop->ifindex = ifindex;
nexthop->ip = *ip;
- isis_sr_nexthop_reset(&nexthop->sr);
return nexthop;
}
@@ -117,7 +116,7 @@ static struct isis_nexthop *nexthoplookup(struct list *nexthops, int family,
}
void adjinfo2nexthop(int family, struct list *nexthops,
- struct isis_adjacency *adj,
+ struct isis_adjacency *adj, struct isis_sr_psid_info *sr,
struct mpls_label_stack *label_stack)
{
struct isis_nexthop *nh;
@@ -134,6 +133,8 @@ void adjinfo2nexthop(int family, struct list *nexthops,
AF_INET, &ip,
adj->circuit->interface->ifindex);
memcpy(nh->sysid, adj->sysid, sizeof(nh->sysid));
+ if (sr)
+ nh->sr = *sr;
nh->label_stack = label_stack;
listnode_add(nexthops, nh);
break;
@@ -150,6 +151,8 @@ void adjinfo2nexthop(int family, struct list *nexthops,
AF_INET6, &ip,
adj->circuit->interface->ifindex);
memcpy(nh->sysid, adj->sysid, sizeof(nh->sysid));
+ if (sr)
+ nh->sr = *sr;
nh->label_stack = label_stack;
listnode_add(nexthops, nh);
break;
@@ -165,22 +168,22 @@ void adjinfo2nexthop(int family, struct list *nexthops,
static void isis_route_add_dummy_nexthops(struct isis_route_info *rinfo,
const uint8_t *sysid,
+ struct isis_sr_psid_info *sr,
struct mpls_label_stack *label_stack)
{
struct isis_nexthop *nh;
nh = XCALLOC(MTYPE_ISIS_NEXTHOP, sizeof(struct isis_nexthop));
memcpy(nh->sysid, sysid, sizeof(nh->sysid));
- isis_sr_nexthop_reset(&nh->sr);
+ nh->sr = *sr;
nh->label_stack = label_stack;
listnode_add(rinfo->nexthops, nh);
}
-static struct isis_route_info *isis_route_info_new(struct prefix *prefix,
- struct prefix_ipv6 *src_p,
- uint32_t cost,
- uint32_t depth,
- struct list *adjacencies)
+static struct isis_route_info *
+isis_route_info_new(struct prefix *prefix, struct prefix_ipv6 *src_p,
+ uint32_t cost, uint32_t depth, struct isis_sr_psid_info *sr,
+ struct list *adjacencies)
{
struct isis_route_info *rinfo;
struct isis_vertex_adj *vadj;
@@ -192,6 +195,7 @@ static struct isis_route_info *isis_route_info_new(struct prefix *prefix,
for (ALL_LIST_ELEMENTS_RO(adjacencies, node, vadj)) {
struct isis_spf_adj *sadj = vadj->sadj;
struct isis_adjacency *adj = sadj->adj;
+ struct isis_sr_psid_info *sr = &vadj->sr;
struct mpls_label_stack *label_stack = vadj->label_stack;
/*
@@ -199,7 +203,7 @@ static struct isis_route_info *isis_route_info_new(struct prefix *prefix,
* environment.
*/
if (CHECK_FLAG(im->options, F_ISIS_UNIT_TEST)) {
- isis_route_add_dummy_nexthops(rinfo, sadj->id,
+ isis_route_add_dummy_nexthops(rinfo, sadj->id, sr,
label_stack);
continue;
}
@@ -227,12 +231,13 @@ static struct isis_route_info *isis_route_info_new(struct prefix *prefix,
prefix->family);
exit(1);
}
- adjinfo2nexthop(prefix->family, rinfo->nexthops, adj,
+ adjinfo2nexthop(prefix->family, rinfo->nexthops, adj, sr,
label_stack);
}
rinfo->cost = cost;
rinfo->depth = depth;
+ rinfo->sr = *sr;
return rinfo;
}
@@ -254,12 +259,28 @@ void isis_route_node_cleanup(struct route_table *table, struct route_node *node)
isis_route_info_delete(node->info);
}
+static bool isis_sr_psid_info_same(struct isis_sr_psid_info *new,
+ struct isis_sr_psid_info *old)
+{
+ if (new->present != old->present)
+ return false;
+
+ if (new->label != old->label)
+ return false;
+
+ if (new->sid.flags != old->sid.flags
+ || new->sid.value != old->sid.value)
+ return false;
+
+ return true;
+}
+
static int isis_route_info_same(struct isis_route_info *new,
struct isis_route_info *old, char *buf,
size_t buf_size)
{
struct listnode *node;
- struct isis_nexthop *nexthop;
+ struct isis_nexthop *new_nh, *old_nh;
if (new->cost != old->cost) {
if (buf)
@@ -275,6 +296,12 @@ static int isis_route_info_same(struct isis_route_info *new,
return 0;
}
+ if (!isis_sr_psid_info_same(&new->sr, &old->sr)) {
+ if (buf)
+ snprintf(buf, buf_size, "SR input label");
+ return 0;
+ }
+
if (new->nexthops->count != old->nexthops->count) {
if (buf)
snprintf(buf, buf_size, "nhops num (old: %u, new: %u)",
@@ -282,14 +309,20 @@ static int isis_route_info_same(struct isis_route_info *new,
return 0;
}
- for (ALL_LIST_ELEMENTS_RO(new->nexthops, node, nexthop)) {
- if (!nexthoplookup(old->nexthops, nexthop->family, &nexthop->ip,
- nexthop->ifindex)) {
+ for (ALL_LIST_ELEMENTS_RO(new->nexthops, node, new_nh)) {
+ old_nh = nexthoplookup(old->nexthops, new_nh->family,
+ &new_nh->ip, new_nh->ifindex);
+ if (!old_nh) {
if (buf)
snprintf(buf, buf_size,
"new nhop"); /* TODO: print nhop */
return 0;
}
+ if (!isis_sr_psid_info_same(&new_nh->sr, &old_nh->sr)) {
+ if (buf)
+ snprintf(buf, buf_size, "nhop SR label");
+ return 0;
+ }
}
/* only the resync flag needs to be checked */
@@ -303,13 +336,11 @@ static int isis_route_info_same(struct isis_route_info *new,
return 1;
}
-struct isis_route_info *isis_route_create(struct prefix *prefix,
- struct prefix_ipv6 *src_p,
- uint32_t cost,
- uint32_t depth,
- struct list *adjacencies,
- struct isis_area *area,
- struct route_table *table)
+struct isis_route_info *
+isis_route_create(struct prefix *prefix, struct prefix_ipv6 *src_p,
+ uint32_t cost, uint32_t depth, struct isis_sr_psid_info *sr,
+ struct list *adjacencies, struct isis_area *area,
+ struct route_table *table)
{
struct route_node *route_node;
struct isis_route_info *rinfo_new, *rinfo_old, *route_info = NULL;
@@ -318,8 +349,8 @@ struct isis_route_info *isis_route_create(struct prefix *prefix,
if (!table)
return NULL;
- rinfo_new = isis_route_info_new(prefix, src_p, cost,
- depth, adjacencies);
+ rinfo_new = isis_route_info_new(prefix, src_p, cost, depth, sr,
+ adjacencies);
route_node = srcdest_rnode_get(table, prefix, src_p);
rinfo_old = route_node->info;
@@ -351,6 +382,7 @@ struct isis_route_info *isis_route_create(struct prefix *prefix,
zlog_debug(
"ISIS-Rte (%s): route changed: %pFX, change: %s",
area->area_tag, prefix, change_buf);
+ rinfo_new->sr_previous = rinfo_old->sr;
isis_route_info_delete(rinfo_old);
route_info = rinfo_new;
UNSET_FLAG(route_info->flag,
@@ -406,7 +438,25 @@ static void isis_route_update(struct isis_area *area, struct prefix *prefix,
if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
return;
- isis_zebra_route_add_route(area->isis, prefix, src_p, route_info);
+ /*
+ * Explicitly uninstall previous Prefix-SID label if it has
+ * changed or was removed.
+ */
+ if (route_info->sr_previous.present
+ && (!route_info->sr.present
+ || route_info->sr_previous.label
+ != route_info->sr.label))
+ isis_zebra_prefix_sid_uninstall(
+ area, prefix, route_info,
+ &route_info->sr_previous);
+
+ /* Install route. */
+ isis_zebra_route_add_route(area->isis, prefix, src_p,
+ route_info);
+ /* Install/reinstall Prefix-SID label. */
+ if (route_info->sr.present)
+ isis_zebra_prefix_sid_install(area, prefix, route_info,
+ &route_info->sr);
hook_call(isis_route_update_hook, area, prefix, route_info);
SET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
@@ -415,7 +465,13 @@ static void isis_route_update(struct isis_area *area, struct prefix *prefix,
if (!CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED))
return;
- isis_zebra_route_del_route(area->isis, prefix, src_p, route_info);
+ /* Uninstall Prefix-SID label. */
+ if (route_info->sr.present)
+ isis_zebra_prefix_sid_uninstall(
+ area, prefix, route_info, &route_info->sr);
+ /* Uninstall route. */
+ isis_zebra_route_del_route(area->isis, prefix, src_p,
+ route_info);
hook_call(isis_route_update_hook, area, prefix, route_info);
UNSET_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ZEBRA_SYNCED);
diff --git a/isisd/isis_route.h b/isisd/isis_route.h
index fbb548a79e..b5e4aed6cc 100644
--- a/isisd/isis_route.h
+++ b/isisd/isis_route.h
@@ -32,7 +32,7 @@ struct isis_nexthop {
int family;
union g_addr ip;
uint8_t sysid[ISIS_SYS_ID_LEN];
- struct sr_nexthop_info sr;
+ struct isis_sr_psid_info sr;
struct mpls_label_stack *label_stack;
};
@@ -43,6 +43,8 @@ struct isis_route_info {
uint8_t flag;
uint32_t cost;
uint32_t depth;
+ struct isis_sr_psid_info sr;
+ struct isis_sr_psid_info sr_previous;
struct list *nexthops;
struct isis_route_info *backup;
};
@@ -54,15 +56,13 @@ DECLARE_HOOK(isis_route_update_hook,
void isis_nexthop_delete(struct isis_nexthop *nexthop);
void adjinfo2nexthop(int family, struct list *nexthops,
- struct isis_adjacency *adj,
+ struct isis_adjacency *adj, struct isis_sr_psid_info *sr,
struct mpls_label_stack *label_stack);
-struct isis_route_info *isis_route_create(struct prefix *prefix,
- struct prefix_ipv6 *src_p,
- uint32_t cost,
- uint32_t depth,
- struct list *adjacencies,
- struct isis_area *area,
- struct route_table *table);
+struct isis_route_info *
+isis_route_create(struct prefix *prefix, struct prefix_ipv6 *src_p,
+ uint32_t cost, uint32_t depth, struct isis_sr_psid_info *sr,
+ struct list *adjacencies, struct isis_area *area,
+ struct route_table *table);
/* Walk the given table and install new routes to zebra and remove old ones.
* route status is tracked using ISIS_ROUTE_FLAG_ACTIVE */
diff --git a/isisd/isis_spf.c b/isisd/isis_spf.c
index 39a1c9ebe9..690ea9f1a5 100644
--- a/isisd/isis_spf.c
+++ b/isisd/isis_spf.c
@@ -176,9 +176,8 @@ const char *vid2string(const struct isis_vertex *vertex, char *buff, int size)
}
if (VTYPE_IP(vertex->type)) {
- srcdest2str(&vertex->N.ip.dest,
- &vertex->N.ip.src,
- buff, size);
+ srcdest2str(&vertex->N.ip.p.dest, &vertex->N.ip.p.src, buff,
+ size);
return buff;
}
@@ -215,13 +214,33 @@ static struct isis_vertex *isis_vertex_new(struct isis_spftree *spftree,
return vertex;
}
-static struct isis_vertex_adj *isis_vertex_adj_add(struct isis_vertex *vertex,
- struct isis_spf_adj *sadj)
+static struct isis_vertex_adj *isis_vertex_adj_add(struct isis_spftree *spftree,
+ struct isis_vertex *vertex,
+ struct isis_spf_adj *sadj,
+ struct isis_prefix_sid *psid)
{
struct isis_vertex_adj *vadj;
vadj = XCALLOC(MTYPE_ISIS_VERTEX_ADJ, sizeof(*vadj));
vadj->sadj = sadj;
+ if (psid) {
+ if (vertex->N.ip.sr.present
+ && vertex->N.ip.sr.sid.value != psid->value)
+ zlog_warn(
+ "ISIS-SPF: ignoring different Prefix-SID for route %pFX",
+ &vertex->N.ip.p.dest);
+ else {
+ bool last_hop;
+
+ last_hop = (vertex->depth == 2);
+ vadj->sr.sid = *psid;
+ vadj->sr.label = sr_prefix_out_label(
+ spftree->lspdb, vertex->N.ip.p.dest.family,
+ psid, sadj->id, last_hop);
+ if (vadj->sr.label != MPLS_INVALID_LABEL)
+ vadj->sr.present = true;
+ }
+ }
listnode_add(vertex->Adj_N, vadj);
return vadj;
@@ -466,11 +485,10 @@ static void vertex_update_firsthops(struct isis_vertex *vertex,
/*
* Add a vertex to TENT sorted by cost and by vertextype on tie break situation
*/
-static struct isis_vertex *isis_spf_add2tent(struct isis_spftree *spftree,
- enum vertextype vtype, void *id,
- uint32_t cost, int depth,
- struct isis_spf_adj *sadj,
- struct isis_vertex *parent)
+static struct isis_vertex *
+isis_spf_add2tent(struct isis_spftree *spftree, enum vertextype vtype, void *id,
+ uint32_t cost, int depth, struct isis_spf_adj *sadj,
+ struct isis_prefix_sid *psid, struct isis_vertex *parent)
{
struct isis_vertex *vertex;
struct listnode *node;
@@ -496,6 +514,16 @@ static struct isis_vertex *isis_spf_add2tent(struct isis_spftree *spftree,
vertex = isis_vertex_new(spftree, id, vtype);
vertex->d_N = cost;
vertex->depth = depth;
+ if (VTYPE_IP(vtype) && psid) {
+ bool local;
+
+ local = (vertex->depth == 1);
+ vertex->N.ip.sr.sid = *psid;
+ vertex->N.ip.sr.label =
+ sr_prefix_in_label(spftree->area, psid, local);
+ if (vertex->N.ip.sr.label != MPLS_INVALID_LABEL)
+ vertex->N.ip.sr.present = true;
+ }
if (parent) {
listnode_add(vertex->parents, parent);
@@ -508,9 +536,10 @@ static struct isis_vertex *isis_spf_add2tent(struct isis_spftree *spftree,
struct isis_vertex_adj *parent_vadj;
for (ALL_LIST_ELEMENTS_RO(parent->Adj_N, node, parent_vadj))
- isis_vertex_adj_add(vertex, parent_vadj->sadj);
+ isis_vertex_adj_add(spftree, vertex, parent_vadj->sadj,
+ psid);
} else if (sadj) {
- isis_vertex_adj_add(vertex, sadj);
+ isis_vertex_adj_add(spftree, vertex, sadj, psid);
}
#ifdef EXTREME_DEBUG
@@ -528,6 +557,7 @@ static struct isis_vertex *isis_spf_add2tent(struct isis_spftree *spftree,
static void isis_spf_add_local(struct isis_spftree *spftree,
enum vertextype vtype, void *id,
struct isis_spf_adj *sadj, uint32_t cost,
+ struct isis_prefix_sid *psid,
struct isis_vertex *parent)
{
struct isis_vertex *vertex;
@@ -538,7 +568,8 @@ static void isis_spf_add_local(struct isis_spftree *spftree,
/* C.2.5 c) */
if (vertex->d_N == cost) {
if (sadj)
- isis_vertex_adj_add(vertex, sadj);
+ isis_vertex_adj_add(spftree, vertex, sadj,
+ psid);
/* d) */
if (!CHECK_FLAG(spftree->flags,
F_SPFTREE_NO_ADJACENCIES)
@@ -558,13 +589,13 @@ static void isis_spf_add_local(struct isis_spftree *spftree,
}
}
- isis_spf_add2tent(spftree, vtype, id, cost, 1, sadj, parent);
+ isis_spf_add2tent(spftree, vtype, id, cost, 1, sadj, psid, parent);
return;
}
static void process_N(struct isis_spftree *spftree, enum vertextype vtype,
void *id, uint32_t dist, uint16_t depth,
- struct isis_vertex *parent)
+ struct isis_prefix_sid *psid, struct isis_vertex *parent)
{
struct isis_vertex *vertex;
#ifdef EXTREME_DEBUG
@@ -628,8 +659,9 @@ static void process_N(struct isis_spftree *spftree, enum vertextype vtype,
parent_vadj))
if (!isis_vertex_adj_exists(spftree, vertex,
parent_vadj->sadj))
- isis_vertex_adj_add(vertex,
- parent_vadj->sadj);
+ isis_vertex_adj_add(spftree, vertex,
+ parent_vadj->sadj,
+ psid);
if (CHECK_FLAG(spftree->flags,
F_SPFTREE_HOPCOUNT_METRIC))
vertex_update_firsthops(vertex, parent);
@@ -656,7 +688,7 @@ static void process_N(struct isis_spftree *spftree, enum vertextype vtype,
(parent ? print_sys_hostname(parent->N.id) : "null"));
#endif /* EXTREME_DEBUG */
- isis_spf_add2tent(spftree, vtype, id, dist, depth, NULL, parent);
+ isis_spf_add2tent(spftree, vtype, id, dist, depth, NULL, psid, parent);
return;
}
@@ -675,6 +707,7 @@ static int isis_spf_process_lsp(struct isis_spftree *spftree,
static const uint8_t null_sysid[ISIS_SYS_ID_LEN];
struct isis_mt_router_info *mt_router_info = NULL;
struct prefix_pair ip_info;
+ bool has_valid_psid;
if (isis_lfa_excise_node_check(spftree, lsp->hdr.lsp_id)) {
if (IS_DEBUG_TILFA)
@@ -739,7 +772,7 @@ lspfragloop:
LSP_PSEUDO_ID(r->id)
? VTYPE_PSEUDO_IS
: VTYPE_NONPSEUDO_IS,
- (void *)r->id, dist, depth + 1,
+ (void *)r->id, dist, depth + 1, NULL,
parent);
}
}
@@ -773,7 +806,8 @@ lspfragloop:
process_N(spftree,
LSP_PSEUDO_ID(er->id) ? VTYPE_PSEUDO_TE_IS
: VTYPE_NONPSEUDO_TE_IS,
- (void *)er->id, dist, depth + 1, parent);
+ (void *)er->id, dist, depth + 1, NULL,
+ parent);
}
}
@@ -798,7 +832,7 @@ lspfragloop:
ip_info.dest.u.prefix4 = r->prefix.prefix;
ip_info.dest.prefixlen = r->prefix.prefixlen;
process_N(spftree, vtype, &ip_info,
- dist, depth + 1, parent);
+ dist, depth + 1, NULL, parent);
}
}
}
@@ -823,8 +857,34 @@ lspfragloop:
dist = cost + r->metric;
ip_info.dest.u.prefix4 = r->prefix.prefix;
ip_info.dest.prefixlen = r->prefix.prefixlen;
- process_N(spftree, VTYPE_IPREACH_TE, &ip_info,
- dist, depth + 1, parent);
+
+ /* Parse list of Prefix-SID subTLVs */
+ has_valid_psid = false;
+ if (r->subtlvs) {
+ for (struct isis_item *i =
+ r->subtlvs->prefix_sids.head;
+ i; i = i->next) {
+ struct isis_prefix_sid *psid =
+ (struct isis_prefix_sid *)i;
+
+ if (psid->algorithm != SR_ALGORITHM_SPF)
+ continue;
+
+ has_valid_psid = true;
+ process_N(spftree, VTYPE_IPREACH_TE,
+ &ip_info, dist, depth + 1,
+ psid, parent);
+ /*
+ * Stop the Prefix-SID iteration since
+ * we only support the SPF algorithm for
+ * now.
+ */
+ break;
+ }
+ }
+ if (!has_valid_psid)
+ process_N(spftree, VTYPE_IPREACH_TE, &ip_info,
+ dist, depth + 1, NULL, parent);
}
}
@@ -865,8 +925,34 @@ lspfragloop:
}
ip_info.src = *r->subtlvs->source_prefix;
}
- process_N(spftree, vtype, &ip_info, dist,
- depth + 1, parent);
+
+ /* Parse list of Prefix-SID subTLVs */
+ has_valid_psid = false;
+ if (r->subtlvs) {
+ for (struct isis_item *i =
+ r->subtlvs->prefix_sids.head;
+ i; i = i->next) {
+ struct isis_prefix_sid *psid =
+ (struct isis_prefix_sid *)i;
+
+ if (psid->algorithm != SR_ALGORITHM_SPF)
+ continue;
+
+ has_valid_psid = true;
+ process_N(spftree, vtype, &ip_info,
+ dist, depth + 1, psid,
+ parent);
+ /*
+ * Stop the Prefix-SID iteration since
+ * we only support the SPF algorithm for
+ * now.
+ */
+ break;
+ }
+ }
+ if (!has_valid_psid)
+ process_N(spftree, vtype, &ip_info, dist,
+ depth + 1, NULL, parent);
}
}
@@ -922,6 +1008,7 @@ static int isis_spf_preload_tent_ip_reach_cb(const struct prefix *prefix,
struct isis_vertex *parent = args->parent;
struct prefix_pair ip_info;
enum vertextype vtype;
+ bool has_valid_psid = false;
if (external)
return LSP_ITER_CONTINUE;
@@ -936,7 +1023,30 @@ static int isis_spf_preload_tent_ip_reach_cb(const struct prefix *prefix,
else
vtype = VTYPE_IP6REACH_INTERNAL;
- isis_spf_add_local(spftree, vtype, &ip_info, NULL, 0, parent);
+ /* Parse list of Prefix-SID subTLVs */
+ if (subtlvs) {
+ for (struct isis_item *i = subtlvs->prefix_sids.head; i;
+ i = i->next) {
+ struct isis_prefix_sid *psid =
+ (struct isis_prefix_sid *)i;
+
+ if (psid->algorithm != SR_ALGORITHM_SPF)
+ continue;
+
+ has_valid_psid = true;
+ isis_spf_add_local(spftree, vtype, &ip_info, NULL, 0,
+ psid, parent);
+
+ /*
+ * Stop the Prefix-SID iteration since we only support
+ * the SPF algorithm for now.
+ */
+ break;
+ }
+ }
+ if (!has_valid_psid)
+ isis_spf_add_local(spftree, vtype, &ip_info, NULL, 0, NULL,
+ parent);
return LSP_ITER_CONTINUE;
}
@@ -985,7 +1095,8 @@ static void isis_spf_preload_tent(struct isis_spftree *spftree,
F_ISIS_SPF_ADJ_OLDMETRIC)
? VTYPE_NONPSEUDO_IS
: VTYPE_NONPSEUDO_TE_IS,
- sadj->id, sadj, metric, parent);
+ sadj->id, sadj, metric, NULL,
+ parent);
} else if (sadj->lan.lsp_pseudo) {
isis_spf_process_lsp(spftree, sadj->lan.lsp_pseudo,
metric, 0, spftree->sysid, parent);
@@ -1222,8 +1333,9 @@ static void isis_spf_build_adj_list(struct isis_spftree *spftree,
static void add_to_paths(struct isis_spftree *spftree,
struct isis_vertex *vertex)
{
- struct isis_area *area = spftree->area;
+#ifdef EXTREME_DEBUG
char buff[VID2STR_BUFFER];
+#endif /* EXTREME_DEBUG */
if (isis_find_vertex(&spftree->paths, &vertex->N, vertex->type))
return;
@@ -1235,6 +1347,24 @@ static void add_to_paths(struct isis_spftree *spftree,
vid2string(vertex, buff, sizeof(buff)), vertex->depth,
vertex->d_N);
#endif /* EXTREME_DEBUG */
+}
+
+static void init_spt(struct isis_spftree *spftree, int mtid)
+{
+ /* Clear data from previous run. */
+ isis_spf_node_list_clear(&spftree->adj_nodes);
+ list_delete_all_node(spftree->sadj_list);
+ isis_vertex_queue_clear(&spftree->tents);
+ isis_vertex_queue_clear(&spftree->paths);
+
+ spftree->mtid = mtid;
+}
+
+static void spf_path_process(struct isis_spftree *spftree,
+ struct isis_vertex *vertex)
+{
+ struct isis_area *area = spftree->area;
+ char buff[VID2STR_BUFFER];
if (VTYPE_IS(vertex->type)
&& !CHECK_FLAG(spftree->flags, F_SPFTREE_NO_ADJACENCIES)) {
@@ -1261,7 +1391,7 @@ static void add_to_paths(struct isis_spftree *spftree,
if (VTYPE_IP(vertex->type)
&& !CHECK_FLAG(spftree->flags, F_SPFTREE_NO_ROUTES)) {
- if (listcount(vertex->Adj_N) > 0) {
+ if (vertex->depth == 1 || listcount(vertex->Adj_N) > 0) {
struct route_table *route_table;
if (spftree->type == SPF_TYPE_TI_LFA) {
@@ -1272,8 +1402,9 @@ static void add_to_paths(struct isis_spftree *spftree,
} else
route_table = spftree->route_table;
- isis_route_create(&vertex->N.ip.dest, &vertex->N.ip.src,
- vertex->d_N, vertex->depth,
+ isis_route_create(&vertex->N.ip.p.dest,
+ &vertex->N.ip.p.src, vertex->d_N,
+ vertex->depth, &vertex->N.ip.sr,
vertex->Adj_N, area, route_table);
} else if (IS_DEBUG_SPF_EVENTS)
zlog_debug(
@@ -1281,19 +1412,6 @@ static void add_to_paths(struct isis_spftree *spftree,
vid2string(vertex, buff, sizeof(buff)),
vertex->depth, vertex->d_N);
}
-
- return;
-}
-
-static void init_spt(struct isis_spftree *spftree, int mtid)
-{
- /* Clear data from previous run. */
- isis_spf_node_list_clear(&spftree->adj_nodes);
- list_delete_all_node(spftree->sadj_list);
- isis_vertex_queue_clear(&spftree->tents);
- isis_vertex_queue_clear(&spftree->paths);
-
- spftree->mtid = mtid;
}
static void isis_spf_loop(struct isis_spftree *spftree,
@@ -1301,6 +1419,7 @@ static void isis_spf_loop(struct isis_spftree *spftree,
{
struct isis_vertex *vertex;
struct isis_lsp *lsp;
+ struct listnode *node;
while (isis_vertex_queue_count(&spftree->tents)) {
vertex = isis_vertex_queue_pop(&spftree->tents);
@@ -1327,6 +1446,23 @@ static void isis_spf_loop(struct isis_spftree *spftree,
isis_spf_process_lsp(spftree, lsp, vertex->d_N, vertex->depth,
root_sysid, vertex);
}
+
+ /* Generate routes once the SPT is formed. */
+ for (ALL_QUEUE_ELEMENTS_RO(&spftree->paths, node, vertex)) {
+ /* New-style TLVs take precedence over the old-style TLVs. */
+ switch (vertex->type) {
+ case VTYPE_IPREACH_INTERNAL:
+ case VTYPE_IPREACH_EXTERNAL:
+ if (isis_find_vertex(&spftree->paths, &vertex->N,
+ VTYPE_IPREACH_TE))
+ continue;
+ break;
+ default:
+ break;
+ }
+
+ spf_path_process(spftree, vertex);
+ }
}
struct isis_spftree *isis_run_hopcount_spf(struct isis_area *area,
@@ -1508,8 +1644,6 @@ static int isis_run_spf_cb(struct thread *thread)
isis_area_verify_routes(area);
- isis_area_verify_sr(area);
-
/* walk all circuits and reset any spf specific flags */
struct listnode *node;
struct isis_circuit *circuit;
@@ -1800,12 +1934,126 @@ DEFUN(show_isis_topology, show_isis_topology_cmd,
return CMD_SUCCESS;
}
+static void isis_print_route(struct ttable *tt, const struct prefix *prefix,
+ struct isis_route_info *rinfo, bool prefix_sid,
+ bool no_adjacencies)
+{
+ struct isis_nexthop *nexthop;
+ struct listnode *node;
+ bool first = true;
+ char buf_prefix[BUFSIZ];
+
+ (void)prefix2str(prefix, buf_prefix, sizeof(buf_prefix));
+ for (ALL_LIST_ELEMENTS_RO(rinfo->nexthops, node, nexthop)) {
+ struct interface *ifp;
+ char buf_iface[BUFSIZ];
+ char buf_nhop[BUFSIZ];
+
+ if (!no_adjacencies) {
+ inet_ntop(nexthop->family, &nexthop->ip, buf_nhop,
+ sizeof(buf_nhop));
+ ifp = if_lookup_by_index(nexthop->ifindex, VRF_DEFAULT);
+ if (ifp)
+ strlcpy(buf_iface, ifp->name,
+ sizeof(buf_iface));
+ else
+ snprintf(buf_iface, sizeof(buf_iface),
+ "ifindex %u", nexthop->ifindex);
+ } else {
+ strlcpy(buf_nhop, print_sys_hostname(nexthop->sysid),
+ sizeof(buf_nhop));
+ strlcpy(buf_iface, "-", sizeof(buf_iface));
+ }
+
+ if (prefix_sid) {
+ char buf_sid[BUFSIZ] = {};
+ char buf_lblop[BUFSIZ] = {};
+
+ if (nexthop->sr.present) {
+ snprintf(buf_sid, sizeof(buf_sid), "%u",
+ nexthop->sr.sid.value);
+ sr_op2str(buf_lblop, sizeof(buf_lblop),
+ rinfo->sr.label, nexthop->sr.label);
+ } else {
+ strlcpy(buf_sid, "-", sizeof(buf_sid));
+ strlcpy(buf_lblop, "-", sizeof(buf_lblop));
+ }
+
+ if (first) {
+ ttable_add_row(tt, "%s|%u|%s|%s|%s|%s",
+ buf_prefix, rinfo->cost,
+ buf_iface, buf_nhop, buf_sid,
+ buf_lblop);
+ first = false;
+ } else
+ ttable_add_row(tt, "||%s|%s|%s|%s", buf_iface,
+ buf_nhop, buf_sid, buf_lblop);
+ } else {
+ char buf_labels[BUFSIZ] = {};
+
+ if (nexthop->label_stack) {
+ for (int i = 0;
+ i < nexthop->label_stack->num_labels;
+ i++) {
+ char buf_label[BUFSIZ];
+
+ label2str(
+ nexthop->label_stack->label[i],
+ buf_label, sizeof(buf_label));
+ if (i != 0)
+ strlcat(buf_labels, "/",
+ sizeof(buf_labels));
+ strlcat(buf_labels, buf_label,
+ sizeof(buf_labels));
+ }
+ } else if (nexthop->sr.present)
+ label2str(nexthop->sr.label, buf_labels,
+ sizeof(buf_labels));
+ else
+ strlcpy(buf_labels, "-", sizeof(buf_labels));
+
+ if (first) {
+ ttable_add_row(tt, "%s|%u|%s|%s|%s", buf_prefix,
+ rinfo->cost, buf_iface, buf_nhop,
+ buf_labels);
+ first = false;
+ } else
+ ttable_add_row(tt, "||%s|%s|%s", buf_iface,
+ buf_nhop, buf_labels);
+ }
+ }
+ if (list_isempty(rinfo->nexthops)) {
+ if (prefix_sid) {
+ char buf_sid[BUFSIZ] = {};
+ char buf_lblop[BUFSIZ] = {};
+
+ if (rinfo->sr.present) {
+ snprintf(buf_sid, sizeof(buf_sid), "%u",
+ rinfo->sr.sid.value);
+ sr_op2str(buf_lblop, sizeof(buf_lblop),
+ rinfo->sr.label,
+ MPLS_LABEL_IMPLICIT_NULL);
+ } else {
+ strlcpy(buf_sid, "-", sizeof(buf_sid));
+ strlcpy(buf_lblop, "-", sizeof(buf_lblop));
+ }
+
+ ttable_add_row(tt, "%s|%u|%s|%s|%s|%s", buf_prefix,
+ rinfo->cost, "-", "-", buf_sid,
+ buf_lblop);
+ } else
+ ttable_add_row(tt, "%s|%u|%s|%s|%s", buf_prefix,
+ rinfo->cost, "-", "-", "-");
+ }
+}
+
void isis_print_routes(struct vty *vty, struct isis_spftree *spftree,
- bool backup)
+ bool prefix_sid, bool backup)
{
struct route_table *route_table;
struct ttable *tt;
struct route_node *rn;
+ bool no_adjacencies = false;
const char *tree_id_text = NULL;
if (!spftree)
@@ -1831,82 +2079,28 @@ void isis_print_routes(struct vty *vty, struct isis_spftree *spftree,
/* Prepare table. */
tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
- ttable_add_row(tt, "Prefix|Metric|Interface|Nexthop|Label(s)");
+ if (prefix_sid)
+ ttable_add_row(tt, "Prefix|Metric|Interface|Nexthop|SID|Label Op.");
+ else
+ ttable_add_row(tt, "Prefix|Metric|Interface|Nexthop|Label(s)");
tt->style.cell.rpad = 2;
tt->style.corner = '+';
ttable_restyle(tt);
ttable_rowseps(tt, 0, BOTTOM, true, '-');
+ if (CHECK_FLAG(spftree->flags, F_SPFTREE_NO_ADJACENCIES))
+ no_adjacencies = true;
+
route_table =
(backup) ? spftree->route_table_backup : spftree->route_table;
for (rn = route_top(route_table); rn; rn = route_next(rn)) {
struct isis_route_info *rinfo;
- struct isis_nexthop *nexthop;
- struct listnode *node;
- bool first = true;
- char buf_prefix[BUFSIZ];
rinfo = rn->info;
if (!rinfo)
continue;
- (void)prefix2str(&rn->p, buf_prefix, sizeof(buf_prefix));
- for (ALL_LIST_ELEMENTS_RO(rinfo->nexthops, node, nexthop)) {
- struct interface *ifp;
- char buf_iface[BUFSIZ];
- char buf_nhop[BUFSIZ];
- char buf_labels[BUFSIZ] = {};
-
- if (!CHECK_FLAG(spftree->flags,
- F_SPFTREE_NO_ADJACENCIES)) {
- inet_ntop(nexthop->family, &nexthop->ip,
- buf_nhop, sizeof(buf_nhop));
- ifp = if_lookup_by_index(nexthop->ifindex,
- VRF_DEFAULT);
- if (ifp)
- strlcpy(buf_iface, ifp->name,
- sizeof(buf_iface));
- else
- snprintf(buf_iface, sizeof(buf_iface),
- "ifindex %u",
- nexthop->ifindex);
- } else {
- strlcpy(buf_nhop,
- print_sys_hostname(nexthop->sysid),
- sizeof(buf_nhop));
- strlcpy(buf_iface, "-", sizeof(buf_iface));
- }
-
- if (nexthop->label_stack) {
- for (int i = 0;
- i < nexthop->label_stack->num_labels;
- i++) {
- char buf_label[BUFSIZ];
-
- label2str(
- nexthop->label_stack->label[i],
- buf_label, sizeof(buf_label));
- if (i != 0)
- strlcat(buf_labels, "/",
- sizeof(buf_labels));
- strlcat(buf_labels, buf_label,
- sizeof(buf_labels));
- }
- } else if (nexthop->sr.label != MPLS_INVALID_LABEL)
- label2str(nexthop->sr.label, buf_labels,
- sizeof(buf_labels));
- else
- strlcpy(buf_labels, "-", sizeof(buf_labels));
-
- if (first) {
- ttable_add_row(tt, "%s|%u|%s|%s|%s", buf_prefix,
- rinfo->cost, buf_iface, buf_nhop,
- buf_labels);
- first = false;
- } else
- ttable_add_row(tt, "||%s|%s|%s", buf_iface,
- buf_nhop, buf_labels);
- }
+ isis_print_route(tt, &rn->p, rinfo, prefix_sid, no_adjacencies);
}
/* Dump the generated table. */
@@ -1921,7 +2115,8 @@ void isis_print_routes(struct vty *vty, struct isis_spftree *spftree,
}
static void show_isis_route_common(struct vty *vty, int levels,
- struct isis *isis, bool backup)
+ struct isis *isis, bool prefix_sid,
+ bool backup)
{
struct listnode *node;
struct isis_area *area;
@@ -1941,19 +2136,19 @@ static void show_isis_route_common(struct vty *vty, int levels,
isis_print_routes(
vty,
area->spftree[SPFTREE_IPV4][level - 1],
- backup);
+ prefix_sid, backup);
}
if (area->ipv6_circuits > 0) {
isis_print_routes(
vty,
area->spftree[SPFTREE_IPV6][level - 1],
- backup);
+ prefix_sid, backup);
}
if (isis_area_ipv6_dstsrc_enabled(area)) {
isis_print_routes(vty,
area->spftree[SPFTREE_DSTSRC]
[level - 1],
- backup);
+ prefix_sid, backup);
}
}
}
@@ -1965,13 +2160,14 @@ DEFUN(show_isis_route, show_isis_route_cmd,
#ifndef FABRICD
" [<level-1|level-2>]"
#endif
- " [backup]",
+ " [<prefix-sid|backup>]",
SHOW_STR PROTO_HELP VRF_FULL_CMD_HELP_STR
"IS-IS routing table\n"
#ifndef FABRICD
"level-1 routes\n"
"level-2 routes\n"
#endif
+ "Show Prefix-SID information\n"
"Show backup routes\n")
{
int levels;
@@ -1979,6 +2175,7 @@ DEFUN(show_isis_route, show_isis_route_cmd,
struct listnode *node;
const char *vrf_name = VRF_DEFAULT_NAME;
bool all_vrf = false;
+ bool prefix_sid = false;
bool backup = false;
int idx = 0;
@@ -1995,6 +2192,8 @@ DEFUN(show_isis_route, show_isis_route_cmd,
}
ISIS_FIND_VRF_ARGS(argv, argc, idx, vrf_name, all_vrf);
+ if (argv_find(argv, argc, "prefix-sid", &idx))
+ prefix_sid = true;
if (argv_find(argv, argc, "backup", &idx))
backup = true;
@@ -2002,12 +2201,13 @@ DEFUN(show_isis_route, show_isis_route_cmd,
if (all_vrf) {
for (ALL_LIST_ELEMENTS_RO(im->isis, node, isis))
show_isis_route_common(vty, levels, isis,
- backup);
+ prefix_sid, backup);
return CMD_SUCCESS;
}
isis = isis_lookup_by_vrfname(vrf_name);
if (isis != NULL)
- show_isis_route_common(vty, levels, isis, backup);
+ show_isis_route_common(vty, levels, isis, prefix_sid,
+ backup);
}
return CMD_SUCCESS;
diff --git a/isisd/isis_spf.h b/isisd/isis_spf.h
index 5d07c80d20..15d3ff9272 100644
--- a/isisd/isis_spf.h
+++ b/isisd/isis_spf.h
@@ -68,7 +68,7 @@ int _isis_spf_schedule(struct isis_area *area, int level,
const char *func, const char *file, int line);
void isis_print_spftree(struct vty *vty, struct isis_spftree *spftree);
void isis_print_routes(struct vty *vty, struct isis_spftree *spftree,
- bool backup);
+ bool prefix_sid, bool backup);
void isis_spf_init(void);
void isis_spf_print(struct isis_spftree *spftree, struct vty *vty);
void isis_run_spf(struct isis_spftree *spftree);
diff --git a/isisd/isis_spf_private.h b/isisd/isis_spf_private.h
index 1a2e969bd9..e999f96539 100644
--- a/isisd/isis_spf_private.h
+++ b/isisd/isis_spf_private.h
@@ -52,6 +52,7 @@ struct prefix_pair {
struct isis_vertex_adj {
struct isis_spf_adj *sadj;
+ struct isis_sr_psid_info sr;
struct mpls_label_stack *label_stack;
};
@@ -62,7 +63,10 @@ struct isis_vertex {
enum vertextype type;
union {
uint8_t id[ISIS_SYS_ID_LEN + 1];
- struct prefix_pair ip;
+ struct {
+ struct prefix_pair p;
+ struct isis_sr_psid_info sr;
+ } ip;
} N;
uint32_t d_N; /* d(N) Distance from this IS */
uint16_t depth; /* The depth in the imaginary tree */
@@ -91,8 +95,8 @@ static unsigned isis_vertex_queue_hash_key(const void *vp)
if (VTYPE_IP(vertex->type)) {
uint32_t key;
- key = prefix_hash_key(&vertex->N.ip.dest);
- key = jhash_1word(prefix_hash_key(&vertex->N.ip.src), key);
+ key = prefix_hash_key(&vertex->N.ip.p.dest);
+ key = jhash_1word(prefix_hash_key(&vertex->N.ip.p.src), key);
return key;
}
@@ -108,11 +112,12 @@ static bool isis_vertex_queue_hash_cmp(const void *a, const void *b)
return false;
if (VTYPE_IP(va->type)) {
- if (prefix_cmp(&va->N.ip.dest, &vb->N.ip.dest))
+ if (prefix_cmp(&va->N.ip.p.dest, &vb->N.ip.p.dest))
return false;
- return prefix_cmp((const struct prefix *)&va->N.ip.src,
- (const struct prefix *)&vb->N.ip.src) == 0;
+ return prefix_cmp((const struct prefix *)&va->N.ip.p.src,
+ (const struct prefix *)&vb->N.ip.p.src)
+ == 0;
}
return memcmp(va->N.id, vb->N.id, ISIS_SYS_ID_LEN + 1) == 0;
@@ -351,7 +356,7 @@ static void isis_vertex_id_init(struct isis_vertex *vertex, const void *id,
if (VTYPE_IS(vtype) || VTYPE_ES(vtype)) {
memcpy(vertex->N.id, id, ISIS_SYS_ID_LEN + 1);
} else if (VTYPE_IP(vtype)) {
- memcpy(&vertex->N.ip, id, sizeof(vertex->N.ip));
+ memcpy(&vertex->N.ip.p, id, sizeof(vertex->N.ip.p));
} else {
flog_err(EC_LIB_DEVELOPMENT, "Unknown Vertex Type");
}
diff --git a/isisd/isis_sr.c b/isisd/isis_sr.c
index 842103de1e..89fa2018b9 100644
--- a/isisd/isis_sr.c
+++ b/isisd/isis_sr.c
@@ -31,6 +31,7 @@
#include "memory.h"
#include "prefix.h"
#include "table.h"
+#include "srcdest_table.h"
#include "vty.h"
#include "zclient.h"
#include "lib/lib_errors.h"
@@ -50,8 +51,6 @@
/* Local variables and functions */
DEFINE_MTYPE_STATIC(ISISD, ISIS_SR_INFO, "ISIS segment routing information")
-static void sr_prefix_uninstall(struct sr_prefix *srp);
-static void sr_prefix_reinstall(struct sr_prefix *srp, bool make_before_break);
static void sr_local_block_delete(struct isis_area *area);
static int sr_local_block_init(struct isis_area *area);
static void sr_adj_sid_update(struct sr_adjacency *sra,
@@ -61,53 +60,149 @@ static void sr_adj_sid_del(struct sr_adjacency *sra);
/* --- RB-Tree Management functions ----------------------------------------- */
/**
- * SR Prefix comparison for RB-Tree.
+ * Configured SR Prefix comparison for RB-Tree.
*
* @param a First SR prefix
* @param b Second SR prefix
*
* @return -1 (a < b), 0 (a == b) or +1 (a > b)
*/
-static inline int sr_prefix_sid_compare(const struct sr_prefix *a,
- const struct sr_prefix *b)
+static inline int sr_prefix_sid_cfg_compare(const struct sr_prefix_cfg *a,
+ const struct sr_prefix_cfg *b)
{
return prefix_cmp(&a->prefix, &b->prefix);
}
-DECLARE_RBTREE_UNIQ(srdb_node_prefix, struct sr_prefix, node_entry,
- sr_prefix_sid_compare)
-DECLARE_RBTREE_UNIQ(srdb_area_prefix, struct sr_prefix, area_entry,
- sr_prefix_sid_compare)
+DECLARE_RBTREE_UNIQ(srdb_prefix_cfg, struct sr_prefix_cfg, entry,
+ sr_prefix_sid_cfg_compare)
/**
- * Configured SR Prefix comparison for RB-Tree.
+ * Find SRGB associated to a System ID.
*
- * @param a First SR prefix
- * @param b Second SR prefix
+ * @param area IS-IS LSP database
+ * @param sysid System ID to lookup
*
- * @return -1 (a < b), 0 (a == b) or +1 (a > b)
+ * @return Pointer to SRGB if found, NULL otherwise
*/
-static inline int sr_prefix_sid_cfg_compare(const struct sr_prefix_cfg *a,
- const struct sr_prefix_cfg *b)
+struct isis_sr_block *isis_sr_find_srgb(struct lspdb_head *lspdb,
+ const uint8_t *sysid)
{
- return prefix_cmp(&a->prefix, &b->prefix);
+ struct isis_lsp *lsp;
+
+ lsp = isis_root_system_lsp(lspdb, sysid);
+ if (!lsp)
+ return NULL;
+
+ if (!lsp->tlvs->router_cap
+ || lsp->tlvs->router_cap->srgb.range_size == 0)
+ return NULL;
+
+ return &lsp->tlvs->router_cap->srgb;
}
-DECLARE_RBTREE_UNIQ(srdb_prefix_cfg, struct sr_prefix_cfg, entry,
- sr_prefix_sid_cfg_compare)
/**
- * SR Node comparison for RB-Tree.
+ * Compute input label for the given Prefix-SID.
*
- * @param a First SR node
- * @param b Second SR node
+ * @param area IS-IS area
+ * @param psid IS-IS Prefix-SID Sub-TLV
+ * @param local Indicates whether the Prefix-SID is local or not
*
- * @return -1 (a < b), 0 (a == b) or +1 (a > b)
+ * @return MPLS label or MPLS_INVALID_LABEL in case of SRGB overflow
*/
-static inline int sr_node_compare(const struct sr_node *a,
- const struct sr_node *b)
+mpls_label_t sr_prefix_in_label(struct isis_area *area,
+ struct isis_prefix_sid *psid, bool local)
{
- return memcmp(a->sysid, b->sysid, ISIS_SYS_ID_LEN);
+ /*
+ * No need to assign a label for local Prefix-SIDs unless the no-PHP
+ * flag is set.
+ */
+ if (local
+ && (!CHECK_FLAG(psid->flags, ISIS_PREFIX_SID_NO_PHP)
+ || CHECK_FLAG(psid->flags, ISIS_PREFIX_SID_EXPLICIT_NULL)))
+ return MPLS_INVALID_LABEL;
+
+ /* Return SID value as MPLS label if it is an Absolute SID */
+ if (CHECK_FLAG(psid->flags,
+ ISIS_PREFIX_SID_VALUE | ISIS_PREFIX_SID_LOCAL))
+ return psid->value;
+
+ /* Check that SID index falls inside the SRGB */
+ if (psid->value >= (area->srdb.config.srgb_upper_bound
+ - area->srdb.config.srgb_lower_bound + 1)) {
+ flog_warn(EC_ISIS_SID_OVERFLOW,
+ "%s: SID index %u falls outside local SRGB range",
+ __func__, psid->value);
+ return MPLS_INVALID_LABEL;
+ }
+
+ /* Return MPLS label as SID index + SRGB_lower_bound as per RFC 8667 */
+ return (area->srdb.config.srgb_lower_bound + psid->value);
+}
+
+/**
+ * Compute output label for the given Prefix-SID.
+ *
+ * @param lspdb IS-IS LSP database
+ * @param family Prefix-SID address family
+ * @param psid Prefix-SID Sub-TLV
+ * @param nh_sysid System ID of the nexthop node
+ * @param last_hop Indicates whether the nexthop node is the last hop
+ *
+ * @return MPLS label or MPLS_INVALID_LABEL in case of error
+ */
+mpls_label_t sr_prefix_out_label(struct lspdb_head *lspdb, int family,
+ struct isis_prefix_sid *psid,
+ const uint8_t *nh_sysid, bool last_hop)
+{
+ struct isis_sr_block *nh_srgb;
+
+ if (last_hop) {
+ if (!CHECK_FLAG(psid->flags, ISIS_PREFIX_SID_NO_PHP))
+ return MPLS_LABEL_IMPLICIT_NULL;
+
+ if (CHECK_FLAG(psid->flags, ISIS_PREFIX_SID_EXPLICIT_NULL)) {
+ if (family == AF_INET)
+ return MPLS_LABEL_IPV4_EXPLICIT_NULL;
+ else
+ return MPLS_LABEL_IPV6_EXPLICIT_NULL;
+ }
+ /* Fallthrough */
+ }
+
+ /* Return SID value as MPLS label if it is an Absolute SID */
+ if (CHECK_FLAG(psid->flags,
+ ISIS_PREFIX_SID_VALUE | ISIS_PREFIX_SID_LOCAL)) {
+ /*
+ * V/L SIDs have local significance, so only adjacent routers
+ * can use them (RFC8667 section #2.1.1.1)
+ */
+ if (!last_hop)
+ return MPLS_INVALID_LABEL;
+ return psid->value;
+ }
+
+ /* Check that SID index falls inside the SRGB */
+ nh_srgb = isis_sr_find_srgb(lspdb, nh_sysid);
+ if (!nh_srgb)
+ return MPLS_INVALID_LABEL;
+
+ /*
+ * Check if the nexthop can handle SR-MPLS encapsulated IPv4 or
+ * IPv6 packets.
+ */
+ if ((family == AF_INET && !IS_SR_IPV4(nh_srgb))
+ || (family == AF_INET6 && !IS_SR_IPV6(nh_srgb)))
+ return MPLS_INVALID_LABEL;
+
+ if (psid->value >= nh_srgb->range_size) {
+ flog_warn(EC_ISIS_SID_OVERFLOW,
+ "%s: SID index %u falls outside remote SRGB range",
+ __func__, psid->value);
+ return MPLS_INVALID_LABEL;
+ }
+
+ /* Return MPLS label as SID index + SRGB_lower_bound as per RFC 8667 */
+ return (nh_srgb->lower_bound + psid->value);
}
-DECLARE_RBTREE_UNIQ(srdb_node, struct sr_node, entry, sr_node_compare)
/* --- Functions used for Yang model and CLI to configure Segment Routing --- */
@@ -162,8 +257,6 @@ int isis_sr_cfg_srgb_update(struct isis_area *area, uint32_t lower_bound,
srdb->config.srgb_upper_bound = upper_bound;
if (srdb->enabled) {
- struct sr_prefix *srp;
-
/* then request new SRGB if SR is enabled. */
if (isis_zebra_request_label_range(
srdb->config.srgb_lower_bound,
@@ -179,14 +272,6 @@ int isis_sr_cfg_srgb_update(struct isis_area *area, uint32_t lower_bound,
srdb->config.srgb_lower_bound,
srdb->config.srgb_upper_bound);
- /* Reinstall local Prefix-SIDs to update their input labels. */
- for (int level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++) {
- frr_each (srdb_area_prefix,
- &area->srdb.prefix_sids[level - 1], srp) {
- sr_prefix_reinstall(srp, false);
- }
- }
-
lsp_regenerate_schedule(area, area->is_type, 0);
} else if (srdb->config.enabled) {
/* Try to enable SR again using the new SRGB. */
@@ -278,7 +363,7 @@ struct sr_prefix_cfg *isis_sr_cfg_prefix_add(struct isis_area *area,
/* Set the N-flag when appropriate. */
ifp = if_lookup_prefix(prefix, VRF_DEFAULT);
- if (ifp && sr_prefix_is_node_sid(ifp, prefix))
+ if (ifp && sr_prefix_is_node_sid(ifp, prefix) && !pcfg->n_flag_clear)
pcfg->node_sid = true;
/* Save prefix-sid configuration. */
@@ -364,897 +449,6 @@ void isis_sr_prefix_cfg2subtlv(const struct sr_prefix_cfg *pcfg, bool external,
}
}
-/* --- Segment Routing Prefix Management functions -------------------------- */
-
-/**
- * Add Segment Routing Prefix to a given Segment Routing Node.
- *
- * @param area IS-IS area
- * @param srn Segment Routing Node
- * @param prefix Prefix to be added
- * @param local True if prefix is locally configured, false otherwise
- * @param psid Prefix-SID sub-TLVs
- *
- * @return New Segment Routing Prefix structure
- */
-static struct sr_prefix *sr_prefix_add(struct isis_area *area,
- struct sr_node *srn,
- union prefixconstptr prefix, bool local,
- const struct isis_prefix_sid *psid)
-{
- struct sr_prefix *srp;
-
- srp = XCALLOC(MTYPE_ISIS_SR_INFO, sizeof(*srp));
- prefix_copy(&srp->prefix, prefix.p);
- srp->sid = *psid;
- srp->input_label = MPLS_INVALID_LABEL;
- if (local) {
- srp->type = ISIS_SR_PREFIX_LOCAL;
- isis_sr_nexthop_reset(&srp->u.local.info);
- } else {
- srp->type = ISIS_SR_PREFIX_REMOTE;
- srp->u.remote.rinfo = NULL;
- }
- srp->srn = srn;
- srdb_node_prefix_add(&srn->prefix_sids, srp);
- /* TODO: this might fail if we have Anycast SIDs in the IS-IS area. */
- srdb_area_prefix_add(&area->srdb.prefix_sids[srn->level - 1], srp);
-
- sr_debug(" |- Added new SR Prefix-SID %pFX %s %u to SR Node %s",
- &srp->prefix, IS_SID_VALUE(srp->sid.flags) ? "label" : "index",
- srp->sid.value, sysid_print(srn->sysid));
-
- return srp;
-}
-
-/**
- * Remove given Segment Prefix from given Segment Routing Node.
- * Prefix-SID is un-installed first.
- *
- * @param area IS-IS area
- * @param srn Segment Routing Node
- * @param srp Segment Routing Prefix
- */
-static void sr_prefix_del(struct isis_area *area, struct sr_node *srn,
- struct sr_prefix *srp)
-{
- sr_debug(" |- Delete SR Prefix-SID %pFX %s %u to SR Node %s",
- &srp->prefix, IS_SID_VALUE(srp->sid.flags) ? "label" : "index",
- srp->sid.value, sysid_print(srn->sysid));
-
- sr_prefix_uninstall(srp);
- srdb_node_prefix_del(&srn->prefix_sids, srp);
- srdb_area_prefix_del(&area->srdb.prefix_sids[srn->level - 1], srp);
- XFREE(MTYPE_ISIS_SR_INFO, srp);
-}
-
-/**
- * Find Segment Routing Prefix by Area.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param prefix Prefix to lookup
- *
- * @return Segment Routing Prefix structure if found, NULL otherwise
- */
-static struct sr_prefix *sr_prefix_find_by_area(struct isis_area *area,
- int level,
- union prefixconstptr prefix)
-{
- struct sr_prefix srp = {};
-
- prefix_copy(&srp.prefix, prefix.p);
- return srdb_area_prefix_find(&area->srdb.prefix_sids[level - 1], &srp);
-}
-
-/**
- * Find Segment Routing Prefix by Segment Routing Node.
- *
- * @param srn Segment Routing Node
- * @param prefix Prefix to lookup
- *
- * @return Segment Routing Prefix structure if found, NULL otherwise
- */
-static struct sr_prefix *sr_prefix_find_by_node(struct sr_node *srn,
- union prefixconstptr prefix)
-{
- struct sr_prefix srp = {};
-
- prefix_copy(&srp.prefix, prefix.p);
- return srdb_node_prefix_find(&srn->prefix_sids, &srp);
-}
-
-/* --- Segment Routing Node Management functions ---------------------------- */
-
-/**
- * Add Segment Routing Node to the Segment Routing Data Base.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param sysid Node System ID
- * @param cap Segment Routing Capability sub-TLVs
- *
- * @return New Segment Routing Node structure
- */
-static struct sr_node *sr_node_add(struct isis_area *area, int level,
- const uint8_t *sysid)
-{
- struct sr_node *srn;
-
- srn = XCALLOC(MTYPE_ISIS_SR_INFO, sizeof(*srn));
- srn->level = level;
- memcpy(srn->sysid, sysid, ISIS_SYS_ID_LEN);
- srn->area = area;
- srdb_node_prefix_init(&srn->prefix_sids);
- srdb_node_add(&area->srdb.sr_nodes[level - 1], srn);
-
- sr_debug(" |- Added new SR Node %s", sysid_print(srn->sysid));
-
- return srn;
-}
-
-static void sr_node_del(struct isis_area *area, int level, struct sr_node *srn)
-/**
- * Remove Segment Routing Node from the Segment Routing Data Base.
- * All Prefix-SID attached to this Segment Routing Node are removed first.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param srn Segment Routing Node to be deleted
- */
-{
-
- sr_debug(" |- Delete SR Node %s", sysid_print(srn->sysid));
-
- /* Remove and uninstall Prefix-SIDs. */
- while (srdb_node_prefix_count(&srn->prefix_sids) > 0) {
- struct sr_prefix *srp;
-
- srp = srdb_node_prefix_first(&srn->prefix_sids);
- sr_prefix_del(area, srn, srp);
- }
-
- srdb_node_del(&area->srdb.sr_nodes[level - 1], srn);
- XFREE(MTYPE_ISIS_SR_INFO, srn);
-}
-
-/**
- * Find Segment Routing Node in the Segment Routing Data Base per system ID.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param sysid Node System ID to lookup
- *
- * @return Segment Routing Node structure if found, NULL otherwise
- */
-static struct sr_node *sr_node_find(struct isis_area *area, int level,
- const uint8_t *sysid)
-{
- struct sr_node srn = {};
-
- memcpy(srn.sysid, sysid, ISIS_SYS_ID_LEN);
- return srdb_node_find(&area->srdb.sr_nodes[level - 1], &srn);
-}
-
-/**
- * Update Segment Routing Node following an SRGB update. This function
- * is called when a neighbor SR Node has updated its SRGB.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param sysid Segment Routing Node system ID
- */
-static void sr_node_srgb_update(struct isis_area *area, int level,
- uint8_t *sysid)
-{
- struct sr_prefix *srp;
-
- sr_debug("ISIS-Sr (%s): Update neighbors SR Node with new SRGB",
- area->area_tag);
-
- frr_each (srdb_area_prefix, &area->srdb.prefix_sids[level - 1], srp) {
- struct listnode *node;
- struct isis_nexthop *nh;
-
- if (srp->type == ISIS_SR_PREFIX_LOCAL)
- continue;
-
- if (srp->u.remote.rinfo == NULL)
- continue;
-
- for (ALL_LIST_ELEMENTS_RO(srp->u.remote.rinfo->nexthops, node,
- nh)) {
- if (memcmp(nh->sysid, sysid, ISIS_SYS_ID_LEN) != 0)
- continue;
-
- /*
- * The Prefix-SID input label hasn't changed. We could
- * re-install all Prefix-SID with "Make Before Break"
- * option. Zebra layer will update output label(s) by
- * adding new entry before removing the old one(s).
- */
- sr_prefix_reinstall(srp, true);
- break;
- }
- }
-}
-
-/* --- Segment Routing Nexthop information Management functions ------------- */
-
-/**
- * Update Segment Routing Nexthop.
- *
- * @param srnh Segment Routing next hop
- * @param label Output MPLS label
- */
-void isis_sr_nexthop_update(struct sr_nexthop_info *srnh, mpls_label_t label)
-{
- srnh->label = label;
- if (srnh->uptime == 0)
- srnh->uptime = time(NULL);
-}
-
-/**
- * Reset Segment Routing Nexthop.
- *
- * @param srnh Segment Routing Nexthop
- */
-void isis_sr_nexthop_reset(struct sr_nexthop_info *srnh)
-{
- srnh->label = MPLS_INVALID_LABEL;
- srnh->uptime = 0;
-}
-
-/* --- Segment Routing Prefix-SID Management functions to configure LFIB ---- */
-
-/**
- * Lookup IS-IS route in the Shortest Path Tree.
- *
- * @param area IS-IS area
- * @param tree_id Shortest Path Tree identifier
- * @param srp Segment Routing Prefix to lookup
- *
- * @return Route Information for this prefix if found, NULL otherwise
- */
-static struct isis_route_info *sr_prefix_lookup_route(struct isis_area *area,
- enum spf_tree_id tree_id,
- struct sr_prefix *srp)
-{
- struct route_node *rn;
- int level = srp->srn->level;
-
- rn = route_node_lookup(area->spftree[tree_id][level - 1]->route_table,
- &srp->prefix);
- if (rn) {
- route_unlock_node(rn);
- if (rn->info)
- return rn->info;
- }
-
- return NULL;
-}
-
-/**
- * Compute input label for the given Prefix-SID.
- *
- * @param srp Segment Routing Prefix
- *
- * @return MPLS label or MPLS_INVALID_LABEL in case of SRGB overflow
- */
-static mpls_label_t sr_prefix_in_label(const struct sr_prefix *srp)
-{
- const struct sr_node *srn = srp->srn;
- struct isis_area *area = srn->area;
-
- /* Return SID value as MPLS label if it is an Absolute SID */
- if (CHECK_FLAG(srp->sid.flags,
- ISIS_PREFIX_SID_VALUE | ISIS_PREFIX_SID_LOCAL))
- return srp->sid.value;
-
- /* Check that SID index falls inside the SRGB */
- if (srp->sid.value >= (area->srdb.config.srgb_upper_bound
- - area->srdb.config.srgb_lower_bound + 1)) {
- flog_warn(EC_ISIS_SID_OVERFLOW,
- "%s: SID index %u falls outside local SRGB range",
- __func__, srp->sid.value);
- return MPLS_INVALID_LABEL;
- }
-
- /* Return MPLS label as SID index + SRGB_lower_bound as per RFC 8667 */
- return (area->srdb.config.srgb_lower_bound + srp->sid.value);
-}
-
-/**
- * Compute output label for the given Prefix-SID.
- *
- * @param srp Segment Routing Prefix
- * @param srn_nexthop Segment Routing nexthop node
- * @param sysid System ID of the SR node which advertised the Prefix-SID
- *
- * @return MPLS label or MPLS_INVALID_LABEL in case of error
- */
-static mpls_label_t sr_prefix_out_label(const struct sr_prefix *srp,
- const struct sr_node *srn_nexthop,
- const uint8_t *sysid)
-{
- const struct sr_node *srn = srp->srn;
-
- /* Check if the nexthop SR Node is the last hop? */
- if (memcmp(sysid, srn->sysid, ISIS_SYS_ID_LEN) == 0) {
- /* SR-Node doesn't request NO-PHP. Return Implicit NULL label */
- if (!CHECK_FLAG(srp->sid.flags, ISIS_PREFIX_SID_NO_PHP))
- return MPLS_LABEL_IMPLICIT_NULL;
-
- /* SR-Node requests Implicit NULL Label */
- if (CHECK_FLAG(srp->sid.flags, ISIS_PREFIX_SID_EXPLICIT_NULL)) {
- if (srp->prefix.family == AF_INET)
- return MPLS_LABEL_IPV4_EXPLICIT_NULL;
- else
- return MPLS_LABEL_IPV6_EXPLICIT_NULL;
- }
- /* Fallthrough */
- }
-
- /* Return SID value as MPLS label if it is an Absolute SID */
- if (CHECK_FLAG(srp->sid.flags,
- ISIS_PREFIX_SID_VALUE | ISIS_PREFIX_SID_LOCAL)) {
- /*
- * V/L SIDs have local significance, so only adjacent routers
- * can use them (RFC8667 section #2.1.1.1)
- */
- if (srp->srn != srn_nexthop)
- return MPLS_INVALID_LABEL;
- return srp->sid.value;
- }
-
- /* Check that SID index falls inside the SRGB */
- if (srp->sid.value >= srn_nexthop->cap.srgb.range_size) {
- flog_warn(EC_ISIS_SID_OVERFLOW,
- "%s: SID index %u falls outside remote SRGB range",
- __func__, srp->sid.value);
- return MPLS_INVALID_LABEL;
- }
-
- /* Return MPLS label as SID index + SRGB_lower_bound as per RFC 8667 */
- return (srn_nexthop->cap.srgb.lower_bound + srp->sid.value);
-}
-
-/**
- * Process local Prefix-SID and install it if possible. Input label is
- * computed before installing it in LFIB.
- *
- * @param srp Segment Routing Prefix
- *
- * @return 0 on success, -1 otherwise
- */
-static int sr_prefix_install_local(struct sr_prefix *srp)
-{
- mpls_label_t input_label;
- const struct sr_node *srn = srp->srn;
-
- /*
- * No need to install Label for local Prefix-SID unless the
- * no-PHP option is configured.
- */
- if (!CHECK_FLAG(srp->sid.flags, ISIS_PREFIX_SID_NO_PHP)
- || CHECK_FLAG(srp->sid.flags, ISIS_PREFIX_SID_EXPLICIT_NULL))
- return -1;
-
- sr_debug(" |- Installing Prefix-SID %pFX %s %u (%s) with nexthop self",
- &srp->prefix, IS_SID_VALUE(srp->sid.flags) ? "label" : "index",
- srp->sid.value, circuit_t2string(srn->level));
-
- /* Compute input label and check that is valid. */
- input_label = sr_prefix_in_label(srp);
- if (input_label == MPLS_INVALID_LABEL)
- return -1;
-
- /* Update internal state. */
- srp->input_label = input_label;
- isis_sr_nexthop_update(&srp->u.local.info, MPLS_LABEL_IMPLICIT_NULL);
-
- /* Install Prefix-SID in the forwarding plane. */
- isis_zebra_send_prefix_sid(ZEBRA_MPLS_LABELS_REPLACE, srp);
-
- return 0;
-}
-
-/**
- * Process remote Prefix-SID and install it if possible. Input and Output
- * labels are computed before installing them in LFIB.
- *
- * @param srp Segment Routing Prefix
- *
- * @return 0 on success, -1 otherwise
- */
-static int sr_prefix_install_remote(struct sr_prefix *srp)
-{
- const struct sr_node *srn = srp->srn;
- struct isis_area *area = srn->area;
- enum spf_tree_id tree_id;
- struct listnode *node;
- struct isis_nexthop *nexthop;
- mpls_label_t input_label;
- size_t nexthop_num = 0;
-
- /* Lookup to associated IS-IS route. */
- tree_id = (srp->prefix.family == AF_INET) ? SPFTREE_IPV4 : SPFTREE_IPV6;
- srp->u.remote.rinfo = sr_prefix_lookup_route(area, tree_id, srp);
- if (!srp->u.remote.rinfo)
- /* SPF hasn't converged for this route yet. */
- return -1;
-
- /* Compute input label and check that is valid. */
- input_label = sr_prefix_in_label(srp);
- if (input_label == MPLS_INVALID_LABEL)
- return -1;
-
- sr_debug(" |- Installing Prefix-SID %pFX %s %u (%s)", &srp->prefix,
- IS_SID_VALUE(srp->sid.flags) ? "label" : "index",
- srp->sid.value, circuit_t2string(srn->level));
-
- /* Process all SPF nexthops */
- for (ALL_LIST_ELEMENTS_RO(srp->u.remote.rinfo->nexthops, node,
- nexthop)) {
- struct sr_node *srn_nexthop;
- mpls_label_t output_label;
-
- /* Check if the nexthop advertised a SRGB. */
- srn_nexthop = sr_node_find(area, srn->level, nexthop->sysid);
- if (!srn_nexthop)
- goto next;
-
- /*
- * Check if the nexthop can handle SR-MPLS encapsulated IPv4 or
- * IPv6 packets.
- */
- if ((nexthop->family == AF_INET
- && !IS_SR_IPV4(srn_nexthop->cap.srgb))
- || (nexthop->family == AF_INET6
- && !IS_SR_IPV6(srn_nexthop->cap.srgb)))
- goto next;
-
- /* Compute output label and check if it is valid */
- output_label =
- sr_prefix_out_label(srp, srn_nexthop, nexthop->sysid);
- if (output_label == MPLS_INVALID_LABEL)
- goto next;
-
- if (IS_DEBUG_SR) {
- static char buf[INET6_ADDRSTRLEN];
-
- inet_ntop(nexthop->family, &nexthop->ip, buf,
- sizeof(buf));
- zlog_debug(" |- nexthop %s label %u", buf,
- output_label);
- }
-
- isis_sr_nexthop_update(&nexthop->sr, output_label);
- nexthop_num++;
- continue;
- next:
- isis_sr_nexthop_reset(&nexthop->sr);
- }
-
- /* Check that we found at least one valid nexthop */
- if (nexthop_num == 0) {
- sr_debug(" |- no valid nexthops");
- return -1;
- }
-
- /* Update internal state. */
- srp->input_label = input_label;
-
- /* Install Prefix-SID in the forwarding plane. */
- isis_zebra_send_prefix_sid(ZEBRA_MPLS_LABELS_REPLACE, srp);
-
- return 0;
-}
-
-/**
- * Process local or remote Prefix-SID and install it if possible.
- *
- * @param srp Segment Routing Prefix
- */
-static void sr_prefix_install(struct sr_prefix *srp)
-{
- const struct sr_node *srn = srp->srn;
- struct isis_area *area = srn->area;
- int ret;
-
- sr_debug("ISIS-Sr (%s): Install Prefix-SID %pFX %s %u", area->area_tag,
- &srp->prefix, IS_SID_VALUE(srp->sid.flags) ? "label" : "index",
- srp->sid.value);
-
- /* L1 routes are preferred over the L2 ones. */
- if (area->is_type == IS_LEVEL_1_AND_2) {
- struct sr_prefix *srp_l1, *srp_l2;
-
- switch (srn->level) {
- case ISIS_LEVEL1:
- srp_l2 = sr_prefix_find_by_area(area, ISIS_LEVEL2,
- &srp->prefix);
- if (srp_l2)
- sr_prefix_uninstall(srp_l2);
- break;
- case ISIS_LEVEL2:
- srp_l1 = sr_prefix_find_by_area(area, ISIS_LEVEL1,
- &srp->prefix);
- if (srp_l1)
- return;
- break;
- default:
- break;
- }
- }
-
- /* Install corresponding LFIB entry */
- if (srp->type == ISIS_SR_PREFIX_LOCAL)
- ret = sr_prefix_install_local(srp);
- else
- ret = sr_prefix_install_remote(srp);
- if (ret != 0)
- sr_prefix_uninstall(srp);
-}
-
-/**
- * Uninstall local or remote Prefix-SID.
- *
- * @param srp Segment Routing Prefix
- */
-static void sr_prefix_uninstall(struct sr_prefix *srp)
-{
- struct listnode *node;
- struct isis_nexthop *nexthop;
-
- /* Check that Input Label is valid */
- if (srp->input_label == MPLS_INVALID_LABEL)
- return;
-
- sr_debug("ISIS-Sr: Un-install Prefix-SID %pFX %s %u", &srp->prefix,
- IS_SID_VALUE(srp->sid.flags) ? "label" : "index",
- srp->sid.value);
-
- /* Uninstall Prefix-SID from the forwarding plane. */
- isis_zebra_send_prefix_sid(ZEBRA_MPLS_LABELS_DELETE, srp);
-
- /* Reset internal state. */
- srp->input_label = MPLS_INVALID_LABEL;
- switch (srp->type) {
- case ISIS_SR_PREFIX_LOCAL:
- isis_sr_nexthop_reset(&srp->u.local.info);
- break;
- case ISIS_SR_PREFIX_REMOTE:
- if (srp->u.remote.rinfo) {
- for (ALL_LIST_ELEMENTS_RO(srp->u.remote.rinfo->nexthops,
- node, nexthop))
- isis_sr_nexthop_reset(&nexthop->sr);
- }
- break;
- }
-}
-
-/**
- * Reinstall local or remote Prefix-SID.
- *
- * @param srp Segment Routing Prefix
- */
-static inline void sr_prefix_reinstall(struct sr_prefix *srp,
- bool make_before_break)
-{
- /*
- * Make Before Break can be used only when we know for sure that
- * the Prefix-SID input label hasn't changed. Otherwise we need to
- * uninstall the Prefix-SID first using the old input label before
- * reinstalling it.
- */
- if (!make_before_break)
- sr_prefix_uninstall(srp);
-
- /* New input label is computed in sr_prefix_install() function */
- sr_prefix_install(srp);
-}
-
-/* --- IS-IS LSP Parse functions -------------------------------------------- */
-
-/**
- * Compare Router Capabilities. Only Flags, SRGB and Algorithm are used for the
- * comparison. MSD and SRLB modification must not trigger and SR-Prefix update.
- *
- * @param r1 First Router Capabilities to compare
- * @param r2 Second Router Capabilities to compare
- * @return 0 if r1 and r2 are equal or -1 otherwise
- */
-static int router_cap_cmp(const struct isis_router_cap *r1,
- const struct isis_router_cap *r2)
-{
- if (r1->flags == r2->flags
- && r1->srgb.lower_bound == r2->srgb.lower_bound
- && r1->srgb.range_size == r2->srgb.range_size
- && r1->algo[0] == r2->algo[0])
- return 0;
- else
- return -1;
-}
-
-/**
- * Parse all SR-related information from the given Router Capabilities TLV.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param sysid System ID of the LSP
- * @param router_cap Router Capability subTLVs
- *
- * @return Segment Routing Node structure for this System ID
- */
-static struct sr_node *
-parse_router_cap_tlv(struct isis_area *area, int level, const uint8_t *sysid,
- const struct isis_router_cap *router_cap)
-{
- struct sr_node *srn;
-
- if (!router_cap || router_cap->srgb.range_size == 0)
- return NULL;
-
- sr_debug("ISIS-Sr (%s): Parse Router Capability TLV", area->area_tag);
-
- srn = sr_node_find(area, level, sysid);
- if (srn) {
- if (router_cap_cmp(&srn->cap, router_cap) != 0) {
- srn->state = SRDB_STATE_MODIFIED;
- } else
- srn->state = SRDB_STATE_UNCHANGED;
- sr_debug(" |- Found %s SR Node %s",
- srn->state == SRDB_STATE_MODIFIED ? "Modified"
- : "Unchanged",
- sysid_print(srn->sysid));
- } else {
- srn = sr_node_add(area, level, sysid);
- srn->state = SRDB_STATE_NEW;
- }
-
- /*
- * Update Router Capabilities in any case as SRLB or MSD
- * modification are not take into account for comparison.
- */
- srn->cap = *router_cap;
-
- return srn;
-}
-
-/**
- * Parse list of Prefix-SID Sub-TLVs.
- *
- * @param srn Segment Routing Node
- * @param prefix Prefix to be parsed
- * @param local True if prefix comes from own LSP, false otherwise
- * @param prefix_sids Prefix SID subTLVs
- */
-static void parse_prefix_sid_subtlvs(struct sr_node *srn,
- union prefixconstptr prefix, bool local,
- struct isis_item_list *prefix_sids)
-{
- struct isis_area *area = srn->area;
- struct isis_item *i;
-
- sr_debug("ISIS-Sr (%s): Parse Prefix SID TLV", area->area_tag);
-
- /* Parse list of Prefix SID subTLVs */
- for (i = prefix_sids->head; i; i = i->next) {
- struct isis_prefix_sid *psid = (struct isis_prefix_sid *)i;
- struct sr_prefix *srp;
-
- /* Only SPF algorithm is supported right now */
- if (psid->algorithm != SR_ALGORITHM_SPF)
- continue;
-
- /* Compute corresponding Segment Routing Prefix */
- srp = sr_prefix_find_by_node(srn, prefix);
- if (srp) {
- if (srp->sid.flags != psid->flags
- || srp->sid.algorithm != psid->algorithm
- || srp->sid.value != psid->value) {
- srp->sid = *psid;
- srp->state = SRDB_STATE_MODIFIED;
- } else if (srp->state == SRDB_STATE_VALIDATED)
- srp->state = SRDB_STATE_UNCHANGED;
- sr_debug(" |- Found %s Prefix-SID %pFX",
- srp->state == SRDB_STATE_MODIFIED
- ? "Modified"
- : "Unchanged",
- &srp->prefix);
-
- } else {
- srp = sr_prefix_add(area, srn, prefix, local, psid);
- srp->state = SRDB_STATE_NEW;
- }
- /*
- * Stop the Prefix-SID iteration since we only support the SPF
- * algorithm for now.
- */
- break;
- }
-}
-
-/**
- * Parse all SR-related information from the given LSP.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param srn Segment Routing Node
- * @param lsp IS-IS LSP
- */
-static void parse_lsp(struct isis_area *area, int level, struct sr_node **srn,
- struct isis_lsp *lsp)
-{
- struct isis_item_list *items;
- struct isis_item *i;
- bool local = lsp->own_lsp;
-
- /* Check LSP sequence number */
- if (lsp->hdr.seqno == 0) {
- zlog_warn("%s: lsp with 0 seq_num - ignore", __func__);
- return;
- }
-
- sr_debug("ISIS-Sr (%s): Parse LSP from node %s", area->area_tag,
- sysid_print(lsp->hdr.lsp_id));
-
- /* Parse the Router Capability TLV. */
- if (*srn == NULL) {
- *srn = parse_router_cap_tlv(area, level, lsp->hdr.lsp_id,
- lsp->tlvs->router_cap);
- if (!*srn)
- return;
- }
-
- /* Parse the Extended IP Reachability TLV. */
- items = &lsp->tlvs->extended_ip_reach;
- for (i = items->head; i; i = i->next) {
- struct isis_extended_ip_reach *ir;
-
- ir = (struct isis_extended_ip_reach *)i;
- if (!ir->subtlvs)
- continue;
-
- parse_prefix_sid_subtlvs(*srn, &ir->prefix, local,
- &ir->subtlvs->prefix_sids);
- }
-
- /* Parse Multi Topology Reachable IPv6 Prefixes TLV. */
- items = isis_lookup_mt_items(&lsp->tlvs->mt_ipv6_reach,
- ISIS_MT_IPV6_UNICAST);
- for (i = items ? items->head : NULL; i; i = i->next) {
- struct isis_ipv6_reach *ir;
-
- ir = (struct isis_ipv6_reach *)i;
- if (!ir->subtlvs)
- continue;
-
- parse_prefix_sid_subtlvs(*srn, &ir->prefix, local,
- &ir->subtlvs->prefix_sids);
- }
-}
-
-/**
- * Parse all SR-related information from the entire LSPDB.
- *
- * @param area IS-IS area
- */
-static void parse_lspdb(struct isis_area *area)
-{
- struct isis_lsp *lsp;
-
- sr_debug("ISIS-Sr (%s): Parse LSP Data Base", area->area_tag);
-
- /* Process all LSP from Level 1 & 2 */
- for (int level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++) {
- frr_each (lspdb, &area->lspdb[level - 1], lsp) {
- struct isis_lsp *frag;
- struct listnode *node;
- struct sr_node *srn = NULL;
-
- /* Skip Pseudo ID LSP and LSP without TLVs */
- if (LSP_PSEUDO_ID(lsp->hdr.lsp_id))
- continue;
- if (!lsp->tlvs)
- continue;
-
- /* Parse LSP, then fragment */
- parse_lsp(area, level, &srn, lsp);
- for (ALL_LIST_ELEMENTS_RO(lsp->lspu.frags, node, frag))
- parse_lsp(area, level, &srn, frag);
- }
- }
-}
-
-/**
- * Process any new/deleted/modified Prefix-SID in the LSPDB.
- *
- * @param srn Segment Routing Node
- * @param srp Segment Routing Prefix
- */
-static void process_prefix_changes(struct sr_node *srn, struct sr_prefix *srp)
-{
- struct isis_area *area = srn->area;
-
- /* Install/reinstall/uninstall Prefix-SID if necessary. */
- switch (srp->state) {
- case SRDB_STATE_NEW:
- sr_debug("ISIS-Sr (%s): Created Prefix-SID %pFX for SR node %s",
- area->area_tag, &srp->prefix, sysid_print(srn->sysid));
- sr_prefix_install(srp);
- break;
- case SRDB_STATE_MODIFIED:
- sr_debug(
- "ISIS-Sr (%s): Modified Prefix-SID %pFX for SR node %s",
- area->area_tag, &srp->prefix, sysid_print(srn->sysid));
- sr_prefix_reinstall(srp, false);
- break;
- case SRDB_STATE_UNCHANGED:
- break;
- default:
- sr_debug("ISIS-Sr (%s): Removed Prefix-SID %pFX for SR node %s",
- area->area_tag, &srp->prefix, sysid_print(srn->sysid));
- sr_prefix_del(area, srn, srp);
- return;
- }
-
- /* Validate SRDB State for next LSPDB parsing */
- srp->state = SRDB_STATE_VALIDATED;
-}
-
-/**
- * Process any new/deleted/modified SRGB in the LSPDB.
- *
- * @param area IS-IS area
- * @param level IS-IS level
- * @param srn Segment Routing Node
- */
-static void process_node_changes(struct isis_area *area, int level,
- struct sr_node *srn)
-{
- struct sr_prefix *srp;
- uint8_t sysid[ISIS_SYS_ID_LEN];
- bool adjacent;
-
- memcpy(sysid, srn->sysid, sizeof(sysid));
-
- /*
- * If an neighbor router's SRGB was changed or created, then reinstall
- * all Prefix-SIDs from all nodes that use this neighbor as nexthop.
- */
- adjacent = !!isis_adj_find(area, level, sysid);
- switch (srn->state) {
- case SRDB_STATE_NEW:
- case SRDB_STATE_MODIFIED:
- sr_debug("ISIS-Sr (%s): Create/Update SR node %s",
- area->area_tag, sysid_print(srn->sysid));
- if (adjacent)
- sr_node_srgb_update(area, level, sysid);
- break;
- case SRDB_STATE_UNCHANGED:
- break;
- default:
- /* SR capabilities have been removed. Delete SR-Node */
- sr_debug("ISIS-Sr (%s): Remove SR node %s", area->area_tag,
- sysid_print(srn->sysid));
-
- sr_node_del(area, level, srn);
- /* and Update remaining Prefix-SID from all remaining SR Node */
- if (adjacent)
- sr_node_srgb_update(area, level, sysid);
- return;
- }
-
- /* Validate SRDB State for next LSPDB parsing */
- srn->state = SRDB_STATE_VALIDATED;
-
- /* Finally, process all Prefix-SID of this SR Node */
- frr_each_safe (srdb_node_prefix, &srn->prefix_sids, srp)
- process_prefix_changes(srn, srp);
-}
-
/**
* Delete all backup Adj-SIDs.
*
@@ -1272,89 +466,6 @@ void isis_area_delete_backup_adj_sids(struct isis_area *area, int level)
sr_adj_sid_del(sra);
}
-/**
- * Parse and process all SR-related Sub-TLVs after running the SPF algorithm.
- *
- * @param area IS-IS area
- */
-void isis_area_verify_sr(struct isis_area *area)
-{
- struct sr_node *srn;
-
- if (!area->srdb.enabled)
- return;
-
- /* Parse LSPDB to detect new/deleted/modified SR (sub-)TLVs. */
- parse_lspdb(area);
-
- /* Process possible SR-related changes in the LDPSB. */
- for (int level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++) {
- frr_each_safe (srdb_node, &area->srdb.sr_nodes[level - 1], srn)
- process_node_changes(area, level, srn);
- }
-}
-
-/**
- * Once a route is updated in the SPT, reinstall or uninstall its corresponding
- * Prefix-SID (if any).
- *
- * @param area IS-IS area
- * @param prefix Prefix to be updated
- * @param route_info New Route Information
- *
- * @return 0
- */
-static int sr_route_update(struct isis_area *area, struct prefix *prefix,
- struct isis_route_info *route_info)
-{
- struct sr_prefix *srp;
-
- if (!area->srdb.enabled)
- return 0;
-
- sr_debug("ISIS-Sr (%s): Update route for prefix %pFX", area->area_tag,
- prefix);
-
- /* Lookup to Segment Routing Prefix for this prefix */
- switch (area->is_type) {
- case IS_LEVEL_1:
- srp = sr_prefix_find_by_area(area, ISIS_LEVEL1, prefix);
- break;
- case IS_LEVEL_2:
- srp = sr_prefix_find_by_area(area, ISIS_LEVEL2, prefix);
- break;
- case IS_LEVEL_1_AND_2:
- srp = sr_prefix_find_by_area(area, ISIS_LEVEL1, prefix);
- if (!srp)
- srp = sr_prefix_find_by_area(area, ISIS_LEVEL2, prefix);
- break;
- default:
- flog_err(EC_LIB_DEVELOPMENT, "%s: unknown area level",
- __func__);
- exit(1);
- }
-
- /* Skip NULL or local Segment Routing Prefix */
- if (!srp || srp->type == ISIS_SR_PREFIX_LOCAL)
- return 0;
-
- /* Install or unintall Prefix-SID if route is Active or not */
- if (CHECK_FLAG(route_info->flag, ISIS_ROUTE_FLAG_ACTIVE)) {
- /*
- * The Prefix-SID input label hasn't changed. We could use the
- * "Make Before Break" option. Zebra layer will update output
- * label by adding new label(s) before removing old one(s).
- */
- sr_prefix_reinstall(srp, true);
- srp->u.remote.rinfo = route_info;
- } else {
- sr_prefix_uninstall(srp);
- srp->u.remote.rinfo = NULL;
- }
-
- return 0;
-}
-
/* --- Segment Routing Local Block management functions --------------------- */
/**
@@ -1588,7 +699,7 @@ void sr_adj_sid_add_single(struct isis_adjacency *adj, int family, bool backup,
struct mpls_label_stack *label_stack;
label_stack = vadj->label_stack;
- adjinfo2nexthop(family, sra->backup_nexthops, adj,
+ adjinfo2nexthop(family, sra->backup_nexthops, adj, NULL,
label_stack);
}
}
@@ -1838,7 +949,7 @@ static int sr_if_new_hook(struct interface *ifp)
continue;
if (sr_prefix_is_node_sid(ifp, &pcfg->prefix)
- && !pcfg->node_sid) {
+ && !pcfg->n_flag_clear) {
pcfg->node_sid = true;
lsp_regenerate_schedule(area, area->is_type, 0);
}
@@ -1847,8 +958,6 @@ static int sr_if_new_hook(struct interface *ifp)
return 0;
}
-/* --- Segment Routing Show information functions --------------------------- */
-
/**
* Show LFIB operation in human readable format.
*
@@ -1856,13 +965,11 @@ static int sr_if_new_hook(struct interface *ifp)
* @param size Size of the buffer
* @param label_in Input Label
* @param label_out Output Label
- * @param label_stack Output Label Stack (TI-LFA)
*
* @return String containing LFIB operation in human readable format
*/
-static char *sr_op2str(char *buf, size_t size, mpls_label_t label_in,
- mpls_label_t label_out,
- const struct mpls_label_stack *label_stack)
+char *sr_op2str(char *buf, size_t size, mpls_label_t label_in,
+ mpls_label_t label_out)
{
if (size < 24)
return NULL;
@@ -1872,16 +979,6 @@ static char *sr_op2str(char *buf, size_t size, mpls_label_t label_in,
return buf;
}
- if (label_stack) {
- char buf_labels[256];
-
- mpls_label2str(label_stack->num_labels, &label_stack->label[0],
- buf_labels, sizeof(buf_labels), 1);
-
- snprintf(buf, size, "Swap(%u, %s)", label_in, buf_labels);
- return buf;
- }
-
switch (label_out) {
case MPLS_LABEL_IMPLICIT_NULL:
snprintf(buf, size, "Pop(%u)", label_in);
@@ -1901,215 +998,6 @@ static char *sr_op2str(char *buf, size_t size, mpls_label_t label_in,
}
/**
- * Show Local Prefix-SID.
- *
- * @param vty VTY output
- * @param tt Table format
- * @param area IS-IS area
- * @param srp Segment Routing Prefix
- */
-static void show_prefix_sid_local(struct vty *vty, struct ttable *tt,
- const struct isis_area *area,
- const struct sr_prefix *srp)
-{
- const struct sr_nexthop_info *srnh = &srp->u.local.info;
- char buf_prefix[BUFSIZ];
- char buf_oper[BUFSIZ];
- char buf_iface[BUFSIZ];
- char buf_uptime[BUFSIZ];
-
- if (srnh->label != MPLS_INVALID_LABEL) {
- struct interface *ifp;
- ifp = if_lookup_prefix(&srp->prefix, VRF_DEFAULT);
- if (ifp)
- strlcpy(buf_iface, ifp->name, sizeof(buf_iface));
- else
- snprintf(buf_iface, sizeof(buf_iface), "-");
- log_uptime(srnh->uptime, buf_uptime, sizeof(buf_uptime));
- } else {
- snprintf(buf_iface, sizeof(buf_iface), "-");
- snprintf(buf_uptime, sizeof(buf_uptime), "-");
- }
- sr_op2str(buf_oper, sizeof(buf_oper), srp->input_label,
- MPLS_LABEL_IMPLICIT_NULL, NULL);
-
- ttable_add_row(tt, "%s|%u|%s|-|%s|%s",
- prefix2str(&srp->prefix, buf_prefix, sizeof(buf_prefix)),
- srp->sid.value, buf_oper, buf_iface, buf_uptime);
-}
-
-/**
- * Show Remote Prefix-SID.
- *
- * @param vty VTY output
- * @param tt Table format
- * @param area IS-IS area
- * @param srp Segment Routing Prefix
- */
-static void show_prefix_sid_remote(struct vty *vty, struct ttable *tt,
- const struct isis_area *area,
- const struct sr_prefix *srp, bool backup)
-{
- struct isis_nexthop *nexthop;
- struct listnode *node;
- char buf_prefix[BUFSIZ];
- char buf_oper[BUFSIZ];
- char buf_nhop[BUFSIZ];
- char buf_iface[BUFSIZ];
- char buf_uptime[BUFSIZ];
- bool first = true;
- struct isis_route_info *rinfo;
-
- (void)prefix2str(&srp->prefix, buf_prefix, sizeof(buf_prefix));
-
- rinfo = srp->u.remote.rinfo;
- if (rinfo && backup)
- rinfo = rinfo->backup;
- if (!rinfo) {
- ttable_add_row(tt, "%s|%u|%s|-|-|-", buf_prefix, srp->sid.value,
- sr_op2str(buf_oper, sizeof(buf_oper),
- srp->input_label,
- MPLS_LABEL_IMPLICIT_NULL, NULL));
- return;
- }
-
- for (ALL_LIST_ELEMENTS_RO(rinfo->nexthops, node, nexthop)) {
- struct interface *ifp;
-
- inet_ntop(nexthop->family, &nexthop->ip, buf_nhop,
- sizeof(buf_nhop));
- ifp = if_lookup_by_index(nexthop->ifindex, VRF_DEFAULT);
- if (ifp)
- strlcpy(buf_iface, ifp->name, sizeof(buf_iface));
- else
- snprintf(buf_iface, sizeof(buf_iface), "ifindex %u",
- nexthop->ifindex);
- if (nexthop->sr.label == MPLS_INVALID_LABEL)
- snprintf(buf_uptime, sizeof(buf_uptime), "-");
- else
- log_uptime(nexthop->sr.uptime, buf_uptime,
- sizeof(buf_uptime));
- sr_op2str(buf_oper, sizeof(buf_oper), srp->input_label,
- nexthop->sr.label, nexthop->label_stack);
-
- if (first)
- ttable_add_row(tt, "%s|%u|%s|%s|%s|%s", buf_prefix,
- srp->sid.value, buf_oper, buf_nhop,
- buf_iface, buf_uptime);
- else
- ttable_add_row(tt, "|||%s|%s|%s|%s", buf_oper, buf_nhop,
- buf_iface, buf_uptime);
- first = false;
- }
-}
-
-/**
- * Show Prefix-SIDs.
- *
- * @param vty VTY output
- * @param area IS-IS area
- * @param level IS-IS level
- */
-static void show_prefix_sids(struct vty *vty, struct isis_area *area, int level,
- bool backup)
-{
- struct sr_prefix *srp;
- struct ttable *tt;
-
- if (srdb_area_prefix_count(&area->srdb.prefix_sids[level - 1]) == 0)
- return;
-
- vty_out(vty, " IS-IS %s Prefix-SIDs:\n\n", circuit_t2string(level));
-
- /* Prepare table. */
- tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
- ttable_add_row(tt, "Prefix|SID|Label Op.|Nexthop|Interface|Uptime");
- tt->style.cell.rpad = 2;
- tt->style.corner = '+';
- ttable_restyle(tt);
- ttable_rowseps(tt, 0, BOTTOM, true, '-');
-
- /* Process all Prefix-SID from the SRDB */
- frr_each (srdb_area_prefix, &area->srdb.prefix_sids[level - 1], srp) {
- switch (srp->type) {
- case ISIS_SR_PREFIX_LOCAL:
- show_prefix_sid_local(vty, tt, area, srp);
- break;
- case ISIS_SR_PREFIX_REMOTE:
- show_prefix_sid_remote(vty, tt, area, srp, backup);
- break;
- }
- }
-
- /* Dump the generated table. */
- if (tt->nrows > 1) {
- char *table;
-
- table = ttable_dump(tt, "\n");
- vty_out(vty, "%s\n", table);
- XFREE(MTYPE_TMP, table);
- }
- ttable_del(tt);
-}
-
-/**
- * Declaration of new show commands.
- */
-DEFUN(show_sr_prefix_sids, show_sr_prefix_sids_cmd,
- "show isis [vrf <NAME|all>] segment-routing prefix-sids [backup]",
- SHOW_STR PROTO_HELP VRF_CMD_HELP_STR
- "All VRFs\n"
- "Segment-Routing\n"
- "Segment-Routing Prefix-SIDs\n"
- "Show backup Prefix-SIDs\n")
-{
- struct listnode *node, *inode;
- struct isis_area *area;
- struct isis *isis = NULL;
- const char *vrf_name = VRF_DEFAULT_NAME;
- bool all_vrf = false;
- bool backup = false;
- int idx = 0;
-
- ISIS_FIND_VRF_ARGS(argv, argc, idx, vrf_name, all_vrf);
- if (argv_find(argv, argc, "backup", &idx))
- backup = true;
-
- if (vrf_name) {
- if (all_vrf) {
- for (ALL_LIST_ELEMENTS_RO(im->isis, inode, isis)) {
- for (ALL_LIST_ELEMENTS_RO(isis->area_list, node,
- area)) {
- vty_out(vty, "Area %s:\n",
- area->area_tag ? area->area_tag
- : "null");
- for (int level = ISIS_LEVEL1;
- level <= ISIS_LEVELS; level++)
- show_prefix_sids(vty, area,
- level, backup);
- }
- }
- return 0;
- }
- isis = isis_lookup_by_vrfname(vrf_name);
- if (isis != NULL) {
- for (ALL_LIST_ELEMENTS_RO(isis->area_list, node,
- area)) {
- vty_out(vty, "Area %s:\n",
- area->area_tag ? area->area_tag
- : "null");
- for (int level = ISIS_LEVEL1;
- level <= ISIS_LEVELS; level++)
- show_prefix_sids(vty, area, level,
- backup);
- }
- }
- }
-
- return CMD_SUCCESS;
-}
-
-/**
* Show Segment Routing Node.
*
* @param vty VTY output
@@ -2118,13 +1006,10 @@ DEFUN(show_sr_prefix_sids, show_sr_prefix_sids_cmd,
*/
static void show_node(struct vty *vty, struct isis_area *area, int level)
{
- struct sr_node *srn;
+ struct isis_lsp *lsp;
struct ttable *tt;
- if (srdb_area_prefix_count(&area->srdb.prefix_sids[level - 1]) == 0)
- return;
-
- vty_out(vty, " IS-IS %s SR-Node:\n\n", circuit_t2string(level));
+ vty_out(vty, " IS-IS %s SR-Nodes:\n\n", circuit_t2string(level));
/* Prepare table. */
tt = ttable_new(&ttable_styles[TTSTYLE_BLANK]);
@@ -2134,19 +1019,23 @@ static void show_node(struct vty *vty, struct isis_area *area, int level)
ttable_restyle(tt);
ttable_rowseps(tt, 0, BOTTOM, true, '-');
- /* Process all SR-Node from the SRDB */
- frr_each (srdb_node, &area->srdb.sr_nodes[level - 1], srn) {
+ frr_each (lspdb, &area->lspdb[level - 1], lsp) {
+ struct isis_router_cap *cap;
+
+ if (!lsp->tlvs)
+ continue;
+ cap = lsp->tlvs->router_cap;
+ if (!cap)
+ continue;
+
ttable_add_row(
tt, "%s|%u - %u|%u - %u|%s|%u",
- sysid_print(srn->sysid),
- srn->cap.srgb.lower_bound,
- srn->cap.srgb.lower_bound + srn->cap.srgb.range_size
- - 1,
- srn->cap.srlb.lower_bound,
- srn->cap.srlb.lower_bound + srn->cap.srlb.range_size
- - 1,
- srn->cap.algo[0] == SR_ALGORITHM_SPF ? "SPF" : "S-SPF",
- srn->cap.msd);
+ sysid_print(lsp->hdr.lsp_id), cap->srgb.lower_bound,
+ cap->srgb.lower_bound + cap->srgb.range_size - 1,
+ cap->srlb.lower_bound,
+ cap->srlb.lower_bound + cap->srlb.range_size - 1,
+ cap->algo[0] == SR_ALGORITHM_SPF ? "SPF" : "S-SPF",
+ cap->msd);
}
/* Dump the generated table. */
@@ -2184,7 +1073,6 @@ DEFUN(show_sr_node, show_sr_node_cmd,
return CMD_SUCCESS;
}
-
/* --- IS-IS Segment Routing Management function ---------------------------- */
/**
@@ -2284,22 +1172,12 @@ void isis_sr_stop(struct isis_area *area)
area->area_tag);
/* Disable any re-attempt to connect to Label Manager */
- THREAD_TIMER_OFF(srdb->t_start_lm);
+ thread_cancel(&srdb->t_start_lm);
/* Uninstall all local Adjacency-SIDs. */
for (ALL_LIST_ELEMENTS(area->srdb.adj_sids, node, nnode, sra))
sr_adj_sid_del(sra);
- /* Uninstall all Prefix-SIDs from all SR Node. */
- for (int level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++) {
- while (srdb_node_count(&srdb->sr_nodes[level - 1]) > 0) {
- struct sr_node *srn;
-
- srn = srdb_node_first(&srdb->sr_nodes[level - 1]);
- sr_node_del(area, level, srn);
- }
- }
-
/* Release SRGB if active. */
if (srdb->srgb_active) {
isis_zebra_release_label_range(srdb->config.srgb_lower_bound,
@@ -2332,11 +1210,6 @@ void isis_sr_area_init(struct isis_area *area)
memset(srdb, 0, sizeof(*srdb));
srdb->adj_sids = list_new();
- for (int level = ISIS_LEVEL1; level <= ISIS_LEVELS; level++) {
- srdb_node_init(&srdb->sr_nodes[level - 1]);
- srdb_area_prefix_init(&srdb->prefix_sids[level - 1]);
- }
-
/* Pull defaults from the YANG module. */
#ifndef FABRICD
srdb->config.enabled = yang_get_default_bool("%s/enabled", ISIS_SR);
@@ -2386,14 +1259,12 @@ void isis_sr_area_term(struct isis_area *area)
*/
void isis_sr_init(void)
{
- install_element(VIEW_NODE, &show_sr_prefix_sids_cmd);
install_element(VIEW_NODE, &show_sr_node_cmd);
/* Register hooks. */
hook_register(isis_adj_state_change_hook, sr_adj_state_change);
hook_register(isis_adj_ip_enabled_hook, sr_adj_ip_enabled);
hook_register(isis_adj_ip_disabled_hook, sr_adj_ip_disabled);
- hook_register(isis_route_update_hook, sr_route_update);
hook_register(isis_if_new_hook, sr_if_new_hook);
}
@@ -2406,6 +1277,5 @@ void isis_sr_term(void)
hook_unregister(isis_adj_state_change_hook, sr_adj_state_change);
hook_unregister(isis_adj_ip_enabled_hook, sr_adj_ip_enabled);
hook_unregister(isis_adj_ip_disabled_hook, sr_adj_ip_disabled);
- hook_unregister(isis_route_update_hook, sr_route_update);
hook_unregister(isis_if_new_hook, sr_if_new_hook);
}
diff --git a/isisd/isis_sr.h b/isisd/isis_sr.h
index 2e4f3a69f7..b012dfb00a 100644
--- a/isisd/isis_sr.h
+++ b/isisd/isis_sr.h
@@ -57,11 +57,25 @@
#define SRLB_UPPER_BOUND 15999
/* Segment Routing Data Base (SRDB) RB-Tree structure */
-PREDECL_RBTREE_UNIQ(srdb_node)
-PREDECL_RBTREE_UNIQ(srdb_node_prefix)
-PREDECL_RBTREE_UNIQ(srdb_area_prefix)
PREDECL_RBTREE_UNIQ(srdb_prefix_cfg)
+/*
+ * Segment Routing Prefix-SID information.
+ *
+ * This structure is intended to be embedded inside other structures that
+ * might or might not contain Prefix-SID information.
+ */
+struct isis_sr_psid_info {
+ /* Prefix-SID Sub-TLV information. */
+ struct isis_prefix_sid sid;
+
+ /* Resolved input/output label. */
+ mpls_label_t label;
+
+ /* Indicates whether the Prefix-SID is present or not. */
+ bool present;
+};
+
/* Segment Routing Local Block allocation */
struct sr_local_block {
bool active;
@@ -106,85 +120,6 @@ struct sr_adjacency {
struct isis_adjacency *adj;
};
-/* Segment Routing Prefix-SID type. */
-enum sr_prefix_type {
- ISIS_SR_PREFIX_LOCAL = 0,
- ISIS_SR_PREFIX_REMOTE,
-};
-
-/* Segment Routing Nexthop Information. */
-struct sr_nexthop_info {
- mpls_label_t label;
- time_t uptime;
-};
-
-/* State of Object (SR-Node and SR-Prefix) stored in SRDB */
-enum srdb_state {
- SRDB_STATE_VALIDATED = 0,
- SRDB_STATE_NEW,
- SRDB_STATE_MODIFIED,
- SRDB_STATE_UNCHANGED
-};
-
-/* Segment Routing Prefix-SID. */
-struct sr_prefix {
- /* SRDB RB-tree entries. */
- struct srdb_node_prefix_item node_entry;
- struct srdb_area_prefix_item area_entry;
-
- /* IP prefix. */
- struct prefix prefix;
-
- /* SID value, algorithm and flags subTLVs. */
- struct isis_prefix_sid sid;
-
- /* Input label value. */
- mpls_label_t input_label;
-
- /* Prefix-SID type. */
- enum sr_prefix_type type;
- union {
- struct {
- /* Information about this local Prefix-SID. */
- struct sr_nexthop_info info;
- } local;
- struct {
- /* Route associated to this remote Prefix-SID. */
- struct isis_route_info *rinfo;
- } remote;
- } u;
-
- /* Backpointer to Segment Routing node. */
- struct sr_node *srn;
-
- /* SR-Prefix State used while the LSPDB is being parsed. */
- enum srdb_state state;
-};
-
-/* Segment Routing node. */
-struct sr_node {
- /* SRDB RB-tree entry. */
- struct srdb_node_item entry;
-
- /* IS-IS level: ISIS_LEVEL1 or ISIS_LEVEL2. */
- int level;
-
- /* IS-IS node identifier. */
- uint8_t sysid[ISIS_SYS_ID_LEN];
-
- /* Segment Routing node capabilities (SRGB, SR Algorithms) subTLVs. */
- struct isis_router_cap cap;
-
- /* List of Prefix-SIDs advertised by this node. */
- struct srdb_node_prefix_head prefix_sids;
-
- /* Backpointer to IS-IS area. */
- struct isis_area *area;
-
- /* SR-Node State used while the LSPDB is being parsed. */
- enum srdb_state state;
-};
-
/* SID type. NOTE: these values must be in sync with the YANG module. */
enum sr_sid_value_type {
SR_SID_VALUE_TYPE_INDEX = 0,
@@ -217,6 +152,9 @@ struct sr_prefix_cfg {
/* SID last hop behavior. */
enum sr_last_hop_behavior last_hop_behavior;
+ /* Indicates whether the node flag must be explicitly unset. */
+ bool n_flag_clear;
+
/* Does this Prefix-SID refer to a loopback address (Node-SID)? */
bool node_sid;
@@ -235,12 +173,6 @@ struct isis_sr_db {
/* List of local Adjacency-SIDs. */
struct list *adj_sids;
- /* Segment Routing Node information per IS-IS level. */
- struct srdb_node_head sr_nodes[ISIS_LEVELS];
-
- /* Segment Routing Prefix-SIDs per IS-IS level. */
- struct srdb_area_prefix_head prefix_sids[ISIS_LEVELS];
-
/* Management of SRLB & SRGB allocation */
struct sr_local_block srlb;
bool srgb_active;
@@ -267,6 +199,14 @@ struct isis_sr_db {
};
/* Prototypes. */
+extern struct isis_sr_block *isis_sr_find_srgb(struct lspdb_head *lspdb,
+ const uint8_t *sysid);
+extern mpls_label_t sr_prefix_in_label(struct isis_area *area,
+ struct isis_prefix_sid *psid,
+ bool local);
+extern mpls_label_t sr_prefix_out_label(struct lspdb_head *lspdb, int family,
+ struct isis_prefix_sid *psid,
+ const uint8_t *nh_sysid, bool last_hop);
extern int isis_sr_cfg_srgb_update(struct isis_area *area, uint32_t lower_bound,
uint32_t upper_bound);
extern int isis_sr_cfg_srlb_update(struct isis_area *area, uint32_t lower_bound,
@@ -279,16 +219,14 @@ isis_sr_cfg_prefix_find(struct isis_area *area, union prefixconstptr prefix);
extern void isis_sr_prefix_cfg2subtlv(const struct sr_prefix_cfg *pcfg,
bool external,
struct isis_prefix_sid *psid);
-extern void isis_sr_nexthop_update(struct sr_nexthop_info *srnh,
- mpls_label_t label);
-extern void isis_sr_nexthop_reset(struct sr_nexthop_info *srnh);
extern void sr_adj_sid_add_single(struct isis_adjacency *adj, int family,
bool backup, struct list *nexthops);
extern struct sr_adjacency *isis_sr_adj_sid_find(struct isis_adjacency *adj,
int family,
enum sr_adj_type type);
extern void isis_area_delete_backup_adj_sids(struct isis_area *area, int level);
-extern void isis_area_verify_sr(struct isis_area *area);
+extern char *sr_op2str(char *buf, size_t size, mpls_label_t label_in,
+ mpls_label_t label_out);
extern int isis_sr_start(struct isis_area *area);
extern void isis_sr_stop(struct isis_area *area);
extern void isis_sr_area_init(struct isis_area *area);
diff --git a/isisd/isis_tlvs.c b/isisd/isis_tlvs.c
index c1603d2ef0..a5c2fd5894 100644
--- a/isisd/isis_tlvs.c
+++ b/isisd/isis_tlvs.c
@@ -2603,8 +2603,8 @@ static void format_tlv_router_cap(const struct isis_router_cap *router_cap,
sbuf_push(
buf, indent,
" Segment Routing: I:%s V:%s, Global Block Base: %u Range: %u\n",
- IS_SR_IPV4(router_cap->srgb) ? "1" : "0",
- IS_SR_IPV6(router_cap->srgb) ? "1" : "0",
+ IS_SR_IPV4(&router_cap->srgb) ? "1" : "0",
+ IS_SR_IPV6(&router_cap->srgb) ? "1" : "0",
router_cap->srgb.lower_bound,
router_cap->srgb.range_size);
diff --git a/isisd/isis_tlvs.h b/isisd/isis_tlvs.h
index 1c0d97f2c3..54ded8121d 100644
--- a/isisd/isis_tlvs.h
+++ b/isisd/isis_tlvs.h
@@ -138,8 +138,8 @@ struct isis_threeway_adj {
/* Segment Routing subTLV's as per RFC8667 */
#define ISIS_SUBTLV_SRGB_FLAG_I 0x80
#define ISIS_SUBTLV_SRGB_FLAG_V 0x40
-#define IS_SR_IPV4(srgb) (srgb.flags & ISIS_SUBTLV_SRGB_FLAG_I)
-#define IS_SR_IPV6(srgb) (srgb.flags & ISIS_SUBTLV_SRGB_FLAG_V)
+#define IS_SR_IPV4(srgb) ((srgb)->flags & ISIS_SUBTLV_SRGB_FLAG_I)
+#define IS_SR_IPV6(srgb) ((srgb)->flags & ISIS_SUBTLV_SRGB_FLAG_V)
#define SUBTLV_SR_BLOCK_SIZE 6
#define SUBTLV_RANGE_INDEX_SIZE 10
#define SUBTLV_RANGE_LABEL_SIZE 9
diff --git a/isisd/isis_tx_queue.c b/isisd/isis_tx_queue.c
index 1424b55bdc..5c87e39157 100644
--- a/isisd/isis_tx_queue.c
+++ b/isisd/isis_tx_queue.c
@@ -93,8 +93,7 @@ static void tx_queue_element_free(void *element)
{
struct isis_tx_queue_entry *e = element;
- if (e->retry)
- thread_cancel(e->retry);
+ thread_cancel(&(e->retry));
XFREE(MTYPE_TX_QUEUE_ENTRY, e);
}
@@ -166,8 +165,7 @@ void _isis_tx_queue_add(struct isis_tx_queue *queue,
e->type = type;
- if (e->retry)
- thread_cancel(e->retry);
+ thread_cancel(&(e->retry));
thread_add_event(master, tx_queue_send_event, e, 0, &e->retry);
e->is_retry = false;
@@ -190,8 +188,7 @@ void _isis_tx_queue_del(struct isis_tx_queue *queue, struct isis_lsp *lsp,
func, file, line);
}
- if (e->retry)
- thread_cancel(e->retry);
+ thread_cancel(&(e->retry));
hash_release(queue->hash, e);
XFREE(MTYPE_TX_QUEUE_ENTRY, e);
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index aeb54fce28..805ede1e44 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -155,16 +155,14 @@ static int isis_zebra_link_params(ZAPI_CALLBACK_ARGS)
}
enum isis_zebra_nexthop_type {
- ISIS_ROUTE_NEXTHOP_MAIN = 0,
- ISIS_ROUTE_NEXTHOP_BACKUP,
- ISIS_MPLS_NEXTHOP_MAIN,
- ISIS_MPLS_NEXTHOP_BACKUP,
+ ISIS_NEXTHOP_MAIN = 0,
+ ISIS_NEXTHOP_BACKUP,
};
static int isis_zebra_add_nexthops(struct isis *isis, struct list *nexthops,
struct zapi_nexthop zapi_nexthops[],
enum isis_zebra_nexthop_type type,
- uint8_t backup_nhs)
+ bool mpls_lsp, uint8_t backup_nhs)
{
struct isis_nexthop *nexthop;
struct listnode *node;
@@ -210,23 +208,18 @@ static int isis_zebra_add_nexthops(struct isis *isis, struct list *nexthops,
/* Add MPLS label(s). */
switch (type) {
- case ISIS_ROUTE_NEXTHOP_MAIN:
- case ISIS_ROUTE_NEXTHOP_BACKUP:
- /*
- * SR/TI-LFA labels are installed using separate
- * messages.
- */
- break;
- case ISIS_MPLS_NEXTHOP_MAIN:
- if (nexthop->sr.label != MPLS_INVALID_LABEL) {
+ case ISIS_NEXTHOP_MAIN:
+ if (nexthop->sr.present) {
api_nh->label_num = 1;
api_nh->labels[0] = nexthop->sr.label;
- } else {
- api_nh->label_num = 1;
- api_nh->labels[0] = MPLS_LABEL_IMPLICIT_NULL;
- }
+ } else if (mpls_lsp)
+ /*
+ * Do not use non-SR enabled nexthops to prevent
+ * broken LSPs from being formed.
+ */
+ continue;
break;
- case ISIS_MPLS_NEXTHOP_BACKUP:
+ case ISIS_NEXTHOP_BACKUP:
if (nexthop->label_stack) {
api_nh->label_num =
nexthop->label_stack->num_labels;
@@ -234,7 +227,11 @@ static int isis_zebra_add_nexthops(struct isis *isis, struct list *nexthops,
nexthop->label_stack->label,
sizeof(mpls_label_t)
* api_nh->label_num);
- } else {
+ } else if (mpls_lsp) {
+ /*
+ * This is necessary because zebra requires
+ * the nexthops of MPLS LSPs to be labeled.
+ */
api_nh->label_num = 1;
api_nh->labels[0] = MPLS_LABEL_IMPLICIT_NULL;
}
@@ -266,7 +263,7 @@ void isis_zebra_route_add_route(struct isis *isis, struct prefix *prefix,
struct zapi_route api;
int count = 0;
- if (zclient->sock < 0)
+ if (zclient->sock < 0 || list_isempty(route_info->nexthops))
return;
memset(&api, 0, sizeof(api));
@@ -286,7 +283,7 @@ void isis_zebra_route_add_route(struct isis *isis, struct prefix *prefix,
if (route_info->backup) {
count = isis_zebra_add_nexthops(
isis, route_info->backup->nexthops, api.backup_nexthops,
- ISIS_ROUTE_NEXTHOP_BACKUP, 0);
+ ISIS_NEXTHOP_BACKUP, false, 0);
if (count > 0) {
SET_FLAG(api.message, ZAPI_MESSAGE_BACKUP_NEXTHOPS);
api.backup_nexthop_num = count;
@@ -295,7 +292,7 @@ void isis_zebra_route_add_route(struct isis *isis, struct prefix *prefix,
/* Add primary nexthops. */
count = isis_zebra_add_nexthops(isis, route_info->nexthops,
- api.nexthops, ISIS_ROUTE_NEXTHOP_MAIN,
+ api.nexthops, ISIS_NEXTHOP_MAIN, false,
count);
if (!count)
return;
@@ -328,31 +325,39 @@ void isis_zebra_route_del_route(struct isis *isis,
}
/**
- * Install Prefix-SID in the forwarding plane through Zebra.
+ * Install Prefix-SID label entry in the forwarding plane through Zebra.
*
- * @param srp Segment Routing Prefix-SID
+ * @param area IS-IS area
+ * @param prefix Route prefix
+ * @param rinfo Route information
+ * @param psid Prefix-SID information
*/
-static void isis_zebra_prefix_install_prefix_sid(const struct sr_prefix *srp)
+void isis_zebra_prefix_sid_install(struct isis_area *area,
+ struct prefix *prefix,
+ struct isis_route_info *rinfo,
+ struct isis_sr_psid_info *psid)
{
- struct isis *isis = srp->srn->area->isis;
struct zapi_labels zl;
- struct zapi_nexthop *znh;
- struct interface *ifp;
- struct isis_route_info *rinfo;
int count = 0;
+ sr_debug("ISIS-Sr (%s): update label %u for prefix %pFX",
+ area->area_tag, psid->label, prefix);
+
/* Prepare message. */
memset(&zl, 0, sizeof(zl));
zl.type = ZEBRA_LSP_ISIS_SR;
- zl.local_label = srp->input_label;
+ zl.local_label = psid->label;
+
+ /* Local routes don't have any nexthop and require special handling. */
+ if (list_isempty(rinfo->nexthops)) {
+ struct zapi_nexthop *znh;
+ struct interface *ifp;
- switch (srp->type) {
- case ISIS_SR_PREFIX_LOCAL:
ifp = if_lookup_by_name("lo", VRF_DEFAULT);
if (!ifp) {
zlog_warn(
"%s: couldn't install Prefix-SID %pFX: loopback interface not found",
- __func__, &srp->prefix);
+ __func__, prefix);
return;
}
@@ -361,21 +366,12 @@ static void isis_zebra_prefix_install_prefix_sid(const struct sr_prefix *srp)
znh->ifindex = ifp->ifindex;
znh->label_num = 1;
znh->labels[0] = MPLS_LABEL_IMPLICIT_NULL;
- break;
- case ISIS_SR_PREFIX_REMOTE:
- /* Update route in the RIB too. */
- SET_FLAG(zl.message, ZAPI_LABELS_FTN);
- zl.route.prefix = srp->prefix;
- zl.route.type = ZEBRA_ROUTE_ISIS;
- zl.route.instance = 0;
-
- rinfo = srp->u.remote.rinfo;
-
+ } else {
/* Add backup nexthops first. */
if (rinfo->backup) {
count = isis_zebra_add_nexthops(
- isis, rinfo->backup->nexthops,
- zl.backup_nexthops, ISIS_MPLS_NEXTHOP_BACKUP,
+ area->isis, rinfo->backup->nexthops,
+ zl.backup_nexthops, ISIS_NEXTHOP_BACKUP, true,
0);
if (count > 0) {
SET_FLAG(zl.message, ZAPI_LABELS_HAS_BACKUPS);
@@ -384,13 +380,12 @@ static void isis_zebra_prefix_install_prefix_sid(const struct sr_prefix *srp)
}
/* Add primary nexthops. */
- count = isis_zebra_add_nexthops(isis, rinfo->nexthops,
- zl.nexthops,
- ISIS_MPLS_NEXTHOP_MAIN, count);
+ count = isis_zebra_add_nexthops(area->isis, rinfo->nexthops,
+ zl.nexthops, ISIS_NEXTHOP_MAIN,
+ true, count);
if (!count)
return;
zl.nexthop_num = count;
- break;
}
/* Send message to zebra. */
@@ -398,58 +393,33 @@ static void isis_zebra_prefix_install_prefix_sid(const struct sr_prefix *srp)
}
/**
- * Uninstall Prefix-SID from the forwarding plane through Zebra.
+ * Uninstall Prefix-SID label entry from the forwarding plane through Zebra.
*
- * @param srp Segment Routing Prefix-SID
+ * @param area IS-IS area
+ * @param prefix Route prefix
+ * @param rinfo Route information
+ * @param psid Prefix-SID information
*/
-static void isis_zebra_uninstall_prefix_sid(const struct sr_prefix *srp)
+void isis_zebra_prefix_sid_uninstall(struct isis_area *area,
+ struct prefix *prefix,
+ struct isis_route_info *rinfo,
+ struct isis_sr_psid_info *psid)
{
struct zapi_labels zl;
+ sr_debug("ISIS-Sr (%s): delete label %u for prefix %pFX",
+ area->area_tag, psid->label, prefix);
+
/* Prepare message. */
memset(&zl, 0, sizeof(zl));
zl.type = ZEBRA_LSP_ISIS_SR;
- zl.local_label = srp->input_label;
-
- if (srp->type == ISIS_SR_PREFIX_REMOTE) {
- /* Update route in the RIB too. */
- SET_FLAG(zl.message, ZAPI_LABELS_FTN);
- zl.route.prefix = srp->prefix;
- zl.route.type = ZEBRA_ROUTE_ISIS;
- zl.route.instance = 0;
- }
+ zl.local_label = psid->label;
/* Send message to zebra. */
(void)zebra_send_mpls_labels(zclient, ZEBRA_MPLS_LABELS_DELETE, &zl);
}
/**
- * Send Prefix-SID to ZEBRA for installation or deletion.
- *
- * @param cmd ZEBRA_MPLS_LABELS_REPLACE or ZEBRA_ROUTE_DELETE
- * @param srp Segment Routing Prefix-SID
- */
-void isis_zebra_send_prefix_sid(int cmd, const struct sr_prefix *srp)
-{
-
- if (cmd != ZEBRA_MPLS_LABELS_REPLACE
- && cmd != ZEBRA_MPLS_LABELS_DELETE) {
- flog_warn(EC_LIB_DEVELOPMENT, "%s: wrong ZEBRA command",
- __func__);
- return;
- }
-
- sr_debug(" |- %s label %u for prefix %pFX",
- cmd == ZEBRA_MPLS_LABELS_REPLACE ? "Update" : "Delete",
- srp->input_label, &srp->prefix);
-
- if (cmd == ZEBRA_MPLS_LABELS_REPLACE)
- isis_zebra_prefix_install_prefix_sid(srp);
- else
- isis_zebra_uninstall_prefix_sid(srp);
-}
-
-/**
* Send (LAN)-Adjacency-SID to ZEBRA for installation or deletion.
*
* @param cmd ZEBRA_MPLS_LABELS_ADD or ZEBRA_ROUTE_DELETE
@@ -490,7 +460,7 @@ void isis_zebra_send_adjacency_sid(int cmd, const struct sr_adjacency *sra)
count = isis_zebra_add_nexthops(isis, sra->backup_nexthops,
zl.backup_nexthops,
- ISIS_MPLS_NEXTHOP_BACKUP, 0);
+ ISIS_NEXTHOP_BACKUP, true, 0);
if (count > 0) {
SET_FLAG(zl.message, ZAPI_LABELS_HAS_BACKUPS);
zl.backup_nexthop_num = count;
diff --git a/isisd/isis_zebra.h b/isisd/isis_zebra.h
index 768919ff46..c5c52a6bc6 100644
--- a/isisd/isis_zebra.h
+++ b/isisd/isis_zebra.h
@@ -37,7 +37,6 @@ void isis_zebra_init(struct thread_master *master, int instance);
void isis_zebra_stop(void);
struct isis_route_info;
-struct sr_prefix;
struct sr_adjacency;
void isis_zebra_route_add_route(struct isis *isis,
@@ -48,7 +47,14 @@ void isis_zebra_route_del_route(struct isis *isis,
struct prefix *prefix,
struct prefix_ipv6 *src_p,
struct isis_route_info *route_info);
-void isis_zebra_send_prefix_sid(int cmd, const struct sr_prefix *srp);
+void isis_zebra_prefix_sid_install(struct isis_area *area,
+ struct prefix *prefix,
+ struct isis_route_info *rinfo,
+ struct isis_sr_psid_info *psid);
+void isis_zebra_prefix_sid_uninstall(struct isis_area *area,
+ struct prefix *prefix,
+ struct isis_route_info *rinfo,
+ struct isis_sr_psid_info *psid);
void isis_zebra_send_adjacency_sid(int cmd, const struct sr_adjacency *sra);
int isis_distribute_list_update(int routetype);
void isis_zebra_redistribute_set(afi_t afi, int type);
diff --git a/isisd/isisd.c b/isisd/isisd.c
index 57d3e9c7c0..057ede0e38 100644
--- a/isisd/isisd.c
+++ b/isisd/isisd.c
@@ -442,8 +442,8 @@ void isis_area_destroy(struct isis_area *area)
spftree_area_del(area);
- THREAD_TIMER_OFF(area->spf_timer[0]);
- THREAD_TIMER_OFF(area->spf_timer[1]);
+ thread_cancel(&area->spf_timer[0]);
+ thread_cancel(&area->spf_timer[1]);
spf_backoff_free(area->spf_delay_ietf[0]);
spf_backoff_free(area->spf_delay_ietf[1]);
@@ -457,9 +457,9 @@ void isis_area_destroy(struct isis_area *area)
}
area->area_addrs = NULL;
- THREAD_TIMER_OFF(area->t_tick);
- THREAD_TIMER_OFF(area->t_lsp_refresh[0]);
- THREAD_TIMER_OFF(area->t_lsp_refresh[1]);
+ thread_cancel(&area->t_tick);
+ thread_cancel(&area->t_lsp_refresh[0]);
+ thread_cancel(&area->t_lsp_refresh[1]);
thread_cancel_event(master, area);
@@ -583,6 +583,8 @@ void isis_finish(struct isis *isis)
isis_vrf_unlink(isis, vrf);
}
+ list_delete(&isis->area_list);
+ list_delete(&isis->init_circ_list);
XFREE(MTYPE_ISIS, isis);
}
@@ -2373,12 +2375,12 @@ static void area_resign_level(struct isis_area *area, int level)
}
}
- THREAD_TIMER_OFF(area->spf_timer[level - 1]);
+ thread_cancel(&area->spf_timer[level - 1]);
sched_debug(
"ISIS (%s): Resigned from L%d - canceling LSP regeneration timer.",
area->area_tag, level);
- THREAD_TIMER_OFF(area->t_lsp_refresh[level - 1]);
+ thread_cancel(&area->t_lsp_refresh[level - 1]);
area->lsp_regenerate_pending[level - 1] = 0;
}
diff --git a/ldpd/accept.c b/ldpd/accept.c
index 323558d7fd..9bba0f5ddd 100644
--- a/ldpd/accept.c
+++ b/ldpd/accept.c
@@ -74,7 +74,7 @@ accept_del(int fd)
LIST_FOREACH(av, &accept_queue.queue, entry)
if (av->fd == fd) {
log_debug("%s: %d removed from queue", __func__, fd);
- THREAD_READ_OFF(av->ev);
+ thread_cancel(&av->ev);
LIST_REMOVE(av, entry);
free(av);
return;
@@ -95,7 +95,7 @@ accept_unpause(void)
{
if (accept_queue.evt != NULL) {
log_debug(__func__);
- THREAD_TIMER_OFF(accept_queue.evt);
+ thread_cancel(&accept_queue.evt);
accept_arm();
}
}
@@ -115,7 +115,7 @@ accept_unarm(void)
{
struct accept_ev *av;
LIST_FOREACH(av, &accept_queue.queue, entry)
- THREAD_READ_OFF(av->ev);
+ thread_cancel(&av->ev);
}
static int
diff --git a/ldpd/adjacency.c b/ldpd/adjacency.c
index 3923c169d6..795a41491c 100644
--- a/ldpd/adjacency.c
+++ b/ldpd/adjacency.c
@@ -198,7 +198,7 @@ adj_itimer(struct thread *thread)
void
adj_start_itimer(struct adj *adj)
{
- THREAD_TIMER_OFF(adj->inactivity_timer);
+ thread_cancel(&adj->inactivity_timer);
adj->inactivity_timer = NULL;
thread_add_timer(master, adj_itimer, adj, adj->holdtime,
&adj->inactivity_timer);
@@ -207,7 +207,7 @@ adj_start_itimer(struct adj *adj)
void
adj_stop_itimer(struct adj *adj)
{
- THREAD_TIMER_OFF(adj->inactivity_timer);
+ thread_cancel(&adj->inactivity_timer);
}
/* targeted neighbors */
@@ -359,7 +359,7 @@ tnbr_hello_timer(struct thread *thread)
static void
tnbr_start_hello_timer(struct tnbr *tnbr)
{
- THREAD_TIMER_OFF(tnbr->hello_timer);
+ thread_cancel(&tnbr->hello_timer);
tnbr->hello_timer = NULL;
thread_add_timer(master, tnbr_hello_timer, tnbr, tnbr_get_hello_interval(tnbr),
&tnbr->hello_timer);
@@ -368,7 +368,7 @@ tnbr_start_hello_timer(struct tnbr *tnbr)
static void
tnbr_stop_hello_timer(struct tnbr *tnbr)
{
- THREAD_TIMER_OFF(tnbr->hello_timer);
+ thread_cancel(&tnbr->hello_timer);
}
struct ctl_adj *
diff --git a/ldpd/control.c b/ldpd/control.c
index 6554f0a6f1..3b77765952 100644
--- a/ldpd/control.c
+++ b/ldpd/control.c
@@ -183,8 +183,8 @@ control_close(int fd)
msgbuf_clear(&c->iev.ibuf.w);
TAILQ_REMOVE(&ctl_conns, c, entry);
- THREAD_READ_OFF(c->iev.ev_read);
- THREAD_WRITE_OFF(c->iev.ev_write);
+ thread_cancel(&c->iev.ev_read);
+ thread_cancel(&c->iev.ev_write);
close(c->iev.ibuf.fd);
accept_unpause();
free(c);
diff --git a/ldpd/interface.c b/ldpd/interface.c
index 8b3dd71fd7..3e9f2fa991 100644
--- a/ldpd/interface.c
+++ b/ldpd/interface.c
@@ -470,7 +470,7 @@ if_hello_timer(struct thread *thread)
static void
if_start_hello_timer(struct iface_af *ia)
{
- THREAD_TIMER_OFF(ia->hello_timer);
+ thread_cancel(&ia->hello_timer);
ia->hello_timer = NULL;
thread_add_timer(master, if_hello_timer, ia, if_get_hello_interval(ia),
&ia->hello_timer);
@@ -479,7 +479,7 @@ if_start_hello_timer(struct iface_af *ia)
static void
if_stop_hello_timer(struct iface_af *ia)
{
- THREAD_TIMER_OFF(ia->hello_timer);
+ thread_cancel(&ia->hello_timer);
}
struct ctl_iface *
@@ -753,8 +753,7 @@ static void start_wait_for_ldp_sync_timer(struct iface *iface)
if (iface->ldp_sync.wait_for_sync_timer)
return;
- THREAD_TIMER_OFF(iface->ldp_sync.wait_for_sync_timer);
- iface->ldp_sync.wait_for_sync_timer = NULL;
+ THREAD_OFF(iface->ldp_sync.wait_for_sync_timer);
thread_add_timer(master, iface_wait_for_ldp_sync_timer, iface,
if_get_wait_for_sync_interval(),
&iface->ldp_sync.wait_for_sync_timer);
@@ -762,8 +761,7 @@ static void start_wait_for_ldp_sync_timer(struct iface *iface)
static void stop_wait_for_ldp_sync_timer(struct iface *iface)
{
- THREAD_TIMER_OFF(iface->ldp_sync.wait_for_sync_timer);
- iface->ldp_sync.wait_for_sync_timer = NULL;
+ THREAD_OFF(iface->ldp_sync.wait_for_sync_timer);
}
static int
diff --git a/ldpd/lde.c b/ldpd/lde.c
index df64f908ea..67b695150e 100644
--- a/ldpd/lde.c
+++ b/ldpd/lde.c
@@ -415,8 +415,8 @@ lde_dispatch_imsg(struct thread *thread)
imsg_event_add(iev);
else {
/* this pipe is dead, so remove the event handlers and exit */
- THREAD_READ_OFF(iev->ev_read);
- THREAD_WRITE_OFF(iev->ev_write);
+ thread_cancel(&iev->ev_read);
+ thread_cancel(&iev->ev_write);
lde_shutdown();
}
@@ -661,8 +661,8 @@ lde_dispatch_parent(struct thread *thread)
imsg_event_add(iev);
else {
/* this pipe is dead, so remove the event handlers and exit */
- THREAD_READ_OFF(iev->ev_read);
- THREAD_WRITE_OFF(iev->ev_write);
+ thread_cancel(&iev->ev_read);
+ thread_cancel(&iev->ev_write);
lde_shutdown();
}
diff --git a/ldpd/lde_lib.c b/ldpd/lde_lib.c
index bed276c7b1..9db931677d 100644
--- a/ldpd/lde_lib.c
+++ b/ldpd/lde_lib.c
@@ -1060,7 +1060,7 @@ lde_gc_timer(struct thread *thread)
void
lde_gc_start_timer(void)
{
- THREAD_TIMER_OFF(gc_timer);
+ thread_cancel(&gc_timer);
gc_timer = NULL;
thread_add_timer(master, lde_gc_timer, NULL, LDE_GC_INTERVAL,
&gc_timer);
@@ -1069,5 +1069,5 @@ lde_gc_start_timer(void)
void
lde_gc_stop_timer(void)
{
- THREAD_TIMER_OFF(gc_timer);
+ thread_cancel(&gc_timer);
}
diff --git a/ldpd/ldpd.c b/ldpd/ldpd.c
index 940333f83c..d6da45c862 100644
--- a/ldpd/ldpd.c
+++ b/ldpd/ldpd.c
@@ -604,8 +604,8 @@ main_dispatch_ldpe(struct thread *thread)
imsg_event_add(iev);
else {
/* this pipe is dead, so remove the event handlers and exit */
- THREAD_READ_OFF(iev->ev_read);
- THREAD_WRITE_OFF(iev->ev_write);
+ thread_cancel(&iev->ev_read);
+ thread_cancel(&iev->ev_write);
ldpe_pid = 0;
if (lde_pid == 0)
ldpd_shutdown();
@@ -702,8 +702,8 @@ main_dispatch_lde(struct thread *thread)
imsg_event_add(iev);
else {
/* this pipe is dead, so remove the event handlers and exit */
- THREAD_READ_OFF(iev->ev_read);
- THREAD_WRITE_OFF(iev->ev_write);
+ thread_cancel(&iev->ev_read);
+ thread_cancel(&iev->ev_write);
lde_pid = 0;
if (ldpe_pid == 0)
ldpd_shutdown();
@@ -728,8 +728,8 @@ ldp_write_handler(struct thread *thread)
fatal("msgbuf_write");
if (n == 0) {
/* this pipe is dead, so remove the event handlers */
- THREAD_READ_OFF(iev->ev_read);
- THREAD_WRITE_OFF(iev->ev_write);
+ thread_cancel(&iev->ev_read);
+ thread_cancel(&iev->ev_write);
return (0);
}
@@ -816,7 +816,7 @@ evbuf_init(struct evbuf *eb, int fd, int (*handler)(struct thread *),
void
evbuf_clear(struct evbuf *eb)
{
- THREAD_WRITE_OFF(eb->ev);
+ thread_cancel(&eb->ev);
msgbuf_clear(&eb->wbuf);
eb->wbuf.fd = -1;
}
diff --git a/ldpd/ldpe.c b/ldpd/ldpe.c
index d3374a62db..ffc1d17f51 100644
--- a/ldpd/ldpe.c
+++ b/ldpd/ldpe.c
@@ -208,7 +208,7 @@ ldpe_shutdown(void)
#ifdef __OpenBSD__
if (sysdep.no_pfkey == 0) {
- THREAD_READ_OFF(pfkey_ev);
+ thread_cancel(&pfkey_ev);
close(global.pfkeysock);
}
#endif
@@ -580,8 +580,8 @@ ldpe_dispatch_main(struct thread *thread)
imsg_event_add(iev);
else {
/* this pipe is dead, so remove the event handlers and exit */
- THREAD_READ_OFF(iev->ev_read);
- THREAD_WRITE_OFF(iev->ev_write);
+ thread_cancel(&iev->ev_read);
+ thread_cancel(&iev->ev_write);
ldpe_shutdown();
}
@@ -719,8 +719,8 @@ ldpe_dispatch_lde(struct thread *thread)
imsg_event_add(iev);
else {
/* this pipe is dead, so remove the event handlers and exit */
- THREAD_READ_OFF(iev->ev_read);
- THREAD_WRITE_OFF(iev->ev_write);
+ thread_cancel(&iev->ev_read);
+ thread_cancel(&iev->ev_write);
ldpe_shutdown();
}
@@ -778,14 +778,14 @@ ldpe_close_sockets(int af)
af_global = ldp_af_global_get(&global, af);
/* discovery socket */
- THREAD_READ_OFF(af_global->disc_ev);
+ thread_cancel(&af_global->disc_ev);
if (af_global->ldp_disc_socket != -1) {
close(af_global->ldp_disc_socket);
af_global->ldp_disc_socket = -1;
}
/* extended discovery socket */
- THREAD_READ_OFF(af_global->edisc_ev);
+ thread_cancel(&af_global->edisc_ev);
if (af_global->ldp_edisc_socket != -1) {
close(af_global->ldp_edisc_socket);
af_global->ldp_edisc_socket = -1;
diff --git a/ldpd/neighbor.c b/ldpd/neighbor.c
index 423410f290..75deaad2c0 100644
--- a/ldpd/neighbor.c
+++ b/ldpd/neighbor.c
@@ -302,7 +302,7 @@ nbr_del(struct nbr *nbr)
nbr->auth.method = AUTH_NONE;
if (nbr_pending_connect(nbr))
- THREAD_WRITE_OFF(nbr->ev_connect);
+ thread_cancel(&nbr->ev_connect);
nbr_stop_ktimer(nbr);
nbr_stop_ktimeout(nbr);
nbr_stop_itimeout(nbr);
@@ -416,7 +416,7 @@ nbr_start_ktimer(struct nbr *nbr)
/* send three keepalives per period */
secs = nbr->keepalive / KEEPALIVE_PER_PERIOD;
- THREAD_TIMER_OFF(nbr->keepalive_timer);
+ thread_cancel(&nbr->keepalive_timer);
nbr->keepalive_timer = NULL;
thread_add_timer(master, nbr_ktimer, nbr, secs, &nbr->keepalive_timer);
}
@@ -424,7 +424,7 @@ nbr_start_ktimer(struct nbr *nbr)
void
nbr_stop_ktimer(struct nbr *nbr)
{
- THREAD_TIMER_OFF(nbr->keepalive_timer);
+ thread_cancel(&nbr->keepalive_timer);
}
/* Keepalive timeout: if the nbr hasn't sent keepalive */
@@ -446,7 +446,7 @@ nbr_ktimeout(struct thread *thread)
static void
nbr_start_ktimeout(struct nbr *nbr)
{
- THREAD_TIMER_OFF(nbr->keepalive_timeout);
+ thread_cancel(&nbr->keepalive_timeout);
nbr->keepalive_timeout = NULL;
thread_add_timer(master, nbr_ktimeout, nbr, nbr->keepalive,
&nbr->keepalive_timeout);
@@ -455,7 +455,7 @@ nbr_start_ktimeout(struct nbr *nbr)
void
nbr_stop_ktimeout(struct nbr *nbr)
{
- THREAD_TIMER_OFF(nbr->keepalive_timeout);
+ thread_cancel(&nbr->keepalive_timeout);
}
/* Session initialization timeout: if nbr got stuck in the initialization FSM */
@@ -478,7 +478,7 @@ nbr_start_itimeout(struct nbr *nbr)
int secs;
secs = INIT_FSM_TIMEOUT;
- THREAD_TIMER_OFF(nbr->init_timeout);
+ thread_cancel(&nbr->init_timeout);
nbr->init_timeout = NULL;
thread_add_timer(master, nbr_itimeout, nbr, secs, &nbr->init_timeout);
}
@@ -486,7 +486,7 @@ nbr_start_itimeout(struct nbr *nbr)
void
nbr_stop_itimeout(struct nbr *nbr)
{
- THREAD_TIMER_OFF(nbr->init_timeout);
+ thread_cancel(&nbr->init_timeout);
}
/* Init delay timer: timer to retry to iniziatize session */
@@ -527,7 +527,7 @@ nbr_start_idtimer(struct nbr *nbr)
break;
}
- THREAD_TIMER_OFF(nbr->initdelay_timer);
+ thread_cancel(&nbr->initdelay_timer);
nbr->initdelay_timer = NULL;
thread_add_timer(master, nbr_idtimer, nbr, secs,
&nbr->initdelay_timer);
@@ -536,7 +536,7 @@ nbr_start_idtimer(struct nbr *nbr)
void
nbr_stop_idtimer(struct nbr *nbr)
{
- THREAD_TIMER_OFF(nbr->initdelay_timer);
+ thread_cancel(&nbr->initdelay_timer);
}
int
diff --git a/ldpd/packet.c b/ldpd/packet.c
index 06ada5957e..fdcaa79d23 100644
--- a/ldpd/packet.c
+++ b/ldpd/packet.c
@@ -662,7 +662,7 @@ session_shutdown(struct nbr *nbr, uint32_t status, uint32_t msg_id,
switch (nbr->state) {
case NBR_STA_PRESENT:
if (nbr_pending_connect(nbr))
- THREAD_WRITE_OFF(nbr->ev_connect);
+ thread_cancel(&nbr->ev_connect);
break;
case NBR_STA_INITIAL:
case NBR_STA_OPENREC:
@@ -762,7 +762,7 @@ tcp_close(struct tcp_conn *tcp)
evbuf_clear(&tcp->wbuf);
if (tcp->nbr) {
- THREAD_READ_OFF(tcp->rev);
+ thread_cancel(&tcp->rev);
free(tcp->rbuf);
tcp->nbr->tcp = NULL;
}
@@ -794,7 +794,7 @@ pending_conn_new(int fd, int af, union ldpd_addr *addr)
void
pending_conn_del(struct pending_conn *pconn)
{
- THREAD_TIMER_OFF(pconn->ev_timeout);
+ thread_cancel(&pconn->ev_timeout);
TAILQ_REMOVE(&global.pending_conns, pconn, entry);
free(pconn);
}
diff --git a/lib/agentx.c b/lib/agentx.c
index 7c4bdcbe27..603d8d6172 100644
--- a/lib/agentx.c
+++ b/lib/agentx.c
@@ -107,7 +107,7 @@ static void agentx_events_update(void)
struct thread *thr;
int fd, thr_fd;
- THREAD_OFF(timeout_thr);
+ thread_cancel(&timeout_thr);
FD_ZERO(&fds);
snmp_select_info(&maxfd, &fds, &timeout, &block);
@@ -130,7 +130,7 @@ static void agentx_events_update(void)
if (thr_fd == fd) {
struct listnode *nextln = listnextnode(ln);
if (!FD_ISSET(fd, &fds)) {
- thread_cancel(thr);
+ thread_cancel(&thr);
list_delete_node(events, ln);
}
ln = nextln;
@@ -151,7 +151,8 @@ static void agentx_events_update(void)
*/
while (ln) {
struct listnode *nextln = listnextnode(ln);
- thread_cancel(listgetdata(ln));
+ thr = listgetdata(ln);
+ thread_cancel(&thr);
list_delete_node(events, ln);
ln = nextln;
}
diff --git a/lib/frr_pthread.c b/lib/frr_pthread.c
index da9594ed80..3f0179fbc1 100644
--- a/lib/frr_pthread.c
+++ b/lib/frr_pthread.c
@@ -28,6 +28,7 @@
#include "memory.h"
#include "linklist.h"
#include "zlog.h"
+#include "libfrr_trace.h"
DEFINE_MTYPE_STATIC(LIB, FRR_PTHREAD, "FRR POSIX Thread")
DEFINE_MTYPE_STATIC(LIB, PTHREAD_PRIM, "POSIX sync primitives")
@@ -167,6 +168,8 @@ int frr_pthread_run(struct frr_pthread *fpt, const pthread_attr_t *attr)
sigfillset(&blocksigs);
pthread_sigmask(SIG_BLOCK, &blocksigs, &oldsigs);
+ frrtrace(1, frr_libfrr, frr_pthread_run, fpt->name);
+
fpt->rcu_thread = rcu_thread_prepare();
ret = pthread_create(&fpt->thread, attr, frr_pthread_inner, fpt);
@@ -204,6 +207,8 @@ void frr_pthread_notify_running(struct frr_pthread *fpt)
int frr_pthread_stop(struct frr_pthread *fpt, void **result)
{
+ frrtrace(1, frr_libfrr, frr_pthread_stop, fpt->name);
+
int ret = (*fpt->attr.stop)(fpt, result);
memset(&fpt->thread, 0x00, sizeof(fpt->thread));
return ret;
diff --git a/lib/frr_zmq.c b/lib/frr_zmq.c
index 565936a410..cc11d76700 100644
--- a/lib/frr_zmq.c
+++ b/lib/frr_zmq.c
@@ -190,10 +190,8 @@ int funcname_frrzmq_thread_add_read(struct thread_master *master,
cb->read.cancelled = false;
if (events & ZMQ_POLLIN) {
- if (cb->read.thread) {
- thread_cancel(cb->read.thread);
- cb->read.thread = NULL;
- }
+ thread_cancel(&cb->read.thread);
+
funcname_thread_add_event(master, frrzmq_read_msg, cbp, fd,
&cb->read.thread, funcname, schedfrom,
fromln);
@@ -298,10 +296,8 @@ int funcname_frrzmq_thread_add_write(struct thread_master *master,
cb->write.cancelled = false;
if (events & ZMQ_POLLOUT) {
- if (cb->write.thread) {
- thread_cancel(cb->write.thread);
- cb->write.thread = NULL;
- }
+ thread_cancel(&cb->write.thread);
+
funcname_thread_add_event(master, frrzmq_write_msg, cbp, fd,
&cb->write.thread, funcname,
schedfrom, fromln);
@@ -317,10 +313,8 @@ void frrzmq_thread_cancel(struct frrzmq_cb **cb, struct cb_core *core)
if (!cb || !*cb)
return;
core->cancelled = true;
- if (core->thread) {
- thread_cancel(core->thread);
- core->thread = NULL;
- }
+ thread_cancel(&core->thread);
+
if ((*cb)->read.cancelled && !(*cb)->read.thread
&& (*cb)->write.cancelled && (*cb)->write.thread)
XFREE(MTYPE_ZEROMQ_CB, *cb);
@@ -344,8 +338,8 @@ void frrzmq_check_events(struct frrzmq_cb **cbp, struct cb_core *core,
return;
if (events & event && core->thread && !core->cancelled) {
struct thread_master *tm = core->thread->master;
- thread_cancel(core->thread);
- core->thread = NULL;
+ thread_cancel(&core->thread);
+
thread_add_event(tm, (event == ZMQ_POLLIN ? frrzmq_read_msg
: frrzmq_write_msg),
cbp, cb->fd, &core->thread);
diff --git a/lib/hash.c b/lib/hash.c
index 85982774ac..ed429b77d0 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -29,6 +29,7 @@
#include "command.h"
#include "libfrr.h"
#include "frr_pthread.h"
+#include "libfrr_trace.h"
DEFINE_MTYPE_STATIC(LIB, HASH, "Hash")
DEFINE_MTYPE_STATIC(LIB, HASH_BACKET, "Hash Bucket")
@@ -138,6 +139,8 @@ static void hash_expand(struct hash *hash)
void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *))
{
+ frrtrace(2, frr_libfrr, hash_get, hash, data);
+
unsigned int key;
unsigned int index;
void *newdata;
@@ -172,6 +175,8 @@ void *hash_get(struct hash *hash, void *data, void *(*alloc_func)(void *))
hash->index[index] = bucket;
hash->count++;
+ frrtrace(3, frr_libfrr, hash_insert, hash, data, key);
+
int oldlen = bucket->next ? bucket->next->len : 0;
int newlen = oldlen + 1;
@@ -206,7 +211,7 @@ unsigned int string_hash_make(const char *str)
void *hash_release(struct hash *hash, void *data)
{
- void *ret;
+ void *ret = NULL;
unsigned int key;
unsigned int index;
struct hash_bucket *bucket;
@@ -236,11 +241,14 @@ void *hash_release(struct hash *hash, void *data)
ret = bucket->data;
XFREE(MTYPE_HASH_BACKET, bucket);
hash->count--;
- return ret;
+ break;
}
pp = bucket;
}
- return NULL;
+
+ frrtrace(3, frr_libfrr, hash_release, hash, data, ret);
+
+ return ret;
}
void hash_iterate(struct hash *hash, void (*func)(struct hash_bucket *, void *),
diff --git a/lib/ldp_sync.c b/lib/ldp_sync.c
index 9657f0b1df..c9d7eb37cf 100644
--- a/lib/ldp_sync.c
+++ b/lib/ldp_sync.c
@@ -79,7 +79,7 @@ bool ldp_sync_if_down(struct ldp_sync_info *ldp_sync_info)
* update state
*/
if (ldp_sync_info && ldp_sync_info->enabled == LDP_IGP_SYNC_ENABLED) {
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
+ THREAD_OFF(ldp_sync_info->t_holddown);
if (ldp_sync_info->state == LDP_IGP_SYNC_STATE_REQUIRED_UP)
ldp_sync_info->state =
diff --git a/lib/libfrr_trace.c b/lib/libfrr_trace.c
new file mode 100644
index 0000000000..2f300e6ee1
--- /dev/null
+++ b/lib/libfrr_trace.c
@@ -0,0 +1,4 @@
+#define TRACEPOINT_CREATE_PROBES
+#define TRACEPOINT_DEFINE
+
+#include "libfrr_trace.h"
diff --git a/lib/libfrr_trace.h b/lib/libfrr_trace.h
new file mode 100644
index 0000000000..7215007ffb
--- /dev/null
+++ b/lib/libfrr_trace.h
@@ -0,0 +1,240 @@
+/* Tracing
+ *
+ * Copyright (C) 2020 NVIDIA Corporation
+ * Quentin Young
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#if !defined(_LIBFRR_TRACE_H_) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define _LIBFRR_TRACE_H_
+
+#include "trace.h"
+
+#ifdef HAVE_LTTNG
+
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER frr_libfrr
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./libfrr_trace.h"
+
+#include <lttng/tracepoint.h>
+
+#include "hash.h"
+#include "thread.h"
+#include "memory.h"
+#include "linklist.h"
+#include "table.h"
+
+/* clang-format off */
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ hash_get,
+ TP_ARGS(struct hash *, hash, void *, data),
+ TP_FIELDS(
+ ctf_string(name, hash->name ? hash->name : "(unnamed)")
+ ctf_integer(unsigned int, index_size, hash->size)
+ ctf_integer(unsigned long, item_count, hash->count)
+ ctf_integer_hex(intptr_t, data_ptr, data)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_libfrr, hash_get, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ hash_insert,
+ TP_ARGS(struct hash *, hash, void *, data, unsigned int, key),
+ TP_FIELDS(
+ ctf_string(name, hash->name ? hash->name : "(unnamed)")
+ ctf_integer(unsigned int, key, hash->size)
+ ctf_integer(unsigned int, index_size, hash->size)
+ ctf_integer(unsigned long, item_count, hash->count)
+ ctf_integer_hex(intptr_t, data_ptr, data)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_libfrr, hash_insert, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ hash_release,
+ TP_ARGS(struct hash *, hash, void *, data, void *, released_item),
+ TP_FIELDS(
+ ctf_string(name, hash->name ? hash->name : "(unnamed)")
+ ctf_integer(unsigned int, index_size, hash->size)
+ ctf_integer(unsigned long, item_count, hash->count)
+ ctf_integer_hex(intptr_t, data_ptr, data)
+ ctf_integer_hex(intptr_t, released_item, data)
+ )
+)
+
+TRACEPOINT_LOGLEVEL(frr_libfrr, hash_release, TRACE_INFO)
+
+#define THREAD_SCHEDULE_ARGS \
+ TP_ARGS(struct thread_master *, master, const char *, funcname, \
+ const char *, schedfrom, int, fromln, struct thread **, \
+ thread_ptr, int, fd, int, val, void *, arg, long, time)
+
+TRACEPOINT_EVENT_CLASS(
+ frr_libfrr,
+ thread_operation,
+ THREAD_SCHEDULE_ARGS,
+ TP_FIELDS(
+ ctf_string(threadmaster_name, master->name)
+ ctf_string(function_name, funcname ? funcname : "(unknown function)")
+ ctf_string(scheduled_from, schedfrom ? schedfrom : "(unknown file)")
+ ctf_integer(int, scheduled_on_line, fromln)
+ ctf_integer_hex(intptr_t, thread_addr, thread_ptr ? *thread_ptr : NULL)
+ ctf_integer(int, file_descriptor, fd)
+ ctf_integer(int, event_value, val)
+ ctf_integer_hex(intptr_t, argument_ptr, arg)
+ ctf_integer(long, timer, time)
+ )
+)
+
+#define THREAD_OPERATION_TRACEPOINT_INSTANCE(name) \
+ TRACEPOINT_EVENT_INSTANCE(frr_libfrr, thread_operation, name, \
+ THREAD_SCHEDULE_ARGS) \
+ TRACEPOINT_LOGLEVEL(frr_libfrr, name, TRACE_INFO)
+
+THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_timer)
+THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_event)
+THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_read)
+THREAD_OPERATION_TRACEPOINT_INSTANCE(schedule_write)
+THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel)
+THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_cancel_async)
+THREAD_OPERATION_TRACEPOINT_INSTANCE(thread_call)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ frr_pthread_run,
+ TP_ARGS(
+ char *, name
+ ),
+ TP_FIELDS(
+ ctf_string(frr_pthread_name, name)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ frr_pthread_stop,
+ TP_ARGS(
+ char *, name
+ ),
+ TP_FIELDS(
+ ctf_string(frr_pthread_name, name)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ memalloc,
+ TP_ARGS(
+ struct memtype *, mt, void *, ptr, size_t, size
+ ),
+ TP_FIELDS(
+ ctf_string(memtype, mt->name)
+ ctf_integer(size_t, size, size)
+ ctf_integer_hex(intptr_t, ptr, ptr)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ memfree,
+ TP_ARGS(
+ struct memtype *, mt, void *, ptr
+ ),
+ TP_FIELDS(
+ ctf_string(memtype, mt->name)
+ ctf_integer_hex(intptr_t, ptr, ptr)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ list_add,
+ TP_ARGS(
+ struct list *, list, const void *, ptr
+ ),
+ TP_FIELDS(
+ ctf_integer_hex(intptr_t, list, list)
+ ctf_integer(unsigned int, count, list->count)
+ ctf_integer_hex(intptr_t, ptr, ptr)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ list_remove,
+ TP_ARGS(
+ struct list *, list, const void *, ptr
+ ),
+ TP_FIELDS(
+ ctf_integer_hex(intptr_t, list, list)
+ ctf_integer(unsigned int, count, list->count)
+ ctf_integer_hex(intptr_t, ptr, ptr)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ list_delete_node,
+ TP_ARGS(
+ struct list *, list, const void *, node
+ ),
+ TP_FIELDS(
+ ctf_integer_hex(intptr_t, list, list)
+ ctf_integer(unsigned int, count, list->count)
+ ctf_integer_hex(intptr_t, node, node)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ list_sort,
+ TP_ARGS(
+ struct list *, list
+ ),
+ TP_FIELDS(
+ ctf_integer_hex(intptr_t, list, list)
+ ctf_integer(unsigned int, count, list->count)
+ )
+)
+
+TRACEPOINT_EVENT(
+ frr_libfrr,
+ route_node_get,
+ TP_ARGS(
+ struct route_table *, table, char *, prefix
+ ),
+ TP_FIELDS(
+ ctf_integer_hex(intptr_t, table, table)
+ ctf_string(prefix, prefix)
+ )
+)
+
+/* clang-format on */
+
+#include <lttng/tracepoint-event.h>
+#include <lttng/tracelog.h>
+
+#endif /* HAVE_LTTNG */
+
+#endif /* _LIBFRR_TRACE_H_ */
diff --git a/lib/linklist.c b/lib/linklist.c
index 84dc6e1419..43c2002231 100644
--- a/lib/linklist.c
+++ b/lib/linklist.c
@@ -23,6 +23,7 @@
#include "linklist.h"
#include "memory.h"
+#include "libfrr_trace.h"
DEFINE_MTYPE_STATIC(LIB, LINK_LIST, "Link List")
DEFINE_MTYPE_STATIC(LIB, LINK_NODE, "Link Node")
@@ -66,6 +67,8 @@ static void listnode_free(struct list *list, struct listnode *node)
struct listnode *listnode_add(struct list *list, void *val)
{
+ frrtrace(2, frr_libfrr, list_add, list, val);
+
struct listnode *node;
assert(val != NULL);
@@ -281,6 +284,8 @@ void listnode_move_to_tail(struct list *l, struct listnode *n)
void listnode_delete(struct list *list, const void *val)
{
+ frrtrace(2, frr_libfrr, list_remove, list, val);
+
struct listnode *node = listnode_lookup(list, val);
if (node)
@@ -360,6 +365,8 @@ struct listnode *listnode_lookup_nocheck(struct list *list, void *data)
void list_delete_node(struct list *list, struct listnode *node)
{
+ frrtrace(2, frr_libfrr, list_delete_node, list, node);
+
if (node->prev)
node->prev->next = node->next;
else
@@ -374,6 +381,8 @@ void list_delete_node(struct list *list, struct listnode *node)
void list_sort(struct list *list, int (*cmp)(const void **, const void **))
{
+ frrtrace(1, frr_libfrr, list_sort, list);
+
struct listnode *ln, *nn;
int i = -1;
void *data;
diff --git a/lib/memory.c b/lib/memory.c
index 2c902d123b..f715044ea3 100644
--- a/lib/memory.c
+++ b/lib/memory.c
@@ -29,6 +29,7 @@
#include "memory.h"
#include "log.h"
+#include "libfrr_trace.h"
static struct memgroup *mg_first = NULL;
struct memgroup **mg_insert = &mg_first;
@@ -77,6 +78,8 @@ static inline void mt_count_alloc(struct memtype *mt, size_t size, void *ptr)
static inline void mt_count_free(struct memtype *mt, void *ptr)
{
+ frrtrace(2, frr_libfrr, memfree, mt, ptr);
+
assert(mt->n_alloc);
atomic_fetch_sub_explicit(&mt->n_alloc, 1, memory_order_relaxed);
@@ -89,6 +92,8 @@ static inline void mt_count_free(struct memtype *mt, void *ptr)
static inline void *mt_checkalloc(struct memtype *mt, void *ptr, size_t size)
{
+ frrtrace(3, frr_libfrr, memalloc, mt, ptr, size);
+
if (__builtin_expect(ptr == NULL, 0)) {
if (size) {
/* malloc(0) is allowed to return NULL */
diff --git a/lib/northbound.c b/lib/northbound.c
index c99f993ea5..ecfa2c9d11 100644
--- a/lib/northbound.c
+++ b/lib/northbound.c
@@ -152,20 +152,22 @@ static int nb_node_del_cb(const struct lys_node *snode, void *arg)
struct nb_node *nb_node;
nb_node = snode->priv;
- lys_set_private(snode, NULL);
- XFREE(MTYPE_NB_NODE, nb_node);
+ if (nb_node) {
+ lys_set_private(snode, NULL);
+ XFREE(MTYPE_NB_NODE, nb_node);
+ }
return YANG_ITER_CONTINUE;
}
void nb_nodes_create(void)
{
- yang_snodes_iterate_all(nb_node_new_cb, 0, NULL);
+ yang_snodes_iterate(NULL, nb_node_new_cb, 0, NULL);
}
void nb_nodes_delete(void)
{
- yang_snodes_iterate_all(nb_node_del_cb, 0, NULL);
+ yang_snodes_iterate(NULL, nb_node_del_cb, 0, NULL);
}
struct nb_node *nb_node_find(const char *xpath)
@@ -273,8 +275,10 @@ static int nb_node_validate(const struct lys_node *snode, void *arg)
unsigned int *errors = arg;
/* Validate callbacks and priority. */
- *errors += nb_node_validate_cbs(nb_node);
- *errors += nb_node_validate_priority(nb_node);
+ if (nb_node) {
+ *errors += nb_node_validate_cbs(nb_node);
+ *errors += nb_node_validate_priority(nb_node);
+ }
return YANG_ITER_CONTINUE;
}
@@ -2232,25 +2236,11 @@ static void nb_load_callbacks(const struct frr_yang_module_info *module)
}
}
-void nb_init(struct thread_master *tm,
- const struct frr_yang_module_info *const modules[],
- size_t nmodules, bool db_enabled)
+void nb_validate_callbacks(void)
{
unsigned int errors = 0;
- /* Load YANG modules. */
- for (size_t i = 0; i < nmodules; i++)
- yang_module_load(modules[i]->name);
-
- /* Create a nb_node for all YANG schema nodes. */
- nb_nodes_create();
-
- /* Load northbound callbacks. */
- for (size_t i = 0; i < nmodules; i++)
- nb_load_callbacks(modules[i]);
-
- /* Validate northbound callbacks. */
- yang_snodes_iterate_all(nb_node_validate, 0, &errors);
+ yang_snodes_iterate(NULL, nb_node_validate, 0, &errors);
if (errors > 0) {
flog_err(
EC_LIB_NB_CBS_VALIDATION,
@@ -2258,9 +2248,33 @@ void nb_init(struct thread_master *tm,
__func__, errors);
exit(1);
}
+}
+void nb_load_module(const struct frr_yang_module_info *module_info)
+{
+ struct yang_module *module;
+
+ DEBUGD(&nb_dbg_events, "northbound: loading %s.yang",
+ module_info->name);
+
+ module = yang_module_load(module_info->name);
+ yang_snodes_iterate(module->info, nb_node_new_cb, 0, NULL);
+ nb_load_callbacks(module_info);
+}
+
+void nb_init(struct thread_master *tm,
+ const struct frr_yang_module_info *const modules[],
+ size_t nmodules, bool db_enabled)
+{
nb_db_enabled = db_enabled;
+ /* Load YANG modules and their corresponding northbound callbacks. */
+ for (size_t i = 0; i < nmodules; i++)
+ nb_load_module(modules[i]);
+
+ /* Validate northbound callbacks. */
+ nb_validate_callbacks();
+
/* Create an empty running configuration. */
running_config = nb_config_new(NULL);
running_config_entries = hash_create(running_config_entry_key_make,
diff --git a/lib/northbound.h b/lib/northbound.h
index 16f19b3d5b..3f6e4dc46e 100644
--- a/lib/northbound.h
+++ b/lib/northbound.h
@@ -1238,6 +1238,29 @@ extern const char *nb_err_name(enum nb_error error);
extern const char *nb_client_name(enum nb_client client);
/*
+ * Validate all northbound callbacks.
+ *
+ * Some errors, like missing callbacks or invalid priorities, are fatal and
+ * can't be recovered from. Other errors, like unneeded callbacks, are logged
+ * but otherwise ignored.
+ *
+ * Whenever a YANG module is loaded after startup, *all* northbound callbacks
+ * need to be validated and not only the callbacks from the newly loaded module.
+ * This is because augmentations can change the properties of the augmented
+ * module, making mandatory the implementation of additional callbacks.
+ */
+void nb_validate_callbacks(void);
+
+/*
+ * Load a YANG module with its corresponding northbound callbacks.
+ *
+ * module_info
+ * Pointer to structure containing the module name and its northbound
+ * callbacks.
+ */
+void nb_load_module(const struct frr_yang_module_info *module_info);
+
+/*
* Initialize the northbound layer. Should be called only once during the
* daemon initialization process.
*
diff --git a/lib/northbound_cli.c b/lib/northbound_cli.c
index a7f3a1b305..7048df99fb 100644
--- a/lib/northbound_cli.c
+++ b/lib/northbound_cli.c
@@ -89,7 +89,7 @@ static int nb_cli_classic_commit(struct vty *vty)
static void nb_cli_pending_commit_clear(struct vty *vty)
{
- THREAD_TIMER_OFF(vty->t_pending_commit);
+ THREAD_OFF(vty->t_pending_commit);
vty->backoff_cmd_count = 0;
XFREE(MTYPE_TMP, vty->pending_cmds_buf);
vty->pending_cmds_buflen = 0;
@@ -154,7 +154,7 @@ static int nb_cli_schedule_command(struct vty *vty)
vty->pending_cmds_buflen);
/* Schedule the commit operation. */
- THREAD_TIMER_OFF(vty->t_pending_commit);
+ THREAD_OFF(vty->t_pending_commit);
thread_add_timer_msec(master, nb_cli_pending_commit_cb, vty, 100,
&vty->t_pending_commit);
@@ -312,7 +312,7 @@ int nb_cli_rpc(struct vty *vty, const char *xpath, struct list *input,
void nb_cli_confirmed_commit_clean(struct vty *vty)
{
- THREAD_TIMER_OFF(vty->t_confirmed_commit_timeout);
+ thread_cancel(&vty->t_confirmed_commit_timeout);
nb_config_free(vty->confirmed_commit_rollback);
vty->confirmed_commit_rollback = NULL;
}
@@ -377,7 +377,7 @@ static int nb_cli_commit(struct vty *vty, bool force,
"%% Resetting confirmed-commit timeout to %u minute(s)\n\n",
confirmed_timeout);
- THREAD_TIMER_OFF(vty->t_confirmed_commit_timeout);
+ thread_cancel(&vty->t_confirmed_commit_timeout);
thread_add_timer(master,
nb_cli_confirmed_commit_timeout, vty,
confirmed_timeout * 60,
diff --git a/lib/northbound_confd.c b/lib/northbound_confd.c
index c1cb0fc11d..8acba9fd2b 100644
--- a/lib/northbound_confd.c
+++ b/lib/northbound_confd.c
@@ -550,6 +550,9 @@ static int frr_confd_init_cdb(void)
continue;
nb_node = snode->priv;
+ if (!nb_node)
+ continue;
+
DEBUGD(&nb_dbg_client_confd, "%s: subscribing to '%s'",
__func__, nb_node->xpath);
@@ -1189,7 +1192,7 @@ static int frr_confd_subscribe_state(const struct lys_node *snode, void *arg)
struct nb_node *nb_node = snode->priv;
struct confd_data_cbs *data_cbs = arg;
- if (!CHECK_FLAG(snode->flags, LYS_CONFIG_R))
+ if (!nb_node || !CHECK_FLAG(snode->flags, LYS_CONFIG_R))
return YANG_ITER_CONTINUE;
/* We only need to subscribe to the root of the state subtrees. */
if (snode->parent && CHECK_FLAG(snode->parent->flags, LYS_CONFIG_R))
@@ -1276,7 +1279,7 @@ static int frr_confd_init_dp(const char *program_name)
* Iterate over all loaded YANG modules and subscribe to the paths
* referent to state data.
*/
- yang_snodes_iterate_all(frr_confd_subscribe_state, 0, &data_cbs);
+ yang_snodes_iterate(NULL, frr_confd_subscribe_state, 0, &data_cbs);
/* Register notification stream. */
memset(&ncbs, 0, sizeof(ncbs));
@@ -1393,7 +1396,8 @@ static int frr_confd_calculate_snode_hash(const struct lys_node *snode,
{
struct nb_node *nb_node = snode->priv;
- nb_node->confd_hash = confd_str2hash(snode->name);
+ if (nb_node)
+ nb_node->confd_hash = confd_str2hash(snode->name);
return YANG_ITER_CONTINUE;
}
@@ -1426,7 +1430,7 @@ static int frr_confd_init(const char *program_name)
goto error;
}
- yang_snodes_iterate_all(frr_confd_calculate_snode_hash, 0, NULL);
+ yang_snodes_iterate(NULL, frr_confd_calculate_snode_hash, 0, NULL);
hook_register(nb_notification_send, frr_confd_notification_send);
diff --git a/lib/northbound_sysrepo.c b/lib/northbound_sysrepo.c
index 3cd310c5a7..c027f4de72 100644
--- a/lib/northbound_sysrepo.c
+++ b/lib/northbound_sysrepo.c
@@ -575,6 +575,8 @@ static int frr_sr_subscribe_state(const struct lys_node *snode, void *arg)
return YANG_ITER_CONTINUE;
nb_node = snode->priv;
+ if (!nb_node)
+ return YANG_ITER_CONTINUE;
DEBUGD(&nb_dbg_client_sysrepo, "sysrepo: providing data to '%s'",
nb_node->xpath);
@@ -599,6 +601,8 @@ static int frr_sr_subscribe_rpc(const struct lys_node *snode, void *arg)
return YANG_ITER_CONTINUE;
nb_node = snode->priv;
+ if (!nb_node)
+ return YANG_ITER_CONTINUE;
DEBUGD(&nb_dbg_client_sysrepo, "sysrepo: providing RPC to '%s'",
nb_node->xpath);
@@ -686,10 +690,10 @@ static int frr_sr_init(void)
int event_pipe;
frr_sr_subscribe_config(module);
- yang_snodes_iterate_module(module->info, frr_sr_subscribe_state,
- 0, module);
- yang_snodes_iterate_module(module->info, frr_sr_subscribe_rpc,
- 0, module);
+ yang_snodes_iterate(module->info, frr_sr_subscribe_state, 0,
+ module);
+ yang_snodes_iterate(module->info, frr_sr_subscribe_rpc, 0,
+ module);
/* Watch subscriptions. */
ret = sr_get_event_pipe(module->sr_subscription, &event_pipe);
diff --git a/lib/spf_backoff.c b/lib/spf_backoff.c
index acb208e5e7..ac6dd29f06 100644
--- a/lib/spf_backoff.c
+++ b/lib/spf_backoff.c
@@ -110,8 +110,8 @@ void spf_backoff_free(struct spf_backoff *backoff)
if (!backoff)
return;
- THREAD_TIMER_OFF(backoff->t_holddown);
- THREAD_TIMER_OFF(backoff->t_timetolearn);
+ thread_cancel(&backoff->t_holddown);
+ thread_cancel(&backoff->t_timetolearn);
XFREE(MTYPE_SPF_BACKOFF_NAME, backoff->name);
XFREE(MTYPE_SPF_BACKOFF, backoff);
@@ -121,7 +121,6 @@ static int spf_backoff_timetolearn_elapsed(struct thread *thread)
{
struct spf_backoff *backoff = THREAD_ARG(thread);
- backoff->t_timetolearn = NULL;
backoff->state = SPF_BACKOFF_LONG_WAIT;
backoff_debug("SPF Back-off(%s) TIMETOLEARN elapsed, move to state %s",
backoff->name, spf_backoff_state2str(backoff->state));
@@ -132,7 +131,7 @@ static int spf_backoff_holddown_elapsed(struct thread *thread)
{
struct spf_backoff *backoff = THREAD_ARG(thread);
- THREAD_TIMER_OFF(backoff->t_timetolearn);
+ THREAD_OFF(backoff->t_timetolearn);
timerclear(&backoff->first_event_time);
backoff->state = SPF_BACKOFF_QUIET;
backoff_debug("SPF Back-off(%s) HOLDDOWN elapsed, move to state %s",
@@ -166,7 +165,7 @@ long spf_backoff_schedule(struct spf_backoff *backoff)
break;
case SPF_BACKOFF_SHORT_WAIT:
case SPF_BACKOFF_LONG_WAIT:
- THREAD_TIMER_OFF(backoff->t_holddown);
+ thread_cancel(&backoff->t_holddown);
thread_add_timer_msec(backoff->m, spf_backoff_holddown_elapsed,
backoff, backoff->holddown,
&backoff->t_holddown);
diff --git a/lib/subdir.am b/lib/subdir.am
index 55f127b019..ed3c30799d 100644
--- a/lib/subdir.am
+++ b/lib/subdir.am
@@ -3,7 +3,7 @@
#
lib_LTLIBRARIES += lib/libfrr.la
lib_libfrr_la_LDFLAGS = -version-info 0:0:0 -Xlinker -e_libfrr_version
-lib_libfrr_la_LIBADD = $(LIBCAP) $(UNWIND_LIBS) $(LIBYANG_LIBS) $(LUA_LIB) $(LIBM)
+lib_libfrr_la_LIBADD = $(LIBCAP) $(UNWIND_LIBS) $(LIBYANG_LIBS) $(LUA_LIB) $(UST_LIBS) $(LIBM)
lib_libfrr_la_SOURCES = \
lib/agg_table.c \
@@ -46,6 +46,7 @@ lib_libfrr_la_SOURCES = \
lib/lib_errors.c \
lib/lib_vty.c \
lib/libfrr.c \
+ lib/libfrr_trace.c \
lib/linklist.c \
lib/log.c \
lib/log_filter.c \
@@ -204,6 +205,7 @@ pkginclude_HEADERS += \
lib/lib_errors.h \
lib/lib_vty.h \
lib/libfrr.h \
+ lib/libfrr_trace.h \
lib/libospf.h \
lib/linklist.h \
lib/log.h \
@@ -251,6 +253,7 @@ pkginclude_HEADERS += \
lib/table.h \
lib/termtable.h \
lib/thread.h \
+ lib/trace.h \
lib/typerb.h \
lib/typesafe.h \
lib/vector.h \
@@ -401,7 +404,7 @@ lib_grammar_sandbox_LDADD = \
lib_clippy_CPPFLAGS = $(AM_CPPFLAGS) -D_GNU_SOURCE -DBUILDING_CLIPPY
lib_clippy_CFLAGS = $(PYTHON_CFLAGS)
-lib_clippy_LDADD = $(PYTHON_LIBS)
+lib_clippy_LDADD = $(PYTHON_LIBS) $(UST_LIBS)
lib_clippy_LDFLAGS = -export-dynamic
lib_clippy_SOURCES = \
lib/clippy.c \
@@ -411,6 +414,7 @@ lib_clippy_SOURCES = \
lib/command_py.c \
lib/defun_lex.l \
lib/graph.c \
+ lib/libfrr_trace.c \
lib/memory.c \
lib/vector.c \
# end
diff --git a/lib/table.c b/lib/table.c
index b315637f19..89e32182b5 100644
--- a/lib/table.c
+++ b/lib/table.c
@@ -27,6 +27,7 @@
#include "table.h"
#include "memory.h"
#include "sockunion.h"
+#include "libfrr_trace.h"
DEFINE_MTYPE_STATIC(LIB, ROUTE_TABLE, "Route table")
DEFINE_MTYPE(LIB, ROUTE_NODE, "Route node")
@@ -276,6 +277,12 @@ struct route_node *route_node_lookup_maynull(struct route_table *table,
struct route_node *route_node_get(struct route_table *table,
union prefixconstptr pu)
{
+ if (frrtrace_enabled(frr_libfrr, route_node_get)) {
+ char buf[PREFIX2STR_BUFFER];
+ prefix2str(pu, buf, sizeof(buf));
+ frrtrace(2, frr_libfrr, route_node_get, table, buf);
+ }
+
struct route_node search;
struct prefix *p = &search.p;
diff --git a/lib/thread.c b/lib/thread.c
index db35a3f031..1765de9573 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -35,6 +35,7 @@
#include "frratomic.h"
#include "frr_pthread.h"
#include "lib_errors.h"
+#include "libfrr_trace.h"
DEFINE_MTYPE_STATIC(LIB, THREAD, "Thread")
DEFINE_MTYPE_STATIC(LIB, THREAD_MASTER, "Thread master")
@@ -787,6 +788,13 @@ struct thread *funcname_thread_add_read_write(int dir, struct thread_master *m,
struct thread *thread = NULL;
struct thread **thread_array;
+ if (dir == THREAD_READ)
+ frrtrace(9, frr_libfrr, schedule_read, m, funcname, schedfrom,
+ fromln, t_ptr, fd, 0, arg, 0);
+ else
+ frrtrace(9, frr_libfrr, schedule_write, m, funcname, schedfrom,
+ fromln, t_ptr, fd, 0, arg, 0);
+
assert(fd >= 0 && fd < m->fd_limit);
frr_with_mutex(&m->mtx) {
if (t_ptr && *t_ptr)
@@ -861,6 +869,9 @@ funcname_thread_add_timer_timeval(struct thread_master *m,
assert(type == THREAD_TIMER);
assert(time_relative);
+ frrtrace(9, frr_libfrr, schedule_timer, m, funcname, schedfrom, fromln,
+ t_ptr, 0, 0, arg, (long)time_relative->tv_sec);
+
frr_with_mutex(&m->mtx) {
if (t_ptr && *t_ptr)
/* thread is already scheduled; don't reschedule */
@@ -939,6 +950,9 @@ struct thread *funcname_thread_add_event(struct thread_master *m,
{
struct thread *thread = NULL;
+ frrtrace(9, frr_libfrr, schedule_event, m, funcname, schedfrom, fromln,
+ t_ptr, 0, val, arg, 0);
+
assert(m != NULL);
frr_with_mutex(&m->mtx) {
@@ -1163,19 +1177,30 @@ void thread_cancel_event(struct thread_master *master, void *arg)
*
* @param thread task to cancel
*/
-void thread_cancel(struct thread *thread)
+void thread_cancel(struct thread **thread)
{
- struct thread_master *master = thread->master;
+ struct thread_master *master;
+
+ if (thread == NULL || *thread == NULL)
+ return;
+
+ master = (*thread)->master;
+
+ frrtrace(9, frr_libfrr, thread_cancel, master, thread->funcname,
+ thread->schedfrom, thread->schedfrom_line, NULL, thread->u.fd,
+ thread->u.val, thread->arg, thread->u.sands.tv_sec);
assert(master->owner == pthread_self());
frr_with_mutex(&master->mtx) {
struct cancel_req *cr =
XCALLOC(MTYPE_TMP, sizeof(struct cancel_req));
- cr->thread = thread;
+ cr->thread = *thread;
listnode_add(master->cancel_req, cr);
do_thread_cancel(master);
}
+
+ *thread = NULL;
}
/**
@@ -1206,6 +1231,17 @@ void thread_cancel_async(struct thread_master *master, struct thread **thread,
void *eventobj)
{
assert(!(thread && eventobj) && (thread || eventobj));
+
+ if (thread && *thread)
+ frrtrace(9, frr_libfrr, thread_cancel_async, master,
+ (*thread)->funcname, (*thread)->schedfrom,
+ (*thread)->schedfrom_line, NULL, (*thread)->u.fd,
+ (*thread)->u.val, (*thread)->arg,
+ (*thread)->u.sands.tv_sec);
+ else
+ frrtrace(9, frr_libfrr, thread_cancel_async, master, NULL, NULL,
+ 0, NULL, 0, 0, eventobj, 0);
+
assert(master->owner != pthread_self());
frr_with_mutex(&master->mtx) {
@@ -1227,6 +1263,9 @@ void thread_cancel_async(struct thread_master *master, struct thread **thread,
while (!master->canceled)
pthread_cond_wait(&master->cancel_cond, &master->mtx);
}
+
+ if (thread)
+ *thread = NULL;
}
/* ------------------------------------------------------------------------- */
@@ -1581,6 +1620,10 @@ void thread_call(struct thread *thread)
GETRUSAGE(&before);
thread->real = before.real;
+ frrtrace(9, frr_libfrr, thread_call, thread->master, thread->funcname,
+ thread->schedfrom, thread->schedfrom_line, NULL, thread->u.fd,
+ thread->u.val, thread->arg, thread->u.sands.tv_sec);
+
pthread_setspecific(thread_current, thread);
(*thread->func)(thread);
pthread_setspecific(thread_current, NULL);
diff --git a/lib/thread.h b/lib/thread.h
index c22b2105cd..e2b7763c51 100644
--- a/lib/thread.h
+++ b/lib/thread.h
@@ -147,18 +147,15 @@ struct cpu_thread_history {
#define THREAD_FD(X) ((X)->u.fd)
#define THREAD_VAL(X) ((X)->u.val)
-#define THREAD_OFF(thread) \
- do { \
- if (thread) { \
- thread_cancel(thread); \
- thread = NULL; \
- } \
+/*
+ * Please consider this macro deprecated, and do not use it in new code.
+ */
+#define THREAD_OFF(thread) \
+ do { \
+ if ((thread)) \
+ thread_cancel(&(thread)); \
} while (0)
-#define THREAD_READ_OFF(thread) THREAD_OFF(thread)
-#define THREAD_WRITE_OFF(thread) THREAD_OFF(thread)
-#define THREAD_TIMER_OFF(thread) THREAD_OFF(thread)
-
#define debugargdef const char *funcname, const char *schedfrom, int fromln
#define thread_add_read(m,f,a,v,t) funcname_thread_add_read_write(THREAD_READ,m,f,a,v,t,#f,__FILE__,__LINE__)
@@ -207,7 +204,7 @@ extern void funcname_thread_execute(struct thread_master *,
debugargdef);
#undef debugargdef
-extern void thread_cancel(struct thread *);
+extern void thread_cancel(struct thread **event);
extern void thread_cancel_async(struct thread_master *, struct thread **,
void *);
extern void thread_cancel_event(struct thread_master *, void *);
diff --git a/lib/trace.h b/lib/trace.h
new file mode 100644
index 0000000000..73fc10a556
--- /dev/null
+++ b/lib/trace.h
@@ -0,0 +1,80 @@
+/* Tracing macros
+ *
+ * Wraps tracepoint macros for different tracing systems to allow switching
+ * between them at compile time.
+ *
+ * This should not be included directly by source files wishing to provide
+ * tracepoints. Instead, write a header that defines LTTng tracepoints and
+ * which includes this header, and include your new header in your source. USDT
+ * probes do not need tracepoint definitions, but are less capable than LTTng
+ * tracepoints.
+ *
+ * Copyright (C) 2020 NVIDIA Corporation
+ * Quentin Young
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; see the file COPYING; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef _TRACE_H_
+#define _TRACE_H_
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+/*
+ * Provided here:
+ * - frrtrace(n, provider, name, ...args...)
+ * - frrtrace_enabled(provider, name)
+ * - frrtracelog(level, msg, ...)
+ *
+ * Use frrtrace() to define tracepoints. n is the number of arguments; this is
+ * needed because USDT probe definitions use DTRACE_PROBEn macros, so the
+ * number of args must be passed in order to expand the correct macro.
+ *
+ * frrtrace_enabled() maps to tracepoint_enabled() under LTTng and is always
+ * true when using USDT. In the future it could be mapped to USDT semaphores
+ * but this is not implemented at present.
+ *
+ * frrtracelog() maps to tracelog() under LTTng and should only be used in zlog
+ * core code, to propagate zlog messages to LTTng. It expands to nothing
+ * otherwise.
+ */
+
+#if defined(HAVE_LTTNG)
+
+#define frrtrace(nargs, provider, name, ...) \
+ tracepoint(provider, name, ## __VA_ARGS__)
+#define frrtrace_enabled(...) tracepoint_enabled(__VA_ARGS__)
+#define frrtracelog(...) tracelog(__VA_ARGS__)
+
+#elif defined(HAVE_USDT)
+
+#include "sys/sdt.h"
+
+#define frrtrace(nargs, provider, name, ...) \
+ DTRACE_PROBE##nargs(provider, name, ## __VA_ARGS__)
+#define frrtrace_enabled(...) true
+#define frrtracelog(...)
+
+#else
+
+#define frrtrace(nargs, provider, name, ...) (void)0
+#define frrtrace_enabled(...) false
+#define frrtracelog(...) (void)0
+
+#endif
+
+#endif /* _TRACE_H_ */
diff --git a/lib/workqueue.c b/lib/workqueue.c
index 54090d0d0f..f8e4677220 100644
--- a/lib/workqueue.c
+++ b/lib/workqueue.c
@@ -104,7 +104,7 @@ void work_queue_free_and_null(struct work_queue **wqp)
struct work_queue *wq = *wqp;
if (wq->thread != NULL)
- thread_cancel(wq->thread);
+ thread_cancel(&(wq->thread));
while (!work_queue_empty(wq)) {
struct work_queue_item *item = work_queue_last_item(wq);
@@ -215,7 +215,7 @@ void workqueue_cmd_init(void)
void work_queue_plug(struct work_queue *wq)
{
if (wq->thread)
- thread_cancel(wq->thread);
+ thread_cancel(&(wq->thread));
wq->thread = NULL;
diff --git a/lib/yang.c b/lib/yang.c
index 5bf7758e18..c59cb642f0 100644
--- a/lib/yang.c
+++ b/lib/yang.c
@@ -227,40 +227,22 @@ next:
return ret;
}
-int yang_snodes_iterate_module(const struct lys_module *module,
- yang_iterate_cb cb, uint16_t flags, void *arg)
+int yang_snodes_iterate(const struct lys_module *module, yang_iterate_cb cb,
+ uint16_t flags, void *arg)
{
- struct lys_node *snode;
- int ret = YANG_ITER_CONTINUE;
-
- LY_TREE_FOR (module->data, snode) {
- ret = yang_snodes_iterate_subtree(snode, module, cb, flags,
- arg);
- if (ret == YANG_ITER_STOP)
- return ret;
- }
-
- for (uint8_t i = 0; i < module->augment_size; i++) {
- ret = yang_snodes_iterate_subtree(
- (const struct lys_node *)&module->augment[i], module,
- cb, flags, arg);
- if (ret == YANG_ITER_STOP)
- return ret;
- }
-
- return ret;
-}
-
-int yang_snodes_iterate_all(yang_iterate_cb cb, uint16_t flags, void *arg)
-{
- struct yang_module *module;
+ const struct lys_module *module_iter;
+ uint32_t idx = 0;
int ret = YANG_ITER_CONTINUE;
- RB_FOREACH (module, yang_modules, &yang_modules) {
+ idx = ly_ctx_internal_modules_count(ly_native_ctx);
+ while ((module_iter = ly_ctx_get_module_iter(ly_native_ctx, &idx))) {
struct lys_node *snode;
- LY_TREE_FOR (module->info->data, snode) {
- ret = yang_snodes_iterate_subtree(snode, NULL, cb,
+ if (!module_iter->implemented)
+ continue;
+
+ LY_TREE_FOR (module_iter->data, snode) {
+ ret = yang_snodes_iterate_subtree(snode, module, cb,
flags, arg);
if (ret == YANG_ITER_STOP)
return ret;
diff --git a/lib/yang.h b/lib/yang.h
index 867ade9676..0cd6a4a6f2 100644
--- a/lib/yang.h
+++ b/lib/yang.h
@@ -186,29 +186,11 @@ extern int yang_snodes_iterate_subtree(const struct lys_node *snode,
void *arg);
/*
- * Iterate over all libyang schema nodes from the given YANG module.
+ * Iterate over all libyang schema nodes from all loeaded modules of from the
+ * given YANG module.
*
* module
- * YANG module to operate on.
- *
- * cb
- * Function to call with each schema node.
- *
- * flags
- * YANG_ITER_* flags to control how the iteration is performed.
- *
- * arg
- * Arbitrary argument passed as the second parameter in each call to 'cb'.
- *
- * Returns:
- * The return value of the last called callback.
- */
-extern int yang_snodes_iterate_module(const struct lys_module *module,
- yang_iterate_cb cb, uint16_t flags,
- void *arg);
-
-/*
- * Iterate over all libyang schema nodes from all loaded YANG modules.
+ * When set, iterate over all nodes of the specified module only.
*
* cb
* Function to call with each schema node.
@@ -222,8 +204,8 @@ extern int yang_snodes_iterate_module(const struct lys_module *module,
* Returns:
* The return value of the last called callback.
*/
-extern int yang_snodes_iterate_all(yang_iterate_cb cb, uint16_t flags,
- void *arg);
+extern int yang_snodes_iterate(const struct lys_module *module,
+ yang_iterate_cb cb, uint16_t flags, void *arg);
/*
* Build schema path or data path of the schema node.
diff --git a/lib/yang_translator.c b/lib/yang_translator.c
index 7dbb1f3f1a..1f64675d6a 100644
--- a/lib/yang_translator.c
+++ b/lib/yang_translator.c
@@ -469,12 +469,12 @@ static unsigned int yang_translator_validate(struct yang_translator *translator)
args.errors = 0;
for (ALL_LIST_ELEMENTS_RO(translator->modules, ln, tmodule)) {
- yang_snodes_iterate_module(
- tmodule->module, yang_translator_validate_cb,
- YANG_ITER_FILTER_NPCONTAINERS
- | YANG_ITER_FILTER_LIST_KEYS
- | YANG_ITER_FILTER_INPUT_OUTPUT,
- &args);
+ yang_snodes_iterate(tmodule->module,
+ yang_translator_validate_cb,
+ YANG_ITER_FILTER_NPCONTAINERS
+ | YANG_ITER_FILTER_LIST_KEYS
+ | YANG_ITER_FILTER_INPUT_OUTPUT,
+ &args);
}
if (args.errors)
@@ -500,11 +500,11 @@ static unsigned int yang_module_nodes_count(const struct lys_module *module)
{
unsigned int total = 0;
- yang_snodes_iterate_module(module, yang_module_nodes_count_cb,
- YANG_ITER_FILTER_NPCONTAINERS
- | YANG_ITER_FILTER_LIST_KEYS
- | YANG_ITER_FILTER_INPUT_OUTPUT,
- &total);
+ yang_snodes_iterate(module, yang_module_nodes_count_cb,
+ YANG_ITER_FILTER_NPCONTAINERS
+ | YANG_ITER_FILTER_LIST_KEYS
+ | YANG_ITER_FILTER_INPUT_OUTPUT,
+ &total);
return total;
}
diff --git a/lib/zassert.h b/lib/zassert.h
index e50a88f407..e6b254ee8d 100644
--- a/lib/zassert.h
+++ b/lib/zassert.h
@@ -27,6 +27,8 @@ extern void _zlog_assert_failed(const char *assertion, const char *file,
unsigned int line, const char *function)
__attribute__((noreturn));
+#undef __ASSERT_FUNCTION
+
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define __ASSERT_FUNCTION __func__
#elif defined(__GNUC__)
diff --git a/lib/zlog.c b/lib/zlog.c
index 8dfd20371b..e77feec5f2 100644
--- a/lib/zlog.c
+++ b/lib/zlog.c
@@ -52,6 +52,7 @@
#include "printfrr.h"
#include "frrcu.h"
#include "zlog.h"
+#include "libfrr_trace.h"
DEFINE_MTYPE_STATIC(LIB, LOG_MESSAGE, "log message")
DEFINE_MTYPE_STATIC(LIB, LOG_TLSBUF, "log thread-local buffer")
@@ -450,6 +451,34 @@ void vzlog(int prio, const char *fmt, va_list ap)
{
struct zlog_tls *zlog_tls = zlog_tls_get();
+#ifdef HAVE_LTTNG
+ va_list copy;
+ va_copy(copy, ap);
+ char *msg = vasprintfrr(MTYPE_LOG_MESSAGE, fmt, copy);
+
+ switch (prio) {
+ case LOG_ERR:
+ frrtracelog(TRACE_ERR, msg);
+ break;
+ case LOG_WARNING:
+ frrtracelog(TRACE_WARNING, msg);
+ break;
+ case LOG_DEBUG:
+ frrtracelog(TRACE_DEBUG, msg);
+ break;
+ case LOG_NOTICE:
+ frrtracelog(TRACE_DEBUG, msg);
+ break;
+ case LOG_INFO:
+ default:
+ frrtracelog(TRACE_INFO, msg);
+ break;
+ }
+
+ va_end(copy);
+ XFREE(MTYPE_LOG_MESSAGE, msg);
+#endif
+
if (zlog_tls)
vzlog_tls(zlog_tls, prio, fmt, ap);
else
diff --git a/nhrpd/netlink_arp.c b/nhrpd/netlink_arp.c
index cf338a0876..309f733526 100644
--- a/nhrpd/netlink_arp.c
+++ b/nhrpd/netlink_arp.c
@@ -257,7 +257,7 @@ static int netlink_log_recv(struct thread *t)
void netlink_set_nflog_group(int nlgroup)
{
if (netlink_log_fd >= 0) {
- THREAD_OFF(netlink_log_thread);
+ thread_cancel(&netlink_log_thread);
close(netlink_log_fd);
netlink_log_fd = -1;
}
diff --git a/nhrpd/nhrp_nhs.c b/nhrpd/nhrp_nhs.c
index 8509cedcee..085cab347f 100644
--- a/nhrpd/nhrp_nhs.c
+++ b/nhrpd/nhrp_nhs.c
@@ -137,7 +137,7 @@ static void nhrp_reg_peer_notify(struct notifier_block *n, unsigned long cmd)
debugf(NHRP_DEBUG_COMMON, "NHS: Flush timer for %s",
sockunion2str(&r->peer->vc->remote.nbma, buf,
sizeof(buf)));
- THREAD_TIMER_OFF(r->t_register);
+ THREAD_OFF(r->t_register);
thread_add_timer_msec(master, nhrp_reg_send_req, r, 10,
&r->t_register);
break;
diff --git a/ospfd/ospf_apiserver.c b/ospfd/ospf_apiserver.c
index 9d3493e910..c01ecdd1d4 100644
--- a/ospfd/ospf_apiserver.c
+++ b/ospfd/ospf_apiserver.c
@@ -317,21 +317,12 @@ void ospf_apiserver_free(struct ospf_apiserver *apiserv)
struct listnode *node;
/* Cancel read and write threads. */
- if (apiserv->t_sync_read) {
- thread_cancel(apiserv->t_sync_read);
- }
+ thread_cancel(&apiserv->t_sync_read);
#ifdef USE_ASYNC_READ
- if (apiserv->t_async_read) {
- thread_cancel(apiserv->t_async_read);
- }
+ thread_cancel(&apiserv->t_async_read);
#endif /* USE_ASYNC_READ */
- if (apiserv->t_sync_write) {
- thread_cancel(apiserv->t_sync_write);
- }
-
- if (apiserv->t_async_write) {
- thread_cancel(apiserv->t_async_write);
- }
+ thread_cancel(&apiserv->t_sync_write);
+ thread_cancel(&apiserv->t_async_write);
/* Unregister all opaque types that application registered
and flush opaque LSAs if still in LSDB. */
diff --git a/ospfd/ospf_ext.c b/ospfd/ospf_ext.c
index 104248694d..4fa61221a6 100644
--- a/ospfd/ospf_ext.c
+++ b/ospfd/ospf_ext.c
@@ -462,6 +462,10 @@ static void set_rmt_itf_addr(struct ext_itf *exti, struct in_addr rmtif)
static void ospf_extended_lsa_delete(struct ext_itf *exti)
{
+ /* Avoid deleting LSA if Extended is not enable */
+ if (!OspfEXT.enabled)
+ return;
+
/* Process only Active Extended Prefix/Link LSA */
if (!CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_ACTIVE))
return;
@@ -755,16 +759,16 @@ static void ospf_ext_ism_change(struct ospf_interface *oi, int old_status)
if (oi->type == OSPF_IFTYPE_LOOPBACK) {
exti->stype = PREF_SID;
exti->type = OPAQUE_TYPE_EXTENDED_PREFIX_LSA;
- exti->flags = EXT_LPFLG_LSA_ACTIVE;
exti->instance = get_ext_pref_instance_value();
exti->area = oi->area;
- osr_debug("EXT (%s): Set Prefix SID to interface %s ",
- __func__, oi->ifp->name);
-
/* Complete SRDB if the interface belongs to a Prefix */
- if (OspfEXT.enabled)
+ if (OspfEXT.enabled) {
+ osr_debug("EXT (%s): Set Prefix SID to interface %s ",
+ __func__, oi->ifp->name);
+ exti->flags = EXT_LPFLG_LSA_ACTIVE;
ospf_sr_update_local_prefix(oi->ifp, oi->address);
+ }
} else {
/* Determine if interface is related to Adj. or LAN Adj. SID */
if (oi->state == ISM_DR)
@@ -780,9 +784,11 @@ static void ospf_ext_ism_change(struct ospf_interface *oi, int old_status)
* Note: Adjacency SID information are completed when ospf
* adjacency become up see ospf_ext_link_nsm_change()
*/
- osr_debug("EXT (%s): Set %sAdjacency SID for interface %s ",
- __func__, exti->stype == ADJ_SID ? "" : "LAN-",
- oi->ifp->name);
+ if (OspfEXT.enabled)
+ osr_debug(
+ "EXT (%s): Set %sAdjacency SID for interface %s ",
+ __func__, exti->stype == ADJ_SID ? "" : "LAN-",
+ oi->ifp->name);
}
}
@@ -817,7 +823,8 @@ static void ospf_ext_link_nsm_change(struct ospf_neighbor *nbr, int old_status)
}
/* Remove Extended Link if Neighbor State goes Down or Deleted */
- if (nbr->state == NSM_Down || nbr->state == NSM_Deleted) {
+ if (OspfEXT.enabled
+ && (nbr->state == NSM_Down || nbr->state == NSM_Deleted)) {
ospf_ext_link_delete_adj_sid(exti);
if (CHECK_FLAG(exti->flags, EXT_LPFLG_LSA_ENGAGED))
ospf_ext_link_lsa_schedule(exti, FLUSH_THIS_LSA);
diff --git a/ospfd/ospf_ism.h b/ospfd/ospf_ism.h
index 67ea4c4684..c41ba6c843 100644
--- a/ospfd/ospf_ism.h
+++ b/ospfd/ospf_ism.h
@@ -79,13 +79,7 @@
} while (0)
/* Macro for OSPF ISM timer turn off. */
-#define OSPF_ISM_TIMER_OFF(X) \
- do { \
- if (X) { \
- thread_cancel(X); \
- (X) = NULL; \
- } \
- } while (0)
+#define OSPF_ISM_TIMER_OFF(X) thread_cancel(&(X))
/* Macro for OSPF schedule event. */
#define OSPF_ISM_EVENT_SCHEDULE(I, E) \
diff --git a/ospfd/ospf_ldp_sync.c b/ospfd/ospf_ldp_sync.c
index 96fa04b588..68792ebcc2 100644
--- a/ospfd/ospf_ldp_sync.c
+++ b/ospfd/ospf_ldp_sync.c
@@ -99,8 +99,7 @@ int ospf_ldp_sync_announce_update(struct ldp_igp_sync_announce announce)
FOR_ALL_INTERFACES (vrf, ifp)
ospf_ldp_sync_if_start(ifp, true);
- THREAD_TIMER_OFF(ospf->ldp_sync_cmd.t_hello);
- ospf->ldp_sync_cmd.t_hello = NULL;
+ THREAD_OFF(ospf->ldp_sync_cmd.t_hello);
ospf->ldp_sync_cmd.sequence = 0;
ospf_ldp_sync_hello_timer_add(ospf);
@@ -140,7 +139,7 @@ int ospf_ldp_sync_hello_update(struct ldp_igp_sync_hello hello)
FOR_ALL_INTERFACES (vrf, ifp)
ospf_ldp_sync_if_start(ifp, true);
} else {
- THREAD_TIMER_OFF(ospf->ldp_sync_cmd.t_hello);
+ THREAD_OFF(ospf->ldp_sync_cmd.t_hello);
ospf_ldp_sync_hello_timer_add(ospf);
}
ospf->ldp_sync_cmd.sequence = hello.sequence;
@@ -249,8 +248,7 @@ void ospf_ldp_sync_if_complete(struct interface *ifp)
if (ldp_sync_info && ldp_sync_info->enabled == LDP_IGP_SYNC_ENABLED) {
if (ldp_sync_info->state == LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP)
ldp_sync_info->state = LDP_IGP_SYNC_STATE_REQUIRED_UP;
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
- ldp_sync_info->t_holddown = NULL;
+ THREAD_OFF(ldp_sync_info->t_holddown);
ospf_if_recalculate_output_cost(ifp);
}
}
@@ -274,7 +272,7 @@ void ospf_ldp_sync_ldp_fail(struct interface *ifp)
if (ldp_sync_info &&
ldp_sync_info->enabled == LDP_IGP_SYNC_ENABLED &&
ldp_sync_info->state != LDP_IGP_SYNC_STATE_NOT_REQUIRED) {
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
+ THREAD_OFF(ldp_sync_info->t_holddown);
ldp_sync_info->state = LDP_IGP_SYNC_STATE_REQUIRED_NOT_UP;
ospf_if_recalculate_output_cost(ifp);
}
@@ -337,7 +335,9 @@ void ospf_ldp_sync_if_remove(struct interface *ifp, bool remove)
* restore cost
*/
ols_debug("ldp_sync: Removed from if %s", ifp->name);
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
+
+ THREAD_OFF(ldp_sync_info->t_holddown);
+
ldp_sync_info->state = LDP_IGP_SYNC_STATE_NOT_REQUIRED;
ospf_if_recalculate_output_cost(ifp);
if (!CHECK_FLAG(ldp_sync_info->flags, LDP_SYNC_FLAG_IF_CONFIG))
@@ -386,7 +386,6 @@ static int ospf_ldp_sync_holddown_timer(struct thread *thread)
ldp_sync_info = params->ldp_sync_info;
ldp_sync_info->state = LDP_IGP_SYNC_STATE_REQUIRED_UP;
- ldp_sync_info->t_holddown = NULL;
ols_debug("ldp_sync: holddown timer expired for %s state: %s",
ifp->name, "Sync achieved");
@@ -436,7 +435,6 @@ static int ospf_ldp_sync_hello_timer(struct thread *thread)
*/
ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT);
if (ospf) {
- ospf->ldp_sync_cmd.t_hello = NULL;
vrf = vrf_lookup_by_id(ospf->vrf_id);
FOR_ALL_INTERFACES (vrf, ifp)
@@ -486,8 +484,8 @@ void ospf_ldp_sync_gbl_exit(struct ospf *ospf, bool remove)
UNSET_FLAG(ospf->ldp_sync_cmd.flags, LDP_SYNC_FLAG_ENABLE);
UNSET_FLAG(ospf->ldp_sync_cmd.flags, LDP_SYNC_FLAG_HOLDDOWN);
ospf->ldp_sync_cmd.holddown = LDP_IGP_SYNC_HOLDDOWN_DEFAULT;
- THREAD_TIMER_OFF(ospf->ldp_sync_cmd.t_hello);
- ospf->ldp_sync_cmd.t_hello = NULL;
+
+ THREAD_OFF(ospf->ldp_sync_cmd.t_hello);
/* turn off LDP-IGP Sync on all OSPF interfaces */
vrf = vrf_lookup_by_id(ospf->vrf_id);
@@ -980,8 +978,7 @@ DEFPY (no_mpls_ldp_sync,
SET_FLAG(ldp_sync_info->flags, LDP_SYNC_FLAG_IF_CONFIG);
ldp_sync_info->enabled = LDP_IGP_SYNC_DEFAULT;
ldp_sync_info->state = LDP_IGP_SYNC_STATE_NOT_REQUIRED;
- THREAD_TIMER_OFF(ldp_sync_info->t_holddown);
- ldp_sync_info->t_holddown = NULL;
+ THREAD_OFF(ldp_sync_info->t_holddown);
ospf_if_recalculate_output_cost(ifp);
return CMD_SUCCESS;
diff --git a/ospfd/ospf_nsm.h b/ospfd/ospf_nsm.h
index c219ba7386..24cf05009c 100644
--- a/ospfd/ospf_nsm.h
+++ b/ospfd/ospf_nsm.h
@@ -59,13 +59,7 @@
#define OSPF_NSM_TIMER_ON(T,F,V) thread_add_timer (master, (F), nbr, (V), &(T))
/* Macro for OSPF NSM timer turn off. */
-#define OSPF_NSM_TIMER_OFF(X) \
- do { \
- if (X) { \
- thread_cancel(X); \
- (X) = NULL; \
- } \
- } while (0)
+#define OSPF_NSM_TIMER_OFF(X) thread_cancel(&(X))
/* Macro for OSPF NSM schedule event. */
#define OSPF_NSM_EVENT_SCHEDULE(N, E) \
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 8cb0062ea4..ef39b6c2f6 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -468,11 +468,7 @@ static int ospf_ls_req_timer(struct thread *thread)
void ospf_ls_req_event(struct ospf_neighbor *nbr)
{
- if (nbr->t_ls_req) {
- thread_cancel(nbr->t_ls_req);
- nbr->t_ls_req = NULL;
- }
- nbr->t_ls_req = NULL;
+ thread_cancel(&nbr->t_ls_req);
thread_add_event(master, ospf_ls_req_timer, nbr, 0, &nbr->t_ls_req);
}
diff --git a/ospfd/ospf_sr.c b/ospfd/ospf_sr.c
index 4e32732c86..e2218957d2 100644
--- a/ospfd/ospf_sr.c
+++ b/ospfd/ospf_sr.c
@@ -516,10 +516,13 @@ static int ospf_sr_start(struct ospf *ospf)
static void ospf_sr_stop(void)
{
+ if (OspfSR.status == SR_OFF)
+ return;
+
osr_debug("SR (%s): Stop Segment Routing", __func__);
/* Disable any re-attempt to connect to Label Manager */
- THREAD_TIMER_OFF(OspfSR.t_start_lm);
+ THREAD_OFF(OspfSR.t_start_lm);
/* Release SRGB & SRLB if active. */
if (OspfSR.srgb.reserved)
@@ -1883,7 +1886,8 @@ void ospf_sr_update_task(struct ospf *ospf)
struct timeval start_time, stop_time;
- if (ospf == NULL)
+ /* Check ospf and SR status */
+ if ((ospf == NULL) || (OspfSR.status != SR_UP))
return;
monotime(&start_time);
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index ce3bc33c1a..3718f82c05 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -1324,10 +1324,7 @@ void ospf_ls_upd_queue_empty(struct ospf_interface *oi)
}
/* remove update event */
- if (oi->t_ls_upd_event) {
- thread_cancel(oi->t_ls_upd_event);
- oi->t_ls_upd_event = NULL;
- }
+ thread_cancel(&oi->t_ls_upd_event);
}
void ospf_if_update(struct ospf *ospf, struct interface *ifp)
@@ -2158,7 +2155,7 @@ static int ospf_vrf_disable(struct vrf *vrf)
if (IS_DEBUG_OSPF_EVENT)
zlog_debug("%s: ospf old_vrf_id %d unlinked", __func__,
old_vrf_id);
- thread_cancel(ospf->t_read);
+ thread_cancel(&ospf->t_read);
close(ospf->fd);
ospf->fd = -1;
}
diff --git a/ospfd/ospfd.h b/ospfd/ospfd.h
index 5009355d48..5535cb40ab 100644
--- a/ospfd/ospfd.h
+++ b/ospfd/ospfd.h
@@ -535,13 +535,7 @@ struct ospf_nbr_nbma {
#define OSPF_AREA_TIMER_ON(T,F,V) thread_add_timer (master, (F), area, (V), &(T))
#define OSPF_POLL_TIMER_ON(T,F,V) thread_add_timer (master, (F), nbr_nbma, (V), &(T))
#define OSPF_POLL_TIMER_OFF(X) OSPF_TIMER_OFF((X))
-#define OSPF_TIMER_OFF(X) \
- do { \
- if (X) { \
- thread_cancel(X); \
- (X) = NULL; \
- } \
- } while (0)
+#define OSPF_TIMER_OFF(X) thread_cancel(&(X))
/* Extern variables. */
extern struct ospf_master *om;
diff --git a/pbrd/pbr_zebra.c b/pbrd/pbr_zebra.c
index b8ee974635..697c65ca45 100644
--- a/pbrd/pbr_zebra.c
+++ b/pbrd/pbr_zebra.c
@@ -408,10 +408,10 @@ static int pbr_zebra_nexthop_update(ZAPI_CALLBACK_ARGS)
for (i = 0; i < nhr.nexthop_num; i++) {
DEBUGD(&pbr_dbg_zebra,
- "%s: \tType: %d: vrf: %d, ifindex: %d gate: %s",
+ "%s: \tType: %d: vrf: %d, ifindex: %d gate: %pI4",
__func__, nhr.nexthops[i].type,
nhr.nexthops[i].vrf_id, nhr.nexthops[i].ifindex,
- inet_ntoa(nhr.nexthops[i].gate.ipv4));
+ &nhr.nexthops[i].gate.ipv4);
}
}
diff --git a/pimd/pim_msdp.h b/pimd/pim_msdp.h
index 6caa3181e7..15a1041e21 100644
--- a/pimd/pim_msdp.h
+++ b/pimd/pim_msdp.h
@@ -208,8 +208,8 @@ struct pim_msdp {
thread_add_write(mp->pim->msdp.master, pim_msdp_write, mp, mp->fd, \
&mp->t_write)
-#define PIM_MSDP_PEER_READ_OFF(mp) THREAD_READ_OFF(mp->t_read)
-#define PIM_MSDP_PEER_WRITE_OFF(mp) THREAD_WRITE_OFF(mp->t_write)
+#define PIM_MSDP_PEER_READ_OFF(mp) thread_cancel(&mp->t_read)
+#define PIM_MSDP_PEER_WRITE_OFF(mp) thread_cancel(&mp->t_write)
// struct pim_msdp *msdp;
struct pim_instance;
diff --git a/pimd/pim_neighbor.c b/pimd/pim_neighbor.c
index 4d6625bf6f..167aa3c604 100644
--- a/pimd/pim_neighbor.c
+++ b/pimd/pim_neighbor.c
@@ -294,7 +294,7 @@ static int on_neighbor_jp_timer(struct thread *t)
static void pim_neighbor_start_jp_timer(struct pim_neighbor *neigh)
{
- THREAD_TIMER_OFF(neigh->jp_timer);
+ THREAD_OFF(neigh->jp_timer);
thread_add_timer(router->master, on_neighbor_jp_timer, neigh,
router->t_periodic, &neigh->jp_timer);
}
diff --git a/pimd/pim_upstream.c b/pimd/pim_upstream.c
index 6bb25c436a..d95b092d94 100644
--- a/pimd/pim_upstream.c
+++ b/pimd/pim_upstream.c
@@ -1768,7 +1768,7 @@ void pim_upstream_start_register_stop_timer(struct pim_upstream *up,
{
uint32_t time;
- THREAD_TIMER_OFF(up->t_rs_timer);
+ THREAD_OFF(up->t_rs_timer);
if (!null_register) {
uint32_t lower = (0.5 * PIM_REGISTER_SUPPRESSION_PERIOD);
diff --git a/ripd/rip_interface.c b/ripd/rip_interface.c
index c2cee4d69d..c601ab4047 100644
--- a/ripd/rip_interface.c
+++ b/ripd/rip_interface.c
@@ -468,10 +468,7 @@ static void rip_interface_clean(struct rip_interface *ri)
ri->enable_interface = 0;
ri->running = 0;
- if (ri->t_wakeup) {
- thread_cancel(ri->t_wakeup);
- ri->t_wakeup = NULL;
- }
+ thread_cancel(&ri->t_wakeup);
}
void rip_interfaces_clean(struct rip *rip)
diff --git a/ripd/rip_peer.c b/ripd/rip_peer.c
index 4c5233c82c..23599f0877 100644
--- a/ripd/rip_peer.c
+++ b/ripd/rip_peer.c
@@ -86,8 +86,7 @@ static struct rip_peer *rip_peer_get(struct rip *rip, struct in_addr *addr)
peer = rip_peer_lookup(rip, addr);
if (peer) {
- if (peer->t_timeout)
- thread_cancel(peer->t_timeout);
+ thread_cancel(&peer->t_timeout);
} else {
peer = rip_peer_new();
peer->rip = rip;
diff --git a/ripd/ripd.c b/ripd/ripd.c
index 07f24b5a99..059a0e2efd 100644
--- a/ripd/ripd.c
+++ b/ripd/ripd.c
@@ -3596,7 +3596,7 @@ static void rip_instance_disable(struct rip *rip)
RIP_TIMER_OFF(rip->t_triggered_interval);
/* Cancel read thread. */
- THREAD_READ_OFF(rip->t_read);
+ thread_cancel(&rip->t_read);
/* Close RIP socket. */
close(rip->sock);
diff --git a/ripd/ripd.h b/ripd/ripd.h
index 417bd5b3b1..99718f7b9e 100644
--- a/ripd/ripd.h
+++ b/ripd/ripd.h
@@ -405,7 +405,7 @@ enum rip_event {
#define RIP_TIMER_ON(T,F,V) thread_add_timer (master, (F), rinfo, (V), &(T))
/* Macro for timer turn off. */
-#define RIP_TIMER_OFF(X) THREAD_TIMER_OFF(X)
+#define RIP_TIMER_OFF(X) thread_cancel(&(X))
#define RIP_OFFSET_LIST_IN 0
#define RIP_OFFSET_LIST_OUT 1
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index 16859c2d29..115d7a6b99 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -321,10 +321,7 @@ void ripng_interface_clean(struct ripng *ripng)
ri->enable_interface = 0;
ri->running = 0;
- if (ri->t_wakeup) {
- thread_cancel(ri->t_wakeup);
- ri->t_wakeup = NULL;
- }
+ thread_cancel(&ri->t_wakeup);
}
}
diff --git a/ripngd/ripng_peer.c b/ripngd/ripng_peer.c
index e6ff58dd0c..0ac489c67e 100644
--- a/ripngd/ripng_peer.c
+++ b/ripngd/ripng_peer.c
@@ -95,8 +95,7 @@ static struct ripng_peer *ripng_peer_get(struct ripng *ripng,
peer = ripng_peer_lookup(ripng, addr);
if (peer) {
- if (peer->t_timeout)
- thread_cancel(peer->t_timeout);
+ thread_cancel(&peer->t_timeout);
} else {
peer = ripng_peer_new();
peer->ripng = ripng;
@@ -105,7 +104,6 @@ static struct ripng_peer *ripng_peer_get(struct ripng *ripng,
}
/* Update timeout thread. */
- peer->t_timeout = NULL;
thread_add_timer(master, ripng_peer_timeout, peer,
RIPNG_PEER_TIMER_DEFAULT, &peer->t_timeout);
diff --git a/ripngd/ripngd.c b/ripngd/ripngd.c
index 060477010b..8d9249e4ae 100644
--- a/ripngd/ripngd.c
+++ b/ripngd/ripngd.c
@@ -1463,10 +1463,7 @@ static int ripng_update(struct thread *t)
/* Triggered updates may be suppressed if a regular update is due by
the time the triggered update would be sent. */
- if (ripng->t_triggered_interval) {
- thread_cancel(ripng->t_triggered_interval);
- ripng->t_triggered_interval = NULL;
- }
+ thread_cancel(&ripng->t_triggered_interval);
ripng->trigger = 0;
/* Reset flush event. */
@@ -1500,10 +1497,7 @@ int ripng_triggered_update(struct thread *t)
ripng->t_triggered_update = NULL;
/* Cancel interval timer. */
- if (ripng->t_triggered_interval) {
- thread_cancel(ripng->t_triggered_interval);
- ripng->t_triggered_interval = NULL;
- }
+ thread_cancel(&ripng->t_triggered_interval);
ripng->trigger = 0;
/* Logging triggered update. */
@@ -1952,10 +1946,8 @@ void ripng_event(struct ripng *ripng, enum ripng_event event, int sock)
&ripng->t_read);
break;
case RIPNG_UPDATE_EVENT:
- if (ripng->t_update) {
- thread_cancel(ripng->t_update);
- ripng->t_update = NULL;
- }
+ thread_cancel(&ripng->t_update);
+
/* Update timer jitter. */
jitter = ripng_update_jitter(ripng->update_time);
@@ -2719,10 +2711,7 @@ static void ripng_instance_disable(struct ripng *ripng)
RIPNG_TIMER_OFF(ripng->t_triggered_interval);
/* Cancel the read thread */
- if (ripng->t_read) {
- thread_cancel(ripng->t_read);
- ripng->t_read = NULL;
- }
+ thread_cancel(&ripng->t_read);
/* Close the RIPng socket */
if (ripng->sock >= 0) {
diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h
index 70508d5cb0..a42c32ebb7 100644
--- a/ripngd/ripngd.h
+++ b/ripngd/ripngd.h
@@ -351,13 +351,7 @@ enum ripng_event {
/* RIPng timer on/off macro. */
#define RIPNG_TIMER_ON(T,F,V) thread_add_timer (master, (F), rinfo, (V), &(T))
-#define RIPNG_TIMER_OFF(T) \
- do { \
- if (T) { \
- thread_cancel(T); \
- (T) = NULL; \
- } \
- } while (0)
+#define RIPNG_TIMER_OFF(T) thread_cancel(&(T))
#define RIPNG_OFFSET_LIST_IN 0
#define RIPNG_OFFSET_LIST_OUT 1
diff --git a/tests/isisd/test_isis_spf.c b/tests/isisd/test_isis_spf.c
index 7ac8611bd9..4c89a5be0a 100644
--- a/tests/isisd/test_isis_spf.c
+++ b/tests/isisd/test_isis_spf.c
@@ -66,7 +66,7 @@ static void test_run_spf(struct vty *vty, const struct isis_topology *topology,
/* Print the SPT and the corresponding routing table. */
isis_print_spftree(vty, spftree);
- isis_print_routes(vty, spftree, false);
+ isis_print_routes(vty, spftree, false, false);
/* Cleanup SPF tree. */
isis_spftree_del(spftree);
@@ -122,7 +122,7 @@ static void test_run_ti_lfa(struct vty *vty,
/* Print the post-convergence SPT and the correspoding routing table. */
isis_print_spftree(vty, spftree_pc);
- isis_print_routes(vty, spftree_self, true);
+ isis_print_routes(vty, spftree_self, false, true);
/* Cleanup everything. */
isis_spftree_del(spftree_self);
diff --git a/tests/isisd/test_isis_spf.refout b/tests/isisd/test_isis_spf.refout
index ea7cc14d7a..d24176a097 100644
--- a/tests/isisd/test_isis_spf.refout
+++ b/tests/isisd/test_isis_spf.refout
@@ -18,14 +18,15 @@ rt6 TE-IS 30 rt2 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 40 - rt2 -
- - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 40 - rt2 16060
+ - rt3 16060
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@@ -46,14 +47,15 @@ rt6 TE-IS 30 rt2 - rt4(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 20 - rt2 -
- 2001:db8::3/128 20 - rt3 -
- 2001:db8::4/128 30 - rt2 -
- 2001:db8::5/128 30 - rt3 -
- 2001:db8::6/128 40 - rt2 -
- - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 2001:db8::1/128 0 - - -
+ 2001:db8::2/128 20 - rt2 implicit-null
+ 2001:db8::3/128 20 - rt3 implicit-null
+ 2001:db8::4/128 30 - rt2 16041
+ 2001:db8::5/128 30 - rt3 16051
+ 2001:db8::6/128 40 - rt2 16061
+ - rt3 16061
test# test isis topology 2 root rt1 spf
IS-IS paths to level-1 routers that speak IP
@@ -76,14 +78,15 @@ rt3 TE-IS 30 rt3 - rt1(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 25 - rt2 -
- 10.0.255.3/32 40 - rt3 -
- 10.0.255.4/32 20 - rt4 -
- 10.0.255.5/32 20 - rt5 -
- 10.0.255.6/32 30 - rt4 -
- - rt5 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 25 - rt2 implicit-null
+ 10.0.255.3/32 40 - rt3 implicit-null
+ 10.0.255.4/32 20 - rt4 implicit-null
+ 10.0.255.5/32 20 - rt5 implicit-null
+ 10.0.255.6/32 30 - rt4 16060
+ - rt5 16060
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@@ -105,14 +108,15 @@ rt3 TE-IS 30 rt3 - rt1(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 25 - rt2 -
- 2001:db8::3/128 40 - rt3 -
- 2001:db8::4/128 20 - rt4 -
- 2001:db8::5/128 20 - rt5 -
- 2001:db8::6/128 30 - rt4 -
- - rt5 -
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 2001:db8::1/128 0 - - -
+ 2001:db8::2/128 25 - rt2 implicit-null
+ 2001:db8::3/128 40 - rt3 implicit-null
+ 2001:db8::4/128 20 - rt4 implicit-null
+ 2001:db8::5/128 20 - rt5 implicit-null
+ 2001:db8::6/128 30 - rt4 16061
+ - rt5 16061
test# test isis topology 3 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -132,13 +136,14 @@ rt6 TE-IS 30 rt2 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 40 - rt2 -
- 10.0.255.6/32 40 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 40 - rt2 16050
+ 10.0.255.6/32 40 - rt2 16060
test# test isis topology 4 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -162,15 +167,16 @@ rt8 TE-IS 40 rt2 - rt6(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 40 - rt2 -
- 10.0.255.7/32 40 - rt3 -
- 10.0.255.8/32 50 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 40 - rt2 16060
+ 10.0.255.7/32 40 - rt3 16070
+ 10.0.255.8/32 50 - rt2 16080
test# test isis topology 5 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -196,16 +202,17 @@ rt8 TE-IS 40 rt2 - rt6(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 40 - rt2 -
- 10.0.255.7/32 40 - rt3 -
- 10.0.255.8/32 50 - rt2 -
- - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 40 - rt2 16060
+ 10.0.255.7/32 40 - rt3 16070
+ 10.0.255.8/32 50 - rt2 16080
+ - rt3 16080
test# test isis topology 6 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -239,20 +246,21 @@ rt7 TE-IS 50 rt2 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- - rt3 -
- 10.0.255.5/32 50 - rt2 -
- - rt3 -
- 10.0.255.6/32 40 - rt2 -
- - rt3 -
- 10.0.255.7/32 60 - rt2 -
- - rt3 -
- 10.0.255.8/32 50 - rt2 -
- - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ - rt3 16040
+ 10.0.255.5/32 50 - rt2 16050
+ - rt3 16050
+ 10.0.255.6/32 40 - rt2 16060
+ - rt3 16060
+ 10.0.255.7/32 60 - rt2 16070
+ - rt3 16070
+ 10.0.255.8/32 50 - rt2 16080
+ - rt3 16080
test# test isis topology 7 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -287,19 +295,20 @@ rt12 TE-IS 50 rt4 - rt9(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- ------------------------------------------------------
- 10.0.255.2/32 40 - rt4 -
- 10.0.255.3/32 50 - rt4 -
- 10.0.255.4/32 20 - rt4 -
- 10.0.255.5/32 30 - rt4 -
- 10.0.255.6/32 40 - rt4 -
- 10.0.255.7/32 30 - rt4 -
- 10.0.255.8/32 40 - rt4 -
- 10.0.255.9/32 50 - rt4 -
- 10.0.255.10/32 50 - rt4 -
- 10.0.255.11/32 50 - rt4 -
- 10.0.255.12/32 60 - rt4 -
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 40 - rt4 16020
+ 10.0.255.3/32 50 - rt4 16030
+ 10.0.255.4/32 20 - rt4 implicit-null
+ 10.0.255.5/32 30 - rt4 16050
+ 10.0.255.6/32 40 - rt4 16060
+ 10.0.255.7/32 30 - rt4 16070
+ 10.0.255.8/32 40 - rt4 16080
+ 10.0.255.9/32 50 - rt4 16090
+ 10.0.255.10/32 50 - rt4 16100
+ 10.0.255.11/32 50 - rt4 16110
+ 10.0.255.12/32 60 - rt4 16120
test# test isis topology 8 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -333,19 +342,20 @@ rt12 TE-IS 50 rt2 - rt9(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- ------------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 30 - rt2 -
- 10.0.255.4/32 20 - rt4 -
- 10.0.255.5/32 30 - rt2 -
- 10.0.255.6/32 40 - rt2 -
- 10.0.255.7/32 30 - rt4 -
- 10.0.255.8/32 40 - rt2 -
- 10.0.255.9/32 50 - rt2 -
- 10.0.255.10/32 40 - rt4 -
- 10.0.255.11/32 50 - rt2 -
- 10.0.255.12/32 60 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 30 - rt2 16030
+ 10.0.255.4/32 20 - rt4 implicit-null
+ 10.0.255.5/32 30 - rt2 16050
+ 10.0.255.6/32 40 - rt2 16060
+ 10.0.255.7/32 30 - rt4 16070
+ 10.0.255.8/32 40 - rt2 16080
+ 10.0.255.9/32 50 - rt2 16090
+ 10.0.255.10/32 40 - rt4 16100
+ 10.0.255.11/32 50 - rt2 16110
+ 10.0.255.12/32 60 - rt2 16120
test# test isis topology 9 root rt1 spf
IS-IS paths to level-1 routers that speak IP
@@ -374,16 +384,17 @@ rt8 TE-IS 50 rt2 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 40 - rt2 -
- 10.0.255.6/32 60 - rt2 -
- 10.0.255.7/32 60 - rt2 -
- 10.0.255.8/32 60 - rt2 -
- 10.0.255.9/32 50 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 40 - rt2 16050
+ 10.0.255.6/32 60 - rt2 16060
+ 10.0.255.7/32 60 - rt2 16070
+ 10.0.255.8/32 60 - rt2 16080
+ 10.0.255.9/32 50 - rt2 16090
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@@ -411,16 +422,17 @@ rt8 TE-IS 50 rt2 - rt4(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 20 - rt2 -
- 2001:db8::3/128 20 - rt3 -
- 2001:db8::4/128 30 - rt2 -
- 2001:db8::5/128 40 - rt2 -
- 2001:db8::6/128 60 - rt2 -
- 2001:db8::7/128 60 - rt2 -
- 2001:db8::8/128 60 - rt2 -
- 2001:db8::9/128 50 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 2001:db8::1/128 0 - - -
+ 2001:db8::2/128 20 - rt2 implicit-null
+ 2001:db8::3/128 20 - rt3 implicit-null
+ 2001:db8::4/128 30 - rt2 16041
+ 2001:db8::5/128 40 - rt2 16051
+ 2001:db8::6/128 60 - rt2 16061
+ 2001:db8::7/128 60 - rt2 16071
+ 2001:db8::8/128 60 - rt2 16081
+ 2001:db8::9/128 50 - rt2 16091
test# test isis topology 10 root rt1 spf
IS-IS paths to level-1 routers that speak IP
@@ -444,15 +456,16 @@ rt8 TE-IS 30 rt2 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 30 - rt3 -
- 10.0.255.4/32 30 - rt4 -
- 10.0.255.5/32 30 - rt2 -
- 10.0.255.6/32 40 - rt3 -
- 10.0.255.7/32 40 - rt4 -
- 10.0.255.8/32 40 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 30 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt4 implicit-null
+ 10.0.255.5/32 30 - rt2 16050
+ 10.0.255.6/32 40 - rt3 20060
+ 10.0.255.7/32 40 - rt4 16070
+ 10.0.255.8/32 40 - rt2 16080
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@@ -475,15 +488,16 @@ rt8 TE-IS 30 rt2 - rt5(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 20 - rt2 -
- 2001:db8::3/128 30 - rt3 -
- 2001:db8::4/128 30 - rt4 -
- 2001:db8::5/128 30 - rt2 -
- 2001:db8::6/128 40 - rt3 -
- 2001:db8::7/128 40 - rt4 -
- 2001:db8::8/128 40 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 2001:db8::1/128 0 - - -
+ 2001:db8::2/128 20 - rt2 implicit-null
+ 2001:db8::3/128 30 - rt3 implicit-null
+ 2001:db8::4/128 30 - rt4 implicit-null
+ 2001:db8::5/128 30 - rt2 16051
+ 2001:db8::6/128 40 - rt3 20061
+ 2001:db8::7/128 40 - rt4 16071
+ 2001:db8::8/128 40 - rt2 16081
test# test isis topology 11 root rt1 spf
IS-IS paths to level-1 routers that speak IP
@@ -506,14 +520,15 @@ rt6 TE-IS 30 rt2 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 40 - rt2 -
- - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 40 - rt2 16060
+ - rt3 16060
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@@ -535,14 +550,15 @@ rt6 TE-IS 30 rt2 - rt4(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 20 - rt2 -
- 2001:db8::3/128 20 - rt3 -
- 2001:db8::4/128 30 - rt2 -
- 2001:db8::5/128 30 - rt3 -
- 2001:db8::6/128 40 - rt2 -
- - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 2001:db8::1/128 0 - - -
+ 2001:db8::2/128 20 - rt2 implicit-null
+ 2001:db8::3/128 20 - rt3 implicit-null
+ 2001:db8::4/128 30 - rt2 16041
+ 2001:db8::5/128 30 - rt3 16051
+ 2001:db8::6/128 40 - rt2 16061
+ - rt3 16061
test# test isis topology 12 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -570,17 +586,18 @@ rt10 TE-IS 50 rt2 - rt8(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- ------------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 40 - rt2 -
- 10.0.255.7/32 40 - rt3 -
- 10.0.255.8/32 50 - rt2 -
- 10.0.255.9/32 50 - rt3 -
- 10.0.255.10/32 60 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 40 - rt2 16060
+ 10.0.255.7/32 40 - rt3 16070
+ 10.0.255.8/32 50 - rt2 16080
+ 10.0.255.9/32 50 - rt3 16090
+ 10.0.255.10/32 60 - rt2 16100
test# test isis topology 13 root rt1 spf ipv4-only
IS-IS paths to level-1 routers that speak IP
@@ -605,15 +622,16 @@ rt7 TE-IS 30 rt3 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- - rt3 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 30 - rt3 -
- 10.0.255.7/32 40 - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ - rt3 16040
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 30 - rt3 16060
+ 10.0.255.7/32 40 - rt3 16070
test#
test# test isis topology 4 root rt1 reverse-spf ipv4-only
@@ -638,15 +656,16 @@ rt8 TE-IS 40 rt2 - rt6(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 20 - rt2 -
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.4/32 30 - rt2 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 40 - rt2 -
- 10.0.255.7/32 40 - rt3 -
- 10.0.255.8/32 50 - rt2 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.2/32 20 - rt2 implicit-null
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.4/32 30 - rt2 16040
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 40 - rt2 16060
+ 10.0.255.7/32 40 - rt3 16070
+ 10.0.255.8/32 50 - rt2 16080
test# test isis topology 11 root rt1 reverse-spf
IS-IS paths to level-1 routers that speak IP
@@ -668,11 +687,12 @@ rt6 TE-IS 30 rt3 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.3/32 20 - rt3 -
- 10.0.255.5/32 30 - rt3 -
- 10.0.255.6/32 40 - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 0 - - -
+ 10.0.255.3/32 20 - rt3 implicit-null
+ 10.0.255.5/32 30 - rt3 16050
+ 10.0.255.6/32 40 - rt3 16060
IS-IS paths to level-1 routers that speak IPv6
Vertex Type Metric Next-Hop Interface Parent
@@ -693,11 +713,12 @@ rt6 TE-IS 30 rt3 - rt4(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::3/128 20 - rt3 -
- 2001:db8::5/128 30 - rt3 -
- 2001:db8::6/128 40 - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 2001:db8::1/128 0 - - -
+ 2001:db8::3/128 20 - rt3 implicit-null
+ 2001:db8::5/128 30 - rt3 16051
+ 2001:db8::6/128 40 - rt3 16061
test#
test# test isis topology 1 root rt1 ti-lfa system-id rt2
@@ -732,10 +753,10 @@ rt2 TE-IS 50 rt3 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 60 - rt3 16060
- 10.0.255.4/32 50 - rt3 16060
+ Prefix Metric Interface Nexthop Label(s)
+ --------------------------------------------------------
+ 10.0.255.2/32 60 - rt3 16060/16020
+ 10.0.255.4/32 50 - rt3 16060/16040
P-space (self):
rt3
@@ -768,10 +789,10 @@ rt2 TE-IS 50 rt3 - rt4(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 60 - rt3 16061
- 2001:db8::4/128 50 - rt3 16061
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 2001:db8::2/128 60 - rt3 16061/16021
+ 2001:db8::4/128 50 - rt3 16061/16041
test# test isis topology 2 root rt1 ti-lfa system-id rt3
P-space (self):
@@ -818,9 +839,9 @@ rt3 TE-IS 50 rt5 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.3/32 60 - rt5 16050/18
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.3/32 60 - rt5 16050/18/16030
P-space (self):
rt2
@@ -866,9 +887,9 @@ rt3 TE-IS 50 rt5 - rt5(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::3/128 60 - rt5 16051/19
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::3/128 60 - rt5 16051/19/16031
test# test isis topology 2 root rt1 ti-lfa system-id rt1 pseudonode-id 1
P-space (self):
@@ -906,11 +927,11 @@ rt5 TE-IS 65 rt2 - rt1(2)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.4/32 65 - rt2 16020/18
- 10.0.255.5/32 75 - rt2 16020/18
- 10.0.255.6/32 75 - rt2 16020/18
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.4/32 65 - rt2 16020/18/16040
+ 10.0.255.5/32 75 - rt2 16020/18/16050
+ 10.0.255.6/32 75 - rt2 16020/18/16060
P-space (self):
rt2
@@ -947,11 +968,11 @@ rt5 TE-IS 65 rt2 - rt1(2)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::4/128 65 - rt2 16021/19
- 2001:db8::5/128 75 - rt2 16021/19
- 2001:db8::6/128 75 - rt2 16021/19
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::4/128 65 - rt2 16021/19/16041
+ 2001:db8::5/128 75 - rt2 16021/19/16051
+ 2001:db8::6/128 75 - rt2 16021/19/16061
test# test isis topology 2 root rt5 ti-lfa system-id rt1 pseudonode-id 1
P-space (self):
@@ -992,11 +1013,11 @@ rt2 TE-IS 45 rt6 - rt1(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.1/32 40 - rt6 16040
- 10.0.255.2/32 55 - rt6 16040
- 10.0.255.4/32 30 - rt6 -
+ Prefix Metric Interface Nexthop Label(s)
+ --------------------------------------------------------
+ 10.0.255.1/32 40 - rt6 16040/16010
+ 10.0.255.2/32 55 - rt6 16040/16020
+ 10.0.255.4/32 30 - rt6 16040
P-space (self):
rt6
@@ -1036,11 +1057,11 @@ rt2 TE-IS 45 rt6 - rt1(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::1/128 40 - rt6 16041
- 2001:db8::2/128 55 - rt6 16041
- 2001:db8::4/128 30 - rt6 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 2001:db8::1/128 40 - rt6 16041/16011
+ 2001:db8::2/128 55 - rt6 16041/16021
+ 2001:db8::4/128 30 - rt6 16041
test# test isis topology 3 root rt5 ti-lfa system-id rt4 ipv4-only
P-space (self):
@@ -1088,10 +1109,10 @@ IS-IS L1 IPv4 routing table:
Prefix Metric Interface Nexthop Label(s)
-----------------------------------------------------
- 10.0.255.1/32 50 - rt3 -
- - rt6 -
- 10.0.255.2/32 40 - rt6 -
- 10.0.255.4/32 30 - rt6 -
+ 10.0.255.1/32 50 - rt3 16010
+ - rt6 16010
+ 10.0.255.2/32 40 - rt6 16020
+ 10.0.255.4/32 30 - rt6 16040
test# test isis topology 3 root rt5 ti-lfa system-id rt3 ipv4-only
P-space (self):
@@ -1176,12 +1197,12 @@ rt2 TE-IS 90 rt3 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 100 - rt3 16050/17
- 10.0.255.4/32 90 - rt3 16050/17
- 10.0.255.6/32 80 - rt3 16050/17
- 10.0.255.8/32 90 - rt3 16050/17
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.2/32 100 - rt3 16050/17/16020
+ 10.0.255.4/32 90 - rt3 16050/17/16040
+ 10.0.255.6/32 80 - rt3 16050/17/16060
+ 10.0.255.8/32 90 - rt3 16050/17/16080
test# test isis topology 4 root rt4 ti-lfa system-id rt6 ipv4-only
P-space (self):
@@ -1223,10 +1244,10 @@ rt8 TE-IS 100 rt2 - rt6(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.6/32 100 - rt2 16050/17
- 10.0.255.8/32 110 - rt2 16050/17
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.6/32 100 - rt2 16050/17/16060
+ 10.0.255.8/32 110 - rt2 16050/17/16080
test# test isis topology 5 root rt1 ti-lfa system-id rt2 ipv4-only
P-space (self):
@@ -1267,11 +1288,11 @@ rt2 TE-IS 70 rt3 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 80 - rt3 16080
- 10.0.255.4/32 70 - rt3 16080
- 10.0.255.6/32 60 - rt3 16080
+ Prefix Metric Interface Nexthop Label(s)
+ --------------------------------------------------------
+ 10.0.255.2/32 80 - rt3 16080/16020
+ 10.0.255.4/32 70 - rt3 16080/16040
+ 10.0.255.6/32 60 - rt3 16080/16060
test# test isis topology 6 root rt4 ti-lfa system-id rt3 ipv4-only
P-space (self):
@@ -1317,9 +1338,9 @@ rt7 TE-IS 30 rt6 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.3/32 40 - rt2 16010
+ Prefix Metric Interface Nexthop Label(s)
+ --------------------------------------------------------
+ 10.0.255.3/32 40 - rt2 16010/16030
test# test isis topology 7 root rt11 ti-lfa system-id rt8 ipv4-only
P-space (self):
@@ -1378,16 +1399,16 @@ rt3 TE-IS 60 rt12 - rt6(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.1/32 60 - rt10 -
- 10.0.255.2/32 60 - rt12 16090
- 10.0.255.3/32 70 - rt12 16090
- 10.0.255.4/32 50 - rt10 -
- 10.0.255.5/32 50 - rt12 16090
- 10.0.255.6/32 60 - rt12 16090
- 10.0.255.7/32 40 - rt10 -
- 10.0.255.8/32 40 - rt12 16090
+ Prefix Metric Interface Nexthop Label(s)
+ --------------------------------------------------------
+ 10.0.255.1/32 60 - rt10 16010
+ 10.0.255.2/32 60 - rt12 16090/16020
+ 10.0.255.3/32 70 - rt12 16090/16030
+ 10.0.255.4/32 50 - rt10 16040
+ 10.0.255.5/32 50 - rt12 16090/16050
+ 10.0.255.6/32 60 - rt12 16090/16060
+ 10.0.255.7/32 40 - rt10 16070
+ 10.0.255.8/32 40 - rt12 16090/16080
test# test isis topology 7 root rt6 ti-lfa system-id rt5 ipv4-only
P-space (self):
@@ -1458,19 +1479,19 @@ rt10 TE-IS 60 rt9 - rt11(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- ------------------------------------------------------
- 10.0.255.1/32 60 - rt3 16020
- 10.0.255.4/32 50 - rt3 16020
- 10.0.255.5/32 40 - rt3 16020
- 10.0.255.7/32 60 - rt9 -
- - rt3 -
- 10.0.255.8/32 50 - rt9 -
- - rt3 -
- 10.0.255.10/32 70 - rt9 -
- - rt3 -
- 10.0.255.11/32 60 - rt9 -
- - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ---------------------------------------------------------
+ 10.0.255.1/32 60 - rt3 16020/16010
+ 10.0.255.4/32 50 - rt3 16020/16040
+ 10.0.255.5/32 40 - rt3 16020/16050
+ 10.0.255.7/32 60 - rt9 16070
+ - rt3 16070
+ 10.0.255.8/32 50 - rt9 16080
+ - rt3 16080
+ 10.0.255.10/32 70 - rt9 16100
+ - rt3 16100
+ 10.0.255.11/32 60 - rt9 16110
+ - rt3 16110
test# test isis topology 8 root rt2 ti-lfa system-id rt1 ipv4-only
P-space (self):
@@ -1532,12 +1553,12 @@ rt1 TE-IS 90 rt5 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- ------------------------------------------------------
- 10.0.255.1/32 100 - rt5 16110/17
- 10.0.255.4/32 90 - rt5 16110/17
- 10.0.255.7/32 80 - rt5 16110/17
- 10.0.255.10/32 70 - rt5 16110/17
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 10.0.255.1/32 100 - rt5 16110/17/16010
+ 10.0.255.4/32 90 - rt5 16110/17/16040
+ 10.0.255.7/32 80 - rt5 16110/17/16070
+ 10.0.255.10/32 70 - rt5 16110/17/16100
test# test isis topology 8 root rt2 ti-lfa system-id rt5 ipv4-only
P-space (self):
@@ -1595,13 +1616,13 @@ rt12 TE-IS 60 rt3 - rt9(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- ------------------------------------------------------
- 10.0.255.5/32 40 - rt3 16060
- 10.0.255.8/32 50 - rt3 16060
- 10.0.255.9/32 60 - rt3 16060
- 10.0.255.11/32 60 - rt3 16060
- 10.0.255.12/32 70 - rt3 16060
+ Prefix Metric Interface Nexthop Label(s)
+ ---------------------------------------------------------
+ 10.0.255.5/32 40 - rt3 16060/16050
+ 10.0.255.8/32 50 - rt3 16060/16080
+ 10.0.255.9/32 60 - rt3 16060/16090
+ 10.0.255.11/32 60 - rt3 16060/16110
+ 10.0.255.12/32 70 - rt3 16060/16120
test# test isis topology 9 root rt1 ti-lfa system-id rt3
P-space (self):
@@ -1651,9 +1672,9 @@ rt3 TE-IS 120 rt2 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.3/32 130 - rt2 16040/18
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.3/32 130 - rt2 16040/18/16030
P-space (self):
rt2
@@ -1702,9 +1723,9 @@ rt3 TE-IS 120 rt2 - rt4(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::3/128 130 - rt2 16041/19
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::3/128 130 - rt2 16041/19/16031
test# test isis topology 9 root rt1 ti-lfa system-id rt2
P-space (self):
@@ -1748,15 +1769,15 @@ rt8 TE-IS 140 rt3 - rt4(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 130 - rt3 16030/18
- 10.0.255.4/32 120 - rt3 16030/18
- 10.0.255.5/32 130 - rt3 16030/18
- 10.0.255.6/32 150 - rt3 16030/18
- 10.0.255.7/32 150 - rt3 16030/18
- 10.0.255.8/32 150 - rt3 16030/18
- 10.0.255.9/32 140 - rt3 16030/18
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.2/32 130 - rt3 16030/18/16020
+ 10.0.255.4/32 120 - rt3 16030/18/16040
+ 10.0.255.5/32 130 - rt3 16030/18/16050
+ 10.0.255.6/32 150 - rt3 16030/18/16060
+ 10.0.255.7/32 150 - rt3 16030/18/16070
+ 10.0.255.8/32 150 - rt3 16030/18/16080
+ 10.0.255.9/32 140 - rt3 16030/18/16090
P-space (self):
rt3
@@ -1799,15 +1820,15 @@ rt8 TE-IS 140 rt3 - rt4(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 130 - rt3 16031/19
- 2001:db8::4/128 120 - rt3 16031/19
- 2001:db8::5/128 130 - rt3 16031/19
- 2001:db8::6/128 150 - rt3 16031/19
- 2001:db8::7/128 150 - rt3 16031/19
- 2001:db8::8/128 150 - rt3 16031/19
- 2001:db8::9/128 140 - rt3 16031/19
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::2/128 130 - rt3 16031/19/16021
+ 2001:db8::4/128 120 - rt3 16031/19/16041
+ 2001:db8::5/128 130 - rt3 16031/19/16051
+ 2001:db8::6/128 150 - rt3 16031/19/16061
+ 2001:db8::7/128 150 - rt3 16031/19/16071
+ 2001:db8::8/128 150 - rt3 16031/19/16081
+ 2001:db8::9/128 140 - rt3 16031/19/16091
test# test isis topology 9 root rt9 ti-lfa system-id rt5
P-space (self):
@@ -1874,23 +1895,23 @@ rt3 TE-IS 70 rt6 - rt1(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.1/32 70 - rt6 16060/16
- - rt7 16070/16
- - rt8 16080/16
- 10.0.255.2/32 60 - rt6 16060/16
- - rt7 16070/16
- - rt8 16080/16
- 10.0.255.3/32 80 - rt6 16060/16
- - rt7 16070/16
- - rt8 16080/16
- 10.0.255.4/32 50 - rt6 16060/16
- - rt7 16070/16
- - rt8 16080/16
- 10.0.255.5/32 60 - rt6 16060/16
- - rt7 16070/16
- - rt8 16080/16
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.1/32 70 - rt6 16060/16/16010
+ - rt7 16070/16/16010
+ - rt8 16080/16/16010
+ 10.0.255.2/32 60 - rt6 16060/16/16020
+ - rt7 16070/16/16020
+ - rt8 16080/16/16020
+ 10.0.255.3/32 80 - rt6 16060/16/16030
+ - rt7 16070/16/16030
+ - rt8 16080/16/16030
+ 10.0.255.4/32 50 - rt6 16060/16/16040
+ - rt7 16070/16/16040
+ - rt8 16080/16/16040
+ 10.0.255.5/32 60 - rt6 16060/16/16050
+ - rt7 16070/16/16050
+ - rt8 16080/16/16050
P-space (self):
rt6
@@ -1956,23 +1977,23 @@ rt3 TE-IS 70 rt6 - rt1(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::1/128 70 - rt6 16061/17
- - rt7 16071/17
- - rt8 16081/17
- 2001:db8::2/128 60 - rt6 16061/17
- - rt7 16071/17
- - rt8 16081/17
- 2001:db8::3/128 80 - rt6 16061/17
- - rt7 16071/17
- - rt8 16081/17
- 2001:db8::4/128 50 - rt6 16061/17
- - rt7 16071/17
- - rt8 16081/17
- 2001:db8::5/128 60 - rt6 16061/17
- - rt7 16071/17
- - rt8 16081/17
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::1/128 70 - rt6 16061/17/16011
+ - rt7 16071/17/16011
+ - rt8 16081/17/16011
+ 2001:db8::2/128 60 - rt6 16061/17/16021
+ - rt7 16071/17/16021
+ - rt8 16081/17/16021
+ 2001:db8::3/128 80 - rt6 16061/17/16031
+ - rt7 16071/17/16031
+ - rt8 16081/17/16031
+ 2001:db8::4/128 50 - rt6 16061/17/16041
+ - rt7 16071/17/16041
+ - rt8 16081/17/16041
+ 2001:db8::5/128 60 - rt6 16061/17/16051
+ - rt7 16071/17/16051
+ - rt8 16081/17/16051
test# test isis topology 9 root rt9 ti-lfa system-id rt8
P-space (self):
@@ -2023,9 +2044,9 @@ rt3 TE-IS 50 rt5 - rt1(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.8/32 60 - rt5 16040/26
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.8/32 60 - rt5 16040/26/16080
P-space (self):
rt1
@@ -2075,9 +2096,9 @@ rt3 TE-IS 50 rt5 - rt1(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::8/128 60 - rt5 16041/27
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::8/128 60 - rt5 16041/27/16081
test# test isis topology 10 root rt1 ti-lfa system-id rt2
P-space (self):
@@ -2126,14 +2147,14 @@ rt2 TE-IS 100 rt3 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.2/32 110 - rt3 20060/18
- - rt4 16070/18
- 10.0.255.5/32 100 - rt3 20060/18
- - rt4 16070/18
- 10.0.255.8/32 90 - rt3 20060/18
- - rt4 16070/18
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.2/32 110 - rt3 20060/18/16020
+ - rt4 16070/18/16020
+ 10.0.255.5/32 100 - rt3 20060/18/16050
+ - rt4 16070/18/16050
+ 10.0.255.8/32 90 - rt3 20060/18/16080
+ - rt4 16070/18/16080
P-space (self):
rt3
@@ -2181,14 +2202,14 @@ rt2 TE-IS 100 rt3 - rt5(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::2/128 110 - rt3 20061/19
- - rt4 16071/19
- 2001:db8::5/128 100 - rt3 20061/19
- - rt4 16071/19
- 2001:db8::8/128 90 - rt3 20061/19
- - rt4 16071/19
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::2/128 110 - rt3 20061/19/16021
+ - rt4 16071/19/16021
+ 2001:db8::5/128 100 - rt3 20061/19/16051
+ - rt4 16071/19/16051
+ 2001:db8::8/128 90 - rt3 20061/19/16081
+ - rt4 16071/19/16081
test# test isis topology 10 root rt1 ti-lfa system-id rt4
P-space (self):
@@ -2232,10 +2253,10 @@ rt4 TE-IS 90 rt2 - rt7(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.4/32 100 - rt2 16080/20
- 10.0.255.7/32 90 - rt2 16080/20
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------
+ 10.0.255.4/32 100 - rt2 16080/20/16040
+ 10.0.255.7/32 90 - rt2 16080/20/16070
P-space (self):
rt2
@@ -2278,10 +2299,10 @@ rt4 TE-IS 90 rt2 - rt7(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::4/128 100 - rt2 16081/21
- 2001:db8::7/128 90 - rt2 16081/21
+ Prefix Metric Interface Nexthop Label(s)
+ -------------------------------------------------------------
+ 2001:db8::4/128 100 - rt2 16081/21/16041
+ 2001:db8::7/128 90 - rt2 16081/21/16071
test# test isis topology 11 root rt2 ti-lfa system-id rt4
P-space (self):
@@ -2322,13 +2343,13 @@ rt6 TE-IS 70 rt3 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.1/32 60 - rt1 -
- 10.0.255.3/32 60 - rt3 -
- 10.0.255.4/32 80 - rt3 16050
- 10.0.255.5/32 70 - rt3 -
- 10.0.255.6/32 80 - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ----------------------------------------------------------
+ 10.0.255.1/32 60 - rt1 implicit-null
+ 10.0.255.3/32 60 - rt3 implicit-null
+ 10.0.255.4/32 80 - rt3 16050/16040
+ 10.0.255.5/32 70 - rt3 16050
+ 10.0.255.6/32 80 - rt3 16060
P-space (self):
@@ -2368,13 +2389,13 @@ rt6 TE-IS 70 rt3 - rt5(4)
IS-IS L1 IPv6 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -------------------------------------------------------
- 2001:db8::1/128 60 - rt1 -
- 2001:db8::3/128 60 - rt3 -
- 2001:db8::4/128 80 - rt3 16051
- 2001:db8::5/128 70 - rt3 -
- 2001:db8::6/128 80 - rt3 -
+ Prefix Metric Interface Nexthop Label(s)
+ ------------------------------------------------------------
+ 2001:db8::1/128 60 - rt1 implicit-null
+ 2001:db8::3/128 60 - rt3 implicit-null
+ 2001:db8::4/128 80 - rt3 16051/16041
+ 2001:db8::5/128 70 - rt3 16051
+ 2001:db8::6/128 80 - rt3 16061
test# test isis topology 12 root rt1 ti-lfa system-id rt3 ipv4-only
P-space (self):
@@ -2419,12 +2440,12 @@ rt3 TE-IS 740 rt2 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------------
- 10.0.255.3/32 750 - rt2 16080/17/16/16
- 10.0.255.5/32 350 - rt2 16080/17/16
- 10.0.255.7/32 150 - rt2 16080/17
- 10.0.255.9/32 160 - rt2 16080/17/18
+ Prefix Metric Interface Nexthop Label(s)
+ -----------------------------------------------------------------
+ 10.0.255.3/32 750 - rt2 16080/17/16/16/16030
+ 10.0.255.5/32 350 - rt2 16080/17/16/16050
+ 10.0.255.7/32 150 - rt2 16080/17/16070
+ 10.0.255.9/32 160 - rt2 16080/17/18/16090
test# test isis topology 13 root rt1 ti-lfa system-id rt3 ipv4-only
P-space (self):
@@ -2461,12 +2482,12 @@ rt7 TE-IS 50 rt2 - rt5(4)
IS-IS L1 IPv4 routing table:
- Prefix Metric Interface Nexthop Label(s)
- -----------------------------------------------------
- 10.0.255.3/32 40 - rt2 16040
- 10.0.255.5/32 50 - rt2 16040
- 10.0.255.6/32 50 - rt2 16040
- 10.0.255.7/32 60 - rt2 16040
+ Prefix Metric Interface Nexthop Label(s)
+ --------------------------------------------------------
+ 10.0.255.3/32 40 - rt2 16040/16030
+ 10.0.255.5/32 50 - rt2 16040/16050
+ 10.0.255.6/32 50 - rt2 16040/16060
+ 10.0.255.7/32 60 - rt2 16040/16070
test#
end.
diff --git a/tests/lib/test_timer_correctness.c b/tests/lib/test_timer_correctness.c
index cbf9b05546..416ea39772 100644
--- a/tests/lib/test_timer_correctness.c
+++ b/tests/lib/test_timer_correctness.c
@@ -153,7 +153,7 @@ int main(int argc, char **argv)
continue;
XFREE(MTYPE_TMP, timers[index]->arg);
- thread_cancel(timers[index]);
+ thread_cancel(&timers[index]);
timers[index] = NULL;
timers_pending--;
}
diff --git a/tests/lib/test_timer_performance.c b/tests/lib/test_timer_performance.c
index 2960e0d81e..45b29b92b1 100644
--- a/tests/lib/test_timer_performance.c
+++ b/tests/lib/test_timer_performance.c
@@ -59,7 +59,7 @@ int main(int argc, char **argv)
thread_add_timer_msec(master, dummy_func, NULL, 0, &timers[i]);
}
for (i = 0; i < SCHEDULE_TIMERS; i++)
- thread_cancel(timers[i]);
+ thread_cancel(&timers[i]);
monotime(&tv_start);
@@ -78,8 +78,7 @@ int main(int argc, char **argv)
int index;
index = prng_rand(prng) % SCHEDULE_TIMERS;
- if (timers[index])
- thread_cancel(timers[index]);
+ thread_cancel(&timers[index]);
timers[index] = NULL;
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref
index 6b4a59011a..53bf8cb445 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step1/show_ip_route.ref
@@ -290,5 +290,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step1/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref
index 773f5e3d43..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step1/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref
index 6b34d5e4ff..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step10/show_ip_route.ref
@@ -283,5 +283,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step10/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref
index 25a48c2bfc..7e6c72627a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step10/show_mpls_table.ref
@@ -152,5 +152,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref
index 6b34d5e4ff..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step2/show_ip_route.ref
@@ -283,5 +283,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step2/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref
index 773f5e3d43..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step2/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref
index 05a8498693..71f9ebddfb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step3/show_ip_route.ref
@@ -250,5 +250,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref
index d50952c6c4..304c0a475b 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step3/show_ipv6_route.ref
@@ -86,5 +86,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref
index 73f517a6e5..94b3cb6d1a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step3/show_mpls_table.ref
@@ -94,5 +94,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref
index 6b34d5e4ff..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step4/show_ip_route.ref
@@ -283,5 +283,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step4/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref
index ac39920ee5..6500a47fbf 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step4/show_mpls_table.ref
@@ -101,15 +101,15 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16060,
+ "outLabel":17060,
"installed":true,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.1.3"
},
{
"type":"SR (IS-IS)",
- "outLabel":17060,
+ "outLabel":16060,
"installed":true,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.1.2"
}
]
},
@@ -130,5 +130,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref
index 59213686f2..16d9358468 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step5/show_ip_route.ref
@@ -277,5 +277,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref
index cdfae284ba..f2093a3fc0 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step5/show_ipv6_route.ref
@@ -111,5 +111,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref
index 73f517a6e5..94b3cb6d1a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step5/show_mpls_table.ref
@@ -94,5 +94,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref
index 6b34d5e4ff..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step6/show_ip_route.ref
@@ -283,5 +283,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step6/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref
index 773f5e3d43..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step6/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref
index 6b34d5e4ff..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step7/show_ip_route.ref
@@ -283,5 +283,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step7/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref
index 773f5e3d43..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step7/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref
index 6b34d5e4ff..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step8/show_ip_route.ref
@@ -283,5 +283,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step8/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref
index 773f5e3d43..5b1950d8cb 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step8/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref
index 6b34d5e4ff..c712538c00 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step9/show_ip_route.ref
@@ -283,5 +283,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref
index c507688f5b..0b39584717 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step9/show_ipv6_route.ref
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":30,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 17101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref
index 25a48c2bfc..7e6c72627a 100644
--- a/tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt1/step9/show_mpls_table.ref
@@ -152,5 +152,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.1.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-sw1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17101,
+ "installed":true,
+ "interface":"eth-sw1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref
index be037aba8b..109b94f7a1 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step1/show_ip_route.ref
@@ -343,5 +343,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref
index a888198ac8..eae700ee47 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step1/show_ipv6_route.ref
@@ -144,5 +144,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref
index 42fde2d77f..a32cd1d1bf 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step1/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -111,9 +111,9 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":17050,
+ "outLabel":16050,
"installed":true,
- "nexthop":"10.0.1.3"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
@@ -123,9 +123,9 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":16050,
+ "outLabel":17050,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.1.3"
}
]
},
@@ -135,9 +135,9 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":17051,
+ "outLabel":16051,
"installed":true,
- "interface":"eth-sw1"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
@@ -147,9 +147,9 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":16051,
+ "outLabel":17051,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-sw1"
}
]
},
@@ -161,13 +161,13 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -179,13 +179,49 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref
index 33fbdba28f..387d3b43d7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step10/show_ip_route.ref
@@ -134,6 +134,27 @@
]
}
],
+ "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",
@@ -255,5 +276,28 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref
index 19837bc700..355436cbfc 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step10/show_ipv6_route.ref
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref
index 29ec55a589..4cbdb9fda9 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step10/show_mpls_table.ref
@@ -89,13 +89,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -143,13 +143,43 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref
index a110c51077..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step2/show_ip_route.ref
@@ -316,5 +316,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref
index cb426897ce..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step2/show_ipv6_route.ref
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref
index 118ec89b5c..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step2/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -137,13 +137,13 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -155,13 +155,49 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref
index d31affeb59..16f49ffe46 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step3/show_ip_route.ref
@@ -269,5 +269,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref
index d92df1918c..bde83c30d0 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step3/show_ipv6_route.ref
@@ -95,5 +95,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref
index f1e18be26b..cbb0d5c695 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step3/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -128,5 +128,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref
index a110c51077..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step4/show_ip_route.ref
@@ -316,5 +316,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref
index cb426897ce..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step4/show_ipv6_route.ref
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref
index 118ec89b5c..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step4/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -137,13 +137,13 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -155,13 +155,49 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref
index f378e41d8d..fbfcce10aa 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step5/show_ip_route.ref
@@ -310,5 +310,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref
index d63e7ceba5..f747a96518 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step5/show_ipv6_route.ref
@@ -120,5 +120,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref
index f1e18be26b..cbb0d5c695 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step5/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -128,5 +128,41 @@
"interface":"eth-sw1"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref
index a110c51077..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step6/show_ip_route.ref
@@ -316,5 +316,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref
index cb426897ce..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step6/show_ipv6_route.ref
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref
index 118ec89b5c..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step6/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -137,13 +137,13 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -155,13 +155,49 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref
index a9b086a248..09ab6d4f8a 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step7/show_ip_route.ref
@@ -313,5 +313,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref
index 1c61f91451..851275fbf7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step7/show_ipv6_route.ref
@@ -123,5 +123,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref
index 0f0d24bbfb..87946aa7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step7/show_mpls_table.ref
@@ -53,13 +53,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -71,13 +71,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -113,13 +113,13 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -131,13 +131,49 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref
index a110c51077..159392f7f7 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step8/show_ip_route.ref
@@ -316,5 +316,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref
index cb426897ce..e9f63849d8 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step8/show_ipv6_route.ref
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref
index 118ec89b5c..0692553808 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step8/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -137,13 +137,13 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -155,13 +155,49 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref
index 2e4c20257f..fc82ada7e3 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step9/show_ip_route.ref
@@ -316,5 +316,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref
index 19837bc700..355436cbfc 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step9/show_ipv6_route.ref
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/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":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref
index 7c910fc6f6..05201724f4 100644
--- a/tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt2/step9/show_mpls_table.ref
@@ -77,13 +77,13 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -95,13 +95,13 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-2"
}
]
},
@@ -137,13 +137,13 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.2.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.3.4"
}
]
},
@@ -155,13 +155,49 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
+ "interface":"eth-rt4-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
"interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4-2"
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref
index 8d4fbec4b5..241f768859 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step1/show_ip_route.ref
@@ -343,5 +343,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref
index 4e4961eaf0..dd78c7d318 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step1/show_ipv6_route.ref
@@ -56,7 +56,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
16041
@@ -65,7 +65,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16041
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16041
@@ -96,7 +96,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -105,7 +105,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -127,7 +127,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -136,7 +136,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -144,5 +144,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref
index b7bdc3e4af..8c6fca7b57 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step1/show_mpls_table.ref
@@ -77,19 +77,19 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.5.5"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.1.2"
}
]
},
@@ -101,19 +101,19 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-sw1"
+ "interface":"eth-rt5-2"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-sw1"
}
]
},
@@ -188,5 +188,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref
index 9522b141b0..40a98ab7c6 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step10/show_ip_route.ref
@@ -323,5 +323,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref
index fb630bc68f..1fb50407bd 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step10/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -109,7 +109,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -118,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref
index 4aec3b6904..44ddc4bc14 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step10/show_mpls_table.ref
@@ -164,5 +164,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref
index 46ebeb8ab9..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step2/show_ip_route.ref
@@ -323,5 +323,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref
index b2c774d493..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step2/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -109,7 +109,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -118,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref
index a1e64afd67..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step2/show_mpls_table.ref
@@ -164,5 +164,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref
index 738aa17406..ed5cef8a5b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step3/show_ip_route.ref
@@ -276,5 +276,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref
index b6423cd2b8..b33058c3bd 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step3/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -95,5 +95,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref
index 1a2b8728e6..70cccc0f0b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step3/show_mpls_table.ref
@@ -128,5 +128,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref
index 46ebeb8ab9..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step4/show_ip_route.ref
@@ -323,5 +323,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref
index b2c774d493..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step4/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -109,7 +109,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -118,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref
index a1e64afd67..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step4/show_mpls_table.ref
@@ -164,5 +164,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref
index 489b495bb1..3adcdce58c 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step5/show_ip_route.ref
@@ -317,5 +317,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref
index 46ee7ba28e..863e26c30e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step5/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -109,16 +109,47 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true
},
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref
index 1a2b8728e6..70cccc0f0b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step5/show_mpls_table.ref
@@ -128,5 +128,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref
index 46ebeb8ab9..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step6/show_ip_route.ref
@@ -323,5 +323,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref
index b2c774d493..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step6/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -109,7 +109,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -118,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref
index a1e64afd67..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step6/show_mpls_table.ref
@@ -164,5 +164,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref
index 1e8c27c01f..7f6e05f08b 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step7/show_ip_route.ref
@@ -320,5 +320,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref
index d21700d407..f4770e2ac9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step7/show_ipv6_route.ref
@@ -75,7 +75,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -84,7 +84,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -106,7 +106,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -115,7 +115,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -123,5 +123,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref
index e97e0d017b..cb49505f55 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step7/show_mpls_table.ref
@@ -140,5 +140,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref
index 46ebeb8ab9..55d8213c4e 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step8/show_ip_route.ref
@@ -323,5 +323,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref
index b2c774d493..4f6441e7b9 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step8/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -109,7 +109,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -118,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref
index a1e64afd67..db8253f83d 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step8/show_mpls_table.ref
@@ -164,5 +164,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref
index 9522b141b0..40a98ab7c6 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step9/show_ip_route.ref
@@ -323,5 +323,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.5.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref
index fb630bc68f..1fb50407bd 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step9/show_ipv6_route.ref
@@ -78,7 +78,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16051
@@ -87,7 +87,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16051
@@ -109,7 +109,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16061
@@ -118,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16061
@@ -126,5 +126,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref
index 4aec3b6904..44ddc4bc14 100644
--- a/tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt3/step9/show_mpls_table.ref
@@ -164,5 +164,41 @@
"interface":"eth-rt5-1"
}
]
+ },
+ "17100":{
+ "inLabel":17100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.4.5"
+ }
+ ]
+ },
+ "17101":{
+ "inLabel":17101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5-1"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/isisd.conf b/tests/topotests/isis-sr-topo1/rt4/isisd.conf
index 5a110b75fe..3852b1962b 100644
--- a/tests/topotests/isis-sr-topo1/rt4/isisd.conf
+++ b/tests/topotests/isis-sr-topo1/rt4/isisd.conf
@@ -45,5 +45,7 @@ router isis 1
segment-routing global-block 16000 23999
segment-routing node-msd 8
segment-routing prefix 4.4.4.4/32 index 40 no-php-flag
+ segment-routing prefix 10.10.10.10/32 index 100 no-php-flag n-flag-clear
segment-routing prefix 2001:db8:1000::4/128 index 41 no-php-flag
+ segment-routing prefix 2001:db8:1000::10/128 index 101 no-php-flag n-flag-clear
!
diff --git a/tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref
index f06182b088..493f3ab60d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step1/show_ip_route.ref
@@ -319,5 +319,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref
index f5772f2726..217a4a5379 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step1/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
@@ -92,7 +92,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref
index b7fb69dcde..307403964a 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step1/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
},
{
"type":"SR (IS-IS)",
@@ -103,13 +103,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
},
{
"type":"SR (IS-IS)",
@@ -188,5 +188,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.6.5"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref
index d7d42120a0..11bc948319 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step10/show_ip_route.ref
@@ -231,6 +231,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -273,5 +274,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref
index 235c1facc6..844f6becf9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step10/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref
index 86ceaf4883..f275056070 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step10/show_mpls_table.ref
@@ -19,13 +19,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -49,13 +49,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -158,5 +158,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref
index 4789f7268f..c2fbdeb30e 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step2/show_ip_route.ref
@@ -289,6 +289,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -331,5 +332,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref
index 871b303cab..7f823b6896 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step2/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref
index ff83c374f0..8dd37880d0 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step2/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -97,13 +97,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref
index d86562deb9..4dc0dd7cac 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step3/show_ip_route.ref
@@ -262,12 +262,14 @@
"metric":40,
"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",
@@ -276,6 +278,21 @@
]
}
],
+ "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",
@@ -302,5 +319,33 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":40,
+ "nexthops":[
+ {
+ "ip":"10.0.2.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-1",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref
index c09f584641..34afda1966 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step3/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
@@ -105,7 +105,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16051
@@ -114,7 +114,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16051
diff --git a/tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref
index 85c6c055c9..65336d88d1 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step3/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -97,13 +97,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -137,13 +137,13 @@
"type":"SR (IS-IS)",
"outLabel":16050,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16050,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -155,13 +155,42 @@
"type":"SR (IS-IS)",
"outLabel":16051,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16051,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
+ }
+ ]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.2.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.3.2"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref
index 3c7dfda0a3..e930657f8d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step4/show_ip_route.ref
@@ -289,6 +289,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -331,5 +332,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref
index 38b51822dd..ca61c6e81f 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step4/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref
index 4e5638f34f..eb95fa94c9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step4/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -97,13 +97,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref
index 90f69c06b8..8b0ddd4ee5 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step5/show_ip_route.ref
@@ -283,6 +283,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -325,5 +326,22 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "fib":true,
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref
index 04056ed873..94e1fac450 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step5/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref
index 4df722be4f..cd47cfa3a7 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step5/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -97,13 +97,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -128,5 +128,16 @@
"installed":true
}
]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref
index 3c7dfda0a3..e930657f8d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step6/show_ip_route.ref
@@ -289,6 +289,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -331,5 +332,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref
index 38b51822dd..ca61c6e81f 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step6/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref
index 4e5638f34f..eb95fa94c9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step6/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -97,13 +97,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref
index a3ac4ac109..f5ac45504e 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step7/show_ip_route.ref
@@ -283,6 +283,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -325,5 +326,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref
index c59abbd2f5..1599c88122 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step7/show_ipv6_route.ref
@@ -12,13 +12,13 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true
},
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true
}
]
@@ -37,7 +37,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -46,7 +46,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -68,7 +68,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -77,7 +77,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref
index 512c057b31..19b0beb164 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step7/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -140,5 +140,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref
index 3c7dfda0a3..e930657f8d 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step8/show_ip_route.ref
@@ -289,6 +289,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -331,5 +332,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref
index 38b51822dd..ca61c6e81f 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step8/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref
index 4e5638f34f..eb95fa94c9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step8/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -97,13 +97,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref
index 73598e4605..a2b939a418 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step9/show_ip_route.ref
@@ -289,6 +289,7 @@
"metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
@@ -331,5 +332,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.7.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref
index 235c1facc6..844f6becf9 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step9/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16011
@@ -43,7 +43,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16021
@@ -52,7 +52,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16021
@@ -74,7 +74,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -83,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
diff --git a/tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref
index 5cdd99e425..5805bf3556 100644
--- a/tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt4/step9/show_mpls_table.ref
@@ -7,13 +7,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -43,13 +43,13 @@
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16020,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -61,13 +61,13 @@
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16021,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -79,13 +79,13 @@
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.2.2"
},
{
"type":"SR (IS-IS)",
"outLabel":16030,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.3.2"
}
]
},
@@ -97,13 +97,13 @@
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16031,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-2"
}
]
},
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt4/zebra.conf b/tests/topotests/isis-sr-topo1/rt4/zebra.conf
index 4945897e9d..5889901c56 100644
--- a/tests/topotests/isis-sr-topo1/rt4/zebra.conf
+++ b/tests/topotests/isis-sr-topo1/rt4/zebra.conf
@@ -8,7 +8,9 @@ debug zebra mpls
!
interface lo
ip address 4.4.4.4/32
+ ip address 10.10.10.10/32
ipv6 address 2001:db8:1000::4/128
+ ipv6 address 2001:db8:1000::10/128
!
interface eth-rt2-1
ip address 10.0.2.4/24
diff --git a/tests/topotests/isis-sr-topo1/rt5/isisd.conf b/tests/topotests/isis-sr-topo1/rt5/isisd.conf
index 6845e5bb82..f7beea796c 100644
--- a/tests/topotests/isis-sr-topo1/rt5/isisd.conf
+++ b/tests/topotests/isis-sr-topo1/rt5/isisd.conf
@@ -45,5 +45,7 @@ router isis 1
segment-routing global-block 16000 23999
segment-routing node-msd 8
segment-routing prefix 5.5.5.5/32 index 50 no-php-flag
+ segment-routing prefix 10.10.10.10/32 index 100 no-php-flag n-flag-clear
segment-routing prefix 2001:db8:1000::5/128 index 51 no-php-flag
+ segment-routing prefix 2001:db8:1000::10/128 index 101 no-php-flag n-flag-clear
!
diff --git a/tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref
index 8eaf40f236..0497bd8399 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step1/show_ip_route.ref
@@ -319,5 +319,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":20,
+ "nexthops":[
+ {
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref
index 9054c9c4af..99d1f773b7 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step1/show_mpls_table.ref
@@ -188,5 +188,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.6.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref
index a5a0bacaad..620f5eac67 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step10/show_ip_route.ref
@@ -274,6 +274,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -308,5 +323,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref
index e43ef6671d..7cfea2a329 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step10/show_mpls_table.ref
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.8.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref
index 101b811d3b..19cdf9d896 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step2/show_ip_route.ref
@@ -281,6 +281,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -315,5 +330,24 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":30,
+ "nexthops":[
+ {
+ "ip":"10.0.8.6",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref
index 660e319a50..08f1635a39 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step2/show_mpls_table.ref
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref
index dff6c5f7eb..48b5e6491e 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step3/show_ip_route.ref
@@ -254,6 +254,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -280,5 +295,33 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/32",
+ "protocol":"isis",
+ "distance":115,
+ "metric":40,
+ "nexthops":[
+ {
+ "ip":"10.0.4.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ },
+ {
+ "ip":"10.0.5.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+ "labels":[
+ 17100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref
index 9df3fc9ef6..9980058b12 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step3/show_mpls_table.ref
@@ -164,5 +164,34 @@
"installed":true
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.5.3"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":17100,
+ "installed":true,
+ "nexthop":"10.0.4.3"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref
index 6b29ff2d44..156beef0f1 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step4/show_ip_route.ref
@@ -281,6 +281,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -301,17 +316,21 @@
]
}
],
- "10.0.8.0\/24":[
+ "10.10.10.10\/32":[
{
- "prefix":"10.0.8.0\/24",
+ "prefix":"10.10.10.10\/32",
"protocol":"isis",
"distance":115,
- "metric":20,
+ "metric":30,
"nexthops":[
{
"ip":"10.0.8.6",
"afi":"ipv4",
- "interfaceName":"eth-rt6"
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref
index 4d13108d7d..a84ed90b25 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step4/show_mpls_table.ref
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.8.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref
index cadb674ba3..dba5e8d8a2 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step5/show_ip_route.ref
@@ -275,6 +275,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -295,17 +310,19 @@
]
}
],
- "10.0.8.0\/24":[
+ "10.10.10.10\/32":[
{
- "prefix":"10.0.8.0\/24",
+ "prefix":"10.10.10.10\/32",
"protocol":"isis",
"distance":115,
- "metric":20,
+ "metric":30,
"nexthops":[
{
+ "fib":true,
"ip":"10.0.8.6",
"afi":"ipv4",
- "interfaceName":"eth-rt6"
+ "interfaceName":"eth-rt6",
+ "active":true
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref
index c60383093f..36c21b041f 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step5/show_mpls_table.ref
@@ -128,5 +128,16 @@
"installed":true
}
]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref
index 6b29ff2d44..156beef0f1 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step6/show_ip_route.ref
@@ -281,6 +281,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -301,17 +316,21 @@
]
}
],
- "10.0.8.0\/24":[
+ "10.10.10.10\/32":[
{
- "prefix":"10.0.8.0\/24",
+ "prefix":"10.10.10.10\/32",
"protocol":"isis",
"distance":115,
- "metric":20,
+ "metric":30,
"nexthops":[
{
"ip":"10.0.8.6",
"afi":"ipv4",
- "interfaceName":"eth-rt6"
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref
index 4d13108d7d..a84ed90b25 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step6/show_mpls_table.ref
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.8.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref
index 72b89ccf69..ece747bdac 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step7/show_ip_route.ref
@@ -275,6 +275,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -295,17 +310,21 @@
]
}
],
- "10.0.8.0\/24":[
+ "10.10.10.10\/32":[
{
- "prefix":"10.0.8.0\/24",
+ "prefix":"10.10.10.10\/32",
"protocol":"isis",
"distance":115,
- "metric":20,
+ "metric":30,
"nexthops":[
{
"ip":"10.0.8.6",
"afi":"ipv4",
- "interfaceName":"eth-rt6"
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref
index 2b1e67ea71..c98da7effd 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step7/show_mpls_table.ref
@@ -140,5 +140,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.8.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref
index 6b29ff2d44..156beef0f1 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step8/show_ip_route.ref
@@ -281,6 +281,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -301,17 +316,21 @@
]
}
],
- "10.0.8.0\/24":[
+ "10.10.10.10\/32":[
{
- "prefix":"10.0.8.0\/24",
+ "prefix":"10.10.10.10\/32",
"protocol":"isis",
"distance":115,
- "metric":20,
+ "metric":30,
"nexthops":[
{
"ip":"10.0.8.6",
"afi":"ipv4",
- "interfaceName":"eth-rt6"
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref
index 4d13108d7d..a84ed90b25 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step8/show_mpls_table.ref
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.8.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref
index cc37894d67..90588c6708 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step9/show_ip_route.ref
@@ -281,6 +281,21 @@
]
}
],
+ "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"
+ }
+ ]
+ }
+ ],
"10.0.7.0\/24":[
{
"prefix":"10.0.7.0\/24",
@@ -301,17 +316,21 @@
]
}
],
- "10.0.8.0\/24":[
+ "10.10.10.10\/32":[
{
- "prefix":"10.0.8.0\/24",
+ "prefix":"10.10.10.10\/32",
"protocol":"isis",
"distance":115,
- "metric":20,
+ "metric":30,
"nexthops":[
{
"ip":"10.0.8.6",
"afi":"ipv4",
- "interfaceName":"eth-rt6"
+ "interfaceName":"eth-rt6",
+ "active":true,
+ "labels":[
+ 18100
+ ]
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref
index e43ef6671d..7cfea2a329 100644
--- a/tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt5/step9/show_mpls_table.ref
@@ -176,5 +176,28 @@
"interface":"eth-rt6"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":18100,
+ "installed":true,
+ "nexthop":"10.0.8.6"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt5/zebra.conf b/tests/topotests/isis-sr-topo1/rt5/zebra.conf
index 4cfea1a59f..a0c8f2cd7e 100644
--- a/tests/topotests/isis-sr-topo1/rt5/zebra.conf
+++ b/tests/topotests/isis-sr-topo1/rt5/zebra.conf
@@ -8,7 +8,9 @@ debug zebra mpls
!
interface lo
ip address 5.5.5.5/32
+ ip address 10.10.10.10/32
ipv6 address 2001:db8:1000::5/128
+ ipv6 address 2001:db8:1000::10/128
!
interface eth-rt3-1
ip address 10.0.4.5/24
diff --git a/tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref
index 324b71f7b8..7b62b0a9c6 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step1/show_ip_route.ref
@@ -287,5 +287,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref
index eee9dea4d3..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step1/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref
index 970251fe8a..2c526e74f0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step1/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref
index 9d0c331ff2..d430ef5a33 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step10/show_ip_route.ref
@@ -280,5 +280,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref
index eee9dea4d3..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step10/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref
index a79406b300..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step10/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "18100":{
+ "inLabel":18100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18101":{
+ "inLabel":18101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref
index e4df0d846e..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step2/show_ip_route.ref
@@ -280,5 +280,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref
index eee9dea4d3..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step2/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref
index 970251fe8a..2c526e74f0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step2/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "16100":{
+ "inLabel":16100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "16101":{
+ "inLabel":16101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref
index e4df0d846e..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step4/show_ip_route.ref
@@ -280,5 +280,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref
index eee9dea4d3..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step4/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref
index a79406b300..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step4/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "18100":{
+ "inLabel":18100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18101":{
+ "inLabel":18101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref
index c200a9f476..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step5/show_ip_route.ref
@@ -14,14 +14,20 @@
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true
+ "active":true,
+ "labels":[
+ 16010
+ ]
},
{
"fib":true,
"ip":"10.0.8.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
- "active":true
+ "active":true,
+ "labels":[
+ 16010
+ ]
}
]
}
@@ -41,7 +47,10 @@
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true
+ "active":true,
+ "labels":[
+ 16020
+ ]
}
]
}
@@ -61,7 +70,10 @@
"ip":"10.0.8.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
- "active":true
+ "active":true,
+ "labels":[
+ 16030
+ ]
}
]
}
@@ -81,7 +93,10 @@
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true
+ "active":true,
+ "labels":[
+ 16040
+ ]
}
]
}
@@ -101,7 +116,10 @@
"ip":"10.0.8.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
- "active":true
+ "active":true,
+ "labels":[
+ 16050
+ ]
}
]
}
@@ -262,5 +280,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref
index 2bf4b70be8..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step5/show_ipv6_route.ref
@@ -12,14 +12,20 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
- "active":true
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16011
+ ]
},
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
- "active":true
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16011
+ ]
}
]
}
@@ -38,7 +44,10 @@
"fib":true,
"afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true
+ "active":true,
+ "labels":[
+ 16021
+ ]
}
]
}
@@ -57,7 +66,10 @@
"fib":true,
"afi":"ipv6",
"interfaceName":"eth-rt5",
- "active":true
+ "active":true,
+ "labels":[
+ 16031
+ ]
}
]
}
@@ -76,7 +88,10 @@
"fib":true,
"afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true
+ "active":true,
+ "labels":[
+ 16041
+ ]
}
]
}
@@ -95,7 +110,41 @@
"fib":true,
"afi":"ipv6",
"interfaceName":"eth-rt5",
- "active":true
+ "active":true,
+ "labels":[
+ 16051
+ ]
+ }
+ ]
+ }
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
}
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref
index 2c63c08510..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step5/show_mpls_table.ref
@@ -1,2 +1,170 @@
{
+ "18010":{
+ "inLabel":18010,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18011":{
+ "inLabel":18011,
+ "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"
+ }
+ ]
+ },
+ "18020":{
+ "inLabel":18020,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18021":{
+ "inLabel":18021,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16021,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "18030":{
+ "inLabel":18030,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ }
+ ]
+ },
+ "18031":{
+ "inLabel":18031,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "18040":{
+ "inLabel":18040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18041":{
+ "inLabel":18041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ },
+ "18050":{
+ "inLabel":18050,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ }
+ ]
+ },
+ "18051":{
+ "inLabel":18051,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-rt5"
+ }
+ ]
+ },
+ "18100":{
+ "inLabel":18100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18101":{
+ "inLabel":18101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
+ }
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref
index e4df0d846e..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step6/show_ip_route.ref
@@ -280,5 +280,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref
index eee9dea4d3..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step6/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref
index a79406b300..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step6/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "18100":{
+ "inLabel":18100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18101":{
+ "inLabel":18101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref
index b21e5db928..1787988207 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step7/show_ip_route.ref
@@ -274,5 +274,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref
index dfbb1954b8..367d0ed173 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step7/show_ipv6_route.ref
@@ -12,13 +12,13 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true
},
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true
}
]
@@ -111,5 +111,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref
index 43d771bcbd..b44dda298e 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step7/show_mpls_table.ref
@@ -94,5 +94,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "18100":{
+ "inLabel":18100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18101":{
+ "inLabel":18101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref
index e4df0d846e..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step8/show_ip_route.ref
@@ -280,5 +280,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref
index eee9dea4d3..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step8/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref
index a79406b300..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step8/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "18100":{
+ "inLabel":18100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18101":{
+ "inLabel":18101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref b/tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref
index e4df0d846e..4b204dbc4c 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step9/show_ip_route.ref
@@ -280,5 +280,38 @@
}
]
}
+ ],
+ "10.10.10.10\/32":[
+ {
+ "prefix":"10.10.10.10\/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,
+ "labels":[
+ 16100
+ ]
+ },
+ {
+ "fib":true,
+ "ip":"10.0.8.5",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16100
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref b/tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref
index eee9dea4d3..834cdfe6ca 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step9/show_ipv6_route.ref
@@ -12,7 +12,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16011
@@ -21,7 +21,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt5",
"active":true,
"labels":[
16011
@@ -117,5 +117,36 @@
}
]
}
+ ],
+ "2001:db8:1000::10\/128":[
+ {
+ "prefix":"2001:db8:1000::10\/128",
+ "protocol":"isis",
+ "selected":true,
+ "destSelected":true,
+ "distance":115,
+ "metric":20,
+ "installed":true,
+ "nexthops":[
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ },
+ {
+ "fib":true,
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16101
+ ]
+ }
+ ]
+ }
]
}
diff --git a/tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref b/tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref
index a79406b300..be87ed90a0 100644
--- a/tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref
+++ b/tests/topotests/isis-sr-topo1/rt6/step9/show_mpls_table.ref
@@ -130,5 +130,41 @@
"interface":"eth-rt5"
}
]
+ },
+ "18100":{
+ "inLabel":18100,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.8.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16100,
+ "installed":true,
+ "nexthop":"10.0.7.4"
+ }
+ ]
+ },
+ "18101":{
+ "inLabel":18101,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16101,
+ "installed":true,
+ "interface":"eth-rt4"
+ }
+ ]
}
}
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff
index ccea94c42c..1a9307ddb9 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ip_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step3/show_ip_route.ref 2020-08-31 22:42:48.831561460 -0300
-+++ rt1/step4/show_ip_route.ref 2020-08-31 22:42:48.831561460 -0300
+--- rt1/step3/show_ip_route.ref 2020-09-25 17:48:05.062911204 -0300
++++ rt1/step4/show_ip_route.ref 2020-09-25 17:49:01.563647190 -0300
@@ -60,10 +60,7 @@
"ip":"10.0.1.2",
"afi":"ipv4",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff
index 13e098858a..f5036aeda8 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step4/show_ipv6_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step3/show_ipv6_route.ref 2020-08-31 22:42:48.831561460 -0300
-+++ rt1/step4/show_ipv6_route.ref 2020-08-31 22:42:48.831561460 -0300
+--- rt1/step3/show_ipv6_route.ref 2020-09-25 17:48:06.358928078 -0300
++++ rt1/step4/show_ipv6_route.ref 2020-09-25 17:49:02.791663194 -0300
@@ -57,10 +57,7 @@
"fib":true,
"afi":"ipv6",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff
index 9531fbc2f0..30c612b544 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step4/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step3/show_mpls_table.ref 2020-08-31 22:42:48.831561460 -0300
-+++ rt1/step4/show_mpls_table.ref 2020-08-31 22:42:48.831561460 -0300
+--- rt1/step3/show_mpls_table.ref 2020-09-25 17:48:03.782894539 -0300
++++ rt1/step4/show_mpls_table.ref 2020-09-25 17:49:00.343631290 -0300
@@ -47,30 +47,6 @@
}
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff
index 2a2cb762a7..79a452ef69 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ip_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step4/show_ip_route.ref 2020-08-31 22:42:48.831561460 -0300
-+++ rt1/step5/show_ip_route.ref 2020-08-31 22:42:48.831561460 -0300
+--- rt1/step4/show_ip_route.ref 2020-09-25 17:49:01.563647190 -0300
++++ rt1/step5/show_ip_route.ref 2020-09-25 17:50:12.144567593 -0300
@@ -60,7 +60,10 @@
"ip":"10.0.1.2",
"afi":"ipv4",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff
index 94bf3c1db3..805266aaaa 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step5/show_ipv6_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step4/show_ipv6_route.ref 2020-08-31 22:42:48.831561460 -0300
-+++ rt1/step5/show_ipv6_route.ref 2020-08-31 22:42:48.831561460 -0300
+--- rt1/step4/show_ipv6_route.ref 2020-09-25 17:49:02.791663194 -0300
++++ rt1/step5/show_ipv6_route.ref 2020-09-25 17:50:13.428584346 -0300
@@ -57,7 +57,10 @@
"fib":true,
"afi":"ipv6",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff
index 0fd252e455..d7ab66ee18 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step5/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step4/show_mpls_table.ref 2020-08-31 22:42:48.831561460 -0300
-+++ rt1/step5/show_mpls_table.ref 2020-08-31 22:42:48.831561460 -0300
+--- rt1/step4/show_mpls_table.ref 2020-09-25 17:49:00.343631290 -0300
++++ rt1/step5/show_mpls_table.ref 2020-09-25 17:50:10.868550944 -0300
@@ -47,6 +47,30 @@
}
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff
index 22f7ce9a2e..9aa0cd2e39 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ip_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step6/show_ip_route.ref 2020-08-31 22:42:48.831561460 -0300
-+++ rt1/step7/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step6/show_ip_route.ref 2020-09-25 17:51:15.105389461 -0300
++++ rt1/step7/show_ip_route.ref 2020-09-25 17:52:02.014002243 -0300
@@ -83,10 +83,7 @@
"ip":"10.0.1.3",
"afi":"ipv4",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff
index 4b07bd7762..52fd7caf91 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step7/show_ipv6_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step6/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step7/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step6/show_ipv6_route.ref 2020-09-25 17:51:16.345405655 -0300
++++ rt1/step7/show_ipv6_route.ref 2020-09-25 17:52:03.230018133 -0300
@@ -79,10 +79,7 @@
"fib":true,
"afi":"ipv6",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff
index b62ca10fa3..53332be569 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step7/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step6/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step7/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step6/show_mpls_table.ref 2020-09-25 17:51:13.861373215 -0300
++++ rt1/step7/show_mpls_table.ref 2020-09-25 17:52:00.769985988 -0300
@@ -71,30 +71,6 @@
}
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff
index 2bf88c8346..af9f72e718 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ip_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step7/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step8/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step7/show_ip_route.ref 2020-09-25 17:52:02.014002243 -0300
++++ rt1/step8/show_ip_route.ref 2020-09-25 17:53:20.003021800 -0300
@@ -83,7 +83,10 @@
"ip":"10.0.1.3",
"afi":"ipv4",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff
index a01038a7a8..b733b33ed9 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step8/show_ipv6_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step7/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step8/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step7/show_ipv6_route.ref 2020-09-25 17:52:03.230018133 -0300
++++ rt1/step8/show_ipv6_route.ref 2020-09-25 17:53:21.239037966 -0300
@@ -79,7 +79,10 @@
"fib":true,
"afi":"ipv6",
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff
index e3f8361315..b6f8c962f0 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step8/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step7/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step8/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step7/show_mpls_table.ref 2020-09-25 17:52:00.769985988 -0300
++++ rt1/step8/show_mpls_table.ref 2020-09-25 17:53:18.671004379 -0300
@@ -71,6 +71,30 @@
}
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff
index c10f97b86a..1d96341557 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ip_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step8/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step9/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step8/show_ip_route.ref 2020-09-25 17:53:20.003021800 -0300
++++ rt1/step9/show_ip_route.ref 2020-09-25 17:54:37.700038367 -0300
@@ -85,7 +85,7 @@
"interfaceName":"eth-sw1",
"active":true,
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff
index 7a909f6410..232b823ac2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step9/show_ipv6_route.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step8/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step9/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step8/show_ipv6_route.ref 2020-09-25 17:53:21.239037966 -0300
++++ rt1/step9/show_ipv6_route.ref 2020-09-25 17:54:38.912054230 -0300
@@ -81,7 +81,7 @@
"interfaceName":"eth-sw1",
"active":true,
diff --git a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff
index b794a674f8..7f0d50f5f2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt1/step9/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt1/step8/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt1/step9/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt1/step8/show_mpls_table.ref 2020-09-25 17:53:18.671004379 -0300
++++ rt1/step9/show_mpls_table.ref 2020-09-25 17:54:36.428021718 -0300
@@ -71,30 +71,6 @@
}
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref b/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref
index 7c6f6f8b65..23e07b7cda 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ip_route.ref
@@ -31,7 +31,8 @@
"interfaceName":"eth-rt4-1",
"active":true,
"labels":[
- 16050
+ 16050,
+ 16010
]
},
{
@@ -40,7 +41,8 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
- 16050
+ 16050,
+ 16010
]
}
]
@@ -78,7 +80,8 @@
"interfaceName":"eth-rt4-1",
"active":true,
"labels":[
- 16050
+ 16050,
+ 16030
]
},
{
@@ -87,7 +90,8 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
- 16050
+ 16050,
+ 16030
]
}
]
@@ -109,6 +113,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt4-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -119,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
+ ]
+ }
]
}
],
@@ -185,6 +207,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt4-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16060
]
@@ -195,10 +220,21 @@
"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
+ }
]
}
],
@@ -233,13 +269,19 @@
"ip":"10.0.2.4",
"afi":"ipv4",
"interfaceName":"eth-rt4-1",
- "active":true
+ "active":true,
+ "labels":[
+ 16050
+ ]
},
{
"ip":"10.0.3.4",
"afi":"ipv4",
"interfaceName":"eth-rt4-2",
- "active":true
+ "active":true,
+ "labels":[
+ 16050
+ ]
}
]
}
@@ -254,13 +296,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
+ ]
}
]
}
@@ -276,12 +335,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
+ ]
}
]
}
@@ -377,13 +453,27 @@
"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,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.3",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
"active":true
}
]
@@ -404,14 +494,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/step1/show_ipv6_route.ref b/tests/topotests/isis-tilfa-topo1/rt2/step1/show_ipv6_route.ref
index 68569b7265..d9bd04ef30 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
@@ -29,7 +29,8 @@
"interfaceName":"eth-rt4-1",
"active":true,
"labels":[
- 16051
+ 16051,
+ 16011
]
},
{
@@ -37,7 +38,8 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
- 16051
+ 16051,
+ 16011
]
}
]
@@ -73,7 +75,8 @@
"interfaceName":"eth-rt4-1",
"active":true,
"labels":[
- 16051
+ 16051,
+ 16031
]
},
{
@@ -81,7 +84,8 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
- 16051
+ 16051,
+ 16031
]
}
]
@@ -100,8 +104,11 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-1",
+ "interfaceName":"eth-rt4-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -109,12 +116,26 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-2",
+ "interfaceName":"eth-rt4-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16051,
+ 16041
+ ]
+ }
]
}
],
@@ -131,7 +152,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-1",
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
16051
@@ -140,7 +161,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt4-2",
"active":true,
"labels":[
16051
@@ -149,7 +170,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-2",
+ "interfaceName":"eth-rt4-1",
"active":true,
"labels":[
16051
@@ -171,8 +192,11 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-1",
+ "interfaceName":"eth-rt4-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16061
]
@@ -180,12 +204,22 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-2",
+ "interfaceName":"eth-rt4-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16061
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
]
}
]
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 4c18e20472..cd2f879593 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
@@ -119,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"
}
]
},
@@ -137,13 +150,26 @@
"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"
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-sw1"
}
]
},
@@ -203,13 +229,26 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.3.4"
+ "nexthop":"10.0.3.4",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.2.4"
+ "nexthop":"10.0.2.4",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.1.3"
}
]
},
@@ -221,13 +260,26 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-2"
+ "interface":"eth-rt4-2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt4-1"
+ "interface":"eth-rt4-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-sw1"
}
]
}
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff
index 24237769e9..22b896f684 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step1/show_ip_route.ref 2020-08-31 15:36:25.999825589 -0300
-+++ rt2/step2/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -15,34 +15,10 @@
+--- rt2/step1/show_ip_route.ref 2020-09-25 17:46:27.537642781 -0300
++++ rt2/step2/show_ip_route.ref 2020-09-25 17:46:57.306029668 -0300
+@@ -15,36 +15,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -20,7 +20,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16010
- ]
- },
- {
@@ -29,13 +30,14 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16010
- ]
- }
]
}
],
-@@ -62,34 +38,10 @@
+@@ -64,36 +38,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -55,7 +57,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16030
- ]
- },
- {
@@ -64,13 +67,14 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16030
- ]
- }
]
}
],
-@@ -212,34 +164,12 @@
+@@ -248,40 +196,12 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -96,18 +100,24 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
+- "active":true,
+- "labels":[
+- 16050
+- ]
- },
- {
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
+- "active":true,
+- "labels":[
+- 16050
+- ]
+ "interfaceName":"eth-sw1"
}
]
}
-@@ -301,24 +231,6 @@
+@@ -377,24 +297,6 @@
"ip":"10.0.1.3",
"afi":"ipv4",
"interfaceName":"eth-sw1",
@@ -132,7 +142,7 @@
"active":true
}
]
-@@ -339,24 +251,6 @@
+@@ -415,24 +317,6 @@
"ip":"10.0.1.3",
"afi":"ipv4",
"interfaceName":"eth-sw1",
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff
index 7c9f1e965a..08c7d2b1fc 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step2/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step1/show_ipv6_route.ref 2020-08-31 15:36:25.999825589 -0300
-+++ rt2/step2/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -14,32 +14,10 @@
+--- rt2/step1/show_ipv6_route.ref 2020-09-25 17:46:28.865660035 -0300
++++ rt2/step2/show_ipv6_route.ref 2020-09-25 17:46:58.514045373 -0300
+@@ -14,34 +14,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -19,7 +19,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16011
- ]
- },
- {
@@ -27,13 +28,14 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16011
- ]
- }
]
}
],
-@@ -58,32 +36,10 @@
+@@ -60,34 +36,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -52,7 +54,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16031
- ]
- },
- {
@@ -60,7 +63,8 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16031
- ]
- }
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff
index 1c3e037b96..4feb927156 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step2/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt2/step1/show_mpls_table.ref 2020-08-31 15:36:25.999825589 -0300
-+++ rt2/step2/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step1/show_mpls_table.ref 2020-09-25 17:46:26.261626203 -0300
++++ rt2/step2/show_mpls_table.ref 2020-09-25 17:46:56.086013807 -0300
@@ -7,23 +7,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff
index 4613c2c63d..af1cebc76d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step2/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step3/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -15,10 +15,34 @@
+--- rt2/step2/show_ip_route.ref 2020-09-25 17:46:57.306029668 -0300
++++ rt2/step3/show_ip_route.ref 2020-09-25 17:48:05.274913964 -0300
+@@ -15,10 +15,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -20,7 +20,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16010
+ ]
+ },
+ {
@@ -29,13 +30,14 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16010
+ ]
+ }
]
}
],
-@@ -38,10 +62,34 @@
+@@ -38,10 +64,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -55,7 +57,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16030
+ ]
+ },
+ {
@@ -64,13 +67,14 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16030
+ ]
+ }
]
}
],
-@@ -164,12 +212,34 @@
+@@ -196,12 +248,40 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -97,17 +101,23 @@
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
-+ "active":true
++ "active":true,
++ "labels":[
++ 16050
++ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
-+ "active":true
++ "active":true,
++ "labels":[
++ 16050
++ ]
}
]
}
-@@ -231,6 +301,24 @@
+@@ -297,6 +377,24 @@
"ip":"10.0.1.3",
"afi":"ipv4",
"interfaceName":"eth-sw1",
@@ -132,7 +142,7 @@
"active":true
}
]
-@@ -251,6 +339,24 @@
+@@ -317,6 +415,24 @@
"ip":"10.0.1.3",
"afi":"ipv4",
"interfaceName":"eth-sw1",
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff
index 84b5283360..9809c316e8 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step3/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step2/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step3/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -14,10 +14,32 @@
+--- rt2/step2/show_ipv6_route.ref 2020-09-25 17:46:58.514045373 -0300
++++ rt2/step3/show_ipv6_route.ref 2020-09-25 17:48:06.570930838 -0300
+@@ -14,10 +14,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -19,7 +19,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16011
+ ]
+ },
+ {
@@ -27,13 +28,14 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16011
+ ]
+ }
]
}
],
-@@ -36,10 +58,32 @@
+@@ -36,10 +60,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -52,7 +54,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16031
+ ]
+ },
+ {
@@ -60,7 +63,8 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16031
+ ]
+ }
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff
index 5dc90e442c..180323e4c8 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step3/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt2/step2/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step3/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step2/show_mpls_table.ref 2020-09-25 17:46:56.086013807 -0300
++++ rt2/step3/show_mpls_table.ref 2020-09-25 17:48:03.994897300 -0300
@@ -7,7 +7,23 @@
"type":"SR (IS-IS)",
"outLabel":3,
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff
index f703db555f..12d45bbe07 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step3/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step4/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -15,34 +15,10 @@
+--- rt2/step3/show_ip_route.ref 2020-09-25 17:48:05.274913964 -0300
++++ rt2/step4/show_ip_route.ref 2020-09-25 17:49:01.763649797 -0300
+@@ -15,36 +15,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -20,7 +20,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16010
- ]
- },
- {
@@ -29,13 +30,14 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16010
- ]
- }
]
}
],
-@@ -62,34 +38,10 @@
+@@ -64,36 +38,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -55,7 +57,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16030
- ]
- },
- {
@@ -64,60 +67,50 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16030
- ]
- }
]
}
],
-@@ -108,20 +60,14 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true,
+@@ -115,9 +63,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
+ ]
},
{
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true,
+@@ -128,9 +73,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
- }
- ]
- }
-@@ -153,7 +99,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
-+ 3
]
- },
- {
-@@ -163,7 +109,7 @@
- "interfaceName":"eth-rt4-2",
+ }
+ ],
+@@ -141,8 +83,7 @@
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
-- 16050
-+ 3
+- 16050,
+- 16040
++ 16050
]
}
]
-@@ -184,20 +130,14 @@
+@@ -173,20 +114,14 @@
"ip":"10.0.2.4",
"afi":"ipv4",
"interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16060
+- 16050
- ]
+ "active":true
},
@@ -128,13 +121,33 @@
"interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16060
+- 16050
- ]
+ "active":true
}
]
}
-@@ -212,34 +152,12 @@
+@@ -209,9 +144,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
+- "labels":[
+- 16060
+ ]
+ },
+ {
+@@ -222,9 +154,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
+- "labels":[
+- 16060
+ ]
+ }
+ ],
+@@ -248,40 +177,12 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -160,13 +173,19 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
+- "active":true,
+- "labels":[
+- 16050
+- ]
- },
- {
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
+- "active":true,
+- "labels":[
+- 16050
+- ]
+ "interfaceName":"eth-sw1"
}
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff
index fdd4a5166e..fdf658d59d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step4/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step3/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step4/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -14,32 +14,10 @@
+--- rt2/step3/show_ipv6_route.ref 2020-09-25 17:48:06.570930838 -0300
++++ rt2/step4/show_ipv6_route.ref 2020-09-25 17:49:02.995665853 -0300
+@@ -14,34 +14,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -19,7 +19,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16011
- ]
- },
- {
@@ -27,13 +28,14 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16011
- ]
- }
]
}
],
-@@ -58,32 +36,10 @@
+@@ -60,34 +36,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -52,7 +54,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16031
- ]
- },
- {
@@ -60,71 +63,82 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16031
- ]
- }
]
}
],
-@@ -101,19 +57,13 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
-- "active":true,
+@@ -108,9 +60,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
+ ]
},
{
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
-- "active":true,
+@@ -120,9 +69,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
- }
- ]
- }
-@@ -134,7 +84,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
-+ 3
]
- },
- {
-@@ -152,7 +102,7 @@
- "interfaceName":"eth-rt4-2",
+ }
+ ],
+@@ -132,8 +78,7 @@
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
-- 16051
-+ 3
+- 16051,
+- 16041
++ 16051
]
}
]
-@@ -172,19 +122,13 @@
+@@ -162,19 +107,13 @@
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-1",
+ "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16061
+- 16051
- ]
+ "active":true
},
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-2",
+ "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16061
+- 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.diff b/tests/topotests/isis-tilfa-topo1/rt2/step4/show_mpls_table.ref.diff
index dcc4532e54..a78f79c576 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step4/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt2/step3/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step4/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step3/show_mpls_table.ref 2020-09-25 17:48:03.994897300 -0300
++++ rt2/step4/show_mpls_table.ref 2020-09-25 17:49:00.551634001 -0300
@@ -7,23 +7,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
@@ -75,7 +75,7 @@
}
]
},
-@@ -91,59 +43,7 @@
+@@ -91,84 +43,6 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
@@ -107,13 +107,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"
- }
- ]
- },
@@ -125,88 +138,63 @@
- "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"
-+ "interface":"eth-sw1"
- }
- ]
- },
-@@ -153,13 +53,13 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":3,
- "installed":true,
- "nexthop":"10.0.3.4"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16050,
-+ "outLabel":3,
- "installed":true,
- "nexthop":"10.0.2.4"
- },
-@@ -177,13 +77,13 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16051,
-+ "outLabel":3,
- "installed":true,
- "interface":"eth-rt4-2"
- },
- {
- "type":"SR (IS-IS)",
+- "interface":"eth-rt4-1",
+- "backupIndex":[
+- 0
+- ]
+- }
+- ],
+- "backupNexthops":[
+- {
+- "type":"SR (IS-IS)",
- "outLabel":16051,
-+ "outLabel":3,
- "installed":true,
- "interface":"eth-rt4-1"
- },
-@@ -194,41 +94,5 @@
"interface":"eth-sw1"
}
]
-- },
-- "16060":{
-- "inLabel":16060,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16060,
-- "installed":true,
+@@ -181,18 +55,6 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
- "nexthop":"10.0.3.4"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
+- "outLabel":16050,
- "installed":true,
- "nexthop":"10.0.2.4"
-- }
-- ]
-- },
-- "16061":{
-- "inLabel":16061,
-- "installed":true,
-- "nexthops":[
+- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
+- "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":16061,
+- "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.diff b/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ip_route.ref.diff
index 22a5cb6579..7d20fad3f4 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step4/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step5/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -15,10 +15,34 @@
+--- rt2/step4/show_ip_route.ref 2020-09-25 17:49:01.763649797 -0300
++++ rt2/step5/show_ip_route.ref 2020-09-25 17:50:12.360570411 -0300
+@@ -15,10 +15,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -20,7 +20,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16010
+ ]
+ },
+ {
@@ -29,13 +30,14 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16010
+ ]
+ }
]
}
],
-@@ -38,10 +62,34 @@
+@@ -38,10 +64,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -55,7 +57,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16030
+ ]
+ },
+ {
@@ -64,61 +67,51 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16030
+ ]
+ }
]
}
],
-@@ -60,14 +108,20 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
+@@ -63,6 +115,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
+ "labels":[
+ 3
-+ ]
+ ]
},
{
- "fib":true,
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
+@@ -73,6 +128,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
+ "labels":[
+ 3
-+ ]
- }
- ]
- }
-@@ -99,7 +153,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 3
-+ 16050
]
- },
- {
-@@ -109,7 +163,7 @@
- "interfaceName":"eth-rt4-2",
+ }
+ ],
+@@ -83,7 +141,8 @@
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
-- 3
-+ 16050
+- 16050
++ 16050,
++ 16040
]
}
]
-@@ -130,14 +184,20 @@
+@@ -114,14 +173,20 @@
"ip":"10.0.2.4",
"afi":"ipv4",
"interfaceName":"eth-rt4-1",
- "active":true
+ "active":true,
+ "labels":[
-+ 16060
++ 16050
+ ]
},
{
@@ -129,12 +122,32 @@
- "active":true
+ "active":true,
+ "labels":[
-+ 16060
++ 16050
+ ]
}
]
}
-@@ -152,12 +212,34 @@
+@@ -144,6 +209,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
++ "labels":[
++ 16060
+ ]
+ },
+ {
+@@ -154,6 +222,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
++ "labels":[
++ 16060
+ ]
+ }
+ ],
+@@ -177,12 +248,40 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -161,13 +174,19 @@
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
-+ "active":true
++ "active":true,
++ "labels":[
++ 16050
++ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
-+ "active":true
++ "active":true,
++ "labels":[
++ 16050
++ ]
}
]
}
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff
index 819a153f7a..9330964338 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step5/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step4/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step5/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -14,10 +14,32 @@
+--- rt2/step4/show_ipv6_route.ref 2020-09-25 17:49:02.995665853 -0300
++++ rt2/step5/show_ipv6_route.ref 2020-09-25 17:50:13.636587060 -0300
+@@ -14,10 +14,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -19,7 +19,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16011
+ ]
+ },
+ {
@@ -27,13 +28,14 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16011
+ ]
+ }
]
}
],
-@@ -36,10 +58,32 @@
+@@ -36,10 +60,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -52,7 +54,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16031
+ ]
+ },
+ {
@@ -60,71 +63,82 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16031
+ ]
+ }
]
}
],
-@@ -57,13 +101,19 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-1",
-- "active":true
-+ "active":true,
+@@ -60,6 +108,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
+ "labels":[
+ 3
-+ ]
+ ]
},
{
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt4-2",
-- "active":true
-+ "active":true,
+@@ -69,6 +120,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
+ "labels":[
+ 3
-+ ]
- }
- ]
- }
-@@ -84,7 +134,7 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 3
-+ 16051
]
- },
- {
-@@ -102,7 +152,7 @@
- "interfaceName":"eth-rt4-2",
+ }
+ ],
+@@ -78,7 +132,8 @@
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
-- 3
-+ 16051
+- 16051
++ 16051,
++ 16041
]
}
]
-@@ -122,13 +172,19 @@
+@@ -107,13 +162,19 @@
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-1",
+ "interfaceName":"eth-rt4-2",
- "active":true
+ "active":true,
+ "labels":[
-+ 16061
++ 16051
+ ]
},
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-2",
+ "interfaceName":"eth-rt4-1",
- "active":true
+ "active":true,
+ "labels":[
-+ 16061
++ 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.diff b/tests/topotests/isis-tilfa-topo1/rt2/step5/show_mpls_table.ref.diff
index 7f851effad..b1e44a727f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step5/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt2/step4/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step5/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step4/show_mpls_table.ref 2020-09-25 17:49:00.551634001 -0300
++++ rt2/step5/show_mpls_table.ref 2020-09-25 17:50:11.068553553 -0300
@@ -7,7 +7,23 @@
"type":"SR (IS-IS)",
"outLabel":3,
@@ -75,11 +75,10 @@
}
]
},
-@@ -43,12 +91,28 @@
+@@ -43,6 +91,84 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
-- "interface":"eth-sw1"
+ "interface":"eth-sw1",
+ "backupIndex":[
+ 0,
@@ -97,114 +96,105 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "interface":"eth-rt4-2"
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-+ "16040":{
-+ "inLabel":16040,
- "installed":true,
- "nexthops":[
- {
-@@ -62,6 +126,42 @@
- "outLabel":3,
- "installed":true,
- "nexthop":"10.0.2.4"
+ }
+ ]
+ },
-+ "16041":{
-+ "inLabel":16041,
++ "16040":{
++ "inLabel":16040,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
-+ "interface":"eth-rt4-2"
++ "nexthop":"10.0.3.4",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
-+ "interface":"eth-rt4-1"
++ "nexthop":"10.0.2.4",
++ "backupIndex":[
++ 0
++ ]
++ }
++ ],
++ "backupNexthops":[
++ {
++ "type":"SR (IS-IS)",
++ "outLabel":16050,
++ "nexthop":"10.0.1.3"
+ }
+ ]
+ },
-+ "16050":{
-+ "inLabel":16050,
++ "16041":{
++ "inLabel":16041,
+ "installed":true,
+ "nexthops":[
+ {
+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
++ "outLabel":3,
+ "installed":true,
-+ "nexthop":"10.0.3.4"
++ "interface":"eth-rt4-2",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
-+ "outLabel":16050,
++ "outLabel":3,
+ "installed":true,
-+ "nexthop":"10.0.2.4"
- },
- {
- "type":"SR (IS-IS)",
-@@ -77,13 +177,13 @@
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16051,
- "installed":true,
- "interface":"eth-rt4-2"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
++ "interface":"eth-rt4-1",
++ "backupIndex":[
++ 0
++ ]
++ }
++ ],
++ "backupNexthops":[
++ {
++ "type":"SR (IS-IS)",
+ "outLabel":16051,
- "installed":true,
- "interface":"eth-rt4-1"
- },
-@@ -94,5 +194,41 @@
"interface":"eth-sw1"
}
]
-+ },
-+ "16060":{
-+ "inLabel":16060,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16060,
-+ "installed":true,
+@@ -55,6 +181,18 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.3.4"
+ },
+ {
+ "type":"SR (IS-IS)",
-+ "outLabel":16060,
++ "outLabel":16050,
+ "installed":true,
+ "nexthop":"10.0.2.4"
-+ }
-+ ]
-+ },
-+ "16061":{
-+ "inLabel":16061,
-+ "installed":true,
-+ "nexthops":[
++ },
+ {
+ "type":"SR (IS-IS)",
-+ "outLabel":16061,
++ "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":16061,
++ "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/step7/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ip_route.ref.diff
index 109ab8ea6a..c92195d704 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step6/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step7/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -15,34 +15,10 @@
+--- rt2/step6/show_ip_route.ref 2020-09-25 17:51:15.313392177 -0300
++++ rt2/step7/show_ip_route.ref 2020-09-25 17:52:02.210004805 -0300
+@@ -15,36 +15,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -20,7 +20,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16010
- ]
- },
- {
@@ -29,13 +30,14 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16010
- ]
- }
]
}
],
-@@ -62,34 +38,10 @@
+@@ -64,36 +38,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -55,7 +57,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16030
- ]
- },
- {
@@ -64,13 +67,50 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16050
+- 16050,
+- 16030
- ]
- }
]
}
],
-@@ -141,30 +93,21 @@
+@@ -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",
@@ -104,7 +144,7 @@
}
]
}
-@@ -212,34 +155,12 @@
+@@ -248,40 +169,12 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -130,14 +170,119 @@
- "ip":"10.0.2.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-1",
-- "active":true
+- "active":true,
+- "labels":[
+- 16050
+- ]
- },
- {
- "ip":"10.0.3.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4-2",
-- "active":true
+- "active":true,
+- "labels":[
+- 16050
+- ]
+ "interfaceName":"eth-sw1"
}
]
}
+@@ -296,30 +189,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
+ }
+ ]
+ }
+@@ -335,29 +211,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"
+ }
+ ]
+ }
+@@ -494,31 +353,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.diff b/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ipv6_route.ref.diff
index 871fd98b7e..140c7b08bf 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step7/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step6/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step7/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -14,32 +14,10 @@
+--- rt2/step6/show_ipv6_route.ref 2020-09-25 17:51:16.549408319 -0300
++++ rt2/step7/show_ipv6_route.ref 2020-09-25 17:52:03.438020851 -0300
+@@ -14,34 +14,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -19,7 +19,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16011
- ]
- },
- {
@@ -27,13 +28,14 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16011
- ]
- }
]
}
],
-@@ -58,32 +36,10 @@
+@@ -60,34 +36,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -52,7 +54,8 @@
- "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16031
- ]
- },
- {
@@ -60,16 +63,52 @@
- "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
-- 16051
+- 16051,
+- 16031
- ]
- }
]
}
],
-@@ -132,28 +88,19 @@
- "fib":true,
+@@ -106,9 +58,6 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 3
+ ]
+@@ -118,24 +67,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt4-1",
+ "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-sw1",
- "active":true,
- "labels":[
- 16051
@@ -79,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt4-2",
- "active":true,
- "labels":[
- 16051
@@ -89,7 +128,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-2",
+ "interfaceName":"eth-rt4-1",
- "active":true,
- "labels":[
- 16051
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff
index ad48c50f32..f8476cd0bb 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step7/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt2/step6/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step7/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step6/show_mpls_table.ref 2020-09-25 17:51:14.073375985 -0300
++++ rt2/step7/show_mpls_table.ref 2020-09-25 17:52:00.973988653 -0300
@@ -7,23 +7,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
@@ -100,10 +100,62 @@
}
]
},
-@@ -147,54 +83,6 @@
+@@ -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,
@@ -136,22 +188,20 @@
- "type":"SR (IS-IS)",
- "outLabel":16051,
- "installed":true,
-- "interface":"eth-rt4-2"
-- },
-- {
-- "type":"SR (IS-IS)",
+ "interface":"eth-rt4-2"
+ },
+ {
+ "type":"SR (IS-IS)",
- "outLabel":16051,
-- "installed":true,
-- "interface":"eth-rt4-1"
++ "outLabel":3,
+ "installed":true,
+ "interface":"eth-rt4-1"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16051,
- "installed":true,
- "interface":"eth-sw1"
-- }
-- ]
-- },
- "16060":{
- "inLabel":16060,
- "installed":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
index 3511a595c3..7d5237e740 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step7/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step8/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -15,10 +15,34 @@
+--- rt2/step7/show_ip_route.ref 2020-09-25 17:52:02.210004805 -0300
++++ rt2/step8/show_ip_route.ref 2020-09-25 17:53:20.207024469 -0300
+@@ -15,10 +15,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -20,7 +20,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16010
+ ]
+ },
+ {
@@ -29,13 +30,14 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16010
+ ]
+ }
]
}
],
-@@ -38,10 +62,34 @@
+@@ -38,10 +64,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -55,7 +57,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16030
+ ]
+ },
+ {
@@ -64,13 +67,50 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16050
++ 16050,
++ 16030
+ ]
+ }
]
}
],
-@@ -93,21 +141,30 @@
+@@ -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",
@@ -104,7 +144,7 @@
}
]
}
-@@ -155,12 +212,34 @@
+@@ -169,12 +248,40 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -131,13 +171,118 @@
+ "ip":"10.0.2.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-1",
-+ "active":true
++ "active":true,
++ "labels":[
++ 16050
++ ]
+ },
+ {
+ "ip":"10.0.3.4",
+ "afi":"ipv4",
+ "interfaceName":"eth-rt4-2",
-+ "active":true
++ "active":true,
++ "labels":[
++ 16050
++ ]
+ }
+ ]
+ }
+@@ -189,13 +296,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
++ ]
+ }
+ ]
+ }
+@@ -211,12 +335,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
++ ]
+ }
+ ]
+ }
+@@ -353,14 +494,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.diff b/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ipv6_route.ref.diff
index 96a60197ab..45322214e6 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step8/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt2/step7/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step8/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-@@ -14,10 +14,32 @@
+--- rt2/step7/show_ipv6_route.ref 2020-09-25 17:52:03.438020851 -0300
++++ rt2/step8/show_ipv6_route.ref 2020-09-25 17:53:21.443040633 -0300
+@@ -14,10 +14,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -19,7 +19,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16011
+ ]
+ },
+ {
@@ -27,13 +28,14 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16011
+ ]
+ }
]
}
],
-@@ -36,10 +58,32 @@
+@@ -36,10 +60,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -52,7 +54,8 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16031
+ ]
+ },
+ {
@@ -60,16 +63,52 @@
+ "interfaceName":"eth-rt4-2",
+ "active":true,
+ "labels":[
-+ 16051
++ 16051,
++ 16031
+ ]
+ }
]
}
],
-@@ -88,19 +132,28 @@
- "fib":true,
+@@ -58,6 +106,9 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4-2",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
+@@ -67,10 +118,24 @@
"afi":"ipv6",
"interfaceName":"eth-rt4-1",
+ "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-sw1",
- "active":true
+ "active":true,
+ "labels":[
@@ -79,7 +118,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt4-2",
- "active":true
+ "active":true,
+ "labels":[
@@ -89,7 +128,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4-2",
+ "interfaceName":"eth-rt4-1",
- "active":true
+ "active":true,
+ "labels":[
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff
index 04b8e99725..083c647802 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step8/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt2/step7/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step8/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step7/show_mpls_table.ref 2020-09-25 17:52:00.973988653 -0300
++++ rt2/step8/show_mpls_table.ref 2020-09-25 17:53:18.923007676 -0300
@@ -7,7 +7,23 @@
"type":"SR (IS-IS)",
"outLabel":3,
@@ -100,10 +100,63 @@
}
]
},
-@@ -83,6 +147,54 @@
+@@ -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,
@@ -142,16 +195,13 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
-+ "interface":"eth-rt4-1"
+ "interface":"eth-rt4-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16051,
+ "installed":true,
+ "interface":"eth-sw1"
-+ }
-+ ]
-+ },
- "16060":{
- "inLabel":16060,
- "installed":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
index b7deb80554..15370a0a62 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ip_route.ref.diff
@@ -1,15 +1,69 @@
---- rt2/step8/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step9/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step8/show_ip_route.ref 2020-09-25 17:53:20.207024469 -0300
++++ rt2/step9/show_ip_route.ref 2020-09-25 17:54:37.908041089 -0300
@@ -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
]
},
{
-@@ -40,7 +40,7 @@
+@@ -175,7 +175,7 @@
+ "interfaceName":"eth-rt4-1",
+ "active":true,
+ "labels":[
+- 16050
++ 16500
+ ]
+ },
+ {
+@@ -185,7 +185,7 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
@@ -18,7 +72,7 @@
]
}
]
-@@ -78,7 +78,7 @@
+@@ -271,7 +271,7 @@
"interfaceName":"eth-rt4-1",
"active":true,
"labels":[
@@ -27,7 +81,7 @@
]
},
{
-@@ -87,7 +87,7 @@
+@@ -280,7 +280,7 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
@@ -36,26 +90,26 @@
]
}
]
-@@ -143,7 +143,7 @@
+@@ -318,7 +318,7 @@
"interfaceName":"eth-sw1",
"active":true,
"labels":[
- 16050
+ 16500
]
- },
- {
-@@ -153,7 +153,7 @@
- "interfaceName":"eth-rt4-1",
+ }
+ ]
+@@ -356,7 +356,7 @@
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
- 16050
+ 16500
]
- },
- {
-@@ -163,7 +163,7 @@
- "interfaceName":"eth-rt4-2",
+ }
+ ]
+@@ -517,7 +517,7 @@
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
- 16050
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff
index cd634af4e6..2585f32595 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step9/show_ipv6_route.ref.diff
@@ -1,43 +1,52 @@
---- rt2/step8/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step9/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step8/show_ipv6_route.ref 2020-09-25 17:53:21.443040633 -0300
++++ rt2/step9/show_ipv6_route.ref 2020-09-25 17:54:39.112056848 -0300
@@ -29,7 +29,7 @@
"interfaceName":"eth-rt4-1",
"active":true,
"labels":[
-- 16051
-+ 16501
+- 16051,
++ 16501,
+ 16011
]
},
- {
-@@ -37,7 +37,7 @@
+@@ -38,7 +38,7 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
-- 16051
-+ 16501
+- 16051,
++ 16501,
+ 16011
]
}
- ]
-@@ -73,7 +73,7 @@
+@@ -75,7 +75,7 @@
"interfaceName":"eth-rt4-1",
"active":true,
"labels":[
-- 16051
-+ 16501
+- 16051,
++ 16501,
+ 16031
]
},
- {
-@@ -81,7 +81,7 @@
+@@ -84,7 +84,7 @@
"interfaceName":"eth-rt4-2",
"active":true,
"labels":[
-- 16051
-+ 16501
+- 16051,
++ 16501,
+ 16031
]
}
- ]
-@@ -134,7 +134,7 @@
- "interfaceName":"eth-rt4-1",
+@@ -132,7 +132,7 @@
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+- 16051,
++ 16501,
+ 16041
+ ]
+ }
+@@ -155,7 +155,7 @@
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
- 16051
@@ -45,8 +54,8 @@
]
},
{
-@@ -143,7 +143,7 @@
- "interfaceName":"eth-sw1",
+@@ -164,7 +164,7 @@
+ "interfaceName":"eth-rt4-2",
"active":true,
"labels":[
- 16051
@@ -54,8 +63,8 @@
]
},
{
-@@ -152,7 +152,7 @@
- "interfaceName":"eth-rt4-2",
+@@ -173,7 +173,7 @@
+ "interfaceName":"eth-rt4-1",
"active":true,
"labels":[
- 16051
diff --git a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff
index f195264f5a..b90b889eba 100644
--- a/tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt2/step9/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt2/step8/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt2/step9/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
+--- rt2/step8/show_mpls_table.ref 2020-09-25 17:53:18.923007676 -0300
++++ rt2/step9/show_mpls_table.ref 2020-09-25 17:54:36.640024493 -0300
@@ -17,12 +17,12 @@
"backupNexthops":[
{
@@ -60,119 +60,123 @@
"interface":"eth-rt4-2"
}
]
-@@ -147,87 +147,87 @@
- }
- ]
- },
-- "16050":{
-- "inLabel":16050,
-+ "16060":{
-+ "inLabel":16060,
- "installed":true,
- "nexthops":[
+@@ -137,7 +137,7 @@
+ "backupNexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16050,
-+ "outLabel":16060,
- "installed":true,
- "nexthop":"10.0.3.4"
- },
++ "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,
-+ "outLabel":16060,
- "installed":true,
- "nexthop":"10.0.2.4"
+- "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,
-+ "16061":{
-+ "inLabel":16061,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
+- "installed":true,
+- "nexthops":[
+- {
+- "type":"SR (IS-IS)",
- "outLabel":16051,
-+ "outLabel":16061,
- "installed":true,
- "interface":"eth-rt4-2"
- },
- {
- "type":"SR (IS-IS)",
+- "installed":true,
+- "interface":"eth-rt4-2"
+- },
+- {
+- "type":"SR (IS-IS)",
- "outLabel":16051,
-+ "outLabel":16061,
- "installed":true,
- "interface":"eth-rt4-1"
+- "installed":true,
+- "interface":"eth-rt4-1"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16051,
- "installed":true,
-- "interface":"eth-sw1"
++ "outLabel":16501,
+ "interface":"eth-sw1"
+ }
+ ]
+@@ -282,5 +234,53 @@
+ "interface":"eth-sw1"
}
]
- },
-- "16060":{
-- "inLabel":16060,
++ },
+ "16500":{
+ "inLabel":16500,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
++ "installed":true,
++ "nexthops":[
++ {
++ "type":"SR (IS-IS)",
+ "outLabel":16500,
- "installed":true,
- "nexthop":"10.0.3.4"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16060,
++ "installed":true,
++ "nexthop":"10.0.3.4"
++ },
++ {
++ "type":"SR (IS-IS)",
+ "outLabel":16500,
- "installed":true,
- "nexthop":"10.0.2.4"
++ "installed":true,
++ "nexthop":"10.0.2.4"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16500,
+ "installed":true,
+ "nexthop":"10.0.1.3"
- }
- ]
- },
-- "16061":{
-- "inLabel":16061,
++ }
++ ]
++ },
+ "16501":{
+ "inLabel":16501,
- "installed":true,
- "nexthops":[
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
++ "installed":true,
++ "nexthops":[
++ {
++ "type":"SR (IS-IS)",
+ "outLabel":16501,
- "installed":true,
- "interface":"eth-rt4-2"
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16061,
++ "installed":true,
++ "interface":"eth-rt4-2"
++ },
++ {
++ "type":"SR (IS-IS)",
+ "outLabel":16501,
- "installed":true,
- "interface":"eth-rt4-1"
++ "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_ip_route.ref b/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ip_route.ref
index 5a4e1ce033..8c37180daf 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ip_route.ref
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ip_route.ref
@@ -26,21 +26,23 @@
],
"backupNexthops":[
{
- "ip":"10.0.5.5",
+ "ip":"10.0.4.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
- 16040
+ 16040,
+ 16010
]
},
{
- "ip":"10.0.4.5",
+ "ip":"10.0.5.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
- 16040
+ 16040,
+ 16010
]
}
]
@@ -73,21 +75,23 @@
],
"backupNexthops":[
{
- "ip":"10.0.5.5",
+ "ip":"10.0.4.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
- 16040
+ 16040,
+ 16020
]
},
{
- "ip":"10.0.4.5",
+ "ip":"10.0.5.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
- 16040
+ 16040,
+ 16020
]
}
]
@@ -152,6 +156,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt5-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -162,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
+ ]
+ }
]
}
],
@@ -185,6 +207,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt5-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16060
]
@@ -195,10 +220,21 @@
"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
+ }
]
}
],
@@ -230,16 +266,22 @@
],
"backupNexthops":[
{
- "ip":"10.0.5.5",
+ "ip":"10.0.4.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-2",
- "active":true
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+ 16040
+ ]
},
{
- "ip":"10.0.4.5",
+ "ip":"10.0.5.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-1",
- "active":true
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+ 16040
+ ]
}
]
}
@@ -268,15 +310,15 @@
],
"backupNexthops":[
{
- "ip":"10.0.5.5",
+ "ip":"10.0.4.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true
},
{
- "ip":"10.0.4.5",
+ "ip":"10.0.5.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true
}
]
@@ -306,15 +348,15 @@
],
"backupNexthops":[
{
- "ip":"10.0.5.5",
+ "ip":"10.0.4.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true
},
{
- "ip":"10.0.4.5",
+ "ip":"10.0.5.5",
"afi":"ipv4",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true
}
]
@@ -330,13 +372,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
+ ]
}
]
}
@@ -352,12 +411,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
+ ]
}
]
}
@@ -377,13 +453,27 @@
"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,
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "ip":"10.0.1.2",
+ "afi":"ipv4",
+ "interfaceName":"eth-sw1",
"active":true
}
]
@@ -438,14 +528,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/step1/show_ipv6_route.ref b/tests/topotests/isis-tilfa-topo1/rt3/step1/show_ipv6_route.ref
index 525a87f31d..5ddb24af5a 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
@@ -26,18 +26,20 @@
"backupNexthops":[
{
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
- 16041
+ 16041,
+ 16011
]
},
{
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
- 16041
+ 16041,
+ 16011
]
}
]
@@ -70,18 +72,20 @@
"backupNexthops":[
{
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
- 16041
+ 16041,
+ 16021
]
},
{
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
- 16041
+ 16041,
+ 16021
]
}
]
@@ -100,7 +104,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-sw1",
"active":true,
"labels":[
16041
@@ -109,7 +113,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
16041
@@ -118,7 +122,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
16041
@@ -142,6 +146,9 @@
"afi":"ipv6",
"interfaceName":"eth-rt5-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -151,10 +158,24 @@
"afi":"ipv6",
"interfaceName":"eth-rt5-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true,
+ "labels":[
+ 16041,
+ 16051
+ ]
+ }
]
}
],
@@ -173,6 +194,9 @@
"afi":"ipv6",
"interfaceName":"eth-rt5-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16061
]
@@ -182,10 +206,20 @@
"afi":"ipv6",
"interfaceName":"eth-rt5-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16061
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-sw1",
+ "active":true
+ }
]
}
]
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 13f5f2c703..f68d1f4244 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
@@ -18,12 +18,12 @@
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5"
}
]
},
@@ -46,12 +46,12 @@
{
"type":"SR (IS-IS)",
"outLabel":16041,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2"
}
]
},
@@ -74,12 +74,12 @@
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5"
},
{
"type":"SR (IS-IS)",
"outLabel":16040,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5"
}
]
},
@@ -102,12 +102,12 @@
{
"type":"SR (IS-IS)",
"outLabel":16041,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1"
},
{
"type":"SR (IS-IS)",
"outLabel":16041,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2"
}
]
},
@@ -119,7 +119,7 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.1.2"
+ "nexthop":"10.0.5.5"
},
{
"type":"SR (IS-IS)",
@@ -131,7 +131,7 @@
"type":"SR (IS-IS)",
"outLabel":16040,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.1.2"
}
]
},
@@ -143,7 +143,7 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-sw1"
+ "interface":"eth-rt5-2"
},
{
"type":"SR (IS-IS)",
@@ -155,7 +155,7 @@
"type":"SR (IS-IS)",
"outLabel":16041,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-sw1"
}
]
},
@@ -167,13 +167,26 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "nexthop":"10.0.1.2"
}
]
},
@@ -185,13 +198,26 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
+ "interface":"eth-sw1"
}
]
},
@@ -203,13 +229,26 @@
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16060,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.1.2"
}
]
},
@@ -221,13 +260,26 @@
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16061,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-sw1"
}
]
}
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff
index e5fe6e7589..707f95495d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt3/step3/show_ip_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt3/step4/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -15,34 +15,10 @@
+--- rt3/step3/show_ip_route.ref 2020-09-25 17:48:05.506916984 -0300
++++ rt3/step4/show_ip_route.ref 2020-09-25 17:49:01.963652403 -0300
+@@ -15,36 +15,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -15,27 +15,29 @@
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.5.5",
+- "ip":"10.0.4.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
+- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16040
+- 16040,
+- 16010
- ]
- },
- {
-- "ip":"10.0.4.5",
+- "ip":"10.0.5.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
+- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16040
+- 16040,
+- 16010
- ]
- }
]
}
],
-@@ -62,34 +38,10 @@
+@@ -64,36 +38,10 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -50,27 +52,29 @@
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.5.5",
+- "ip":"10.0.4.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
+- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16040
+- 16040,
+- 16020
- ]
- },
- {
-- "ip":"10.0.4.5",
+- "ip":"10.0.5.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
+- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16040
+- 16040,
+- 16020
- ]
- }
]
}
],
-@@ -108,30 +60,21 @@
+@@ -112,30 +60,21 @@
"ip":"10.0.1.2",
"afi":"ipv4",
"interfaceName":"eth-sw1",
@@ -104,7 +108,43 @@
}
]
}
-@@ -212,34 +155,12 @@
+@@ -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
+- ]
+- }
+ ]
+ }
+ ],
+@@ -248,40 +169,12 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -127,17 +167,122 @@
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.5.5",
+- "ip":"10.0.4.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-2",
-- "active":true
+- "interfaceName":"eth-rt5-1",
+- "active":true,
+- "labels":[
+- 16040
+- ]
- },
- {
-- "ip":"10.0.4.5",
+- "ip":"10.0.5.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt5-1",
-- "active":true
+- "interfaceName":"eth-rt5-2",
+- "active":true,
+- "labels":[
+- 16040
+- ]
+ "interfaceName":"eth-sw1"
}
]
}
+@@ -372,30 +265,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
+ }
+ ]
+ }
+@@ -411,29 +287,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"
+ }
+ ]
+ }
+@@ -528,31 +387,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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ipv6_route.ref.diff
index ccfbbeae69..76d0ebc913 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step4/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt3/step3/show_ipv6_route.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt3/step4/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -14,32 +14,10 @@
+--- rt3/step3/show_ipv6_route.ref 2020-09-25 17:48:06.790933702 -0300
++++ rt3/step4/show_ipv6_route.ref 2020-09-25 17:49:03.199668512 -0300
+@@ -14,34 +14,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -16,24 +16,26 @@
- "backupNexthops":[
- {
- "afi":"ipv6",
-- "interfaceName":"eth-rt5-2",
+- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16041
+- 16041,
+- 16011
- ]
- },
- {
- "afi":"ipv6",
-- "interfaceName":"eth-rt5-1",
+- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16041
+- 16041,
+- 16011
- ]
- }
]
}
],
-@@ -58,32 +36,10 @@
+@@ -60,34 +36,10 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -49,27 +51,29 @@
- "backupNexthops":[
- {
- "afi":"ipv6",
-- "interfaceName":"eth-rt5-2",
+- "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
-- 16041
+- 16041,
+- 16021
- ]
- },
- {
- "afi":"ipv6",
-- "interfaceName":"eth-rt5-1",
+- "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
-- 16041
+- 16041,
+- 16021
- ]
- }
]
}
],
-@@ -101,28 +57,19 @@
+@@ -105,28 +57,19 @@
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-sw1",
- "active":true,
- "labels":[
- 16041
@@ -79,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
- "active":true,
- "labels":[
- 16041
@@ -89,7 +93,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt5-1",
- "active":true,
- "labels":[
- 16041
@@ -98,3 +102,38 @@
}
]
}
+@@ -146,9 +89,6 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 3
+ ]
+@@ -158,24 +98,10 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step4/show_mpls_table.ref.diff
index 64a8689a82..b888c9d273 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step4/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt3/step3/show_mpls_table.ref 2020-08-31 22:42:48.835561429 -0300
-+++ rt3/step4/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
+--- rt3/step3/show_mpls_table.ref 2020-09-25 17:48:04.214900164 -0300
++++ rt3/step4/show_mpls_table.ref 2020-09-25 17:49:00.759636711 -0300
@@ -7,23 +7,7 @@
"type":"SR (IS-IS)",
"outLabel":3,
@@ -15,12 +15,12 @@
- {
- "type":"SR (IS-IS)",
- "outLabel":16040,
-- "nexthop":"10.0.5.5"
+- "nexthop":"10.0.4.5"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16040,
-- "nexthop":"10.0.4.5"
+- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.1.1"
}
]
@@ -40,12 +40,12 @@
- {
- "type":"SR (IS-IS)",
- "outLabel":16041,
-- "interface":"eth-rt5-2"
+- "interface":"eth-rt5-1"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16041,
-- "interface":"eth-rt5-1"
+- "interface":"eth-rt5-2"
+ "interface":"eth-sw1"
}
]
@@ -65,17 +65,17 @@
- {
- "type":"SR (IS-IS)",
- "outLabel":16040,
-- "nexthop":"10.0.5.5"
+- "nexthop":"10.0.4.5"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16040,
-- "nexthop":"10.0.4.5"
+- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.1.2"
}
]
},
-@@ -91,71 +43,7 @@
+@@ -91,70 +43,6 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
@@ -90,12 +90,12 @@
- {
- "type":"SR (IS-IS)",
- "outLabel":16041,
-- "interface":"eth-rt5-2"
+- "interface":"eth-rt5-1"
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":16041,
-- "interface":"eth-rt5-1"
+- "interface":"eth-rt5-2"
- }
- ]
- },
@@ -107,7 +107,7 @@
- "type":"SR (IS-IS)",
- "outLabel":16040,
- "installed":true,
-- "nexthop":"10.0.1.2"
+- "nexthop":"10.0.5.5"
- },
- {
- "type":"SR (IS-IS)",
@@ -119,7 +119,7 @@
- "type":"SR (IS-IS)",
- "outLabel":16040,
- "installed":true,
-- "nexthop":"10.0.5.5"
+- "nexthop":"10.0.1.2"
- }
- ]
- },
@@ -131,7 +131,7 @@
- "type":"SR (IS-IS)",
- "outLabel":16041,
- "installed":true,
- "interface":"eth-sw1"
+- "interface":"eth-rt5-2"
- },
- {
- "type":"SR (IS-IS)",
@@ -143,7 +143,64 @@
- "type":"SR (IS-IS)",
- "outLabel":16041,
- "installed":true,
-- "interface":"eth-rt5-2"
+ "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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ip_route.ref.diff
index de265cc255..8eac75bec7 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt3/step4/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step5/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -15,10 +15,34 @@
+--- rt3/step4/show_ip_route.ref 2020-09-25 17:49:01.963652403 -0300
++++ rt3/step5/show_ip_route.ref 2020-09-25 17:50:12.592573438 -0300
+@@ -15,10 +15,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -15,27 +15,29 @@
+ ],
+ "backupNexthops":[
+ {
-+ "ip":"10.0.5.5",
++ "ip":"10.0.4.5",
+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-2",
++ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
-+ 16040
++ 16040,
++ 16010
+ ]
+ },
+ {
-+ "ip":"10.0.4.5",
++ "ip":"10.0.5.5",
+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-1",
++ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
-+ 16040
++ 16040,
++ 16010
+ ]
+ }
]
}
],
-@@ -38,10 +62,34 @@
+@@ -38,10 +64,36 @@
"afi":"ipv4",
"interfaceName":"eth-sw1",
"active":true,
@@ -50,27 +52,29 @@
+ ],
+ "backupNexthops":[
+ {
-+ "ip":"10.0.5.5",
++ "ip":"10.0.4.5",
+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-2",
++ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
-+ 16040
++ 16040,
++ 16020
+ ]
+ },
+ {
-+ "ip":"10.0.4.5",
++ "ip":"10.0.5.5",
+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-1",
++ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
-+ 16040
++ 16040,
++ 16020
+ ]
+ }
]
}
],
-@@ -60,21 +108,30 @@
+@@ -60,21 +112,30 @@
"ip":"10.0.1.2",
"afi":"ipv4",
"interfaceName":"eth-sw1",
@@ -104,7 +108,43 @@
}
]
}
-@@ -155,12 +212,34 @@
+@@ -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
++ ]
++ }
+ ]
+ }
+ ],
+@@ -169,12 +248,40 @@
{
"ip":"10.0.1.1",
"afi":"ipv4",
@@ -128,16 +168,121 @@
+ ],
+ "backupNexthops":[
+ {
-+ "ip":"10.0.5.5",
++ "ip":"10.0.4.5",
+ "afi":"ipv4",
-+ "interfaceName":"eth-rt5-2",
-+ "active":true
++ "interfaceName":"eth-rt5-1",
++ "active":true,
++ "labels":[
++ 16040
++ ]
+ },
+ {
-+ "ip":"10.0.4.5",
++ "ip":"10.0.5.5",
+ "afi":"ipv4",
++ "interfaceName":"eth-rt5-2",
++ "active":true,
++ "labels":[
++ 16040
++ ]
+ }
+ ]
+ }
+@@ -265,13 +372,30 @@
+ {
+ "ip":"10.0.4.5",
+ "afi":"ipv4",
+- "interfaceName":"eth-rt5-1"
+ "interfaceName":"eth-rt5-1",
-+ "active":true
++ "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
++ ]
+ }
+ ]
+ }
+@@ -287,12 +411,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
++ ]
+ }
+ ]
+ }
+@@ -387,14 +528,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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ipv6_route.ref.diff
index 947d4271e8..fc55267ad1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step5/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt3/step4/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step5/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -14,10 +14,32 @@
+--- rt3/step4/show_ipv6_route.ref 2020-09-25 17:49:03.199668512 -0300
++++ rt3/step5/show_ipv6_route.ref 2020-09-25 17:50:13.840589722 -0300
+@@ -14,10 +14,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -16,24 +16,26 @@
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-2",
++ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
-+ 16041
++ 16041,
++ 16011
+ ]
+ },
+ {
+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-1",
++ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
-+ 16041
++ 16041,
++ 16011
+ ]
+ }
]
}
],
-@@ -36,10 +58,32 @@
+@@ -36,10 +60,34 @@
"afi":"ipv6",
"interfaceName":"eth-sw1",
"active":true,
@@ -49,27 +51,29 @@
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-2",
++ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
-+ 16041
++ 16041,
++ 16021
+ ]
+ },
+ {
+ "afi":"ipv6",
-+ "interfaceName":"eth-rt5-1",
++ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
-+ 16041
++ 16041,
++ 16021
+ ]
+ }
]
}
],
-@@ -57,19 +101,28 @@
+@@ -57,19 +105,28 @@
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-sw1",
- "active":true
+ "active":true,
+ "labels":[
@@ -79,7 +83,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt5-1",
+ "interfaceName":"eth-rt5-2",
- "active":true
+ "active":true,
+ "labels":[
@@ -89,7 +93,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-sw1",
+ "interfaceName":"eth-rt5-1",
- "active":true
+ "active":true,
+ "labels":[
@@ -98,3 +102,38 @@
}
]
}
+@@ -89,6 +146,9 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-2",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
+@@ -98,10 +158,24 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5-1",
+ "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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step5/show_mpls_table.ref.diff
index 3dd237b91b..4ed491e241 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step5/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt3/step4/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step5/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
+--- rt3/step4/show_mpls_table.ref 2020-09-25 17:49:00.759636711 -0300
++++ rt3/step5/show_mpls_table.ref 2020-09-25 17:50:11.280556320 -0300
@@ -7,7 +7,23 @@
"type":"SR (IS-IS)",
"outLabel":3,
@@ -16,12 +16,12 @@
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
-+ "nexthop":"10.0.5.5"
++ "nexthop":"10.0.4.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
-+ "nexthop":"10.0.4.5"
++ "nexthop":"10.0.5.5"
}
]
},
@@ -41,12 +41,12 @@
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
-+ "interface":"eth-rt5-2"
++ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
-+ "interface":"eth-rt5-1"
++ "interface":"eth-rt5-2"
}
]
},
@@ -66,12 +66,12 @@
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
-+ "nexthop":"10.0.5.5"
++ "nexthop":"10.0.4.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
-+ "nexthop":"10.0.4.5"
++ "nexthop":"10.0.5.5"
}
]
},
@@ -90,12 +90,12 @@
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
-+ "interface":"eth-rt5-2"
++ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16041,
-+ "interface":"eth-rt5-1"
++ "interface":"eth-rt5-2"
+ }
+ ]
+ },
@@ -107,13 +107,13 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
-+ "nexthop":"10.0.4.5"
++ "nexthop":"10.0.5.5"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16040,
+ "installed":true,
-+ "nexthop":"10.0.5.5"
++ "nexthop":"10.0.4.5"
+ },
+ {
+ "type":"SR (IS-IS)",
@@ -131,13 +131,13 @@
+ "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-rt5-2"
++ "interface":"eth-rt5-1"
+ },
+ {
+ "type":"SR (IS-IS)",
@@ -146,3 +146,61 @@
"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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ip_route.ref.diff
index 00f0bb031a..9273c75352 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ip_route.ref.diff
@@ -1,42 +1,42 @@
---- rt3/step5/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step6/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
+--- rt3/step5/show_ip_route.ref 2020-09-25 17:50:12.592573438 -0300
++++ rt3/step6/show_ip_route.ref 2020-09-25 17:51:15.521394894 -0300
@@ -31,7 +31,7 @@
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
-- 16040
-+ 30040
+- 16040,
++ 30040,
+ 16010
]
},
- {
-@@ -40,7 +40,7 @@
- "interfaceName":"eth-rt5-1",
+@@ -41,7 +41,7 @@
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
-- 16040
-+ 30040
+- 16040,
++ 30040,
+ 16010
]
}
- ]
-@@ -78,7 +78,7 @@
- "interfaceName":"eth-rt5-2",
+@@ -80,7 +80,7 @@
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
-- 16040
-+ 30040
+- 16040,
++ 30040,
+ 16020
]
},
- {
-@@ -87,7 +87,7 @@
- "interfaceName":"eth-rt5-1",
+@@ -90,7 +90,7 @@
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
-- 16040
-+ 30040
+- 16040,
++ 30040,
+ 16020
]
}
- ]
-@@ -120,7 +120,7 @@
+@@ -124,7 +124,7 @@
"interfaceName":"eth-rt5-1",
"active":true,
"labels":[
@@ -45,7 +45,7 @@
]
},
{
-@@ -130,7 +130,7 @@
+@@ -134,7 +134,7 @@
"interfaceName":"eth-rt5-2",
"active":true,
"labels":[
@@ -54,21 +54,48 @@
]
}
]
-@@ -186,7 +186,7 @@
- "interfaceName":"eth-rt5-1",
+@@ -185,7 +185,7 @@
"active":true,
"labels":[
+ 16040,
+- 16050
++ 30050
+ ]
+ }
+ ]
+@@ -211,7 +211,7 @@
+ 0
+ ],
+ "labels":[
- 16060
+ 30060
]
},
{
-@@ -196,7 +196,7 @@
- "interfaceName":"eth-rt5-2",
- "active":true,
+@@ -224,7 +224,7 @@
+ 0
+ ],
"labels":[
- 16060
+ 30060
]
}
+ ],
+@@ -271,7 +271,7 @@
+ "interfaceName":"eth-rt5-1",
+ "active":true,
+ "labels":[
+- 16040
++ 30040
+ ]
+ },
+ {
+@@ -280,7 +280,7 @@
+ "interfaceName":"eth-rt5-2",
+ "active":true,
+ "labels":[
+- 16040
++ 30040
+ ]
+ }
]
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff
index 823cd4591f..f50be893e4 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step6/show_ipv6_route.ref.diff
@@ -1,42 +1,42 @@
---- rt3/step5/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step6/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
+--- rt3/step5/show_ipv6_route.ref 2020-09-25 17:50:13.840589722 -0300
++++ rt3/step6/show_ipv6_route.ref 2020-09-25 17:51:16.757411035 -0300
@@ -29,7 +29,7 @@
- "interfaceName":"eth-rt5-2",
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
-- 16041
-+ 30041
+- 16041,
++ 30041,
+ 16011
]
},
- {
-@@ -37,7 +37,7 @@
- "interfaceName":"eth-rt5-1",
+@@ -38,7 +38,7 @@
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
-- 16041
-+ 30041
+- 16041,
++ 30041,
+ 16011
]
}
- ]
-@@ -73,7 +73,7 @@
- "interfaceName":"eth-rt5-2",
+@@ -75,7 +75,7 @@
+ "interfaceName":"eth-rt5-1",
"active":true,
"labels":[
-- 16041
-+ 30041
+- 16041,
++ 30041,
+ 16021
]
},
- {
-@@ -81,7 +81,7 @@
- "interfaceName":"eth-rt5-1",
+@@ -84,7 +84,7 @@
+ "interfaceName":"eth-rt5-2",
"active":true,
"labels":[
-- 16041
-+ 30041
+- 16041,
++ 30041,
+ 16021
]
}
- ]
-@@ -103,7 +103,7 @@
+@@ -116,7 +116,7 @@
"interfaceName":"eth-rt5-2",
"active":true,
"labels":[
@@ -45,30 +45,39 @@
]
},
{
-@@ -112,7 +112,7 @@
+@@ -125,7 +125,7 @@
"interfaceName":"eth-rt5-1",
"active":true,
"labels":[
- 16041
+ 30041
]
- },
- {
-@@ -174,7 +174,7 @@
- "interfaceName":"eth-rt5-2",
+ }
+ ]
+@@ -173,7 +173,7 @@
"active":true,
"labels":[
+ 16041,
+- 16051
++ 30051
+ ]
+ }
+ ]
+@@ -198,7 +198,7 @@
+ 0
+ ],
+ "labels":[
- 16061
+ 30061
]
},
{
-@@ -183,7 +183,7 @@
- "interfaceName":"eth-rt5-1",
- "active":true,
+@@ -210,7 +210,7 @@
+ 0
+ ],
"labels":[
- 16061
+ 30061
]
}
- ]
+ ],
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff
index 1ad228b9c2..b63a728ef1 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step6/show_mpls_table.ref.diff
@@ -1,18 +1,18 @@
---- rt3/step5/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step6/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
+--- rt3/step5/show_mpls_table.ref 2020-09-25 17:50:11.280556320 -0300
++++ rt3/step6/show_mpls_table.ref 2020-09-25 17:51:14.281378700 -0300
@@ -17,12 +17,12 @@
"backupNexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16040,
+ "outLabel":30040,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5"
},
{
"type":"SR (IS-IS)",
- "outLabel":16040,
+ "outLabel":30040,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5"
}
]
@@ -45,12 +45,12 @@
@@ -21,13 +21,13 @@
"type":"SR (IS-IS)",
- "outLabel":16041,
+ "outLabel":30041,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1"
},
{
"type":"SR (IS-IS)",
- "outLabel":16041,
+ "outLabel":30041,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2"
}
]
@@ -73,12 +73,12 @@
@@ -36,13 +36,13 @@
"type":"SR (IS-IS)",
- "outLabel":16040,
+ "outLabel":30040,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5"
},
{
"type":"SR (IS-IS)",
- "outLabel":16040,
+ "outLabel":30040,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5"
}
]
@@ -101,12 +101,12 @@
@@ -51,13 +51,13 @@
"type":"SR (IS-IS)",
- "outLabel":16041,
+ "outLabel":30041,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1"
},
{
"type":"SR (IS-IS)",
- "outLabel":16041,
+ "outLabel":30041,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2"
}
]
@@ -117,13 +117,13 @@
@@ -67,14 +67,14 @@
- "outLabel":16040,
+ "outLabel":30040,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5"
},
{
"type":"SR (IS-IS)",
- "outLabel":16040,
+ "outLabel":30040,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5"
},
@@ -141,13 +141,13 @@
"nexthops":[
@@ -83,44 +83,48 @@
- "outLabel":16041,
+ "outLabel":30041,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2"
},
{
"type":"SR (IS-IS)",
- "outLabel":16041,
+ "outLabel":30041,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1"
},
-@@ -201,13 +201,13 @@
+@@ -227,7 +227,7 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16060,
+ "outLabel":30060,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5",
+ "backupIndex":[
+@@ -236,7 +236,7 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":16060,
+ "outLabel":30060,
"installed":true,
- "nexthop":"10.0.5.5"
- }
-@@ -219,13 +219,13 @@
+ "nexthop":"10.0.4.5",
+ "backupIndex":[
+@@ -258,7 +258,7 @@
"nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16061,
+ "outLabel":30061,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+@@ -267,7 +267,7 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":16061,
+ "outLabel":30061,
"installed":true,
- "interface":"eth-rt5-2"
- }
+ "interface":"eth-rt5-1",
+ "backupIndex":[
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff
index bee7c568e7..0ae87afa3b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ip_route.ref.diff
@@ -1,25 +1,32 @@
---- rt3/step6/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step7/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -151,20 +151,14 @@
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true,
+--- rt3/step6/show_ip_route.ref 2020-09-25 17:51:15.521394894 -0300
++++ rt3/step7/show_ip_route.ref 2020-09-25 17:52:02.414007470 -0300
+@@ -158,9 +158,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
+ ]
},
{
- "fib":true,
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true,
+@@ -171,9 +168,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
+ ]
+ }
+ ],
+@@ -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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ipv6_route.ref.diff
index 05b4080304..f392f644c0 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step7/show_ipv6_route.ref.diff
@@ -1,24 +1,32 @@
---- rt3/step6/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step7/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -141,19 +141,13 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-2",
-- "active":true,
+--- rt3/step6/show_ipv6_route.ref 2020-09-25 17:51:16.757411035 -0300
++++ rt3/step7/show_ipv6_route.ref 2020-09-25 17:52:03.650023622 -0300
+@@ -148,9 +148,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
+ ]
},
{
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-1",
-- "active":true,
+@@ -160,9 +157,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
- "labels":[
- 3
-- ]
-+ "active":true
+ ]
+ }
+ ],
+@@ -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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step7/show_mpls_table.ref.diff
index 3fb37faea6..b74eb9579c 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step7/show_mpls_table.ref.diff
@@ -1,6 +1,6 @@
---- rt3/step6/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step7/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -159,42 +159,6 @@
+--- rt3/step6/show_mpls_table.ref 2020-09-25 17:51:14.281378700 -0300
++++ rt3/step7/show_mpls_table.ref 2020-09-25 17:52:01.181991371 -0300
+@@ -159,68 +159,6 @@
}
]
},
@@ -12,13 +12,26 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.4.5"
+- "nexthop":"10.0.5.5",
+- "backupIndex":[
+- 0
+- ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "nexthop":"10.0.5.5"
+- "nexthop":"10.0.4.5",
+- "backupIndex":[
+- 0
+- ]
+- }
+- ],
+- "backupNexthops":[
+- {
+- "type":"SR (IS-IS)",
+- "outLabel":16040,
+- "nexthop":"10.0.1.2"
- }
- ]
- },
@@ -30,13 +43,26 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5-1"
+- "interface":"eth-rt5-2",
+- "backupIndex":[
+- 0
+- ]
- },
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
- "installed":true,
-- "interface":"eth-rt5-2"
+- "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/step8/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ip_route.ref.diff
index c31d25261c..25b42f2825 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ip_route.ref.diff
@@ -1,25 +1,32 @@
---- rt3/step7/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step8/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -151,14 +151,20 @@
- "ip":"10.0.4.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-1",
-- "active":true
-+ "active":true,
+--- rt3/step7/show_ip_route.ref 2020-09-25 17:52:02.414007470 -0300
++++ rt3/step8/show_ip_route.ref 2020-09-25 17:53:20.419027241 -0300
+@@ -158,6 +158,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
+ "labels":[
+ 3
-+ ]
+ ]
},
{
- "fib":true,
- "ip":"10.0.5.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5-2",
-- "active":true
-+ "active":true,
+@@ -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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ipv6_route.ref.diff
index 759f28d263..42d9356c8a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step8/show_ipv6_route.ref.diff
@@ -1,24 +1,32 @@
---- rt3/step7/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step8/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -141,13 +141,19 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-2",
-- "active":true
-+ "active":true,
+--- rt3/step7/show_ipv6_route.ref 2020-09-25 17:52:03.650023622 -0300
++++ rt3/step8/show_ipv6_route.ref 2020-09-25 17:53:21.643043250 -0300
+@@ -148,6 +148,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
+ "labels":[
+ 3
-+ ]
+ ]
},
{
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5-1",
-- "active":true
-+ "active":true,
+@@ -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.diff b/tests/topotests/isis-tilfa-topo1/rt3/step8/show_mpls_table.ref.diff
index 0c2c8e2b09..bd40f954eb 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step8/show_mpls_table.ref.diff
@@ -1,6 +1,6 @@
---- rt3/step7/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step8/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -159,6 +159,42 @@
+--- rt3/step7/show_mpls_table.ref 2020-09-25 17:52:01.181991371 -0300
++++ rt3/step8/show_mpls_table.ref 2020-09-25 17:53:19.135010448 -0300
+@@ -159,6 +159,68 @@
}
]
},
@@ -12,13 +12,26 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
-+ "nexthop":"10.0.4.5"
++ "nexthop":"10.0.5.5",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
-+ "nexthop":"10.0.5.5"
++ "nexthop":"10.0.4.5",
++ "backupIndex":[
++ 0
++ ]
++ }
++ ],
++ "backupNexthops":[
++ {
++ "type":"SR (IS-IS)",
++ "outLabel":16040,
++ "nexthop":"10.0.1.2"
+ }
+ ]
+ },
@@ -30,13 +43,26 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
-+ "interface":"eth-rt5-1"
++ "interface":"eth-rt5-2",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
-+ "interface":"eth-rt5-2"
++ "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_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ip_route.ref.diff
index e69de29bb2..687e84ad40 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ip_route.ref.diff
@@ -0,0 +1,11 @@
+--- rt3/step8/show_ip_route.ref 2020-09-25 17:53:20.419027241 -0300
++++ rt3/step9/show_ip_route.ref 2020-09-25 17:54:38.112043759 -0300
+@@ -185,7 +185,7 @@
+ "active":true,
+ "labels":[
+ 16040,
+- 30050
++ 30500
+ ]
+ }
+ ]
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ipv6_route.ref.diff
index e69de29bb2..4b76be66ac 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step9/show_ipv6_route.ref.diff
@@ -0,0 +1,11 @@
+--- rt3/step8/show_ipv6_route.ref 2020-09-25 17:53:21.643043250 -0300
++++ rt3/step9/show_ipv6_route.ref 2020-09-25 17:54:39.320059571 -0300
+@@ -173,7 +173,7 @@
+ "active":true,
+ "labels":[
+ 16041,
+- 30051
++ 30501
+ ]
+ }
+ ]
diff --git a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff
index b0a4851750..6f6451e510 100644
--- a/tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt3/step9/show_mpls_table.ref.diff
@@ -1,6 +1,6 @@
---- rt3/step8/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt3/step9/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -159,73 +159,73 @@
+--- rt3/step8/show_mpls_table.ref 2020-09-25 17:53:19.135010448 -0300
++++ rt3/step9/show_mpls_table.ref 2020-09-25 17:54:36.852027268 -0300
+@@ -159,13 +159,13 @@
}
]
},
@@ -15,14 +15,24 @@
- "outLabel":3,
+ "outLabel":30060,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5",
+ "backupIndex":[
+@@ -174,7 +174,7 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":3,
+ "outLabel":30060,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5",
+ "backupIndex":[
+@@ -185,18 +185,18 @@
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+- "outLabel":16040,
++ "outLabel":3,
+ "nexthop":"10.0.1.2"
}
]
},
@@ -37,14 +47,24 @@
- "outLabel":3,
+ "outLabel":30061,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+@@ -205,7 +205,7 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":3,
+ "outLabel":30061,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+@@ -216,18 +216,18 @@
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+- "outLabel":16041,
++ "outLabel":3,
+ "interface":"eth-sw1"
}
]
},
@@ -59,14 +79,24 @@
- "outLabel":30060,
+ "outLabel":3,
"installed":true,
- "nexthop":"10.0.4.5"
+ "nexthop":"10.0.5.5",
+ "backupIndex":[
+@@ -236,7 +236,7 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":30060,
+ "outLabel":3,
"installed":true,
- "nexthop":"10.0.5.5"
+ "nexthop":"10.0.4.5",
+ "backupIndex":[
+@@ -247,18 +247,18 @@
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+- "outLabel":3,
++ "outLabel":16040,
+ "nexthop":"10.0.1.2"
}
]
},
@@ -81,12 +111,23 @@
- "outLabel":30061,
+ "outLabel":3,
"installed":true,
- "interface":"eth-rt5-1"
+ "interface":"eth-rt5-2",
+ "backupIndex":[
+@@ -267,7 +267,7 @@
},
{
"type":"SR (IS-IS)",
- "outLabel":30061,
+ "outLabel":3,
"installed":true,
- "interface":"eth-rt5-2"
+ "interface":"eth-rt5-1",
+ "backupIndex":[
+@@ -278,7 +278,7 @@
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+- "outLabel":3,
++ "outLabel":16041,
+ "interface":"eth-sw1"
}
+ ]
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref b/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref
index 3ee587ac49..168b90a3f6 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step1/show_ip_route.ref
@@ -15,6 +15,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16010
]
@@ -25,10 +28,21 @@
"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
+ }
]
}
],
@@ -48,6 +62,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -58,10 +75,25 @@
"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
+ ]
+ }
]
}
],
@@ -137,10 +169,7 @@
"ip":"10.0.7.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -174,10 +203,7 @@
"ip":"10.0.6.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -197,13 +223,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
}
]
@@ -219,13 +259,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
+ ]
}
]
}
@@ -241,12 +298,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
+ ]
}
]
}
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 2f6b703d93..a4442ee089 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,8 +12,11 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16011
]
@@ -21,12 +24,22 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16011
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true
+ }
]
}
],
@@ -43,8 +56,11 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -52,12 +68,26 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+ 16031,
+ 16021
+ ]
+ }
]
}
],
@@ -74,7 +104,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-2",
+ "interfaceName":"eth-rt2-1",
"active":true,
"labels":[
16031
@@ -92,7 +122,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt2-1",
+ "interfaceName":"eth-rt2-2",
"active":true,
"labels":[
16031
@@ -128,10 +158,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -163,10 +190,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
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 5433d4f100..18354e947d 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
@@ -7,13 +7,26 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.3.2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.2.2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.6.5"
}
]
},
@@ -25,13 +38,26 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt5"
}
]
},
@@ -43,13 +69,26 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.3.2"
+ "nexthop":"10.0.3.2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "nexthop":"10.0.2.2"
+ "nexthop":"10.0.2.2",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
+ "nexthop":"10.0.6.5"
}
]
},
@@ -61,13 +100,26 @@
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt2-2"
+ "interface":"eth-rt2-2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":3,
"installed":true,
- "interface":"eth-rt2-1"
+ "interface":"eth-rt2-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16031,
+ "interface":"eth-rt5"
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff
index 09a0eaa424..7dcdb744ac 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ip_route.ref.diff
@@ -1,58 +1,124 @@
---- rt4/step3/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step4/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -14,20 +14,14 @@
- "ip":"10.0.2.2",
+--- rt4/step3/show_ip_route.ref 2020-09-25 17:48:05.722919797 -0300
++++ rt4/step4/show_ip_route.ref 2020-09-25 17:49:02.163655010 -0300
+@@ -15,9 +15,6 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
-- "active":true,
-- "labels":[
-- 16010
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 16010
+ ]
+@@ -28,21 +25,10 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-2",
-- "active":true,
-- "labels":[
-- 16010
-- ]
-+ "active":true
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 16010
+ ]
}
+- ],
+- "backupNexthops":[
+- {
+- "ip":"10.0.6.5",
+- "afi":"ipv4",
+- "interfaceName":"eth-rt5",
+- "active":true
+- }
]
}
-@@ -47,20 +41,14 @@
- "ip":"10.0.2.2",
+ ],
+@@ -62,9 +48,6 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 3
+ ]
+@@ -75,25 +58,10 @@
"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":[
-- 3
+- 16030,
+- 16020
- ]
-+ "active":true
+- }
+ ]
+ }
+ ],
+@@ -156,21 +124,10 @@
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 3
+ ]
+ }
+- ],
+- "backupNexthops":[
+- {
+- "ip":"10.0.7.6",
+- "afi":"ipv4",
+- "interfaceName":"eth-rt6",
+- "active":true
+- }
+ ]
+ }
+ ],
+@@ -190,21 +147,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
+- }
]
}
-@@ -80,30 +68,21 @@
+ ],
+@@ -223,27 +169,13 @@
"ip":"10.0.2.2",
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
- "active":true,
-- "labels":[
-- 16030
+- "backupIndex":[
+- 0
- ]
+ "active":true
},
@@ -62,60 +128,68 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-2",
- "active":true,
-- "labels":[
-- 16030
+- "backupIndex":[
+- 0
- ]
-+ "active":true
- },
+- }
+- ],
+- "backupNexthops":[
+- {
+- "ip":"10.0.6.5",
+- "afi":"ipv4",
+- "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+@@ -259,30 +191,13 @@
{
- "fib":true,
- "ip":"10.0.6.5",
+ "ip":"10.0.2.2",
"afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16030
+- "interfaceName":"eth-rt2-1",
+- "backupIndex":[
+- 0
- ]
-+ "active":true
- }
- ]
- }
-@@ -123,24 +102,7 @@
- "ip":"10.0.6.5",
++ "interfaceName":"eth-rt2-1"
+ },
+ {
+ "ip":"10.0.3.2",
"afi":"ipv4",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt2-2",
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
- ]
- }
- ],
- "backupNexthops":[
- {
-- "ip":"10.0.7.6",
+- "ip":"10.0.6.5",
- "afi":"ipv4",
-- "interfaceName":"eth-rt6",
+- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 3
+- 16030
- ]
+ "active":true
}
]
}
-@@ -160,24 +122,7 @@
- "ip":"10.0.7.6",
+@@ -298,29 +213,12 @@
+ "ip":"10.0.2.2",
"afi":"ipv4",
- "interfaceName":"eth-rt6",
+ "interfaceName":"eth-rt2-1",
- "active":true,
- "backupIndex":[
- 0
-- ],
-- "labels":[
-- 3
+- ]
++ "active":true
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+- "interfaceName":"eth-rt2-2",
+- "backupIndex":[
+- 0
- ]
- }
- ],
@@ -126,13 +200,13 @@
- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 3
+- 16030
- ]
-+ "active":true
++ "interfaceName":"eth-rt2-2"
}
]
}
-@@ -266,31 +211,6 @@
+@@ -340,31 +238,6 @@
"ip":"10.0.6.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
@@ -164,7 +238,7 @@
"active":true
}
]
-@@ -311,31 +231,6 @@
+@@ -385,31 +258,6 @@
"ip":"10.0.6.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
@@ -196,7 +270,7 @@
"active":true
}
]
-@@ -351,18 +246,7 @@
+@@ -425,18 +273,7 @@
{
"ip":"10.0.6.5",
"afi":"ipv4",
@@ -216,7 +290,7 @@
}
]
}
-@@ -377,18 +261,7 @@
+@@ -451,18 +288,7 @@
{
"ip":"10.0.7.6",
"afi":"ipv4",
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff
index c1f9fa4bba..b84ceaff1a 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step4/show_ipv6_route.ref.diff
@@ -1,128 +1,110 @@
---- rt4/step3/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step4/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -13,19 +13,13 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "labels":[
-- 16011
-- ]
-+ "active":true
- },
- {
- "fib":true,
+--- rt4/step3/show_ipv6_route.ref 2020-09-25 17:48:06.998936410 -0300
++++ rt4/step4/show_ipv6_route.ref 2020-09-25 17:49:03.399671119 -0300
+@@ -14,9 +14,6 @@
"afi":"ipv6",
"interfaceName":"eth-rt2-1",
-- "active":true,
-- "labels":[
-- 16011
-- ]
-+ "active":true
- }
- ]
- }
-@@ -44,19 +38,13 @@
- "fib":true,
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 16011
+ ]
+@@ -26,20 +23,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt2-2",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 16011
+ ]
}
+- ],
+- "backupNexthops":[
+- {
+- "afi":"ipv6",
+- "interfaceName":"eth-rt5",
+- "active":true
+- }
]
}
-@@ -75,28 +63,19 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true,
-- "labels":[
-- 16031
-- ]
-+ "active":true
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 16031
-- ]
-+ "active":true
- },
- {
- "fib":true,
+ ],
+@@ -58,9 +45,6 @@
"afi":"ipv6",
"interfaceName":"eth-rt2-1",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 3
+ ]
+@@ -70,24 +54,10 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 3
+ ]
+ }
+- ],
+- "backupNexthops":[
+- {
+- "afi":"ipv6",
+- "interfaceName":"eth-rt5",
- "active":true,
- "labels":[
-- 16031
+- 16031,
+- 16021
- ]
-+ "active":true
- }
+- }
]
}
-@@ -115,23 +94,7 @@
- "fib":true,
+ ],
+@@ -146,20 +116,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt5",
-- "active":true,
+ "active":true,
- "backupIndex":[
- 0
- ],
-- "labels":[
-- 3
-- ]
-- }
+ "labels":[
+ 3
+ ]
+ }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
+- "active":true
+- }
]
}
-@@ -150,23 +113,7 @@
- "fib":true,
+ ],
+@@ -178,20 +138,10 @@
"afi":"ipv6",
"interfaceName":"eth-rt6",
-- "active":true,
+ "active":true,
- "backupIndex":[
- 0
- ],
-- "labels":[
-- 3
-- ]
-- }
+ "labels":[
+ 3
+ ]
+ }
- ],
- "backupNexthops":[
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
+- "active":true
+- }
]
}
+ ]
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff
index 710f81708b..70e0108b0d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step4/show_mpls_table.ref.diff
@@ -1,135 +1,125 @@
---- rt4/step3/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step4/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -1,210 +1,2 @@
- {
-- "16010":{
-- "inLabel":16010,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16010,
-- "installed":true,
-- "nexthop":"10.0.3.2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16010,
-- "installed":true,
-- "nexthop":"10.0.2.2"
-- }
-- ]
-- },
-- "16011":{
-- "inLabel":16011,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16011,
-- "installed":true,
-- "interface":"eth-rt2-2"
-- },
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16011,
-- "installed":true,
-- "interface":"eth-rt2-1"
+--- rt4/step3/show_mpls_table.ref 2020-09-25 17:48:04.418902820 -0300
++++ rt4/step4/show_mpls_table.ref 2020-09-25 17:49:00.959639319 -0300
+@@ -7,26 +7,13 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+- "nexthop":"10.0.3.2",
+- "backupIndex":[
+- 0
+- ]
++ "nexthop":"10.0.3.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+- "nexthop":"10.0.2.2",
+- "backupIndex":[
+- 0
+- ]
- }
-- ]
-- },
-- "16020":{
-- "inLabel":16020,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.3.2"
-- },
+- ],
+- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
-- "installed":true,
-- "nexthop":"10.0.2.2"
+- "nexthop":"10.0.6.5"
++ "nexthop":"10.0.2.2"
+ }
+ ]
+ },
+@@ -38,26 +25,13 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+- "interface":"eth-rt2-2",
+- "backupIndex":[
+- 0
+- ]
++ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+- "interface":"eth-rt2-1",
+- "backupIndex":[
+- 0
+- ]
- }
-- ]
-- },
-- "16021":{
-- "inLabel":16021,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt2-2"
-- },
+- ],
+- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":3,
-- "installed":true,
-- "interface":"eth-rt2-1"
+- "interface":"eth-rt5"
++ "interface":"eth-rt2-1"
+ }
+ ]
+ },
+@@ -69,26 +43,13 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "nexthop":"10.0.3.2",
+- "backupIndex":[
+- 0
+- ]
++ "nexthop":"10.0.3.2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "nexthop":"10.0.2.2",
+- "backupIndex":[
+- 0
+- ]
- }
-- ]
-- },
-- "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"
-- },
+- ],
+- "backupNexthops":[
- {
- "type":"SR (IS-IS)",
- "outLabel":16030,
-- "installed":true,
- "nexthop":"10.0.6.5"
++ "nexthop":"10.0.2.2"
+ }
+ ]
+ },
+@@ -100,26 +61,13 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "interface":"eth-rt2-2",
+- "backupIndex":[
+- 0
+- ]
++ "interface":"eth-rt2-2"
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "interface":"eth-rt2-1",
+- "backupIndex":[
+- 0
+- ]
- }
-- ]
-- },
-- "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"
-- },
+- ],
+- "backupNexthops":[
- {
- "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,
++ "interface":"eth-rt2-1"
+ }
+ ]
+ },
+@@ -179,17 +127,7 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
- "nexthop":"10.0.6.5",
- "backupIndex":[
- 0
@@ -141,17 +131,14 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "nexthop":"10.0.7.6"
-- }
-- ]
-- },
-- "16051":{
-- "inLabel":16051,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
++ "nexthop":"10.0.6.5"
+ }
+ ]
+ },
+@@ -201,17 +139,7 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
- "interface":"eth-rt5",
- "backupIndex":[
- 0
@@ -163,17 +150,14 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "interface":"eth-rt6"
-- }
-- ]
-- },
-- "16060":{
-- "inLabel":16060,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
++ "interface":"eth-rt5"
+ }
+ ]
+ },
+@@ -223,17 +151,7 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
- "nexthop":"10.0.7.6",
- "backupIndex":[
- 0
@@ -185,17 +169,14 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "nexthop":"10.0.6.5"
-- }
-- ]
-- },
-- "16061":{
-- "inLabel":16061,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "installed":true,
++ "nexthop":"10.0.7.6"
+ }
+ ]
+ },
+@@ -245,17 +163,7 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
- "interface":"eth-rt6",
- "backupIndex":[
- 0
@@ -207,7 +188,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "interface":"eth-rt5"
-- }
-- ]
-- }
- }
++ "interface":"eth-rt6"
+ }
+ ]
+ }
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff
index e19f6b293c..aa319a3232 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ip_route.ref.diff
@@ -1,59 +1,125 @@
---- rt4/step4/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step5/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -14,14 +14,20 @@
- "ip":"10.0.2.2",
+--- rt4/step4/show_ip_route.ref 2020-09-25 17:49:02.163655010 -0300
++++ rt4/step5/show_ip_route.ref 2020-09-25 17:50:12.800576153 -0300
+@@ -15,6 +15,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16010
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 16010
+ ]
+@@ -25,10 +28,21 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16010
-+ ]
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 16010
+ ]
}
++ ],
++ "backupNexthops":[
++ {
++ "ip":"10.0.6.5",
++ "afi":"ipv4",
++ "interfaceName":"eth-rt5",
++ "active":true
++ }
]
}
-@@ -41,14 +47,20 @@
- "ip":"10.0.2.2",
+ ],
+@@ -48,6 +62,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- },
- {
- "fib":true,
- "ip":"10.0.3.2",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
+@@ -58,10 +75,25 @@
"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":[
-+ 3
++ 16030,
++ 16020
+ ]
++ }
+ ]
+ }
+ ],
+@@ -124,10 +156,21 @@
+ "afi":"ipv4",
+ "interfaceName":"eth-rt5",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
+ }
++ ],
++ "backupNexthops":[
++ {
++ "ip":"10.0.7.6",
++ "afi":"ipv4",
++ "interfaceName":"eth-rt6",
++ "active":true
++ }
+ ]
+ }
+ ],
+@@ -147,10 +190,21 @@
+ "afi":"ipv4",
+ "interfaceName":"eth-rt6",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
}
++ ],
++ "backupNexthops":[
++ {
++ "ip":"10.0.6.5",
++ "afi":"ipv4",
++ "interfaceName":"eth-rt5",
++ "active":true
++ }
]
}
-@@ -68,21 +80,30 @@
+ ],
+@@ -169,13 +223,27 @@
"ip":"10.0.2.2",
"afi":"ipv4",
"interfaceName":"eth-rt2-1",
- "active":true
+ "active":true,
-+ "labels":[
-+ 16030
++ "backupIndex":[
++ 0
+ ]
},
{
@@ -61,62 +127,70 @@
"ip":"10.0.3.2",
"afi":"ipv4",
"interfaceName":"eth-rt2-2",
-- "active":true
+ "active":true,
-+ "labels":[
-+ 16030
++ "backupIndex":[
++ 0
+ ]
- },
++ }
++ ],
++ "backupNexthops":[
++ {
++ "ip":"10.0.6.5",
++ "afi":"ipv4",
++ "interfaceName":"eth-rt5",
+ "active":true
+ }
+ ]
+@@ -191,13 +259,30 @@
{
- "fib":true,
- "ip":"10.0.6.5",
+ "ip":"10.0.2.2",
"afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16030
+- "interfaceName":"eth-rt2-1"
++ "interfaceName":"eth-rt2-1",
++ "backupIndex":[
++ 0
+ ]
- }
- ]
- }
-@@ -102,7 +123,24 @@
- "ip":"10.0.6.5",
+ },
+ {
+ "ip":"10.0.3.2",
"afi":"ipv4",
- "interfaceName":"eth-rt5",
+ "interfaceName":"eth-rt2-2",
- "active":true
+ "active":true,
+ "backupIndex":[
+ 0
-+ ],
-+ "labels":[
-+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
-+ "ip":"10.0.7.6",
++ "ip":"10.0.6.5",
+ "afi":"ipv4",
-+ "interfaceName":"eth-rt6",
++ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
-+ 3
++ 16030
+ ]
}
]
}
-@@ -122,7 +160,24 @@
- "ip":"10.0.7.6",
+@@ -213,12 +298,29 @@
+ "ip":"10.0.2.2",
"afi":"ipv4",
- "interfaceName":"eth-rt6",
+ "interfaceName":"eth-rt2-1",
- "active":true
+ "active":true,
+ "backupIndex":[
+ 0
-+ ],
-+ "labels":[
-+ 3
++ ]
+ },
+ {
+ "ip":"10.0.3.2",
+ "afi":"ipv4",
+- "interfaceName":"eth-rt2-2"
++ "interfaceName":"eth-rt2-2",
++ "backupIndex":[
++ 0
+ ]
+ }
+ ],
@@ -127,12 +201,12 @@
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
-+ 3
++ 16030
+ ]
}
]
}
-@@ -211,6 +266,31 @@
+@@ -238,6 +340,31 @@
"ip":"10.0.6.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
@@ -164,7 +238,7 @@
"active":true
}
]
-@@ -231,6 +311,31 @@
+@@ -258,6 +385,31 @@
"ip":"10.0.6.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
@@ -196,7 +270,7 @@
"active":true
}
]
-@@ -246,7 +351,18 @@
+@@ -273,7 +425,18 @@
{
"ip":"10.0.6.5",
"afi":"ipv4",
@@ -216,7 +290,7 @@
}
]
}
-@@ -261,7 +377,18 @@
+@@ -288,7 +451,18 @@
{
"ip":"10.0.7.6",
"afi":"ipv4",
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff
index 5289194396..1bd207854c 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step5/show_ipv6_route.ref.diff
@@ -1,128 +1,110 @@
---- rt4/step4/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step5/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -13,13 +13,19 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16011
-+ ]
- },
- {
- "fib":true,
+--- rt4/step4/show_ipv6_route.ref 2020-09-25 17:49:03.399671119 -0300
++++ rt4/step5/show_ipv6_route.ref 2020-09-25 17:50:14.040592332 -0300
+@@ -14,6 +14,9 @@
"afi":"ipv6",
"interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16011
-+ ]
- }
- ]
- }
-@@ -38,13 +44,19 @@
- "fib":true,
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 16011
+ ]
+@@ -23,10 +26,20 @@
"afi":"ipv6",
"interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-1",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 16011
+ ]
}
++ ],
++ "backupNexthops":[
++ {
++ "afi":"ipv6",
++ "interfaceName":"eth-rt5",
++ "active":true
++ }
]
}
-@@ -63,19 +75,28 @@
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt2-2",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16031
-+ ]
- },
- {
- "fib":true,
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 16031
-+ ]
- },
- {
- "fib":true,
+ ],
+@@ -45,6 +58,9 @@
"afi":"ipv6",
"interfaceName":"eth-rt2-1",
-- "active":true
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
+@@ -54,10 +70,24 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt2-2",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
+ }
++ ],
++ "backupNexthops":[
++ {
++ "afi":"ipv6",
++ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
-+ 16031
++ 16031,
++ 16021
+ ]
- }
++ }
]
}
-@@ -94,7 +115,23 @@
- "fib":true,
+ ],
+@@ -116,10 +146,20 @@
"afi":"ipv6",
"interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt6",
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
++ "active":true
++ }
]
}
-@@ -113,7 +150,23 @@
- "fib":true,
+ ],
+@@ -138,10 +178,20 @@
"afi":"ipv6",
"interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
+ "active":true,
+ "backupIndex":[
+ 0
+ ],
-+ "labels":[
-+ 3
-+ ]
-+ }
+ "labels":[
+ 3
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt5",
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
++ "active":true
++ }
]
}
+ ]
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff
index 8bcd28aa2d..664b129a1b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step5/show_mpls_table.ref.diff
@@ -1,135 +1,126 @@
---- rt4/step4/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step5/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -1,2 +1,210 @@
- {
-+ "16010":{
-+ "inLabel":16010,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16010,
-+ "installed":true,
-+ "nexthop":"10.0.3.2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16010,
-+ "installed":true,
-+ "nexthop":"10.0.2.2"
-+ }
-+ ]
-+ },
-+ "16011":{
-+ "inLabel":16011,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16011,
-+ "installed":true,
-+ "interface":"eth-rt2-2"
-+ },
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":16011,
-+ "installed":true,
-+ "interface":"eth-rt2-1"
+--- rt4/step4/show_mpls_table.ref 2020-09-25 17:49:00.959639319 -0300
++++ rt4/step5/show_mpls_table.ref 2020-09-25 17:50:11.488559034 -0300
+@@ -7,13 +7,26 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+- "nexthop":"10.0.3.2"
++ "nexthop":"10.0.3.2",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16010,
+ "installed":true,
+- "nexthop":"10.0.2.2"
++ "nexthop":"10.0.2.2",
++ "backupIndex":[
++ 0
++ ]
+ }
-+ ]
-+ },
-+ "16020":{
-+ "inLabel":16020,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.3.2"
-+ },
++ ],
++ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
-+ "installed":true,
-+ "nexthop":"10.0.2.2"
++ "nexthop":"10.0.6.5"
+ }
+ ]
+ },
+@@ -25,13 +38,26 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+- "interface":"eth-rt2-2"
++ "interface":"eth-rt2-2",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
+ "installed":true,
+- "interface":"eth-rt2-1"
++ "interface":"eth-rt2-1",
++ "backupIndex":[
++ 0
++ ]
+ }
-+ ]
-+ },
-+ "16021":{
-+ "inLabel":16021,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt2-2"
-+ },
++ ],
++ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
-+ "installed":true,
-+ "interface":"eth-rt2-1"
++ "interface":"eth-rt5"
+ }
+ ]
+ },
+@@ -43,13 +69,26 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "nexthop":"10.0.3.2"
++ "nexthop":"10.0.3.2",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "nexthop":"10.0.2.2"
++ "nexthop":"10.0.2.2",
++ "backupIndex":[
++ 0
++ ]
+ }
-+ ]
-+ },
-+ "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"
-+ },
++ ],
++ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":16030,
-+ "installed":true,
+ "nexthop":"10.0.6.5"
+ }
+ ]
+ },
+@@ -61,13 +100,26 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "interface":"eth-rt2-2"
++ "interface":"eth-rt2-2",
++ "backupIndex":[
++ 0
++ ]
+ },
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "interface":"eth-rt2-1"
++ "interface":"eth-rt2-1",
++ "backupIndex":[
++ 0
++ ]
+ }
-+ ]
-+ },
-+ "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"
-+ },
++ ],
++ "backupNexthops":[
+ {
+ "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,
+ }
+ ]
+ },
+@@ -127,7 +179,17 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "nexthop":"10.0.6.5"
+ "nexthop":"10.0.6.5",
+ "backupIndex":[
+ 0
@@ -141,17 +132,14 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.7.6"
-+ }
-+ ]
-+ },
-+ "16051":{
-+ "inLabel":16051,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
+ }
+ ]
+ },
+@@ -139,7 +201,17 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "interface":"eth-rt5"
+ "interface":"eth-rt5",
+ "backupIndex":[
+ 0
@@ -163,17 +151,14 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt6"
-+ }
-+ ]
-+ },
-+ "16060":{
-+ "inLabel":16060,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
+ }
+ ]
+ },
+@@ -151,7 +223,17 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "nexthop":"10.0.7.6"
+ "nexthop":"10.0.7.6",
+ "backupIndex":[
+ 0
@@ -185,17 +170,14 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.6.5"
-+ }
-+ ]
-+ },
-+ "16061":{
-+ "inLabel":16061,
-+ "installed":true,
-+ "nexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "installed":true,
+ }
+ ]
+ },
+@@ -163,7 +245,17 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "installed":true,
+- "interface":"eth-rt6"
+ "interface":"eth-rt6",
+ "backupIndex":[
+ 0
@@ -207,7 +189,6 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt5"
-+ }
-+ ]
-+ }
- }
+ }
+ ]
+ }
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff
index 03f31f7273..c758b89839 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ip_route.ref.diff
@@ -1,6 +1,33 @@
---- rt4/step5/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step6/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -102,7 +102,7 @@
+--- rt4/step5/show_ip_route.ref 2020-09-25 17:50:12.800576153 -0300
++++ rt4/step6/show_ip_route.ref 2020-09-25 17:51:15.725397558 -0300
+@@ -90,7 +90,7 @@
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+- 16030,
++ 30030,
+ 16020
+ ]
+ }
+@@ -134,7 +134,7 @@
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+- 16030
++ 30030
+ ]
+ }
+ ]
+@@ -281,7 +281,7 @@
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+- 16030
++ 30030
+ ]
+ }
+ ]
+@@ -319,7 +319,7 @@
"interfaceName":"eth-rt5",
"active":true,
"labels":[
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff
index 43621e117c..ca495216dd 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step6/show_ipv6_route.ref.diff
@@ -1,6 +1,15 @@
---- rt4/step5/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step6/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -86,7 +86,7 @@
+--- rt4/step5/show_ipv6_route.ref 2020-09-25 17:50:14.040592332 -0300
++++ rt4/step6/show_ipv6_route.ref 2020-09-25 17:51:16.969413804 -0300
+@@ -84,7 +84,7 @@
+ "interfaceName":"eth-rt5",
+ "active":true,
+ "labels":[
+- 16031,
++ 30031,
+ 16021
+ ]
+ }
+@@ -116,7 +116,7 @@
"interfaceName":"eth-rt5",
"active":true,
"labels":[
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff
index 871824bb6a..630e0419cf 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step6/show_mpls_table.ref.diff
@@ -1,6 +1,24 @@
---- rt4/step5/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step6/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -89,7 +89,7 @@
+--- rt4/step5/show_mpls_table.ref 2020-09-25 17:50:11.488559034 -0300
++++ rt4/step6/show_mpls_table.ref 2020-09-25 17:51:14.481381312 -0300
+@@ -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)",
@@ -9,7 +27,7 @@
"installed":true,
"nexthop":"10.0.6.5"
}
-@@ -113,7 +113,7 @@
+@@ -165,7 +165,7 @@
},
{
"type":"SR (IS-IS)",
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff
index 1f1de16c0e..30e0dcf3c0 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt4/step6/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step7/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -126,9 +126,6 @@
+--- rt4/step6/show_ip_route.ref 2020-09-25 17:51:15.725397558 -0300
++++ rt4/step7/show_ip_route.ref 2020-09-25 17:52:02.614010084 -0300
+@@ -158,9 +158,6 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -137,10 +134,7 @@
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff
index 1c2f0f6fef..2606027d75 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step7/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt4/step6/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step7/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -118,9 +118,6 @@
+--- rt4/step6/show_ipv6_route.ref 2020-09-25 17:51:16.969413804 -0300
++++ rt4/step7/show_ipv6_route.ref 2020-09-25 17:52:03.854026287 -0300
+@@ -148,9 +148,6 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -128,10 +125,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff
index dfe7aef93a..5334cfd048 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step7/show_mpls_table.ref.diff
@@ -1,6 +1,6 @@
---- rt4/step6/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step7/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -119,50 +119,6 @@
+--- rt4/step6/show_mpls_table.ref 2020-09-25 17:51:14.481381312 -0300
++++ rt4/step7/show_mpls_table.ref 2020-09-25 17:52:01.385994037 -0300
+@@ -171,50 +171,6 @@
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff
index e9445650a7..b393970e42 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt4/step7/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step8/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -126,6 +126,9 @@
+--- rt4/step7/show_ip_route.ref 2020-09-25 17:52:02.614010084 -0300
++++ rt4/step8/show_ip_route.ref 2020-09-25 17:53:20.623029909 -0300
+@@ -158,6 +158,9 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -134,7 +137,10 @@
- "ip":"10.0.7.6",
- "afi":"ipv4",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff
index 0d699ad92e..8bad2edcf3 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step8/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt4/step7/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step8/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -118,6 +118,9 @@
+--- rt4/step7/show_ipv6_route.ref 2020-09-25 17:52:03.854026287 -0300
++++ rt4/step8/show_ipv6_route.ref 2020-09-25 17:53:21.843045865 -0300
+@@ -148,6 +148,9 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -125,7 +128,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff
index 145d3b1fa1..d296dbdcaf 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step8/show_mpls_table.ref.diff
@@ -1,6 +1,6 @@
---- rt4/step7/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step8/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -119,6 +119,50 @@
+--- rt4/step7/show_mpls_table.ref 2020-09-25 17:52:01.385994037 -0300
++++ rt4/step8/show_mpls_table.ref 2020-09-25 17:53:19.371013534 -0300
+@@ -171,6 +171,50 @@
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff
index 6ae67bcfbe..408cbfb0ba 100644
--- a/tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt4/step9/show_mpls_table.ref.diff
@@ -1,6 +1,6 @@
---- rt4/step8/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt4/step9/show_mpls_table.ref 2020-08-31 22:42:48.839561398 -0300
-@@ -119,15 +119,15 @@
+--- rt4/step8/show_mpls_table.ref 2020-09-25 17:53:19.371013534 -0300
++++ rt4/step9/show_mpls_table.ref 2020-09-25 17:54:37.064030042 -0300
+@@ -171,15 +171,15 @@
}
]
},
@@ -19,7 +19,7 @@
"backupIndex":[
0
]
-@@ -137,19 +137,19 @@
+@@ -189,19 +189,19 @@
{
"type":"SR (IS-IS)",
"outLabel":3,
@@ -43,7 +43,7 @@
"backupIndex":[
0
]
-@@ -159,19 +159,19 @@
+@@ -211,19 +211,19 @@
{
"type":"SR (IS-IS)",
"outLabel":3,
@@ -67,7 +67,7 @@
"backupIndex":[
0
]
-@@ -181,19 +181,19 @@
+@@ -233,19 +233,19 @@
{
"type":"SR (IS-IS)",
"outLabel":3,
@@ -91,7 +91,7 @@
"backupIndex":[
0
]
-@@ -203,7 +203,7 @@
+@@ -255,7 +255,7 @@
{
"type":"SR (IS-IS)",
"outLabel":3,
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref b/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref
index ce320d0b12..f747065f9c 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ip_route.ref
@@ -15,6 +15,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt3-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16010
]
@@ -25,10 +28,21 @@
"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
+ }
]
}
],
@@ -91,6 +105,9 @@
"afi":"ipv4",
"interfaceName":"eth-rt3-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -101,10 +118,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,10 +169,7 @@
"ip":"10.0.8.6",
"afi":"ipv4",
"interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -174,10 +203,7 @@
"ip":"10.0.6.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -197,13 +223,27 @@
"ip":"10.0.4.3",
"afi":"ipv4",
"interfaceName":"eth-rt3-1",
- "active":true
+ "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
}
]
@@ -309,13 +349,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
+ ]
}
]
}
@@ -331,12 +388,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/step1/show_ipv6_route.ref b/tests/topotests/isis-tilfa-topo1/rt5/step1/show_ipv6_route.ref
index 5bda17760e..6c0a5e0b9b 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
@@ -14,6 +14,9 @@
"afi":"ipv6",
"interfaceName":"eth-rt3-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16011
]
@@ -23,10 +26,20 @@
"afi":"ipv6",
"interfaceName":"eth-rt3-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
16011
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true
+ }
]
}
],
@@ -43,7 +56,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt3-1",
+ "interfaceName":"eth-rt4",
"active":true,
"labels":[
16021
@@ -52,7 +65,7 @@
{
"fib":true,
"afi":"ipv6",
- "interfaceName":"eth-rt4",
+ "interfaceName":"eth-rt3-1",
"active":true,
"labels":[
16021
@@ -85,6 +98,9 @@
"afi":"ipv6",
"interfaceName":"eth-rt3-1",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
@@ -94,10 +110,24 @@
"afi":"ipv6",
"interfaceName":"eth-rt3-2",
"active":true,
+ "backupIndex":[
+ 0
+ ],
"labels":[
3
]
}
+ ],
+ "backupNexthops":[
+ {
+ "afi":"ipv6",
+ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
+ 16021,
+ 16031
+ ]
+ }
]
}
],
@@ -128,10 +158,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt6",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -163,10 +190,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
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 84ba09910c..2b70392adc 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
@@ -7,13 +7,26 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.5.3"
+ "nexthop":"10.0.5.3",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.4.3"
+ "nexthop":"10.0.4.3",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "nexthop":"10.0.6.4"
}
]
},
@@ -25,13 +38,26 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt3-2"
+ "interface":"eth-rt3-2",
+ "backupIndex":[
+ 0
+ ]
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt3-1"
+ "interface":"eth-rt3-1",
+ "backupIndex":[
+ 0
+ ]
+ }
+ ],
+ "backupNexthops":[
+ {
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt4"
}
]
},
@@ -91,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"
}
]
},
@@ -109,13 +148,26 @@
"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"
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff
index f9f01414c9..6402b51893 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ip_route.ref.diff
@@ -1,15 +1,54 @@
---- rt5/step3/show_ip_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt5/step4/show_ip_route.ref 2020-08-31 22:42:48.843561366 -0300
-@@ -69,7 +69,7 @@
+--- rt5/step3/show_ip_route.ref 2020-09-25 17:48:05.950922766 -0300
++++ rt5/step4/show_ip_route.ref 2020-09-25 17:49:02.363657616 -0300
+@@ -81,10 +81,7 @@
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
"interfaceName":"eth-rt4",
+- "active":true,
+- "labels":[
+- 16020
+- ]
++ "active":true
+ }
+ ]
+ }
+@@ -105,9 +102,6 @@
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
"active":true,
+- "backupIndex":[
+- 0
+- ],
"labels":[
-- 16020
-+ 3
+ 3
+ ]
+@@ -118,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
+- ]
+- }
]
-@@ -126,9 +126,6 @@
+ }
+ ],
+@@ -158,9 +137,6 @@
"active":true,
"backupIndex":[
0
@@ -19,15 +58,68 @@
]
}
],
-@@ -137,10 +134,7 @@
- "ip":"10.0.8.6",
+@@ -349,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-rt6",
+ "interfaceName":"eth-rt3-2",
+- "active":true,
+- "backupIndex":[
+- 0
+- ]
+- }
+- ],
+- "backupNexthops":[
+- {
+- "ip":"10.0.6.4",
+- "afi":"ipv4",
+- "interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-- 3
+- 16020
+- ]
++ "active":true
+ }
+ ]
+ }
+@@ -388,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.diff b/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ipv6_route.ref.diff
index 3e3c7d8541..7a0135bf04 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step4/show_ipv6_route.ref.diff
@@ -1,33 +1,59 @@
---- rt5/step3/show_ipv6_route.ref 2020-08-31 22:42:48.839561398 -0300
-+++ rt5/step4/show_ipv6_route.ref 2020-08-31 22:42:48.843561366 -0300
-@@ -55,7 +55,7 @@
+--- rt5/step3/show_ipv6_route.ref 2020-09-25 17:48:07.218939274 -0300
++++ rt5/step4/show_ipv6_route.ref 2020-09-25 17:49:03.599673726 -0300
+@@ -57,10 +57,7 @@
+ "fib":true,
+ "afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
+- "active":true,
+- "labels":[
- 16021
-+ 3
- ]
+- ]
++ "active":true
},
{
-@@ -118,9 +118,6 @@
+ "fib":true,
+@@ -98,9 +95,6 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
"active":true,
- "backupIndex":[
- 0
+- "backupIndex":[
+- 0
- ],
-- "labels":[
-- 3
+ "labels":[
+ 3
]
- }
- ],
-@@ -128,10 +125,7 @@
- {
+@@ -110,24 +104,10 @@
"afi":"ipv6",
- "interfaceName":"eth-rt6",
+ "interfaceName":"eth-rt3-2",
+ "active":true,
+- "backupIndex":[
+- 0
+- ],
+ "labels":[
+ 3
+ ]
+ }
+- ],
+- "backupNexthops":[
+- {
+- "afi":"ipv6",
+- "interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-- 3
+- 16021,
+- 16031
- ]
-+ "active":true
- }
+- }
]
}
+ ],
+@@ -148,9 +128,6 @@
+ "active":true,
+ "backupIndex":[
+ 0
+- ],
+- "labels":[
+- 3
+ ]
+ }
+ ],
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff
index 21c426e678..299dac7640 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step4/show_mpls_table.ref.diff
@@ -1,27 +1,88 @@
---- rt5/step3/show_mpls_table.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt5/step4/show_mpls_table.ref 2020-08-31 22:42:48.843561366 -0300
-@@ -53,7 +53,7 @@
- },
- {
- "type":"SR (IS-IS)",
+--- rt5/step3/show_mpls_table.ref 2020-09-25 17:48:04.626905528 -0300
++++ rt5/step4/show_mpls_table.ref 2020-09-25 17:49:01.159641924 -0300
+@@ -76,12 +76,6 @@
+ "outLabel":16020,
+ "installed":true,
+ "nexthop":"10.0.4.3"
+- },
+- {
+- "type":"SR (IS-IS)",
- "outLabel":16020,
-+ "outLabel":3,
+- "installed":true,
+- "nexthop":"10.0.6.4"
+ }
+ ]
+ },
+@@ -100,12 +94,6 @@
+ "outLabel":16021,
"installed":true,
- "nexthop":"10.0.6.4"
+ "interface":"eth-rt3-1"
+- },
+- {
+- "type":"SR (IS-IS)",
+- "outLabel":16021,
+- "installed":true,
+- "interface":"eth-rt4"
}
-@@ -77,7 +77,7 @@
+ ]
+ },
+@@ -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":16021,
-+ "outLabel":3,
+ "outLabel":3,
"installed":true,
- "interface":"eth-rt4"
- }
-@@ -119,50 +119,6 @@
+- "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,
@@ -63,9 +124,7 @@
- "type":"SR (IS-IS)",
- "outLabel":3,
- "interface":"eth-rt6"
-- }
-- ]
-- },
- "16060":{
- "inLabel":16060,
- "installed":true,
++ "interface":"eth-rt3-1"
+ }
+ ]
+ },
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff
index 49253b130f..31f70b17a3 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ip_route.ref.diff
@@ -1,15 +1,54 @@
---- rt5/step4/show_ip_route.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt5/step5/show_ip_route.ref 2020-08-31 22:42:48.843561366 -0300
-@@ -69,7 +69,7 @@
+--- rt5/step4/show_ip_route.ref 2020-09-25 17:49:02.363657616 -0300
++++ rt5/step5/show_ip_route.ref 2020-09-25 17:50:13.012578918 -0300
+@@ -81,7 +81,10 @@
+ "ip":"10.0.6.4",
+ "afi":"ipv4",
"interfaceName":"eth-rt4",
+- "active":true
++ "active":true,
++ "labels":[
++ 16020
++ ]
+ }
+ ]
+ }
+@@ -102,6 +105,9 @@
+ "afi":"ipv4",
+ "interfaceName":"eth-rt3-1",
"active":true,
++ "backupIndex":[
++ 0
++ ],
"labels":[
-- 3
-+ 16020
+ 3
+ ]
+@@ -112,10 +118,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
++ ]
++ }
]
-@@ -126,6 +126,9 @@
+ }
+ ],
+@@ -137,6 +158,9 @@
"active":true,
"backupIndex":[
0
@@ -19,14 +58,67 @@
]
}
],
-@@ -134,7 +137,10 @@
- "ip":"10.0.8.6",
+@@ -325,13 +349,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-rt6",
+ "interfaceName":"eth-rt3-2",
- "active":true
+ "active":true,
++ "backupIndex":[
++ 0
++ ]
++ }
++ ],
++ "backupNexthops":[
++ {
++ "ip":"10.0.6.4",
++ "afi":"ipv4",
++ "interfaceName":"eth-rt4",
++ "active":true,
+ "labels":[
-+ 3
++ 16020
++ ]
+ }
+ ]
+ }
+@@ -347,12 +388,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.diff b/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ipv6_route.ref.diff
index 2ee7db9e7e..59d9755e18 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step5/show_ipv6_route.ref.diff
@@ -1,33 +1,59 @@
---- rt5/step4/show_ipv6_route.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt5/step5/show_ipv6_route.ref 2020-08-31 22:42:48.843561366 -0300
-@@ -55,7 +55,7 @@
+--- rt5/step4/show_ipv6_route.ref 2020-09-25 17:49:03.599673726 -0300
++++ rt5/step5/show_ipv6_route.ref 2020-09-25 17:50:14.248595046 -0300
+@@ -57,7 +57,10 @@
+ "fib":true,
+ "afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-- 3
+- "active":true
++ "active":true,
++ "labels":[
+ 16021
- ]
++ ]
},
{
-@@ -118,6 +118,9 @@
+ "fib":true,
+@@ -95,6 +98,9 @@
+ "afi":"ipv6",
+ "interfaceName":"eth-rt3-1",
"active":true,
- "backupIndex":[
- 0
++ "backupIndex":[
++ 0
+ ],
-+ "labels":[
-+ 3
+ "labels":[
+ 3
]
- }
- ],
-@@ -125,7 +128,10 @@
- {
+@@ -104,10 +110,24 @@
"afi":"ipv6",
- "interfaceName":"eth-rt6",
-- "active":true
+ "interfaceName":"eth-rt3-2",
+ "active":true,
++ "backupIndex":[
++ 0
++ ],
+ "labels":[
+ 3
+ ]
+ }
++ ],
++ "backupNexthops":[
++ {
++ "afi":"ipv6",
++ "interfaceName":"eth-rt4",
+ "active":true,
+ "labels":[
-+ 3
++ 16021,
++ 16031
+ ]
- }
++ }
]
}
+ ],
+@@ -128,6 +148,9 @@
+ "active":true,
+ "backupIndex":[
+ 0
++ ],
++ "labels":[
++ 3
+ ]
+ }
+ ],
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff
index 269b8ddc94..669c07e344 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step5/show_mpls_table.ref.diff
@@ -1,27 +1,89 @@
---- rt5/step4/show_mpls_table.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt5/step5/show_mpls_table.ref 2020-08-31 22:42:48.843561366 -0300
-@@ -53,7 +53,7 @@
+--- rt5/step4/show_mpls_table.ref 2020-09-25 17:49:01.159641924 -0300
++++ rt5/step5/show_mpls_table.ref 2020-09-25 17:50:11.696561748 -0300
+@@ -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":3,
-+ "outLabel":16020,
+ "outLabel":16021,
"installed":true,
- "nexthop":"10.0.6.4"
- }
-@@ -77,7 +77,7 @@
++ "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,
-+ "outLabel":16021,
+ "outLabel":3,
"installed":true,
- "interface":"eth-rt4"
- }
-@@ -119,6 +119,50 @@
+- "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,
@@ -63,9 +125,6 @@
+ "type":"SR (IS-IS)",
+ "outLabel":3,
+ "interface":"eth-rt6"
-+ }
-+ ]
-+ },
- "16060":{
- "inLabel":16060,
- "installed":true,
+ }
+ ]
+ },
diff --git a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff
index f70ac77e6a..a4f82cbf10 100644
--- a/tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt5/step6/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt5/step5/show_mpls_table.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt5/step6/show_mpls_table.ref 2020-08-31 22:42:48.843561366 -0300
+--- rt5/step5/show_mpls_table.ref 2020-09-25 17:50:11.696561748 -0300
++++ rt5/step6/show_mpls_table.ref 2020-09-25 17:51:14.685383977 -0300
@@ -1,6 +1,6 @@
{
- "16010":{
@@ -9,7 +9,7 @@
"installed":true,
"nexthops":[
{
-@@ -17,8 +17,8 @@
+@@ -30,8 +30,8 @@
}
]
},
@@ -20,7 +20,7 @@
"installed":true,
"nexthops":[
{
-@@ -35,8 +35,8 @@
+@@ -61,56 +61,56 @@
}
]
},
@@ -31,7 +31,25 @@
"installed":true,
"nexthops":[
{
-@@ -59,8 +59,8 @@
+ "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"
}
]
},
@@ -42,7 +60,25 @@
"installed":true,
"nexthops":[
{
-@@ -83,8 +83,8 @@
+ "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"
}
]
},
@@ -53,7 +89,7 @@
"installed":true,
"nexthops":[
{
-@@ -101,8 +101,8 @@
+@@ -140,8 +140,8 @@
}
]
},
@@ -64,7 +100,7 @@
"installed":true,
"nexthops":[
{
-@@ -119,8 +119,8 @@
+@@ -171,8 +171,8 @@
}
]
},
@@ -75,7 +111,7 @@
"installed":true,
"nexthops":[
{
-@@ -141,8 +141,8 @@
+@@ -193,8 +193,8 @@
}
]
},
@@ -86,7 +122,7 @@
"installed":true,
"nexthops":[
{
-@@ -163,8 +163,8 @@
+@@ -215,8 +215,8 @@
}
]
},
@@ -97,7 +133,7 @@
"installed":true,
"nexthops":[
{
-@@ -185,8 +185,8 @@
+@@ -237,8 +237,8 @@
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref b/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref
index c9615d1e45..5bcef4c2f6 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step1/show_ip_route.ref
@@ -61,10 +61,7 @@
"ip":"10.0.8.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -98,10 +95,7 @@
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -135,10 +129,7 @@
"ip":"10.0.8.5",
"afi":"ipv4",
"interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -172,10 +163,7 @@
"ip":"10.0.7.4",
"afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
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 b69c1491ec..8294b07136 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
@@ -57,10 +57,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -92,10 +89,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -127,10 +121,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt5",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
@@ -162,10 +153,7 @@
{
"afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
- 3
- ]
+ "active":true
}
]
}
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 2aa794124a..33dbf59204 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,13 @@
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.8.5"
+ "nexthop":"10.0.7.4"
},
{
"type":"SR (IS-IS)",
"outLabel":16010,
"installed":true,
- "nexthop":"10.0.7.4"
+ "nexthop":"10.0.8.5"
}
]
},
@@ -25,13 +25,13 @@
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt5"
+ "interface":"eth-rt4"
},
{
"type":"SR (IS-IS)",
"outLabel":16011,
"installed":true,
- "interface":"eth-rt4"
+ "interface":"eth-rt5"
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff
index 7e6810d6d3..04adaefe78 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ip_route.ref.diff
@@ -1,15 +1,18 @@
---- rt6/step3/show_ip_route.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt6/step4/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -16,7 +16,7 @@
+--- rt6/step3/show_ip_route.ref 2020-09-25 17:48:06.154925422 -0300
++++ rt6/step4/show_ip_route.ref 2020-09-25 17:49:02.583660484 -0300
+@@ -14,10 +14,7 @@
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
+- "active":true,
+- "labels":[
- 16010
-+ 3
- ]
+- ]
++ "active":true
},
{
-@@ -50,9 +50,6 @@
+ "fib":true,
+@@ -50,9 +47,6 @@
"active":true,
"backupIndex":[
0
@@ -19,19 +22,7 @@
]
}
],
-@@ -61,10 +58,7 @@
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
- ]
- }
-@@ -124,9 +118,6 @@
+@@ -118,9 +112,6 @@
"active":true,
"backupIndex":[
0
@@ -41,15 +32,3 @@
]
}
],
-@@ -135,10 +126,7 @@
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "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
index 8c424f6065..20aa1ec83b 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step4/show_ipv6_route.ref.diff
@@ -1,15 +1,18 @@
---- rt6/step3/show_ipv6_route.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt6/step4/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -15,7 +15,7 @@
+--- rt6/step3/show_ipv6_route.ref 2020-09-25 17:48:07.434942087 -0300
++++ rt6/step4/show_ipv6_route.ref 2020-09-25 17:49:03.847676958 -0300
+@@ -22,10 +22,7 @@
+ "fib":true,
+ "afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
+- "active":true,
+- "labels":[
- 16011
-+ 3
- ]
- },
- {
-@@ -47,9 +47,6 @@
+- ]
++ "active":true
+ }
+ ]
+ }
+@@ -47,9 +44,6 @@
"active":true,
"backupIndex":[
0
@@ -19,19 +22,7 @@
]
}
],
-@@ -57,10 +54,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
- ]
- }
-@@ -117,9 +111,6 @@
+@@ -111,9 +105,6 @@
"active":true,
"backupIndex":[
0
@@ -41,15 +32,3 @@
]
}
],
-@@ -127,10 +118,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff
index 2ebbab8a2f..3f24547f6d 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step4/show_mpls_table.ref.diff
@@ -1,70 +1,32 @@
---- rt6/step3/show_mpls_table.ref 2020-08-31 22:42:48.843561366 -0300
-+++ rt6/step4/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -11,7 +11,7 @@
- },
- {
+--- rt6/step3/show_mpls_table.ref 2020-09-25 17:48:04.842908340 -0300
++++ rt6/step4/show_mpls_table.ref 2020-09-25 17:49:01.363644584 -0300
+@@ -7,12 +7,6 @@
"type":"SR (IS-IS)",
-- "outLabel":16010,
-+ "outLabel":3,
+ "outLabel":16010,
"installed":true,
- "nexthop":"10.0.7.4"
- }
-@@ -29,53 +29,9 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16011,
-- "installed":true,
-- "interface":"eth-rt4"
-- }
-- ]
-- },
-- "16020":{
-- "inLabel":16020,
-- "installed":true,
-- "nexthops":[
+- "nexthop":"10.0.7.4"
+- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":16020,
+- "outLabel":16010,
- "installed":true,
-- "nexthop":"10.0.7.4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
-- {
-- "type":"SR (IS-IS)",
- "outLabel":3,
-- "nexthop":"10.0.8.5"
-- }
-- ]
-- },
-- "16021":{
-- "inLabel":16021,
-- "installed":true,
-- "nexthops":[
-- {
-- "type":"SR (IS-IS)",
-- "outLabel":16021,
+ "nexthop":"10.0.8.5"
+ }
+ ]
+@@ -25,12 +19,6 @@
+ "type":"SR (IS-IS)",
+ "outLabel":16011,
"installed":true,
-- "interface":"eth-rt4",
-- "backupIndex":[
-- 0
-- ]
-- }
-- ],
-- "backupNexthops":[
+- "interface":"eth-rt4"
+- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-- "interface":"eth-rt5"
-+ "interface":"eth-rt4"
+- "outLabel":16011,
+- "installed":true,
+ "interface":"eth-rt5"
}
]
- },
-@@ -123,50 +79,6 @@
+@@ -123,50 +111,6 @@
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff
index 5151f71580..9f73a2904e 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ip_route.ref.diff
@@ -1,15 +1,18 @@
---- rt6/step4/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step5/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -16,7 +16,7 @@
+--- rt6/step4/show_ip_route.ref 2020-09-25 17:49:02.583660484 -0300
++++ rt6/step5/show_ip_route.ref 2020-09-25 17:50:13.220581632 -0300
+@@ -14,7 +14,10 @@
+ "ip":"10.0.7.4",
+ "afi":"ipv4",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-- 3
+- "active":true
++ "active":true,
++ "labels":[
+ 16010
- ]
++ ]
},
{
-@@ -50,6 +50,9 @@
+ "fib":true,
+@@ -47,6 +50,9 @@
"active":true,
"backupIndex":[
0
@@ -19,19 +22,7 @@
]
}
],
-@@ -58,7 +61,10 @@
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
-@@ -118,6 +124,9 @@
+@@ -112,6 +118,9 @@
"active":true,
"backupIndex":[
0
@@ -41,15 +32,3 @@
]
}
],
-@@ -126,7 +135,10 @@
- "ip":"10.0.8.5",
- "afi":"ipv4",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff
index 2ddc9f82b6..c9358d45b2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step5/show_ipv6_route.ref.diff
@@ -1,15 +1,18 @@
---- rt6/step4/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step5/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -15,7 +15,7 @@
+--- rt6/step4/show_ipv6_route.ref 2020-09-25 17:49:03.847676958 -0300
++++ rt6/step5/show_ipv6_route.ref 2020-09-25 17:50:14.456597760 -0300
+@@ -22,7 +22,10 @@
+ "fib":true,
+ "afi":"ipv6",
"interfaceName":"eth-rt4",
- "active":true,
- "labels":[
-- 3
+- "active":true
++ "active":true,
++ "labels":[
+ 16011
- ]
- },
- {
-@@ -47,6 +47,9 @@
++ ]
+ }
+ ]
+ }
+@@ -44,6 +47,9 @@
"active":true,
"backupIndex":[
0
@@ -19,19 +22,7 @@
]
}
],
-@@ -54,7 +57,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
-@@ -111,6 +117,9 @@
+@@ -105,6 +111,9 @@
"active":true,
"backupIndex":[
0
@@ -41,15 +32,3 @@
]
}
],
-@@ -118,7 +127,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt5",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff
index 18354ea604..c9d67955ef 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step5/show_mpls_table.ref.diff
@@ -1,73 +1,32 @@
---- rt6/step4/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step5/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -11,7 +11,7 @@
- },
- {
+--- rt6/step4/show_mpls_table.ref 2020-09-25 17:49:01.363644584 -0300
++++ rt6/step5/show_mpls_table.ref 2020-09-25 17:50:11.904564461 -0300
+@@ -7,6 +7,12 @@
"type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16010,
+ "outLabel":16010,
"installed":true,
- "nexthop":"10.0.7.4"
- }
-@@ -29,12 +29,56 @@
- },
- {
- "type":"SR (IS-IS)",
-- "outLabel":3,
-+ "outLabel":16011,
- "installed":true,
- "interface":"eth-rt4"
- }
- ]
- },
-+ "16020":{
-+ "inLabel":16020,
-+ "installed":true,
-+ "nexthops":[
++ "nexthop":"10.0.7.4"
++ },
+ {
+ "type":"SR (IS-IS)",
-+ "outLabel":16020,
++ "outLabel":16010,
+ "installed":true,
-+ "nexthop":"10.0.7.4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "nexthop":"10.0.8.5"
-+ }
-+ ]
-+ },
-+ "16021":{
-+ "inLabel":16021,
-+ "installed":true,
-+ "nexthops":[
+ "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":16021,
++ "outLabel":16011,
+ "installed":true,
-+ "interface":"eth-rt4",
-+ "backupIndex":[
-+ 0
-+ ]
-+ }
-+ ],
-+ "backupNexthops":[
-+ {
-+ "type":"SR (IS-IS)",
-+ "outLabel":3,
-+ "interface":"eth-rt5"
-+ }
-+ ]
-+ },
- "16030":{
- "inLabel":16030,
- "installed":true,
-@@ -79,6 +123,50 @@
+ "interface":"eth-rt5"
+ }
+ ]
+@@ -111,6 +123,50 @@
}
]
},
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff
index cddb6ab4bc..527ec74958 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ip_route.ref.diff
@@ -1,5 +1,5 @@
---- rt6/step5/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step6/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
+--- rt6/step5/show_ip_route.ref 2020-09-25 17:50:13.220581632 -0300
++++ rt6/step6/show_ip_route.ref 2020-09-25 17:51:16.137402938 -0300
@@ -26,7 +26,7 @@
"interfaceName":"eth-rt5",
"active":true,
@@ -9,7 +9,7 @@
]
}
]
-@@ -89,7 +89,7 @@
+@@ -86,7 +86,7 @@
0
],
"labels":[
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff
index 389d87edc9..7b8f8022f2 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step6/show_ipv6_route.ref.diff
@@ -1,15 +1,15 @@
---- rt6/step5/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step6/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -24,7 +24,7 @@
+--- rt6/step5/show_ipv6_route.ref 2020-09-25 17:50:14.456597760 -0300
++++ rt6/step6/show_ipv6_route.ref 2020-09-25 17:51:17.401419446 -0300
+@@ -15,7 +15,7 @@
"interfaceName":"eth-rt5",
"active":true,
"labels":[
- 16011
+ 30011
]
- }
- ]
-@@ -84,7 +84,7 @@
+ },
+ {
+@@ -81,7 +81,7 @@
0
],
"labels":[
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff
index 8d5385dd0c..edd5afeeb8 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step6/show_mpls_table.ref.diff
@@ -1,23 +1,23 @@
---- rt6/step5/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step6/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -5,7 +5,7 @@
- "nexthops":[
+--- rt6/step5/show_mpls_table.ref 2020-09-25 17:50:11.904564461 -0300
++++ rt6/step6/show_mpls_table.ref 2020-09-25 17:51:14.893386692 -0300
+@@ -11,7 +11,7 @@
+ },
{
"type":"SR (IS-IS)",
- "outLabel":16010,
+ "outLabel":30010,
"installed":true,
"nexthop":"10.0.8.5"
+ }
+@@ -29,7 +29,7 @@
},
-@@ -23,7 +23,7 @@
- "nexthops":[
{
"type":"SR (IS-IS)",
- "outLabel":16011,
+ "outLabel":30011,
"installed":true,
"interface":"eth-rt5"
- },
+ }
@@ -85,7 +85,7 @@
"nexthops":[
{
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff
index e9b88ce90b..7553dd22e5 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt6/step6/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step7/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -161,9 +161,6 @@
+--- rt6/step6/show_ip_route.ref 2020-09-25 17:51:16.137402938 -0300
++++ rt6/step7/show_ip_route.ref 2020-09-25 17:52:03.018015363 -0300
+@@ -152,9 +152,6 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -172,10 +169,7 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "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
index a65d3e8e40..b56890de0f 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step7/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt6/step6/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step7/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -152,9 +152,6 @@
+--- rt6/step6/show_ipv6_route.ref 2020-09-25 17:51:17.401419446 -0300
++++ rt6/step7/show_ipv6_route.ref 2020-09-25 17:52:04.270031723 -0300
+@@ -143,9 +143,6 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -162,10 +159,7 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true,
-- "labels":[
-- 3
-- ]
-+ "active":true
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff
index 0d119554c7..ff043fb0bf 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step7/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt6/step6/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step7/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
+--- rt6/step6/show_mpls_table.ref 2020-09-25 17:51:14.893386692 -0300
++++ rt6/step7/show_mpls_table.ref 2020-09-25 17:52:01.809999577 -0300
@@ -166,49 +166,5 @@
"interface":"eth-rt5"
}
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff
index cb9d758f32..d0b25bffa3 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ip_route.ref.diff
@@ -1,6 +1,6 @@
---- rt6/step7/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step8/show_ip_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -161,6 +161,9 @@
+--- rt6/step7/show_ip_route.ref 2020-09-25 17:52:03.018015363 -0300
++++ rt6/step8/show_ip_route.ref 2020-09-25 17:53:21.035035298 -0300
+@@ -152,6 +152,9 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -169,7 +172,10 @@
- "ip":"10.0.7.4",
- "afi":"ipv4",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff
index cac719262d..203175510c 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step8/show_ipv6_route.ref.diff
@@ -1,6 +1,6 @@
---- rt6/step7/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step8/show_ipv6_route.ref 2020-08-31 22:42:48.847561334 -0300
-@@ -152,6 +152,9 @@
+--- rt6/step7/show_ipv6_route.ref 2020-09-25 17:52:04.270031723 -0300
++++ rt6/step8/show_ipv6_route.ref 2020-09-25 17:53:22.239051045 -0300
+@@ -143,6 +143,9 @@
"active":true,
"backupIndex":[
0
@@ -10,15 +10,3 @@
]
}
],
-@@ -159,7 +162,10 @@
- {
- "afi":"ipv6",
- "interfaceName":"eth-rt4",
-- "active":true
-+ "active":true,
-+ "labels":[
-+ 3
-+ ]
- }
- ]
- }
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff
index 917954b077..535f30bf35 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step8/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt6/step7/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step8/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
+--- rt6/step7/show_mpls_table.ref 2020-09-25 17:52:01.809999577 -0300
++++ rt6/step8/show_mpls_table.ref 2020-09-25 17:53:19.799019132 -0300
@@ -166,5 +166,49 @@
"interface":"eth-rt5"
}
diff --git a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff b/tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff
index 3c9558e56a..b6e5396554 100644
--- a/tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff
+++ b/tests/topotests/isis-tilfa-topo1/rt6/step9/show_mpls_table.ref.diff
@@ -1,5 +1,5 @@
---- rt6/step8/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
-+++ rt6/step9/show_mpls_table.ref 2020-08-31 22:42:48.847561334 -0300
+--- rt6/step8/show_mpls_table.ref 2020-09-25 17:53:19.799019132 -0300
++++ rt6/step9/show_mpls_table.ref 2020-09-25 17:54:37.492035644 -0300
@@ -167,8 +167,8 @@
}
]
diff --git a/tests/topotests/isis-topo1-vrf/r1/r1_route.json b/tests/topotests/isis-topo1-vrf/r1/r1_route.json
index 77d2ad9c63..f0a3593a4c 100644
--- a/tests/topotests/isis-topo1-vrf/r1/r1_route.json
+++ b/tests/topotests/isis-topo1-vrf/r1/r1_route.json
@@ -20,20 +20,6 @@
],
"10.0.20.0/24": [
{
- "distance": 115,
- "metric": 20,
- "nexthops": [
- {
- "afi": "ipv4",
- "interfaceName": "r1-eth0",
- "ip": "10.0.20.1"
- }
- ],
- "prefix": "10.0.20.0/24",
- "protocol": "isis",
- "vrfName": "r1-cust1"
- },
- {
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis-topo1-vrf/r2/r2_route.json b/tests/topotests/isis-topo1-vrf/r2/r2_route.json
index 98252c5939..a26cdfad8e 100644
--- a/tests/topotests/isis-topo1-vrf/r2/r2_route.json
+++ b/tests/topotests/isis-topo1-vrf/r2/r2_route.json
@@ -20,20 +20,6 @@
],
"10.0.21.0/24": [
{
- "distance": 115,
- "metric": 20,
- "nexthops": [
- {
- "afi": "ipv4",
- "interfaceName": "r2-eth0",
- "ip": "10.0.21.1"
- }
- ],
- "prefix": "10.0.21.0/24",
- "protocol": "isis",
- "vrfName": "r2-cust1"
- },
- {
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis-topo1-vrf/r3/r3_route.json b/tests/topotests/isis-topo1-vrf/r3/r3_route.json
index de158876f1..9717df5c1a 100644
--- a/tests/topotests/isis-topo1-vrf/r3/r3_route.json
+++ b/tests/topotests/isis-topo1-vrf/r3/r3_route.json
@@ -50,20 +50,6 @@
],
"10.0.20.0/24": [
{
- "distance": 115,
- "metric": 20,
- "nexthops": [
- {
- "afi": "ipv4",
- "interfaceName": "r3-eth0",
- "ip": "10.0.20.2"
- }
- ],
- "prefix": "10.0.20.0/24",
- "protocol": "isis",
- "vrfName": "r3-cust1"
- },
- {
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis-topo1-vrf/r4/r4_route.json b/tests/topotests/isis-topo1-vrf/r4/r4_route.json
index b3ed4f2cbe..6cb79b0301 100644
--- a/tests/topotests/isis-topo1-vrf/r4/r4_route.json
+++ b/tests/topotests/isis-topo1-vrf/r4/r4_route.json
@@ -66,18 +66,6 @@
{
"nexthops": [
{
- "afi": "ipv4",
- "interfaceName": "r4-eth0",
- "ip": "10.0.21.2"
- }
- ],
- "prefix": "10.0.21.0/24",
- "protocol": "isis",
- "vrfName": "r4-cust1"
- },
- {
- "nexthops": [
- {
"active": true,
"directlyConnected": true,
"fib": true,
diff --git a/tests/topotests/isis-topo1/r1/r1_route.json b/tests/topotests/isis-topo1/r1/r1_route.json
index 123b4dd163..f94233a80f 100644
--- a/tests/topotests/isis-topo1/r1/r1_route.json
+++ b/tests/topotests/isis-topo1/r1/r1_route.json
@@ -19,19 +19,6 @@
],
"10.0.20.0/24": [
{
- "distance": 115,
- "metric": 10,
- "nexthops": [
- {
- "afi": "ipv4",
- "interfaceName": "r1-eth0",
- "ip": "10.0.20.1"
- }
- ],
- "prefix": "10.0.20.0/24",
- "protocol": "isis"
- },
- {
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis-topo1/r2/r2_route.json b/tests/topotests/isis-topo1/r2/r2_route.json
index fe2de05734..aab651eff0 100644
--- a/tests/topotests/isis-topo1/r2/r2_route.json
+++ b/tests/topotests/isis-topo1/r2/r2_route.json
@@ -19,19 +19,6 @@
],
"10.0.21.0/24": [
{
- "distance": 115,
- "metric": 10,
- "nexthops": [
- {
- "afi": "ipv4",
- "interfaceName": "r2-eth0",
- "ip": "10.0.21.1"
- }
- ],
- "prefix": "10.0.21.0/24",
- "protocol": "isis"
- },
- {
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis-topo1/r3/r3_route.json b/tests/topotests/isis-topo1/r3/r3_route.json
index 1f0fcdfcd6..61d05e80bb 100644
--- a/tests/topotests/isis-topo1/r3/r3_route.json
+++ b/tests/topotests/isis-topo1/r3/r3_route.json
@@ -47,19 +47,6 @@
],
"10.0.20.0/24": [
{
- "distance": 115,
- "metric": 10,
- "nexthops": [
- {
- "afi": "ipv4",
- "interfaceName": "r3-eth0",
- "ip": "10.0.20.2"
- }
- ],
- "prefix": "10.0.20.0/24",
- "protocol": "isis"
- },
- {
"nexthops": [
{
"active": true,
diff --git a/tests/topotests/isis-topo1/r4/r4_route.json b/tests/topotests/isis-topo1/r4/r4_route.json
index 597e953c09..79361af4b5 100644
--- a/tests/topotests/isis-topo1/r4/r4_route.json
+++ b/tests/topotests/isis-topo1/r4/r4_route.json
@@ -16,19 +16,6 @@
],
"10.0.21.0/24": [
{
- "distance": 115,
- "metric": 10,
- "nexthops": [
- {
- "afi": "ipv4",
- "interfaceName": "r4-eth0",
- "ip": "10.0.21.2"
- }
- ],
- "prefix": "10.0.21.0/24",
- "protocol": "isis"
- },
- {
"nexthops": [
{
"active": true,
diff --git a/tools/coccinelle/README.md b/tools/coccinelle/README.md
new file mode 100644
index 0000000000..262ccc1da0
--- /dev/null
+++ b/tools/coccinelle/README.md
@@ -0,0 +1,14 @@
+Coccinelle patches
+==================
+
+This collection of coccinelle patches represents some of the broader,
+codebase-wide changes that have been made. If you maintain a fork of
+FRR and find that your codebase needs to be updated to align with
+these changes, the coccinelle tool should help you make that update.
+
+The coccinelle tool is documented at:
+ https://coccinelle.gitlabpages.inria.fr/website/
+
+To run a coccinelle patch script:
+
+ spatch --sp-file tools/coccinelle/semicolon.cocci zebra/*.c
diff --git a/tools/coccinelle/thread_cancel_api.cocci b/tools/coccinelle/thread_cancel_api.cocci
new file mode 100644
index 0000000000..cc34f9389a
--- /dev/null
+++ b/tools/coccinelle/thread_cancel_api.cocci
@@ -0,0 +1,68 @@
+@ptrupdate@
+expression E;
+@@
+- thread_cancel(E);
++ thread_cancel(&E);
+
+@nullcheckremove depends on ptrupdate@
+expression E;
+@@
+
+thread_cancel(&E);
+- E = NULL;
+
+@cancelguardremove depends on nullcheckremove@
+expression E;
+@@
+- if (E)
+- {
+ thread_cancel(&E);
+- }
+
+@cancelguardremove2 depends on nullcheckremove@
+expression E;
+@@
+- if (E != NULL)
+- {
+ thread_cancel(&E);
+- }
+
+@cancelguardremove3 depends on nullcheckremove@
+expression E;
+@@
+- if (E)
+ thread_cancel(&E);
+
+@cancelguardremove4 depends on nullcheckremove@
+expression E;
+@@
+- if (E != NULL)
+ thread_cancel(&E);
+
+@replacetimeroff@
+expression E;
+@@
+
+- THREAD_TIMER_OFF(E);
++ thread_cancel(&E);
+
+@replacewriteoff@
+expression E;
+@@
+
+- THREAD_WRITE_OFF(E);
++ thread_cancel(&E);
+
+@replacereadoff@
+expression E;
+@@
+
+- THREAD_READ_OFF(E);
++ thread_cancel(&E);
+
+@replacethreadoff@
+expression E;
+@@
+
+- THREAD_OFF(E);
++ thread_cancel(&E); \ No newline at end of file
diff --git a/tools/gen_northbound_callbacks.c b/tools/gen_northbound_callbacks.c
index eaab932228..a785f43cdf 100644
--- a/tools/gen_northbound_callbacks.c
+++ b/tools/gen_northbound_callbacks.c
@@ -368,13 +368,12 @@ int main(int argc, char *argv[])
/* Generate callback prototypes. */
if (!static_cbs) {
printf("/* prototypes */\n");
- yang_snodes_iterate_module(module->info, generate_prototypes, 0,
- NULL);
+ yang_snodes_iterate(module->info, generate_prototypes, 0, NULL);
printf("\n");
}
/* Generate callback functions. */
- yang_snodes_iterate_module(module->info, generate_callbacks, 0, NULL);
+ yang_snodes_iterate(module->info, generate_callbacks, 0, NULL);
strlcpy(module_name_underscores, module->name,
sizeof(module_name_underscores));
@@ -386,7 +385,7 @@ int main(int argc, char *argv[])
"\t.name = \"%s\",\n"
"\t.nodes = {\n",
module_name_underscores, module->name);
- yang_snodes_iterate_module(module->info, generate_nb_nodes, 0, NULL);
+ yang_snodes_iterate(module->info, generate_nb_nodes, 0, NULL);
printf("\t\t{\n"
"\t\t\t.xpath = NULL,\n"
"\t\t},\n");
diff --git a/tools/gen_yang_deviations.c b/tools/gen_yang_deviations.c
index f908e1fc69..53a53c943c 100644
--- a/tools/gen_yang_deviations.c
+++ b/tools/gen_yang_deviations.c
@@ -71,8 +71,8 @@ int main(int argc, char *argv[])
module = yang_module_load(argv[0]);
/* Generate deviations. */
- yang_snodes_iterate_module(module->info, generate_yang_deviation,
- YANG_ITER_FILTER_IMPLICIT, NULL);
+ yang_snodes_iterate(module->info, generate_yang_deviation,
+ YANG_ITER_FILTER_IMPLICIT, NULL);
/* Cleanup and exit. */
yang_terminate();
diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c
index af243f7ca5..319bd6a771 100644
--- a/watchfrr/watchfrr.c
+++ b/watchfrr/watchfrr.c
@@ -409,8 +409,8 @@ static void sigchild(void)
what = restart->what;
restart->pid = 0;
gs.numpids--;
- thread_cancel(restart->t_kill);
- restart->t_kill = NULL;
+ thread_cancel(&restart->t_kill);
+
/* Update restart time to reflect the time the command
* completed. */
gettimeofday(&restart->time, NULL);
@@ -586,6 +586,7 @@ static void restart_done(struct daemon *dmn)
return;
}
THREAD_OFF(dmn->t_wakeup);
+
if (try_connect(dmn) < 0)
SET_WAKEUP_DOWN(dmn);
}
@@ -678,8 +679,7 @@ static int handle_read(struct thread *t_read)
dmn->name, (long)delay.tv_sec, (long)delay.tv_usec);
SET_READ_HANDLER(dmn);
- if (dmn->t_wakeup)
- thread_cancel(dmn->t_wakeup);
+ thread_cancel(&dmn->t_wakeup);
SET_WAKEUP_ECHO(dmn);
return 0;
@@ -866,9 +866,8 @@ static int phase_hanging(struct thread *t_hanging)
static void set_phase(restart_phase_t new_phase)
{
gs.phase = new_phase;
- if (gs.t_phase_hanging)
- thread_cancel(gs.t_phase_hanging);
- gs.t_phase_hanging = NULL;
+ thread_cancel(&gs.t_phase_hanging);
+
thread_add_timer(master, phase_hanging, NULL, PHASE_TIMEOUT,
&gs.t_phase_hanging);
}
diff --git a/yang/frr-isisd.yang b/yang/frr-isisd.yang
index 06d1a793b5..c3b39e3750 100644
--- a/yang/frr-isisd.yang
+++ b/yang/frr-isisd.yang
@@ -1381,6 +1381,12 @@ module frr-isisd {
description
"Configure last hop behavior.";
}
+ leaf n-flag-clear {
+ type boolean;
+ default "false";
+ description
+ "Not a node SID";
+ }
}
}
}
diff --git a/zebra/irdp_main.c b/zebra/irdp_main.c
index 710a32c452..936206641f 100644
--- a/zebra/irdp_main.c
+++ b/zebra/irdp_main.c
@@ -263,9 +263,7 @@ void irdp_advert_off(struct interface *ifp)
if (!irdp)
return;
- if (irdp->t_advertise)
- thread_cancel(irdp->t_advertise);
- irdp->t_advertise = NULL;
+ thread_cancel(&irdp->t_advertise);
if (ifp->connected)
for (ALL_LIST_ELEMENTS(ifp->connected, node, nnode, ifc)) {
@@ -300,9 +298,7 @@ void process_solicit(struct interface *ifp)
return;
irdp->flags |= IF_SOLICIT;
- if (irdp->t_advertise)
- thread_cancel(irdp->t_advertise);
- irdp->t_advertise = NULL;
+ thread_cancel(&irdp->t_advertise);
timer = (frr_weak_random() % MAX_RESPONSE_DELAY) + 1;
diff --git a/zebra/kernel_netlink.c b/zebra/kernel_netlink.c
index c53d28a18c..129703d9a9 100644
--- a/zebra/kernel_netlink.c
+++ b/zebra/kernel_netlink.c
@@ -1051,7 +1051,7 @@ static int nl_batch_read_resp(struct nl_batch *bth)
{
struct nlmsghdr *h;
struct sockaddr_nl snl;
- struct msghdr msg;
+ struct msghdr msg = {};
int status, seq;
const struct nlsock *nl;
struct zebra_dplane_ctx *ctx;
@@ -1501,7 +1501,7 @@ void kernel_init(struct zebra_ns *zns)
void kernel_terminate(struct zebra_ns *zns, bool complete)
{
- THREAD_READ_OFF(zns->t_netlink);
+ thread_cancel(&zns->t_netlink);
if (zns->netlink.sock >= 0) {
close(zns->netlink.sock);
diff --git a/zebra/main.c b/zebra/main.c
index 6b6409f845..ced29e1a25 100644
--- a/zebra/main.c
+++ b/zebra/main.c
@@ -170,12 +170,14 @@ static void sigint(void)
zebra_ptm_finish();
- if (retain_mode)
+ if (retain_mode) {
+ zebra_nhg_mark_keep();
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name) {
zvrf = vrf->info;
if (zvrf)
SET_FLAG(zvrf->flags, ZEBRA_VRF_RETAIN);
}
+ }
if (zrouter.lsp_process_q)
work_queue_free_and_null(&zrouter.lsp_process_q);
diff --git a/zebra/zebra_evpn_mh.c b/zebra/zebra_evpn_mh.c
index dad019731b..7dbe74e42d 100644
--- a/zebra/zebra_evpn_mh.c
+++ b/zebra/zebra_evpn_mh.c
@@ -810,6 +810,7 @@ void zebra_evpn_if_init(struct zebra_if *zif)
void zebra_evpn_if_cleanup(struct zebra_if *zif)
{
vlanid_t vid;
+ struct zebra_evpn_es *es;
if (!bf_is_inited(zif->vlan_bitmap))
return;
@@ -821,8 +822,9 @@ void zebra_evpn_if_cleanup(struct zebra_if *zif)
bf_free(zif->vlan_bitmap);
/* Delete associated Ethernet Segment */
- if (zif->es_info.es)
- zebra_evpn_local_es_del(&zif->es_info.es);
+ es = zif->es_info.es;
+ if (es)
+ zebra_evpn_local_es_del(&es);
}
/*****************************************************************************
@@ -1450,7 +1452,7 @@ static int zebra_evpn_local_es_update(struct zebra_if *zif, uint32_t lid,
if (!lid || is_zero_mac(sysmac)) {
/* if in ES is attached to zif delete it */
if (old_es)
- zebra_evpn_local_es_del(&zif->es_info.es);
+ zebra_evpn_local_es_del(&old_es);
return 0;
}
@@ -1475,7 +1477,7 @@ static int zebra_evpn_local_es_update(struct zebra_if *zif, uint32_t lid,
/* release the old_es against the zif */
if (old_es)
- zebra_evpn_local_es_del(&zif->es_info.es);
+ zebra_evpn_local_es_del(&old_es);
es = zebra_evpn_es_find(&esi);
if (es) {
diff --git a/zebra/zebra_fpm.c b/zebra/zebra_fpm.c
index 73996c526f..2bf48c6277 100644
--- a/zebra/zebra_fpm.c
+++ b/zebra/zebra_fpm.c
@@ -489,7 +489,7 @@ static inline void zfpm_write_on(void)
*/
static inline void zfpm_read_off(void)
{
- THREAD_READ_OFF(zfpm_g->t_read);
+ thread_cancel(&zfpm_g->t_read);
}
/*
@@ -497,12 +497,12 @@ static inline void zfpm_read_off(void)
*/
static inline void zfpm_write_off(void)
{
- THREAD_WRITE_OFF(zfpm_g->t_write);
+ thread_cancel(&zfpm_g->t_write);
}
static inline void zfpm_connect_off(void)
{
- THREAD_TIMER_OFF(zfpm_g->t_connect);
+ thread_cancel(&zfpm_g->t_connect);
}
/*
@@ -1687,7 +1687,7 @@ static void zfpm_stop_stats_timer(void)
return;
zfpm_debug("Stopping existing stats timer");
- THREAD_TIMER_OFF(zfpm_g->t_stats);
+ thread_cancel(&zfpm_g->t_stats);
}
/*
diff --git a/zebra/zebra_mpls.c b/zebra/zebra_mpls.c
index 66aea8936e..dc49695019 100644
--- a/zebra/zebra_mpls.c
+++ b/zebra/zebra_mpls.c
@@ -331,7 +331,6 @@ static void fec_evaluate(struct zebra_vrf *zvrf)
zebra_fec_t *fec;
uint32_t old_label, new_label;
int af;
- char buf[BUFSIZ];
for (af = AFI_IP; af < AFI_MAX; af++) {
if (zvrf->fec_table[af] == NULL)
@@ -348,9 +347,6 @@ static void fec_evaluate(struct zebra_vrf *zvrf)
|| fec->label_index == MPLS_INVALID_LABEL_INDEX)
continue;
- if (IS_ZEBRA_DEBUG_MPLS)
- prefix2str(&rn->p, buf, BUFSIZ);
-
/* Save old label, determine new label. */
old_label = fec->label;
new_label =
@@ -364,8 +360,8 @@ static void fec_evaluate(struct zebra_vrf *zvrf)
if (IS_ZEBRA_DEBUG_MPLS)
zlog_debug(
- "Update fec %s new label %u upon label block",
- buf, new_label);
+ "Update fec %pRN new label %u upon label block",
+ rn, new_label);
fec->label = new_label;
fec_update_clients(fec);
@@ -494,8 +490,7 @@ static void fec_print(zebra_fec_t *fec, struct vty *vty)
char buf[BUFSIZ];
rn = fec->rn;
- prefix2str(&rn->p, buf, BUFSIZ);
- vty_out(vty, "%s\n", buf);
+ vty_out(vty, "%pRN\n", rn);
vty_out(vty, " Label: %s", label2str(fec->label, buf, BUFSIZ));
if (fec->label_index != MPLS_INVALID_LABEL_INDEX)
vty_out(vty, ", Label Index: %u", fec->label_index);
@@ -2244,7 +2239,6 @@ int zebra_mpls_fec_register(struct zebra_vrf *zvrf, struct prefix *p,
{
struct route_table *table;
zebra_fec_t *fec;
- char buf[BUFSIZ];
bool new_client;
bool label_change = false;
uint32_t old_label;
@@ -2255,14 +2249,11 @@ int zebra_mpls_fec_register(struct zebra_vrf *zvrf, struct prefix *p,
if (!table)
return -1;
- if (IS_ZEBRA_DEBUG_MPLS)
- prefix2str(p, buf, BUFSIZ);
-
if (label != MPLS_INVALID_LABEL && have_label_index) {
flog_err(
EC_ZEBRA_FEC_LABEL_INDEX_LABEL_CONFLICT,
- "Rejecting FEC register for %s with both label %u and Label Index %u specified, client %s",
- buf, label, label_index,
+ "Rejecting FEC register for %pFX with both label %u and Label Index %u specified, client %s",
+ p, label, label_index,
zebra_route_string(client->proto));
return -1;
}
@@ -2274,8 +2265,8 @@ int zebra_mpls_fec_register(struct zebra_vrf *zvrf, struct prefix *p,
if (!fec) {
flog_err(
EC_ZEBRA_FEC_ADD_FAILED,
- "Failed to add FEC %s upon register, client %s",
- buf, zebra_route_string(client->proto));
+ "Failed to add FEC %pFX upon register, client %s",
+ p, zebra_route_string(client->proto));
return -1;
}
@@ -2301,7 +2292,7 @@ int zebra_mpls_fec_register(struct zebra_vrf *zvrf, struct prefix *p,
listnode_add(fec->client_list, client);
if (IS_ZEBRA_DEBUG_MPLS)
- zlog_debug("FEC %s label%s %u %s by client %s%s", buf,
+ zlog_debug("FEC %pFX label%s %u %s by client %s%s", p,
have_label_index ? " index" : "",
have_label_index ? label_index : label,
new_client ? "registered" : "updated",
@@ -2352,15 +2343,11 @@ int zebra_mpls_fec_unregister(struct zebra_vrf *zvrf, struct prefix *p,
{
struct route_table *table;
zebra_fec_t *fec;
- char buf[BUFSIZ];
table = zvrf->fec_table[family2afi(PREFIX_FAMILY(p))];
if (!table)
return -1;
- if (IS_ZEBRA_DEBUG_MPLS)
- prefix2str(p, buf, BUFSIZ);
-
fec = fec_find(table, p);
if (!fec) {
flog_err(EC_ZEBRA_FEC_RM_FAILED,
@@ -2372,7 +2359,7 @@ int zebra_mpls_fec_unregister(struct zebra_vrf *zvrf, struct prefix *p,
listnode_delete(fec->client_list, client);
if (IS_ZEBRA_DEBUG_MPLS)
- zlog_debug("FEC %s unregistered by client %s", buf,
+ zlog_debug("FEC %pFX unregistered by client %s", p,
zebra_route_string(client->proto));
/* If not a configured entry, delete the FEC if no other clients. Before
@@ -2513,7 +2500,6 @@ int zebra_mpls_static_fec_add(struct zebra_vrf *zvrf, struct prefix *p,
{
struct route_table *table;
zebra_fec_t *fec;
- char buf[BUFSIZ];
mpls_label_t old_label;
int ret = 0;
@@ -2521,9 +2507,6 @@ int zebra_mpls_static_fec_add(struct zebra_vrf *zvrf, struct prefix *p,
if (!table)
return -1;
- if (IS_ZEBRA_DEBUG_MPLS)
- prefix2str(p, buf, BUFSIZ);
-
/* Update existing FEC or create a new one. */
fec = fec_find(table, p);
if (!fec) {
@@ -2536,7 +2519,7 @@ int zebra_mpls_static_fec_add(struct zebra_vrf *zvrf, struct prefix *p,
}
if (IS_ZEBRA_DEBUG_MPLS)
- zlog_debug("Add fec %s label %u", buf, in_label);
+ zlog_debug("Add fec %pFX label %u", p, in_label);
} else {
fec->flags |= FEC_FLAG_CONFIGURED;
if (fec->label == in_label)
@@ -2546,7 +2529,7 @@ int zebra_mpls_static_fec_add(struct zebra_vrf *zvrf, struct prefix *p,
/* Label change, update clients. */
old_label = fec->label;
if (IS_ZEBRA_DEBUG_MPLS)
- zlog_debug("Update fec %s new label %u", buf, in_label);
+ zlog_debug("Update fec %pFX new label %u", p, in_label);
fec->label = in_label;
fec_update_clients(fec);
@@ -2569,7 +2552,6 @@ int zebra_mpls_static_fec_del(struct zebra_vrf *zvrf, struct prefix *p)
struct route_table *table;
zebra_fec_t *fec;
mpls_label_t old_label;
- char buf[BUFSIZ];
table = zvrf->fec_table[family2afi(PREFIX_FAMILY(p))];
if (!table)
@@ -2577,9 +2559,8 @@ int zebra_mpls_static_fec_del(struct zebra_vrf *zvrf, struct prefix *p)
fec = fec_find(table, p);
if (!fec) {
- prefix2str(p, buf, BUFSIZ);
flog_err(EC_ZEBRA_FEC_RM_FAILED,
- "Failed to find FEC %s upon delete", buf);
+ "Failed to find FEC %pFX upon delete", p);
return -1;
}
diff --git a/zebra/zebra_netns_notify.c b/zebra/zebra_netns_notify.c
index 995fa6fb5a..ee2dc7a0ed 100644
--- a/zebra/zebra_netns_notify.c
+++ b/zebra/zebra_netns_notify.c
@@ -378,7 +378,7 @@ void zebra_ns_notify_close(void)
fd = zebra_netns_notify_current->u.fd;
if (zebra_netns_notify_current->master != NULL)
- thread_cancel(zebra_netns_notify_current);
+ thread_cancel(&zebra_netns_notify_current);
/* auto-removal of notify items */
if (fd > 0)
diff --git a/zebra/zebra_nhg.c b/zebra/zebra_nhg.c
index f1f6e7e2bf..ebefa020c8 100644
--- a/zebra/zebra_nhg.c
+++ b/zebra/zebra_nhg.c
@@ -442,11 +442,8 @@ static void *zebra_nhg_hash_alloc(void *arg)
/* Mark duplicate nexthops in a group at creation time. */
nexthop_group_mark_duplicates(&(nhe->nhg));
- zebra_nhg_connect_depends(nhe, &(copy->nhg_depends));
-
/* Add the ifp now if it's not a group or recursive and has ifindex */
- if (zebra_nhg_depends_is_empty(nhe) && nhe->nhg.nexthop
- && nhe->nhg.nexthop->ifindex) {
+ if (nhe->nhg.nexthop && nhe->nhg.nexthop->ifindex) {
struct interface *ifp = NULL;
ifp = if_lookup_by_index(nhe->nhg.nexthop->ifindex,
@@ -461,7 +458,6 @@ static void *zebra_nhg_hash_alloc(void *arg)
nhe->nhg.nexthop->vrf_id, nhe->id);
}
-
return nhe;
}
@@ -754,7 +750,7 @@ static bool zebra_nhe_find(struct nhg_hash_entry **nhe, /* return value */
* resolving nexthop; or a group of nexthops, where we need
* relationships with the corresponding singletons.
*/
- zebra_nhg_depends_init(lookup);
+ zebra_nhg_depends_init(newnhe);
nh = newnhe->nhg.nexthop;
@@ -786,7 +782,14 @@ static bool zebra_nhe_find(struct nhg_hash_entry **nhe, /* return value */
}
if (recursive)
- SET_FLAG((*nhe)->flags, NEXTHOP_GROUP_RECURSIVE);
+ SET_FLAG(newnhe->flags, NEXTHOP_GROUP_RECURSIVE);
+
+ /* Attach dependent backpointers to singletons */
+ zebra_nhg_connect_depends(newnhe, &newnhe->nhg_depends);
+
+ /**
+ * Backup Nexthops
+ */
if (zebra_nhg_get_backup_nhg(newnhe) == NULL ||
zebra_nhg_get_backup_nhg(newnhe)->nexthop == NULL)
@@ -1588,6 +1591,7 @@ void zebra_nhg_free(struct nhg_hash_entry *nhe)
void zebra_nhg_hash_free(void *p)
{
+ zebra_nhg_release_all_deps((struct nhg_hash_entry *)p);
zebra_nhg_free((struct nhg_hash_entry *)p);
}
@@ -2711,6 +2715,30 @@ void zebra_nhg_sweep_table(struct hash *hash)
hash_iterate(hash, zebra_nhg_sweep_entry, NULL);
}
+static void zebra_nhg_mark_keep_entry(struct hash_bucket *bucket, void *arg)
+{
+ struct nhg_hash_entry *nhe = bucket->data;
+
+ UNSET_FLAG(nhe->flags, NEXTHOP_GROUP_INSTALLED);
+}
+
+/*
+ * When we are shutting down and we have retain mode enabled
+ * in zebra the process is to mark each vrf that it's
+ * routes should not be deleted. The problem with that
+ * is that shutdown actually free's up memory which
+ * causes the nexthop group's ref counts to go to zero
+ * we need a way to subtly tell the system to not remove
+ * the nexthop groups from the kernel at the same time.
+ * The easiest just looks like that we should not mark
+ * the nhg's as installed any more and when the ref count
+ * goes to zero we'll attempt to delete and do nothing
+ */
+void zebra_nhg_mark_keep(void)
+{
+ hash_iterate(zrouter.nhgs_id, zebra_nhg_mark_keep_entry, NULL);
+}
+
/* Global control to disable use of kernel nexthops, if available. We can't
* force the kernel to support nexthop ids, of course, but we can disable
* zebra's use of them, for testing e.g. By default, if the kernel supports
@@ -2814,10 +2842,15 @@ struct nhg_hash_entry *zebra_nhg_proto_add(uint32_t id, int type,
if (old) {
/*
* This is a replace, just release NHE from ID for now, The
- * depends/dependents may still be used in the replacement.
+ * depends/dependents may still be used in the replacement so
+ * we don't touch them other than to remove their refs to their
+ * old parent.
*/
replace = true;
hash_release(zrouter.nhgs_id, old);
+
+ /* Free all the things */
+ zebra_nhg_release_all_deps(old);
}
new = zebra_nhg_rib_find_nhe(&lookup, afi);
@@ -2854,9 +2887,6 @@ struct nhg_hash_entry *zebra_nhg_proto_add(uint32_t id, int type,
zebra_nhg_decrement_ref(rb_node_dep->nhe);
}
- /* Free all the things */
- zebra_nhg_release_all_deps(old);
-
/* Dont call the dec API, we dont want to uninstall the ID */
old->refcnt = 0;
zebra_nhg_free(old);
diff --git a/zebra/zebra_nhg.h b/zebra/zebra_nhg.h
index 052fa65d06..b2ef88bb61 100644
--- a/zebra/zebra_nhg.h
+++ b/zebra/zebra_nhg.h
@@ -324,9 +324,16 @@ struct zebra_dplane_ctx;
extern void zebra_nhg_dplane_result(struct zebra_dplane_ctx *ctx);
-/* Sweet the nhg hash tables for old entries on restart */
+/* Sweep the nhg hash tables for old entries on restart */
extern void zebra_nhg_sweep_table(struct hash *hash);
+/*
+ * We are shutting down but the nexthops should be kept
+ * as that -r has been specified and we don't want to delete
+ * the routes unintentionally
+ */
+extern void zebra_nhg_mark_keep(void);
+
/* Nexthop resolution processing */
struct route_entry; /* Forward ref to avoid circular includes */
extern int nexthop_active_update(struct route_node *rn, struct route_entry *re);
diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c
index 9a3b567b5a..1e7b38086b 100644
--- a/zebra/zebra_ptm.c
+++ b/zebra/zebra_ptm.c
@@ -156,13 +156,10 @@ void zebra_ptm_finish(void)
if (ptm_cb.in_data)
free(ptm_cb.in_data);
- /* Release threads. */
- if (ptm_cb.t_read)
- thread_cancel(ptm_cb.t_read);
- if (ptm_cb.t_write)
- thread_cancel(ptm_cb.t_write);
- if (ptm_cb.t_timer)
- thread_cancel(ptm_cb.t_timer);
+ /* Cancel events. */
+ thread_cancel(&ptm_cb.t_read);
+ thread_cancel(&ptm_cb.t_write);
+ thread_cancel(&ptm_cb.t_timer);
if (ptm_cb.wb)
buffer_free(ptm_cb.wb);
@@ -218,7 +215,7 @@ static int zebra_ptm_send_message(char *data, int size)
ptm_cb.reconnect_time, &ptm_cb.t_timer);
return -1;
case BUFFER_EMPTY:
- THREAD_OFF(ptm_cb.t_write);
+ thread_cancel(&ptm_cb.t_write);
break;
case BUFFER_PENDING:
thread_add_write(zrouter.master, zebra_ptm_flush_messages, NULL,
diff --git a/zebra/zebra_pw.c b/zebra/zebra_pw.c
index cdcca1e930..ecae021dba 100644
--- a/zebra/zebra_pw.c
+++ b/zebra/zebra_pw.c
@@ -102,7 +102,7 @@ void zebra_pw_del(struct zebra_vrf *zvrf, struct zebra_pw *pw)
hook_call(pw_uninstall, pw);
dplane_pw_uninstall(pw);
} else if (pw->install_retry_timer)
- THREAD_TIMER_OFF(pw->install_retry_timer);
+ thread_cancel(&pw->install_retry_timer);
/* unlink and release memory */
RB_REMOVE(zebra_pw_head, &zvrf->pseudowires, pw);
@@ -219,7 +219,7 @@ void zebra_pw_install_failure(struct zebra_pw *pw, int pwstatus)
pw->vrf_id, pw->ifname, PW_INSTALL_RETRY_INTERVAL);
/* schedule to retry later */
- THREAD_TIMER_OFF(pw->install_retry_timer);
+ thread_cancel(&pw->install_retry_timer);
thread_add_timer(zrouter.master, zebra_pw_install_retry, pw,
PW_INSTALL_RETRY_INTERVAL, &pw->install_retry_timer);
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 730042b72c..ab7423a12a 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -1495,7 +1495,6 @@ static bool rib_update_re_from_ctx(struct route_entry *re,
struct route_node *rn,
struct zebra_dplane_ctx *ctx)
{
- char dest_str[PREFIX_STRLEN] = "";
struct nexthop *nexthop;
bool matched;
const struct nexthop_group *ctxnhg;
@@ -1507,19 +1506,13 @@ static bool rib_update_re_from_ctx(struct route_entry *re,
vrf = vrf_lookup_by_id(re->vrf_id);
- /* Note well: only capturing the prefix string if debug is enabled here;
- * unconditional log messages will have to generate the string.
- */
- if (IS_ZEBRA_DEBUG_RIB)
- prefix2str(&(rn->p), dest_str, sizeof(dest_str));
-
dest = rib_dest_from_rnode(rn);
if (dest)
is_selected = (re == dest->selected_fib);
if (IS_ZEBRA_DEBUG_RIB_DETAILED)
- zlog_debug("update_from_ctx: %s(%u:%u):%s: %sSELECTED, re %p",
- VRF_LOGNAME(vrf), re->vrf_id, re->table, dest_str,
+ zlog_debug("update_from_ctx: %s(%u:%u):%pRN: %sSELECTED, re %p",
+ VRF_LOGNAME(vrf), re->vrf_id, re->table, rn,
(is_selected ? "" : "NOT "), re);
/* Update zebra's nexthop FIB flag for each nexthop that was installed.
@@ -1545,9 +1538,8 @@ static bool rib_update_re_from_ctx(struct route_entry *re,
if (matched) {
if (IS_ZEBRA_DEBUG_RIB)
zlog_debug(
- "%s(%u:%u):%s update_from_ctx(): existing fib nhg, no change",
- VRF_LOGNAME(vrf), re->vrf_id, re->table,
- dest_str);
+ "%s(%u:%u):%pRN update_from_ctx(): existing fib nhg, no change",
+ VRF_LOGNAME(vrf), re->vrf_id, re->table, rn);
goto check_backups;
} else if (CHECK_FLAG(re->status, ROUTE_ENTRY_USE_FIB_NHG)) {
@@ -1556,9 +1548,8 @@ static bool rib_update_re_from_ctx(struct route_entry *re,
*/
if (IS_ZEBRA_DEBUG_RIB)
zlog_debug(
- "%s(%u:%u):%s update_from_ctx(): replacing fib nhg",
- VRF_LOGNAME(vrf), re->vrf_id, re->table,
- dest_str);
+ "%s(%u:%u):%pRN update_from_ctx(): replacing fib nhg",
+ VRF_LOGNAME(vrf), re->vrf_id, re->table, rn);
nexthops_free(re->fib_ng.nexthop);
re->fib_ng.nexthop = NULL;
@@ -1568,9 +1559,9 @@ static bool rib_update_re_from_ctx(struct route_entry *re,
changed_p = true;
} else {
if (IS_ZEBRA_DEBUG_RIB)
- zlog_debug("%s(%u:%u):%s update_from_ctx(): no fib nhg",
- VRF_LOGNAME(vrf), re->vrf_id, re->table,
- dest_str);
+ zlog_debug(
+ "%s(%u:%u):%pRN update_from_ctx(): no fib nhg",
+ VRF_LOGNAME(vrf), re->vrf_id, re->table, rn);
}
/*
@@ -1597,9 +1588,9 @@ static bool rib_update_re_from_ctx(struct route_entry *re,
if (matched) {
if (IS_ZEBRA_DEBUG_RIB)
zlog_debug(
- "%s(%u:%u):%s update_from_ctx(): rib nhg matched, changed '%s'",
- VRF_LOGNAME(vrf), re->vrf_id, re->table,
- dest_str, (changed_p ? "true" : "false"));
+ "%s(%u:%u):%pRN update_from_ctx(): rib nhg matched, changed '%s'",
+ VRF_LOGNAME(vrf), re->vrf_id, re->table, rn,
+ (changed_p ? "true" : "false"));
goto check_backups;
}
@@ -1610,8 +1601,8 @@ no_nexthops:
*/
if (IS_ZEBRA_DEBUG_RIB)
zlog_debug(
- "%s(%u:%u):%s update_from_ctx(): changed %s, adding new fib nhg%s",
- VRF_LOGNAME(vrf), re->vrf_id, re->table, dest_str,
+ "%s(%u:%u):%pRN update_from_ctx(): changed %s, adding new fib nhg%s",
+ VRF_LOGNAME(vrf), re->vrf_id, re->table, rn,
(changed_p ? "true" : "false"),
ctxnhg->nexthop != NULL ? "" : " (empty)");
@@ -1645,8 +1636,8 @@ check_backups:
if (matched) {
if (IS_ZEBRA_DEBUG_RIB)
zlog_debug(
- "%s(%u):%s update_from_ctx(): existing fib backup nhg, no change",
- VRF_LOGNAME(vrf), re->vrf_id, dest_str);
+ "%s(%u):%pRN update_from_ctx(): existing fib backup nhg, no change",
+ VRF_LOGNAME(vrf), re->vrf_id, rn);
goto done;
} else if (re->fib_backup_ng.nexthop) {
@@ -1656,8 +1647,8 @@ check_backups:
*/
if (IS_ZEBRA_DEBUG_RIB)
zlog_debug(
- "%s(%u):%s update_from_ctx(): replacing fib backup nhg",
- VRF_LOGNAME(vrf), re->vrf_id, dest_str);
+ "%s(%u):%pRN update_from_ctx(): replacing fib backup nhg",
+ VRF_LOGNAME(vrf), re->vrf_id, rn);
nexthops_free(re->fib_backup_ng.nexthop);
re->fib_backup_ng.nexthop = NULL;
@@ -1665,8 +1656,9 @@ check_backups:
changed_p = true;
} else {
if (IS_ZEBRA_DEBUG_RIB)
- zlog_debug("%s(%u):%s update_from_ctx(): no fib backup nhg",
- VRF_LOGNAME(vrf), re->vrf_id, dest_str);
+ zlog_debug(
+ "%s(%u):%pRN update_from_ctx(): no fib backup nhg",
+ VRF_LOGNAME(vrf), re->vrf_id, rn);
}
/*
@@ -1685,9 +1677,10 @@ check_backups:
goto done;
if (IS_ZEBRA_DEBUG_RIB)
- zlog_debug("%s(%u):%s update_from_ctx(): changed %s, adding new backup fib nhg",
- VRF_LOGNAME(vrf), re->vrf_id, dest_str,
- (changed_p ? "true" : "false"));
+ zlog_debug(
+ "%s(%u):%pRN update_from_ctx(): changed %s, adding new backup fib nhg",
+ VRF_LOGNAME(vrf), re->vrf_id, rn,
+ (changed_p ? "true" : "false"));
copy_nexthops(&(re->fib_backup_ng.nexthop), ctxnhg->nexthop,
NULL);
@@ -1749,7 +1742,6 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx)
struct route_node *rn = NULL;
struct route_entry *re = NULL, *old_re = NULL, *rib;
bool is_update = false;
- char dest_str[PREFIX_STRLEN] = "";
enum dplane_op_e op;
enum zebra_dplane_result status;
const struct prefix *dest_pfx, *src_pfx;
@@ -1761,20 +1753,14 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx)
vrf = vrf_lookup_by_id(dplane_ctx_get_vrf(ctx));
dest_pfx = dplane_ctx_get_dest(ctx);
- /* Note well: only capturing the prefix string if debug is enabled here;
- * unconditional log messages will have to generate the string.
- */
- if (IS_ZEBRA_DEBUG_DPLANE)
- prefix2str(dest_pfx, dest_str, sizeof(dest_str));
-
/* Locate rn and re(s) from ctx */
rn = rib_find_rn_from_ctx(ctx);
if (rn == NULL) {
if (IS_ZEBRA_DEBUG_DPLANE) {
zlog_debug(
- "Failed to process dplane results: no route for %s(%u):%s",
+ "Failed to process dplane results: no route for %s(%u):%pFX",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dest_str);
+ dest_pfx);
}
goto done;
}
@@ -1787,9 +1773,9 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx)
if (IS_ZEBRA_DEBUG_DPLANE_DETAIL)
zlog_debug(
- "%s(%u:%u):%s Processing dplane result ctx %p, op %s result %s",
+ "%s(%u:%u):%pFX Processing dplane result ctx %p, op %s result %s",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str, ctx,
+ dplane_ctx_get_table(ctx), dest_pfx, ctx,
dplane_op2str(op), dplane_res2str(status));
/*
@@ -1829,9 +1815,9 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx)
if (re->dplane_sequence != seq) {
if (IS_ZEBRA_DEBUG_DPLANE_DETAIL)
zlog_debug(
- "%s(%u):%s Stale dplane result for re %p",
+ "%s(%u):%pFX Stale dplane result for re %p",
VRF_LOGNAME(vrf),
- dplane_ctx_get_vrf(ctx), dest_str, re);
+ dplane_ctx_get_vrf(ctx), dest_pfx, re);
} else
UNSET_FLAG(re->status, ROUTE_ENTRY_QUEUED);
}
@@ -1840,10 +1826,10 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx)
if (old_re->dplane_sequence != dplane_ctx_get_old_seq(ctx)) {
if (IS_ZEBRA_DEBUG_DPLANE_DETAIL)
zlog_debug(
- "%s(%u:%u):%s Stale dplane result for old_re %p",
+ "%s(%u:%u):%pFX Stale dplane result for old_re %p",
VRF_LOGNAME(vrf),
dplane_ctx_get_vrf(ctx), old_re->table,
- dest_str, old_re);
+ dest_pfx, old_re);
} else
UNSET_FLAG(old_re->status, ROUTE_ENTRY_QUEUED);
}
@@ -1881,12 +1867,12 @@ static void rib_process_result(struct zebra_dplane_ctx *ctx)
if (!fib_changed) {
if (IS_ZEBRA_DEBUG_DPLANE_DETAIL)
zlog_debug(
- "%s(%u:%u):%s no fib change for re",
+ "%s(%u:%u):%pFX no fib change for re",
VRF_LOGNAME(vrf),
dplane_ctx_get_vrf(ctx),
dplane_ctx_get_table(
ctx),
- dest_str);
+ dest_pfx);
}
/* Redistribute if this is the selected re */
@@ -2027,7 +2013,6 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
struct route_entry *re = NULL;
struct vrf *vrf;
struct nexthop *nexthop;
- char dest_str[PREFIX_STRLEN] = "";
const struct prefix *dest_pfx, *src_pfx;
rib_dest_t *dest;
bool fib_changed = false;
@@ -2036,20 +2021,14 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
dest_pfx = dplane_ctx_get_dest(ctx);
vrf = vrf_lookup_by_id(dplane_ctx_get_vrf(ctx));
- /* Note well: only capturing the prefix string if debug is enabled here;
- * unconditional log messages will have to generate the string.
- */
- if (debug_p)
- prefix2str(dest_pfx, dest_str, sizeof(dest_str));
-
/* Locate rn and re(s) from ctx */
rn = rib_find_rn_from_ctx(ctx);
if (rn == NULL) {
if (debug_p) {
zlog_debug(
- "Failed to process dplane notification: no routes for %s(%u:%u):%s",
+ "Failed to process dplane notification: no routes for %s(%u:%u):%pFX",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str);
+ dplane_ctx_get_table(ctx), dest_pfx);
}
goto done;
}
@@ -2058,9 +2037,9 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
srcdest_rnode_prefixes(rn, &dest_pfx, &src_pfx);
if (debug_p)
- zlog_debug("%s(%u:%u):%s Processing dplane notif ctx %p",
+ zlog_debug("%s(%u:%u):%pFX Processing dplane notif ctx %p",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str, ctx);
+ dplane_ctx_get_table(ctx), dest_pfx, ctx);
/*
* Take a pass through the routes, look for matches with the context
@@ -2075,9 +2054,9 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
if (re == NULL) {
if (debug_p)
zlog_debug(
- "%s(%u:%u):%s Unable to process dplane notification: no entry for type %s",
+ "%s(%u:%u):%pFX Unable to process dplane notification: no entry for type %s",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str,
+ dplane_ctx_get_table(ctx), dest_pfx,
zebra_route_string(dplane_ctx_get_type(ctx)));
goto done;
@@ -2109,20 +2088,20 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
UNSET_FLAG(re->status, ROUTE_ENTRY_INSTALLED);
if (debug_p)
zlog_debug(
- "%s(%u:%u):%s dplane notif, uninstalled type %s route",
+ "%s(%u:%u):%pFX dplane notif, uninstalled type %s route",
VRF_LOGNAME(vrf),
dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str,
+ dplane_ctx_get_table(ctx), dest_pfx,
zebra_route_string(
dplane_ctx_get_type(ctx)));
} else {
/* At least report on the event. */
if (debug_p)
zlog_debug(
- "%s(%u:%u):%s dplane notif, but type %s not selected_fib",
+ "%s(%u:%u):%pFX dplane notif, but type %s not selected_fib",
VRF_LOGNAME(vrf),
dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str,
+ dplane_ctx_get_table(ctx), dest_pfx,
zebra_route_string(
dplane_ctx_get_type(ctx)));
}
@@ -2146,9 +2125,9 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
if (!fib_changed) {
if (debug_p)
zlog_debug(
- "%s(%u:%u):%s dplane notification: rib_update returns FALSE",
+ "%s(%u:%u):%pFX dplane notification: rib_update returns FALSE",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str);
+ dplane_ctx_get_table(ctx), dest_pfx);
}
/*
@@ -2163,9 +2142,9 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
if (start_count > 0 && end_count > 0) {
if (debug_p)
zlog_debug(
- "%s(%u:%u):%s applied nexthop changes from dplane notification",
+ "%s(%u:%u):%pFX applied nexthop changes from dplane notification",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str);
+ dplane_ctx_get_table(ctx), dest_pfx);
/* Changed nexthops - update kernel/others */
dplane_route_notif_update(rn, re,
@@ -2174,9 +2153,9 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
} else if (start_count == 0 && end_count > 0) {
if (debug_p)
zlog_debug(
- "%s(%u:%u):%s installed transition from dplane notification",
+ "%s(%u:%u):%pFX installed transition from dplane notification",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str);
+ dplane_ctx_get_table(ctx), dest_pfx);
/* We expect this to be the selected route, so we want
* to tell others about this transition.
@@ -2192,9 +2171,9 @@ static void rib_process_dplane_notify(struct zebra_dplane_ctx *ctx)
} else if (start_count > 0 && end_count == 0) {
if (debug_p)
zlog_debug(
- "%s(%u:%u):%s un-installed transition from dplane notification",
+ "%s(%u:%u):%pFX un-installed transition from dplane notification",
VRF_LOGNAME(vrf), dplane_ctx_get_vrf(ctx),
- dplane_ctx_get_table(ctx), dest_str);
+ dplane_ctx_get_table(ctx), dest_pfx);
/* Transition from _something_ installed to _nothing_
* installed.
diff --git a/zebra/zebra_routemap.c b/zebra/zebra_routemap.c
index 8155f9acfe..294f2c17ff 100644
--- a/zebra/zebra_routemap.c
+++ b/zebra/zebra_routemap.c
@@ -1695,7 +1695,7 @@ static void zebra_route_map_set_delay_timer(uint32_t value)
if (!value && zebra_t_rmap_update) {
/* Event driven route map updates is being disabled */
/* But there's a pending timer. Fire it off now */
- thread_cancel(zebra_t_rmap_update);
+ thread_cancel(&zebra_t_rmap_update);
zebra_route_map_update_timer(zebra_t_rmap_update);
}
}
@@ -1705,7 +1705,7 @@ void zebra_routemap_finish(void)
/* Set zebra_rmap_update_timer to 0 so that it wont schedule again */
zebra_rmap_update_timer = 0;
/* Thread off if any scheduled already */
- THREAD_TIMER_OFF(zebra_t_rmap_update);
+ thread_cancel(&zebra_t_rmap_update);
route_map_finish();
}