Segment Routing ECMP for ISIS or OSPF
Overview
Segment Routing (SR) is a source-based routing technique where you can specify a route in a network through which a packet is sent. The path that a particular packet needs to traverse is represented by one or more segments (nodes and links). 
Equal Cost Multipath (ECMP) refers to single-hop, equal-cost links between adjacent nodes with a forwarding mechanism for routing traffic along multiple paths of equal cost. For ECMP enabled devices, OcNOS uses Forwarding Plane Load Balancing and installs the maximum number of ECMP routes supported by the kernel. This allows for load balancing to be performed with more than one next-hop to reach a destination.
SR with ECMP support for Intermediate System to Intermediate System (ISIS) and Open Shortest Path First (OSPF), selects all the valid equal-cost next-hop peers of an IP prefix and creates ECMP Incoming Label Maps (ILM) and FEC-to-NHLFE (FTN) entries for that prefix with all the IS-IS/OSPF SR next-hops in the forwarding plane.
Feature Characteristics 
The main characteristics of SR ECMP are as follows:
•	Distributes packets across multiple logical paths (LSP) carrying qualified traffic over MPLS underlay using SR as a transport. The traffic is distributed based on a collection of such LSPs, known as an ECMP set.
•	Uses an internal hashing algorithm by the forwarding plane to distribute traffic among multiple next-hops, assigning the traffic flow to a particular next-hop.
•	When TI-LFA is enabled, IGP adds the ECMP next-hops as primary and computes and adds a backup for each of the ECMP next-hops in the FTN and ILM entry of the prefix.
•	When TI-LFA is disabled, IGP computes and adds all the ECMP next-hops in the FTN and ILM entry of the prefix.
Note:	Load balancing on ECMP next-hops does not guarantee equal distribution of traffic across the ECMP paths. Load balancing in the hardware is done using hashing of a combination of headers in the traffic streams, such as src, dst mac, ip pair and so on. The unique combination of such headers may result in the same hash which in turn results in the same ECMP next-hop. This causes unequal distribution of traffic within the ECMP next-hop interfaces.
Benefits
The key benefits of SR ECMP are as follows: 
•	Distributes traffic across multiple equal-cost paths, effectively balancing the load, optimizing resource utilization throughout the network, and preventing congestion.
•	Reroutes traffic to alternative equal-cost paths in case of a link or node failure, thus reducing downtime and maintaining continuous service.
•	Offers redundancy by utilizing multiple paths such that if one path becomes unavailable, traffic is redirected to other paths seamlessly, bolstering network resilience and reliability, when TI-LFA is enabled.
Prerequisites
The SR ECMP feature can be enabled on the following devices:
•	 OcNOS devices that support ISIS/OSPF Segment Routing. 
•	OcNOS devices that support MPLS services such as VPLS,VPWS,L3VPN,6PE,6VPE and EVPN (ELINE,ELAN,ETREE).
Configuration
The following configuration enables ECMP with ISIS-SR for L3VPN and EVPN ELINE services.
Topology
This topology includes Edge nodes - DUT1 and DUT2, Intermediate nodes - DUT2, DUT3, DUT4, and DUT5 and Target Groups 1 and 2. 
The ECMP Label Switched Path (LSP) derived from the above topology is as follows:  
| Source | Destination | ECMP | Path | Cost | 
|---|
| DUT1 | DUT2 | YES | DUT1-DUT2 | 30 | 
|   |   |   | DUT1-DUT4-DUT2 | 30 | 
| DUT1 | DUT6 | YES | DUT1-DUT2-DUT3-DUT6 | 1040 | 
|   |   |   | DUT1-DUT4-DUT5-DUT6 | 1040 | 
To configure SR ECMP functionality on PE nodes with ISIS as IGP, follow the steps mentioned below:
1.	Configure loop-back interface.
1.	Access interface configuration mode for the loopback interface (interface lo).
2.	Assign an IPv4 address to the loopback interface using the IPv4 address command followed by the desired IPv4 address and subnet mask (ipv6 address 10.84.166.1/32).
3.	Assign appropriate prefix-sid index for the loopback interface (prefix-sid index 100 no-php).
4.	Configure IS-IS for IPv4 on the loopback interface using the ip router isis command, specifying the IS-IS process ID (ip router isis 1).
DUT1(config)#interface lo
DUT1(config-if)# ip address 127.0.0.1/8
DUT1(config-if)# ip address 10.84.166.1/32 secondary
DUT1(config-if)# ipv6 address ::1/128
DUT1(config-if)# prefix-sid index 100 no-php
DUT1(config-if)# ip router isis 1
DUT1(config-if)# exit
2.	Configure network interface.
1.	Access interface configuration mode for the desired network interface (interface xe9 and xe7).
2.	Assign an IPv4 address to the loopback interface using the ipv4 address command followed by the desired IPv4 address and subnet mask (ip address 10.11.22.1/30).
3.	Configure the MTU for the interface (mtu 9216).
4.	Configure IS-IS for IPv4 on the interface using the IP router ISIS command, specifying the IS-IS process ID (ip router isis 1).
DUT1(config)#interface xe9
DUT1(config-if)# load-interval 30
DUT1(config-if)# ip address 10.11.22.1/30
DUT1(config-if)# mtu 9216
DUT1(config-if)# label-switching
DUT1(config-if)# ip router isis 1
DUT1(config-if)#
DUT1(config-if)#exit
3.	In global configuration mode, perform the following as shown in the configuration snapshots below:
1.	Configure ISIS Settings
2.	Perform the BGP Configuration
3.	Create IP VRF:
4.	Define the L3VPN access intf configuration and IP VRF mapping. 
5.	Create MAC VRF.
6.	Define the ELINE instance and with the MAC VRF Mapping and access intf configuration
7.	Enable ECMP for SR entities for FTN as its PE Edge node using the command mpls ftn-ecmp sr
Note:	Use ECMP SR for ILM in case of P transit nodes. 
Configuration Snapshot
Edge Nodes (DUT1 and DUT6)
DUT1#sh run
!
! Software version: UFI_S9510-30XC-OcNOS-SP-PLUS-6.6.0.99-Alpha 10/                                                                       07/2024 21:37:20
!
! Last configuration change at 00:10:29 UTC Thu Nov 16 2023 by root
!
feature netconf-ssh vrf management
feature netconf-tls vrf management
no feature netconf-ssh
no feature netconf-tls
service password-encryption
!
logging console 5
logging level all 5
snmp-server enable traps link linkDown
snmp-server enable traps link linkUp
!
hardware-profile statistics voq-full-color enable
hardware-profile statistics cfm-ccm enable
!
qos enable
!
mpls ilm-ecmp sr
mpls ftn-ecmp sr
!
hostname DUT1
no ip domain-lookup
ip domain-lookup vrf management
tfo Disable
errdisable cause stp-bpdu-guard
no feature telnet vrf management
no feature telnet
feature ssh vrf management
no feature ssh
feature dns relay
ip dns relay
ipv6 dns relay
feature ntp vrf management
ntp enable vrf management
!
evpn mpls enable
!
evpn mpls irb
!
ip vrf management
!
ip vrf vrf701
 rd 10:701
 route-target both 10:701
