Cisco Nexus DC : Seamless Handoff between BGP EVPN based DC fabric to SRv6 based transport.

INTRODUCTION TO SRv6

The SP core networking landscape has undergone significant transformation—from early forwarding models based on ATM and Frame Relay, to MPLS label switching, to SR-MPLS source routing, and now to native IPv6-based forwarding with SRv6. Historically, routing was seen as lower performance compared to switching; however, SRv6 changes this narrative. It combines routing intelligence with hardware-accelerated performance, offering capabilities that rival or exceed traditional MPLS-based forwarding. Despite involving routing decisions at every hop, SRv6 differs from conventional IP routing: it does not require maintaining a full routing table per destination. Instead, it forwards based on a compact set of prefix-SIDs distributed via IGP (typically IS-IS or OSPFv3), enabling stateless source routing with rich service-awareness. This architecture allows SRv6 to scale efficiently while offering programmability, service chaining, and integrated telemetry without complex tunnel overlays.

INTRODUCTION TO BGP-EVPN VXLAN FABRICS

Data center networking has evolved significantly over time. What began with classic LAN designs based on Spanning Tree Protocol (STP) and inter-VLAN routing with First Hop Redundancy Protocols (FHRPs) has transitioned into modern overlays like VXLAN. Today, many data centers use VXLAN with BGP EVPN as the control plane, enabling scalable and efficient multi-tenant networks. While this model has worked well within the data center, service providers are increasingly advocating for SRv6 as the next-generation fabric forwarding solution. The rationale is clear: SRv6 is simpler than existing solutions, inherently scalable, and IPv6-native—eliminating the complexity of IPv4 address exhaustion. Most importantly, SRv6 enables true end-to-end uniformity across the provider and data center domains. This uniformity is not just a technical advantage—it is foundational to achieving cohesive orchestration, streamlined operations, and consistent security across the entire infrastructure. In today’s fragmented landscape, pursuing such end-to-end alignment is not only beneficial—it is essential.

Inter-working/Inter-networking between DC and Transport

While a fully evolved SRv6-based data center fabric represents an ideal future state, it’s clear that the industry will take time to reach that level of adoption. In the interim, what will prevail is interworking—or internetworking, if you prefer—between existing DC architectures and SRv6-based transport networks. The goal is simple yet critical: to exchange routes effectively between the data center and the transport domain, while preserving the strengths and operational models of both. This delicate balance is made possible through BGP, which continues to serve as the foundational control plane that enables interoperability at scale. Its flexibility, extensibility, and resilience have made BGP the backbone of modern networking—and it remains just as vital in stitching together disjointed architectures into a cohesive, forward-looking fabric.

Topology

Devices used:

Cisco Nexus9k : Nexus9000 GX2B switch

XR : NCS5501

XRv : ASR9000v

In this topology, we have two SRv6 available paths: one shorter and one longer, with three virtual routers. This design intentionally introduces path diversity to enable future demonstrations of SRv6-based traffic engineering. For the sake of brevity, the configuration examples in this document will focus on just three key devices: the Nexus GX2B (DC leaf), XR1 (transit), and XR2 (edge PE).

Here we are trying to achieve l3vpn over SRv6 Data-plane.

Configurations

Nexus 9k(GX2B)

install feature-set mpls
feature-set mpls
nv overlay evpn
feature bgp
feature pim
feature isis
feature interface-vlan
feature vn-segment-vlan-based
feature nv overlay
feature ngoam
feature srv6
feature ofm
!
interface loopback1
  ip address 10.3.0.2/32
  ipv6 address fc00::4/128
  ipv6 router isis SRISIS
!
interface Ethernet1/27
  ipv6 address 2001::1/126
  ipv6 router isis SRISIS
!

interface Vlan2301
  description VXLAN-Prod-BD
  no shutdown
  vrf member vxlan-prod
  ip address 192.20.1.254/24 tag 12345
  ipv6 address abcd::1/64 tag 12345
  fabric forwarding mode anycast-gateway
!
router isis SRISIS
  net 49.0000.0000.0000.0004.00
  is-type level-2
  metric-style transition
  address-family ipv6 unicast
    segment-routing srv6
      locator myLoc
!
router bgp 65100
  router-id 10.2.0.2
  segment-routing srv6
    locator myLoc
    alloc mode per-vrf
  address-family ipv4 unicast
    redistribute direct route-map fabric-rmap-redist-subnet
  address-family ipv6 unicast
    redistribute direct route-map fabric-rmap-redist-subnet
  neighbor fc00::2
    remote-as 65500
    update-source loopback1
    ebgp-multihop 5
    address-family ipv4 unicast
    address-family ipv6 unicast
    address-family vpnv4 unicast
      send-community
      send-community extended
      import l2vpn evpn reoriginate
    address-family vpnv6 unicast
      send-community
      send-community extended
      import l2vpn evpn reoriginate
  neighbor 10.2.0.3
    remote-as 65100
    description to-Nxos-Spine-BGW
    update-source loopback0
    address-family l2vpn evpn
      send-community
      send-community extended
  vrf vxlan-prod
    segment-routing srv6
      alloc mode per-vrf
    address-family ipv4 unicast
      advertise l2vpn evpn
      redistribute direct route-map fabric-rmap-redist-subnet
      maximum-paths ibgp 2
    address-family ipv6 unicast
      advertise l2vpn evpn
      redistribute direct route-map fabric-rmap-redist-subnet
      maximum-paths ibgp 2
