Skip to content

Segment Routing for AI Fabrics · Part 3 of 8

Act 3 — SRv6 on Spectrum-X: Cumulus Linux, FRR, and NVUE

Spectrum-X leaf and spine switches run Cumulus Linux 5.x with FRR (Free Range Routing) as the routing daemon. Configuring SRv6 involves three layers: the OS, FRR (for IS-IS and BGP), and the ASIC (hardware forwarding of SRH packets).

Hardware support: Spectrum-4 ASIC

The Spectrum-4 ASIC (SN5600 and SN5400 switches) supports SRv6 SRH processing in hardware:

  • SRH parsing at line rate (no software slow path)
  • SID endpoint processing: End, End.X, End.DT4/6 in hardware
  • uSID shift operation in hardware
  • SRH insertion at the headend (first switch in the SR domain)

This is critical. Some earlier ASIC generations handled SRH in a software slow-path, capping throughput at ~1 Gbps for SR-encapsulated traffic. On Spectrum-4, SRv6 forwarding is at full 51.2 Tbps capacity.

Configuring SRv6 locators and SIDs (FRR + NVUE)

The recommended configuration path on Cumulus Linux 5.x uses FRR's vtysh for IS-IS/BGP and NVUE for interface-level configuration:

# Step 1: Enable IPv6 forwarding and SRv6 in the kernel
sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv6.conf.all.seg6_enabled=1

# Step 2: Configure SRv6 locator in FRR
vtysh
router isis FABRIC
  segment-routing srv6
   locator LEAF01
    prefix 2001:db8:0:leaf01::/64
    block-len 40
    node-len 24
    func-bits 16
  !
!

# Step 3: Assign End SID for this node
segment-routing
 srv6
  locators
   locator LEAF01
    prefix 2001:db8:0:leaf01::/64 block-len 40 node-len 24 func-bits 16
    behavior usid
   !
  !
 !
!

# Step 4: Enable SRv6 in BGP (for EVPN+SRv6)
router bgp 65001
  address-family ipv4 unicast
    segment-routing srv6
     locator LEAF01
  !
  address-family l2vpn evpn
    advertise-all-vni
    segment-routing srv6
     locator LEAF01
  !
!
# Verify SRv6 locator and SID assignment:
vtysh -c "show segment-routing srv6 locator"
# Expected output:
# Locator:
#   Name: LEAF01
#   Prefix: 2001:db8:0:leaf01::/64
#   Status: Up
#   Chunks: 1 (allocated)

vtysh -c "show segment-routing srv6 sid"
# Expected output:
# SID              Context          Owner  State
# 2001:db8:0:leaf01::1    End              IS-IS  Up
# 2001:db8:0:leaf01::2    End.X(swp1)      IS-IS  Up
# 2001:db8:0:leaf01::100  End.DT4(vrf RED) BGP    Up
# Verify SRH processing is hardware-accelerated:
cl-resource-query | grep srv6
# Shows ASIC SRv6 table utilisation

# NVUE: check SRv6 global state
nv show router segment-routing srv6
# Shows enabled, locator name, SID count

IS-IS SRv6 distribution

SRv6 locators are distributed as IPv6 prefixes in IS-IS. Every switch in the fabric learns every other switch's locator automatically — no static routes needed. When a spine switch advertises 2001:db8:0:spine02::/64, every leaf knows how to reach spine-02 and its SIDs become reachable.

# Verify IS-IS is advertising the SRv6 locator:
vtysh -c "show isis database detail" | grep -A5 "SRv6"
# Shows TLV 27 (SRv6 Capabilities) and TLV 267 (SRv6 Locator)

# Verify the locator prefix appears in the route table:
ip -6 route show | grep "2001:db8:0:spine"
# Each leaf switch should show routes to all spine locators