!
mac vrf ELINE_DUT1_DUT6_501
 rd 10.84.166.1:501
 route-target both 501:501
!
evpn mpls vtep-ip-global 10.84.166.1
!
evpn mpls id 501 xconnect target-mpls-id 1501
 host-reachability-protocol evpn-bgp ELINE_DUT1_DUT6_501
!
router ldp
 targeted-peer ipv4 10.84.166.6
  exit-targeted-peer-mode
!
interface ce0
!
interface ce1
!
interface eth0
 ip vrf forwarding management
 ip address dhcp
!
interface lo
 ip address 127.0.0.1/8
 ip address 10.84.166.1/32 secondary
 ipv6 address ::1/128
 prefix-sid index 100 no-php
 ip router isis 1
!
interface lo.management
 ip vrf forwarding management
 ip address 127.0.0.1/8
 ipv6 address ::1/128
!
interface xe2
!
interface xe3
!
interface xe4
!
interface xe5
!
interface xe6
!
interface xe7
 speed 10g
 load-interval 30
 ip address 10.11.44.1/30
 mtu 9216
 label-switching
 ip ospf network point-to-point
 ip router isis 1
!
interface xe8
!
interface xe9
 load-interval 30
 ip address 10.11.22.1/30
 mtu 9216
 label-switching
 ip router isis 1
 isis wide-metric 20
!
interface xe10
!
interface xe11
!
interface xe12
!
interface xe13
!
interface xe14
 mtu 9216
!
interface xe14.501 switchport
 description ELINE_DUT1_DUT6_501
 encapsulation dot1q 501
 load-interval 30
 mtu 9216
 access-if-evpn
  map vpn-id 501
!
interface xe14.701
 encapsulation dot1q 701
 load-interval 30
 ip vrf forwarding vrf701
 ip address 100.7.1.1/24
 mtu 9216
!
interface xe15
!
interface xe16
!
interface xe17
!
interface xe18
!
interface xe19
!
interface xe20
!
interface xe21
!
interface xe22
!
interface xe23
!
interface xe24
!
interface xe25
!
interface xe26
!
interface xe27
!
interface xe28
!
interface xe29
!
 exit
!
router isis 1
 is-type level-1
 metric-style wide
 mpls traffic-eng router-id 10.84.166.1
 mpls traffic-eng level-1
 capability cspf
 bfd all-interfaces
 net 49.0001.0000.0001.0011.00
 isis segment-routing global block 20000 23000
 segment-routing mpls
!
router bgp 65010
 bgp router-id 10.84.166.1
 neighbor 10.84.166.6 remote-as 65010
 neighbor 10.84.166.6 update-source lo
 !
 address-family vpnv4 unicast
 neighbor 10.84.166.6 activate
 exit-address-family
 !
 address-family l2vpn evpn
 neighbor 10.84.166.6 activate
 exit-address-family
 !
 address-family ipv4 vrf vrf701
 redistribute connected
 neighbor 100.7.1.2 remote-as 101
 neighbor 100.7.1.2 activate
 exit-address-family
 !
 exit
!
!
end
 