!
segment-routing
  srv6
    locators
      locator myLoc
        prefix fc00:1:1:4::/64
!
vrf context vxlan-prod
  vni 2883590
  rd auto
  address-family ipv4 unicast
    route-target import 50000:1
    route-target export 50000:1

XR1(Transit)

!
interface FortyGigE0/0/1/2
desc "Towards DC"
 ipv6 address 2001::2/126
 ipv6 enable
!
interface Loopback0
 ipv4 address 10.100.0.1 255.255.255.255
 ipv6 address fc00::1/128
!
interface FortyGigE0/0/1/1
desc "towards ISP core"
 ipv4 address 132.1.1.1 255.255.255.252
 ipv6 enable
!
router isis SRISIS
 is-type level-2-only
 net 49.0000.0000.0000.0001.00
 address-family ipv6 unicast
  metric-style wide
  single-topology
  segment-routing srv6
   locator myLoc
   !
  !
 !
 interface Loopback0
  address-family ipv6 unicast
  !
 !
 interface TenGigE0/0/0/16
  address-family ipv6 unicast
  !
 !
 interface FortyGigE0/0/1/0
  address-family ipv6 unicast
  !
 !
segment-routing
 global-block 16000 23999
 srv6
  locators
   locator myLoc
    prefix ac00:1:1:1::/64
   !

XR2 (PE)

!
interface Loopback0
 ipv4 address 10.100.0.2 255.255.255.255
 ipv6 address fc00::2/128
!
interface Loopback3
 vrf DATA
 ipv4 address 3.3.3.3 255.255.255.255
 ipv6 address abc3::1/64
!

interface FortyGigE0/0/1/0
 ipv6 enable
!
segment-routing
 global-block 16000 23999
 !
 srv6
  locators
   locator myLoc
    prefix fc00:1:1:2::/64
   !
router bgp 65500
 address-family ipv4 unicast
 !
 address-family vpnv4 unicast
 !
 address-family ipv6 unicast
 !
 address-family vpnv6 unicast
!
 neighbor fc00::4
  remote-as 65100
  ebgp-multihop 5
  update-source Loopback0
  address-family vpnv4 unicast
   route-policy PASS_ALL in
   route-policy PASS_ALL out
  !
  address-family vpnv6 unicast
   route-policy PASS_ALL in
   route-policy PASS_ALL out
  !
 !
 vrf DATA
  rd 50000:1
  address-family ipv4 unicast
   segment-routing srv6
    locator myLoc
    alloc mode per-vrf
   !
   redistribute connected
  !
  address-family ipv6 unicast
   segment-routing srv6
    locator myLoc
    alloc mode per-vrf
   !
   redistribute connected
  !       
 !
!

Verification:

Nexus 9k will have just vpnv4 neighborship with XR2 , i.e. PE router (fc00::2)

below we see srv6 sid table and vpnv4 neighborship

Nexus 9k(GX2B)# show srv6 sid 
*** Locator: 'myLoc' ***

SID                         Function              Context                                           Owner            State           RW  
--------------------------  --------------------  ------------------------------------------------  ---------------  --------------  ----
fc00:1:1:4:1::              End (PSP)             'default'                                         sidmgr_internal  InUse           Y   
fc00:1:1:4:4::              End                   'default'                                         sidmgr_internal  InUse           Y   
fc00:1:1:4:12::             End.OTP                                                                 ngoam            InUse           Y   
fc00:1:1:4:42::             End.DT46              'default'                                         bgp-65100        InUse           Y   
fc00:1:1:4:43::             End.DT46              'vxlan-prod'                                      bgp-65100        InUse           Y   


Nexus 9k(GX2B)# sh bgp vpnv4 un summary 
BGP summary information for VRF default, address family VPNv4 Unicast
BGP router identifier 10.2.0.2, local AS number 65100
BGP table version is 161, VPNv4 Unicast config peers 1, capable peers 1
8 network entries and 9 paths using 2392 bytes of memory
BGP attribute entries [1/368], BGP AS path entries [1/6]
BGP community entries [0/0], BGP clusterlist entries [1/4]

Neighbor        V    AS    MsgRcvd    MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
fc00::2         4 65500      14299      14292      161    0    0    6d02h 1        


Now, lets see how the IP addresses are learned on Nexus. This IP is residing in vrf at the XR2 (PE) router.

Nexus 9k(GX2B)# sh ip route vrf vxlan-prod 
IP Route Table for VRF "vxlan-prod"
'*' denotes best ucast next-hop
'**' denotes best mcast next-hop
'[x/y]' denotes [preference/metric]
'%<string>' in via output denotes VRF <string>

