šŸŒThe road to success is paved withā€¦IPv4 over SRv6 over ISIS and BGP on SR OS 21.10šŸŒ„

Jeroen Van Bemmel
4 min readJan 15, 2022

--

8 SR OS nodes performing SPRING

ā€œOne packet does not make SPRINGā€ ā€” yours truly

The IETF Source Packet Routing in Networking (SPRING) working group was created in 2013, shortly after my family and I emigrated from Europe to Canada. I canā€™t say Iā€™ve ever been involved personally, I have heard about Segment Routing as a concept but hadnā€™t really done anything with it until now. Especially in the context of ā€œSRv6ā€ it regularly seems to get derided as a networking vendor ploy to sell more equipment ā€” but while I can confirm nor deny the level of truth in that, I am technically intrigued.

For every problem there are countless solutions, and this is especially true in networking. Does the world really need Yet Another Method to send packets from A to B? The strive for simplicity would seem to imply a minimal amount of variations and protocols, but how can we know what ā€œsimpleā€ looks like? This line of thinking inspired a challenge šŸ„¶: Build the most complicated combination of protocols you can imagine, then take it from there.

SRv6 ā€” ā€œor some people would feel left outā€

Never too shy to share his thoughts, Ivan confirmed that SRv6 should definitely be included in such an exercise. A quick Google search resulted in this starting point by Juniper, and the resulting Netsim-Tools topology brings it to life.

New: Netsim-Tools srv6 core module

Netsim-Tools (v1.0) has support for ā€˜regularā€™ segment routing, but not (yet) for srv6. A simple module was easily built; basically every node needs a unique IPv6 ā€˜locatorā€™ prefix to be assigned.

I also added some BGP peering flags to select the right combination of protocol families and peering sessions.

SRv6 configuration on SR OS (IPv4 over SRv6)

SRv6 is a relatively recent feature in the SR OS platform, and comprehensive sample configuration snippets were a little hard to come by. The final template is only a little over 100 lines, but there are some key knobs that must be aligned for things to work smoothly. Here is an overview of the main config items:

Base router SRv6 with explicit Forwarding Path Element configuration and ā€˜end-dt4ā€™ to get BGP service SIDs
ISIS SRv6 configuration ā€” requires ā€˜wide metricsā€™ and ā€˜ipv6-routing: nativeā€™ for TLVs to be advertised
Donā€™t ignore what your neighbors tell youā€¦

Differences

Unlike the original Juniper example, this configuration advertises the SRv6 service SIDs using BGP (iBGP via R2 as Route Reflector). There is no need for a policy to modify the next hop manually; instead, ā€˜next-hop-selfā€™ causes the SRv6 TLV attributes to be added. The Route Reflector itself does not need to enable SRv6, but it must support IPv6 next hops for IPv4 routes ( ā€˜extended-nh-encodingā€™ and ā€˜advertise-ipv6-next-hopsā€™ for ipv4)

Basic verification

ipv4 route details (received via RR)
Resulting SRv6 tunnels between R0 and R7
Working pings from h1 to h2

Next hops šŸ‘£

Obviously a lot more could be said about this setup: There is Loop Free Alternate (LFA) to be explored and tested, and what about Flex-Algo to engineer different paths besides the shortest one(s)?

Iā€™ll leave things here for now (and thanks go to my Nokia colleague Neil Pescod for his SR OS SRv6 slide deck). Until our paths cross again!

--

--

Jeroen Van Bemmel
Jeroen Van Bemmel

Written by Jeroen Van Bemmel

Sustainable digital transformation at Webscale ā€” real life stories about our discoveries in the world of networking. Views represented are my own.

No responses yet