DUT1#
DUT1#
Transit Nodes (DUT2, DUT3, DUT4, and DUT5)
DUT2#
DUT2#sh run
!
! Software version: EC_AS5916-54X-OcNOS-SP-MPLS-6.5.3.86-Alpha 10/1                                                                       3/2024 14:39:27
!
! Last configuration change at 13:12:58 UTC Mon Oct 14 2024 by ocno                                                                       s
!
feature netconf-ssh vrf management
feature netconf-tls vrf management
no feature netconf-ssh
no feature netconf-tls
service password-encryption
!
logging console 5
logging level all 5
snmp-server enable traps link linkDown
snmp-server enable traps link linkUp
!
hardware-profile statistics ingress-acl enable
!
qos enable
!
mpls ilm-ecmp sr
!
hostname DUT2
no ip domain-lookup
ip domain-lookup vrf management
tfo Disable
errdisable cause stp-bpdu-guard
no feature telnet vrf management
no feature telnet
feature ssh vrf management
no feature ssh
feature dns relay
ip dns relay
ipv6 dns relay
feature ntp vrf management
ntp enable vrf management
!
ip vrf management
!
interface ce0
 load-interval 30
 ip address 10.22.55.1/30
 mtu 9216
 label-switching
 ip ospf network point-to-point
 ip router isis 1
!
interface ce1
!
interface ce2
!
interface ce3
!
interface ce4
!
interface ce5
!
interface eth0
 ip vrf forwarding management
 ip address 192.168.3.10/24
!
interface lo
 ip address 127.0.0.1/8
 ip address 10.84.166.2/32 secondary
 ipv6 address ::1/128
 prefix-sid index 200 no-php
 ip router isis 1
!
interface lo.management
 ip vrf forwarding management
 ip address 127.0.0.1/8
 ipv6 address ::1/128
!
interface xe0
 load-interval 30
 ip address 10.22.44.1/30
 mtu 9216
 label-switching
 ip ospf network point-to-point
 ip router isis 1
!
interface xe1
!
interface xe2
!
interface xe3
!
interface xe4
!
interface xe5
!
interface xe6
 load-interval 30
 ip address 10.11.22.2/30
 mtu 9216
 label-switching
 ip ospf network point-to-point
 ip router isis 1
 isis wide-metric 20
!
interface xe7
!
interface xe8
 load-interval 30
 ip address 10.22.33.1/30
 mtu 9216
 label-switching
 ip ospf network point-to-point
 ip router isis 1
!
interface xe9
!
interface xe10
!
interface xe11
!
interface xe12
!
interface xe13
!
interface xe14
!
interface xe15
!
interface xe16
!
interface xe17
!
interface xe18
!
interface xe19
!
interface xe20
!
interface xe21
!
interface xe22
!
interface xe23
!
interface xe24
!
interface xe25
!
interface xe26
!
interface xe27
!
interface xe28
!
interface xe29
!
interface xe30
!
interface xe31
!
interface xe32
!
interface xe33
!
interface xe34
!
interface xe35
!
interface xe36
!
interface xe37
!
interface xe38
!
interface xe39
!
interface xe40
!
interface xe41
!
interface xe42
!
interface xe43
!
interface xe44
!
interface xe45
!
interface xe46
!
interface xe47
!
 exit
!
router isis 1
 is-type level-1-2
 metric-style wide
 mpls traffic-eng router-id 10.84.166.2
 mpls traffic-eng level-1
 mpls traffic-eng level-2
 capability cspf
 bfd all-interfaces
 net 49.0001.0000.0001.0022.00
 redistribute isis level-2 into level-1
 isis segment-routing global block 20000 23000
 segment-routing mpls
!
ip route vrf management 0.0.0.0/0 192.168.3.1 eth0
!
!
end
 
DUT2#
Validation
Validation of SR-ECMP on DUT1[Edge Router]
Here are the show outputs that display the ISISv4 neighbour and routing information with ECMP for DUT1.
DUT1#sh clns neighbors
 
Total number of L1 adjacencies: 2
Total number of L2 adjacencies: 0
Total number of adjacencies: 2
Tag 1:  VRF : default
System Id      Interface   SNPA                State  Holdtime  Type Protocol
0000.0001.0044 xe7         b86a.97c8.3dcb      Up     19        L1   IS-IS
0000.0001.0022 xe9         80a2.352b.7008      Up     19        L1   IS-IS
DUT1#
DUT1#sh clns neighbors detail
 
Total number of L1 adjacencies: 2
Total number of L2 adjacencies: 0
Total number of adjacencies: 2
Tag 1:  VRF : default
System Id      Interface   SNPA                State  Holdtime  Type Protocol
0000.0001.0044 xe7         b86a.97c8.3dcb      Up     21        L1   IS-IS
  L1  Adjacency ID: 1
  L2  Adjacency ID: 2
  Uptime: 00:04:27
  Area Address(es): 49.0001
  IP Address(es): 10.11.44.2
  Level-1 Protocols Supported: IPv4
  Bidirectional Forwarding Detection is enabled
  Adjacency advertisement: Advertise
  Adjacency SID: 26880, ILM ID: 3
 
 
0000.0001.0022 xe9         80a2.352b.7008      Up     21        L1   IS-IS
  L1  Adjacency ID: 1
  L2  Adjacency ID: 2
  Uptime: 00:04:27
  Area Address(es): 49.0001
  IP Address(es): 10.11.22.2
  Level-1 Protocols Supported: IPv4
  Bidirectional Forwarding Detection is enabled
  Adjacency advertisement: Advertise
  Adjacency SID: 26881, ILM ID: 4
 
 
DUT1#
 
 
DUT1#sh ip route 10.84.166.6/32
VRF: Default, Routing entry for 10.84.166.6/32
  Known via "isis", distance 115, metric 1040,  External Route Tag: 0, installed  00:22:23, best
  Last update 00:22:23 ago
  * 10.11.22.2, via xe9
  * 10.11.44.2, via xe7
 
DUT1#
 
The following show outputs displays the validation for L3VPN. 
 