3.1.1.1/32, ubest/mbest: 2/0, attached
    *via 3.1.1.1, Lo3, [0/0], 1w4d, local, tag 12345
    *via 3.1.1.1, Lo3, [0/0], 1w4d, direct, tag 12345
3.3.3.3/32, ubest/mbest: 1/0
    *via fe80::c28b:2aff:feb3:d0c8%default, Eth1/27, [20/0], 00:14:20, bgp-65100, external, tag 65500
192.20.1.0/24, ubest/mbest: 1/0, attached
    *via 192.20.1.254, Vlan2301, [0/0], 3w1d, direct, tag 12345
192.20.1.11/32, ubest/mbest: 1/0, attached
    *via 192.20.1.11, Vlan2301, [190/0], 3w1d, hmm

Nexus 9k(GX2B)# show bgp vpnv4 unicast 3.3.3.3/32 vrf vxlan-prod 
BGP routing table information for VRF default, address family VPNv4 Unicast
Route Distinguisher: 10.2.0.2:5    (VRF vxlan-prod)
BGP routing table entry for 3.3.3.3/32, version 109
Paths: (1 available, best #1)
Flags: (0x800c001a) (high32 0x000020) on xmit-list, is in urib, is best urib route, is in HW, exported
  vpn: version 164, (0x00000000100002) on xmit-list
  local sid: fc00:1:1:4:43::

  Advertised path-id 1, VPN AF advertised path-id 1
  Path type: external, path is valid, is best path, no labeled nexthop, in rib
             Imported from 50000:1:3.3.3.3/32 
  AS-Path: 65500 , path sourced external to AS
    fc00:1:1:2:: (metric 12) from fc00::2 (10.100.0.2)
      Origin incomplete, MED 0, localpref 100, weight 0
      Received label 64
      Extcommunity: RT:50000:1 RT:65100:60 COLOR:2000 PCTAG:0:0:0
      Prefix-SID Attribute: Length: 37
        SRv6 SID TLV: Length 34 Sub type: 1 IPv6 SID fc00:1:1:2::
                      Function-Length 16 Tpose-Length 16 TPose-Offset 64

Nexus 9k(GX2B)# ping 3.3.3.3 vrf vxlan-prod 
PING 3.3.3.3 (3.3.3.3): 56 data bytes
64 bytes from 3.3.3.3: icmp_seq=0 ttl=255 time=1.727 ms
64 bytes from 3.3.3.3: icmp_seq=1 ttl=255 time=1.084 ms
64 bytes from 3.3.3.3: icmp_seq=2 ttl=255 time=0.818 ms
64 bytes from 3.3.3.3: icmp_seq=3 ttl=255 time=0.877 ms
64 bytes from 3.3.3.3: icmp_seq=4 ttl=255 time=0.99 ms

--- 3.3.3.3 ping statistics ---

I think this is enough of the configs and verification. Lets see some packet capture and how does it look when we ping in SRv6.

Notice the destination address and then notice below output. The destination given below is the service sid that was generated by the XR router when we configured SRv6. This service SID is of type DT4 means Decap and Transit to IPv4 routing table.

When a packet reaches a router with the DT4 segment:

  1. The outer IPv6 + SRH headers are removed (decapsulation).
  2. The inner payload, typically an IPv4 packet, is extracted.
  3. The inner IPv4 packet is then forwarded using the local IPv4 routing table.
XR2#show segment-routing srv6 sid 
Thu Aug  7 13:47:40.089 UTC

*** Locator: 'myLoc' *** 

SID                         Behavior          Context                           Owner               State  RW
--------------------------  ----------------  ------------------------------    ------------------  -----  --
fc00:1:1:2:1::              End (PSP/USD)     'default':1                       sidmgr              InUse  Y 
fc00:1:1:2:40::             End.DT4           'DATA'                            bgp-65500           InUse  Y 
fc00:1:1:2:41::             End.X (PSP/USD)   [Fo0/0/1/0, Link-Local]           isis-SRISIS         InUse  Y 
fc00:1:1:2:42::             End.DT6           'DATA'                            bgp-65500           InUse  Y 
fc00:1:1:2:43::             End.X (PSP/USD)   [Te0/0/0/16, Link-Local]          isis-SRISIS         InUse  Y 

Conclusion

The transition to SRv6 represents a significant step forward in simplifying, unifying, and scaling modern network architectures. While a fully native SRv6 fabric in the data center remains a future goal, today’s networks demand practical interworking between VXLAN EVPN-based DC fabrics and SRv6-enabled transport cores. This seamless handoff preserves the operational strengths of both domains—leveraging BGP as the trusted control plane to bridge them. By enabling stateless service delivery, programmable routing, and transport-agnostic integration, SRv6 positions itself as the foundation for end-to-end uniformity, orchestration, and observability. As the industry evolves, adopting SRv6 not only simplifies the network—it future-proofs it.

Leave a Reply