DUT1#sh ip bgp vpnv4 all neighbors
BGP neighbor is 10.84.166.6, remote AS 65010, local AS 65010, internal link, peer index: 4
  BGP version 4, local router ID 10.84.166.1, remote router ID 10.84.166.6
  BGP state = Established, up for 01:18:17
  Last read 00:00:06, hold time is 90, keepalive interval is 30 seconds
  Neighbor capabilities:
    Route refresh: advertised and received (old and new)
    Address family VPNv4 Unicast: advertised and received
    Address family L2VPN EVPN: advertised and received
  Received 351 messages, 0 notifications, 0 in queue
  Sent 333 messages, 1 notifications, 0 in queue
  Route refresh request: received 0, sent 0
  Minimum time between advertisement runs is 5 seconds
  Update source is lo
 
For address family: VPNv4 Unicast  BGP table version 9, neighbor version 9
  Index 1, Offset 0, Mask 0x2
  AIGP is enabled
  Community attribute sent to this neighbor (both)
  Large Community attribute sent to this neighbor
  1 accepted prefixes
  1 announced prefixes
 
 
For address family: L2VPN EVPN  BGP table version 6, neighbor version 6
  Index 1, Offset 0, Mask 0x2
  Community attribute sent to this neighbor (both)
  Large Community attribute sent to this neighbor
  1 accepted prefixes
  Accepted AD:1 MACIP:0 MCAST:0 ESI:0 PREFIX:0
  1 announced prefixes
 
 Connections established 3; dropped 2
Local host: 10.84.166.1, Local port: 179
Foreign host: 10.84.166.6, Foreign port: 40371
TCP MSS: (0), Advertise TCP MSS: (1460), Send TCP MSS: (1460),  Receive TCP MSS: (536)
Sock FD : (29)
Nexthop: 10.84.166.1 lo
Nexthop global: :: lo
Nexthop local: :: lo
BGP connection: non shared networkLast Reset: 01:19:41, due to Hold Timer Expired (Notification sent)
Notification Error Message: (Hold Timer Expired/No sub-error code)
 
DUT1#sh mpls vrf-forwarding-table
Codes: > - installed FTN, * - selected FTN, p - stale FTN, ! - using backup, B - BGP FTN
(m) - Service mapped over multipath transport
(e) - Service mapped over LDP ECMP or SR ECMP
 
Code    FEC                 FTN-ID VRF-ID    Nhlfe-ID    Pri   Out-Label    Out-Intf         Nexthop         UpTime
   B>   200.7.1.0/24        1         2      51          Yes   25600        -                10.84.166.6     00:05:18
DUT1#
 
The following show output displays the validation for EVPN ELINE. 
DUT1#show bgp l2vpn evpn summary
BGP router identifier 10.84.166.1, local AS number 65010
BGP table version is 6
1 BGP AS-PATH entries
0 BGP community entries
 
Neighbor          V    AS     MsgRcv     MsgSen  TblVer    InQ   OutQ   Up/Down  State/PfxRcd     AD  MACIP  MCAST    ESI  PREFIX-ROUTE
10.84.166.6        4 65010        353        336       6      0      0  01:19:10             1      1      0      0      0         0
 
Total number of neighbors 1
 
Total number of Established sessions 1
DUT1#sh evpn mpls xconnect
EVPN Xconnect Info
========================
AC-AC: Local-Cross-connect
AC-NW: Cross-connect to Network
AC-UP: Access-port is up
AC-DN: Access-port is down
NW-UP: Network is up
NW-DN: Network is down
NW-SET: Network and AC both are up
 
Local                            Remote       Connection-Details
================================ ============ ===================================================================================
VPN-ID       EVI-Name      MTU   VPN-ID       Source       Destination                   PE-IP           MTU   Type   NW-Status
================================ ============ ===================================================================================
501          ----          9216  1501         xe14.501     --- Single Homed Port ---     10.84.166.6     9216  AC-NW  NW-SET
 
Total number of entries are 1
 
DUT1#sh evpn mpls xconnect tunnel label
EVPN-MPLS Network tunnel labels
 (*) in Policy - tunnel-policy inherited from mac-vrf
 (e) - Service mapped over MPLS Multipath/ECMP
================+===========+=========+=========+===============+=========+=========+============+=========+============+=========
                             Local     Remote                     Local     Remote       MPLS-Multipath          Underlay
 Destination     Status      VPWS-ID   VPWS-ID   Policy          UC-Label  UC-Label  Grp-Name     NHLFE-ix  NW-Intf      NW-Label
================+===========+=========+=========+===============+=========+=========+============+=========+============+=========
 10.84.166.6     Installed   501       1501      --              26240     26240     --           40        NA(e)        NA(e)
 
Total number of entries are 1
DUT1#
DUT1#sh evpn mpls xconnect tunnel
EVPN-MPLS Network tunnel Entries
Source           Destination      Status        Up/Down       Update        local-evpn-id remote-evpn-id
========================================================================================================
10.84.166.1      10.84.166.6      Installed     00:08:06      00:08:06      501           1501
 
Total number of entries are 1
DUT1#
 
 
The following show output displays the ECMP validation for ISIS-SR.
This command displays the ILM-ID, FTN-ID, In-Label & Out-Label for all the IS-IS routes which have ILM/FTN entry installed. For the ECMP prefix 10.84.166.6//32, only one ILM/FTN entry will be installed, but Out-Label will be separate for each nexthop.2
 
DUT1#sh ip isis route prefix 10.84.166.6/32 detail
 
Codes: C - connected, E - external, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, D - discard, e - external metric
       ** - invalid
 
Tag 1:  VRF : default
     Destination         Metric      ILM-ID     FTN-ID     In-Label   Next-Hop            Interface      Tag       Out-Label
ia   10.84.166.6/32      1040        9          5          20600      10.11.44.2          xe7            0         20600
                                                                      10.11.22.2          xe9            0         20600
     Src: 0000.0001.0022 Ifindex 10016
     Src: 0000.0001.0044 Ifindex 10014
DUT1#
 
This command displays In-Label and Out-Label of all next-hops of the FEC.
 
DUT1#sh isis segment-routing label detail
Tag 1  Segment-Routing: Label Table
FEC                 In-Label       Out-Label      Out-Intf    Nexthop           Dependent Tunnels
10.84.166.4/32      20400          20400          xe7         10.11.44.2
10.84.166.2/32      20200          20200          xe7         10.11.44.2
                                   20200          xe9         10.11.22.2
10.84.166.1/32      20100          N/A            lo          127.0.0.1
10.84.166.3/32      20300          20300          xe7         10.11.44.2
                                   20300          xe9         10.11.22.2
10.11.44.2/32       26880          3              xe7         10.11.44.2
10.84.166.5/32      20500          20500          xe7         10.11.44.2
                                   20500          xe9         10.11.22.2
10.84.166.6/32      20600          20600          xe7         10.11.44.2
                                   20600          xe9         10.11.22.2
10.11.22.2/32       26881          3              xe9         10.11.22.2
 
DUT1#
 
 
Validate ECMP FTN, For the ECMP prefix 10.84.166.6/32,  a single FTN entry is created with all the ECMP nexthops. 
 
DUT1#show mpls forwarding-table 10.84.166.6/32
Codes: > - installed FTN, * - selected FTN, p - stale FTN, ! - using backup
       B - BGP FTN, K - CLI FTN, (t) - tunnel, P - SR Policy FTN, (b) - bypass,
       L - LDP FTN, R - RSVP-TE FTN, S - SNMP FTN, I - IGP-Shortcut,
       U - unknown FTN, O - SR-OSPF FTN, i - SR-ISIS FTN, k - SR-CLI FTN
       (m) - FTN mapped over multipath transport, (e) - FTN is ECMP
 
FTN-ECMP LDP: Disabled, SR: Enabled
Code    FEC                 FTN-ID    Nhlfe-ID  Tunnel-ID   Pri   Out-Label    Out-Intf    ELC       Nexthop         UpTime
   i>   10.84.166.6/32      5         40        -           (e)   -            -           -         -               00:23:09
                                      38        0           Yes   20600        xe7         No        10.11.44.2      -
                                      17        0           Yes   20600        xe9         No        10.11.22.2      -
DUT1#
 
 
Validate ECMP FTN, For the ECMP prefix 10.84.166.6/32,  a single FTN entry is created with all the ECMP nexthops. For each nexthop, a cross-connect is created
 
DUT1#sh mpls ftn-table 10.84.166.6/32
 Primary FTN entry with FEC: 10.84.166.6/32, id: 5, row status: Active, Tunnel-Policy: N/A, State: Installed
  CreateTime: 00:23:22, UpTime: 00:23:22, LastUpdate: N/A
  Owner: ISIS-SR, distance: 115, Action-type: Redirect to LSP, Exp-bits: 0x0, Incoming DSCP: none
  Tunnel id: 0, Protected LSP id: 0, LSP-type: Primary, Description: N/A, , Color: 0
     Cross connect ix: 8, in intf: - in label: 0 out-segment ix: 38 refcount: 1
      Owner: ISIS-SR, Persistent: No, Admin Status: Up, Oper Status: Up
       Out-segment with ix: 38, owner: ISIS-SR, Stale: NO, refcount: 6, out intf: xe7, out label: 20600
    Nexthop addr: 10.11.44.2        cross connect ix: 8, op code: Push
 
     Cross connect ix: 8, in intf: - in label: 0 out-segment ix: 17 refcount: 1
      Owner: ISIS-SR, Persistent: No, Admin Status: Up, Oper Status: Up
       Out-segment with ix: 17, owner: ISIS-SR, Stale: NO, refcount: 5, out intf: xe9, out label: 20600
    Nexthop addr: 10.11.22.2        cross connect ix: 8, op code: Push
 
  Dependent service info (count 1):
  [CONFIRM_VRF] ftn_ix 1 owner BGP prefix 200.7.1.0/24 nhlfe_ix 51 vrf 2
 
DUT1#
 
Validation of SR-ECMP on DUT2[Transit Router]
This command displays the ILM-ID, FTN-ID, In-Label & Out-Label for all the IS-IS routes which have ILM/FTN entry installed. For the ECMP prefix 10.84.166.6//32, only one ILM entry will be installed, but Out-Label will be separate for each next-hop.
 
DUT1#sh ip isis route prefix 10.84.166.6/32 detail
 
Codes: C - connected, E - external, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, D - discard, e - external metric
       ** - invalid
 
Tag 1:  VRF : default
     Destination         Metric      ILM-ID     FTN-ID     In-Label   Next-Hop            Interface      Tag       Out-Label
ia   10.84.166.6/32      1040        9          5          20600      10.11.44.2          xe7            0         20600
                                                                      10.11.22.2          xe9            0         20600
     Src: 0000.0001.0022 Ifindex 10016
     Src: 0000.0001.0044 Ifindex 10014
DUT1#
 
For the ECMP prefix 10.84.166.6/32, a single ILM entry is created with all the ECMP next-hops.
DUT2#sh mpls ilm-table 10.84.166.6/32
Codes: > - installed ILM, * - selected ILM, p - stale ILM, ! - using backup
       K - CLI ILM, T - MPLS-TP, s - Stitched ILM
       S - SNMP, L - LDP, R - RSVP, C - CRLDP
       B - BGP , K - CLI , V - LDP_VC, I - IGP_SHORTCUT
       O - OSPF/OSPF6 SR, i - ISIS SR, k - SR CLI
       P - SR Policy, U - unknown
 
ILM-ECMP LDP: Disabled, SR: Enabled
Code    FEC/VRF/L2CKT    ILM-ID      In-Label    Out-Label   In-Intf    Out-Intf/VRF       Nexthop                 pri  UpTime
   i>   10.84.166.6/32     8           20600       20600       N/A        ce0              10.22.55.2              Yes  00:25:39
                                       20600       20600       N/A        xe8              10.22.33.2              Yes  -
DUT2#
CLI Commands
The Segment Routing ECMP feature introduces the following configuration commands.
mpls ilm-ecmp sr
Use this command to enable programming of SR ILM entry as ECMP in hardware. This command applies only to data-plane and IGP ECMP calculation does not depend on this CLI. Only if this command is enabled, SR ILM entry will be installed as ECMP entry in hardware with all the ECMP next-hops. 
Use no parameter of this command to disable programming of SR ILM entry as ECMP in hardware. When no parameter of this command is executed, the installed SR ECMP ILM entry will be changed to SR non-ECMP ILM entry.
Command Syntax
mpls ilm-ecmp sr
no mpls ilm-ecmp sr
Parameters
None
Default
Disabled
Command Mode
Configure mode
Applicability
Introduced the mpls ilm-ecmp sr parameter in the OcNOS version 6.5.3.
Example
The following sequence of commands is used to enable programming of SR ILM entry as ECMP in hardware.
#configure terminal
(config)#mpls ilm-ecmp sr
(config)#
mpls ftn-ecmp sr
Use this command to enable programming of SR FTN entry as ECMP in hardware. This command applies only to data-plane and IGP ECMP calculation doesn't depend on this CLI. Only if this command is enabled, SR FTN entry will be installed as ECMP entry in hardware with all the ECMP nexthops. 
Use no parameter of this command to disable programming of SR FTN entry as ECMP in hardware. When no parameter of this command is executed, the installed SR ECMP FTN entry will be changed to SR non-ECMP ILM entry.
Command Syntax
mpls ftn-ecmp sr
no mpls ftn-ecmp sr
Parameters
None
Default
Disabled
Command Mode
Configure mode
Applicability
Introduced the mpls ftn-ecmp sr parameter in the OcNOS version 6.5.3.
Example
The following sequence of commands is used to enable programming of SR FTN entry as ECMP in hardware.
#configure terminal
(config)#mpls ftn-ecmp sr
(config)#
show ip isis route prefix A.B.C.D/M
Use this command to display the ISIS routing table of the specified IPv4 prefix.
Command Syntax
show ip isis (WORD|) route ((prefix A.B.C.D/M)|)
Parameters
| WORD | Information for a single ISIS area. | 
| Prefix | Prefix. | 
| A.B.C.D/M | IPv4 prefix. | 
Command Mode
Privileged exec mode
Applicability
This command was introduced in OcNOS version 6.5.3.
Example
The following example displays the ISIS routing table of the specified IPv4 prefix.
#show ip isis route prefix 10.10.10.10/32
 
Codes: C - connected, E - external, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, D - discard, e - external metric
       ** - invalid
 
Tag 100:  VRF : default
     Destination         Metric      Next-Hop            Interface      Tag
L1   10.10.10.10/32      110         2.15.1.15           xe5            0
                                     2.10.1.10           xe11           0
# 
 show ip isis route detail
Use this command to display the MPLS information (ILM-ID, FTN-ID, In-label & Out-label) of the specified IS-IS IPv4 route or all the IS-IS IPv4 routes.
Command Syntax
show ip isis (WORD|) route ((prefix A.B.C.D/M)|) detail
Parameters
| WORD | Information for a single ISIS area. | 
| Prefix | Prefix. | 
| A.B.C.D/M | IPv4 prefix. | 
Command Mode
Privileged exec mode
Applicability
This command was introduced in OcNOS version 6.5.3.
Example
The following example displays the MPLS information of the specified prefix.
#show ip isis route prefix 10.10.10.10/32 detail
 
Codes: C - connected, E - external, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, D - discard, e - external metric
       ** - invalid
 
Tag 100:  VRF : default
     Destination         Metric      ILM-ID     FTN-ID     In-Label   Next-Hop
          Interface      Tag       Out-Label
L1   10.10.10.10/32      110         3          1          16010      2.15.1.15
          xe5            0         16010
                                                                      2.10.1.10
          xe11           0         16010
     Src: 0000.0000.0010 Ifindex 10011
     Src: 0000.0000.0010 Ifindex 10005
# 
 
When the command is executed without prefix parameter, MPLS information of all the IS-IS prefixes are displayed
#show ip isis route detail
 
Codes: C - connected, E - external, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, D - discard, e - external metric
       ** - invalid
 
Tag 100:  VRF : default
     Destination         Metric      ILM-ID     FTN-ID     In-Label   Next-Hop
          Interface      Tag       Out-Label
C    2.2.2.2/32          10          1          --         16002      --
          lo             0         --
     Src: Connected IS-IS Interface
C    2.10.1.0/24         100         --         --         --         --
          xe11           0         --
     Src: Connected IS-IS Interface
C    2.15.1.0/24         50          --         --         --         --
          xe5            0         --
     Src: Connected IS-IS Interface
L1   10.10.10.10/32      110         3          1          16010      2.15.1.15
          xe5            0         16010
                                                                      2.10.1.10
          xe11           0         16010
     Src: 0000.0000.0010 Ifindex 10011
     Src: 0000.0000.0010 Ifindex 10005
L1   10.15.1.0/24        100         --         --         --         2.15.1.15
          xe5            0         --
     Src: 0000.0000.0015 Ifindex 10005
L1   15.15.15.15/32      60          5          2          16015      2.15.1.15
          xe5            0         16015
     Src: 0000.0000.0015 Ifindex 10005
#
show ip isis route tilfa prefix A.B.C.D/M
Use this command to display the MPLS information (SR outgoing label, PQ node, Backup outgoing label, Bypass trunk ID, Backup out-interface & Protection-type) of all ECMP next-hops of the specified IPv4 prefix. This is an enhancement to the existing command show ip isis route tilfa to insert prefix as an optional parameter.
Command Syntax
show ip isis route (WORD|) tilfa ((prefix A.B.C.D/M)|)
Parameters
| WORD | Information for a single ISIS area. | 
| Prefix | Prefix. | 
| A.B.C.D/M | IPv4 prefix. | 
Command Mode
Privileged exec mode
Applicability
This command was introduced in OcNOS version 6.5.3.
Example
#show ip isis route tilfa prefix 10.10.10.10/32
 
Tag   : 100  VRF : default
Codes : L1 - IS-IS level-1, L2 - IS-IS level-2,
        C - Connected Routes, ia - IS-IS inter area
 
10.10.10.10/32
   Route type: L1, FTN-ix :1  ILM-ix :3
   SR Incoming Label      : 16010
   Primary Path Nexthop   : 2.10.1.10, xe11
     SR outgoing Label    : 16010
     PQ node              : 15.15.15.15
     Backup outgoing Label: 16010
     Bypass_trunk id      : 2202
     Backup out interface : xe5
     Protection Type      : Link Protecting
   Primary Path Nexthop   : 2.15.1.15, xe5
     SR outgoing Label    : 16010
     PQ node              : 10.10.10.10
     Backup outgoing Label: 3
     Bypass_trunk id      : 2201
     Backup out interface : xe11
     Protection Type      : Node Protecting
 
   Trunk : 2201 :10.10.10.10_nh_10011_ALG0   FTN-ix : 3 ref_cnt:3
   Number Of outgoing label : 1
    16010
   Nexthop address : 2.10.1.10
 
#
show isis tilfa pq (WORD|)
Use this command to display the PQ nodes of all the ECMP next-hops of the specified vertex. This is an enhancement to the isis tilfa pq command to insert system-id/hostname as an optional parameter.
Command Syntax
show isis (WORD|) tilfa pq (WORD|)
Parameters
| WORD | Information for a single ISIS area. | 
| WORD | System-ID xxxx.xxxx.xxxx or hostname. | 
Command Mode
Privileged exec mode
Applicability
This command was introduced in OcNOS version 6.5.3.
Example
When the command is executed by specifying system-id parameter:
#show isis tilfa pq 7010.00-00
 
Tag 100: Level-1 Link State Database:
 
Node: 7010.00-00
 Interface xe5
  P node: 0000.0000.0010 primary dist:100
  P node: 0000.0000.0015 primary dist:150
  Q node: 0000.0000.0010
  Q node: 0000.0000.0015
  Node Protecting P Nodes
  P node: 0000.0000.0010 primary dist:100
 
  PQ Node: 7010.00-00 backup dist:100
  PQ Node (Node Protection): 7010.00-00 backup dist:100
 Interface xe11
  P node: 0000.0000.0010 primary dist:100
  P node: 0000.0000.0015 primary dist:50
  Q node: 0000.0000.0010
  Q node: 0000.0000.0015
  Node Protecting P Nodes
  P node: 0000.0000.0015 primary dist:50
 
  PQ Node: 7015.00-00 backup dist:50
  No PQ Node found on backup path (Node Protection)
#
 
When the command is executed by specifying hostname parameter:
#show isis tilfa pq 7010
 
Tag 100: Level-1 Link State Database:
 
Node: 7010.00-00
 Interface xe5
  P node: 0000.0000.0010 primary dist:100
  P node: 0000.0000.0015 primary dist:150
  Q node: 0000.0000.0010
  Q node: 0000.0000.0015
  Node Protecting P Nodes
  P node: 0000.0000.0010 primary dist:100
 
  PQ Node: 7010.00-00 backup dist:100
  PQ Node (Node Protection): 7010.00-00 backup dist:100
 Interface xe11
  P node: 0000.0000.0010 primary dist:100
  P node: 0000.0000.0015 primary dist:50
  Q node: 0000.0000.0010
  Q node: 0000.0000.0015
  Node Protecting P Nodes
  P node: 0000.0000.0015 primary dist:50
 
  PQ Node: 7015.00-00 backup dist:50
  No PQ Node found on backup path (Node Protection)
#
show ip ospf route detail
Use this command to display the MPLS information (ILM-ID, FTN-ID, In-label & Out-label) of the specified OSPF IPv4 route or all the OSPF IPv4 routes.
Command Syntax
show ip ospf (<0-65535>|) route (((A.B.C.D | A.B.C.D/M |) detail) | )
Parameters
| <0-65535> | Router process identifier. | 
| A.B.C.D | Single route. | 
| A.B.C.D/M | Single exact match route. | 
Command Mode
Privileged exec mode
Applicability
This command was introduced in OcNOS version 6.5.3.
Example
The following example displays the MPLS information of all the OSPFv2 routes if a prefix parameter is not specified.
#show ip ospf route detail
 
OSPF process 100:
Codes: C - connected, D - Discard, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       OSPF LFA attributes:
       P - Primary, SP - Secondary-Path, LP - Link Protecting,
       NP - Node Protecting, BID - Broadcast Link Protecting
       DP - Downstream Protecting
 
   Destination        Metric      Nexthop            Interface   Area               ILM-ID     FTN-ID     In-Label   Out-Label
C  2.2.2.2/32         1           connected          lo          0.0.0.0
C  2.10.1.0/24        100         connected          xe11        0.0.0.0
C  2.15.1.0/24        50          connected          xe5         0.0.0.0
O  10.10.10.10/32     101         2.10.1.10          xe11        0.0.0.0            8          5          19010      19010
                                  2.15.1.15          xe5         0.0.0.0            8          5          19010      19010
O  10.15.1.0/24       100         2.15.1.15          xe5         0.0.0.0
O  15.15.15.15/32     51          2.15.1.15          xe5         0.0.0.0            10         6          19015      19015
#
 
The following example displays the MPLS information of the specified OSPFv2 route if a prefix parameter is specified:
#show ip ospf route 10.10.10.10/32 detail
 
OSPF process 100:
Codes: C - connected, D - Discard, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       OSPF LFA attributes:
       P - Primary, SP - Secondary-Path, LP - Link Protecting,
       NP - Node Protecting, BID - Broadcast Link Protecting
       DP - Downstream Protecting 
 
   Destination        Metric      Nexthop            Interface   Area               ILM-ID     FTN-ID     In-Label   Out-Label
O  10.10.10.10/32     101         2.10.1.10          xe11        0.0.0.0            8          5          19010      19010
                                  2.15.1.15          xe5         0.0.0.0            8          5          19010      19010
show hsl hw unit 0 encap-db LSP_ENCAP_ID
Use this command to display information on the lsp_encap entry installed in the hardware. This is an enhancement to the show hsl hw unit 0 encap-db command to insert LSP_ENCAP_ID as an optional parameter.
Command Syntax
show hsl hw unit 0 encap-db (LSP_ENCAP_ID|)
Parameters
Command Mode
Privileged exec mode
Applicability
This command was introduced in OcNOS version 6.5.3.
Example
#show hsl hw unit 0 encap-db 0x40002044
label_array[0]:
Entropy enabled             : NO
flags                       : 8229(0x2025)
flags2                      : 0(0x0)
label                       : 16010
qos_map_id                  : 537133060
exp                         : 0
ttl                         : 64
pkt_pri                     : 0
pkt_cfi                     : 0
tunnel_id                   : 1073750084(0x40002044)
l3_intf_id                  : 4106(0x100a)
MPLS labelaction            : BCM_MPLS_EGRESS_ACTION_PUSH
egress_failover_id          : 0(0x0)
egress_failover_if_id       : 0(0x0)
outlif_counting_profile     : 0(0x0)
spl_label_push_type         : bcmMplsSpecialLabelPushNone
encap_access                :
estimated_encap_size        : 0(0x0)
# 
Below are the revised commands. For more details, refer to the 
Segment Routing Commands chapter.
Troubleshooting
1.	If SR ILM entry is not installed as ECMP in hardware:
•	Check if mpls ilm-ecmp sr command is enabled.
•	Check if ECMP next-hops exist for that FEC in ISIS route table show ip isis route detail or OSPF route table show ip ospf route detail
2.	If SR FTN entry is not installed as ECMP in hardware:
•	Check if mpls ftn-ecmp sr command is enabled.
•	Check if ECMP next-hops exist for the FEC in ISIS route table show ip isis route detail or OSPF route table show ip ospf route detail.
3.	If traffic is not load-balanced among the ECMP next-hops:
•	Increase the number of flows, as load balancing depends on the internal hash computed by BCM. Note that lesser flows may lead to the same outgoing interface for different flows.
Glossary
The following provides definitions for key terms or abbreviations and their meanings used throughout this document:
 
| Key Terms/Acronym  | Description | 
| Label switched path (LSP) | A sequence of routers that co-operatively perform MPLS operations for a packet stream. | 
| Topology-Independent Loop-Free Alternate (TI-LFA) | The ability to provide a loop free backup path irrespective of the topologies used in the network. | 
| FEC-to-NHLFE (FTN) | A mapping from the forwarding equivalence class (FEC) of incoming packets to the corresponding Next Hop Label Forwarding Entry (NHLFE) in MPLS. | 
| Incoming Label Map (ILM) | A mapping from incoming labels to corresponding Next Hop Label Forwarding Entry (NHLFE) in MPLS.  | 
| Interior Gateway Protocol (IGP) | An intra-domain protocol used to exchange network reachability and routing information among devices. | 
| Forward Error Correction (FEC) | A system of error control that allows the receiver to correct some errors without having to request a re-transmission of data.  |