Segment Routing Over IPv6 (SRv6)

Segment Routing over IPv6 (SRv6) provides a pure IPv6 transport and service data plane, replacing MPLS label stacks with standard IPv6 headers and Micro-SIDs (uSIDs). SRv6 allows EOS switches to implement network programming directly inside standard IPv6 headers.

Micro segments, SRv6 uSID or uSID, provides an extension of SRv6 architecture, specifically designed to represent SRv6 SIDs in an extremely compact way. It addresses the overhead of using full 128-bit IPv6 SIDs for routing. Instead of using a 128-bit address for single SID, EOS packs multiple uSIDs into a single 128-bit address. Each 128-bit address composes a block value representing the domain followed by multiple uSIDs, each of the same bit length. EOS fills leftover bits filled with trailing zeros. This allows for a complete SRv6 path to be represented by a 128-bit IPv6 address. Like a regular SID, each uSID associated with a specific behavior on the SRv6 capable node. SRv6 uN refers to the End behavior with uSIDs.

The following platforms support the SRv6 feature:
  • DCS-7060X6
  • DCS-7280R3
  • DCS-7500R3
  • DCS-7800R3
  • DCS-7800R4-*
  • DCS-7800R4K-36PE-LC
  • DCS-7800R4M-36PE-LC
  • DCS-DL-7700R4K-*
  • DCS-7280R4-32*
  • DCS-7280R4K-32*
  • DCS-7282R4*
Table 1. SRv6 Terminology
Term Definition
uSID Block Prefix The IPv6 prefix that allocates all of uSIDs. Referred to as uSID Domain.
uSID Block Length The 32-bit prefix length of the uSID Block prefix
uSID Length The 16-bit size of the uSID value
uSID Format A concise representation of the uSID block length and the uSID length in the format, FXXYY, where XX denotes the uSID block length and YY denotes the uSID length. For example, F3216 indicates a uSDI block length of 32-bits and a uSID length of 16-bits.
uSID Container A 128-bit IPv6 SRv6 SID with the structure <uSID_block_prefix><uSID1><uSID2>...<uSIDn>. For example, F3216, the uSID container has a 32-bit lock prefix followed by a maximum of 6 uSIDs, each with a 16-bit length.
Segment Routing Header (SRH) SRv6 uses an IPv6 routing extension header called a Segment Routing Header.
System SFIB Table Every locally configured uN has a corresponding entry in the Segment Forwarding Information Database (SFIB). EOS performs a Longest Prefix Match (LPM) lookup in this table to determine if the IPv6 IPv6 Destination Address (DA) matches a locally instantiated uN, and after matching, performs SRv6 processing on the packet.
Longest Prefix Match (LPM) Enables transit core routers to forward SRv6 traffic using standard IPv6 routing hardware without previous knowledge of VPN services or individual function instructions.

SRv6 Operation Overview

The network diagram uses a 3-tier network topology to explain the SRv6 operations. The IPv6 prefix for each switch represents the uN of the node, and uses static routes for reachability to the uN. Each node has static routes to the uNs of the neighboring nodes.

Figure 1. Example Sv6 Network Topology

As mentioned, each node has static routes to the uNs of each neighboring nodes. For example, the node T0-1, has a static route to T1-1 with an IPv6 address:
ipv6 route fc00:1:6501::/48 2001:db8:10::1101

The next-hop address corresponds to the interface address on T1-1 for the link between T0-1 and T1-1.

If the next-hop has an IPv6 link-local address, the static route configures the following address:
ipv6 route fc00:1:6501::/48 Ethernet 1/1 fe80::9e69:edff:fe62:4153

Similarly, T1-1 has static routes to the uN of T1-2 and all other nodes have static routes to provide reachability to the neighboring nodes uNs.

SRv6 Forwarding

The switch, Host1, requires prior knowledge of uNs of all nodes in the path to send traffic to Host2. With that information, Host1 computes the IPv6 address that represents the desired path. In the network topology example, SRv6 computes the address as fc00:1:1:6501:c901:6504:4:b002 using the initial address of fc00:1::/32 as the uSID block and then the 16-bit vSID values of each node in the path. This represents a path consisting of 6 nodes in a single 128-bit IPv6 address.

Host1 then sends a packet to T0-1 with the computed address as the IPv6 DA, and uses the following steps on T0-1 to process the packet:
  1. Calculates the IPv6 DA as fc00:1:1:6501:c901:6504:4:b002.
  2. Designates the active SID as fc00:1:1::/48.
  3. T0-1 recognizes the active SID has the same value as its uN.
  4. As per uN processing, T0-1 shifts the uSID value left and moves the rest of the DA bits to the left and fills trailing 16-bits with 0's.
  5. After shifting the values, the DA has a value of fc00:1:6501:c901:6504:4:b002::.
  6. T0-1 performs a lookup of the resulting DA in the IPv6 FIB.
  7. Since a static route exists for fc00:1:6501::/48, the uN of the neighboring node, T1-1, the lookup matches the route and sends the packet to T1-1.
  8. T1-1 recognizes the active SID, fx00:1:6501::/48, as its uN and performs the same shift and look operation in Step 4. It then sends the packet to T2-1.

    The IPv6 DA keeps changing as the packet traverses the SRv6 path.

  9. When the packet reaches T0-4, the IPv6 DA has a value of fc00:1:4:b002::.
  10. T0-4 recognizes the active SID as its uN, perform the shift operation, and create the IPv6 DA as fc00:1:b002::/48. It then performs an Longest Prefix Match (LPM) lookup for the address.
  11. Because the network has a static route for fc00:1:b002::/48 to Host2, it sends the packet to Host2.
  12. Host2 recognizes the active SID as its uN and does not find any further uSIDs in the uSID container. Host2 then consumes the packet.

Configuring SRv6

Note: You must add the SRv6 feature to the TCAM profile:
feature srv usid f3216
This applies to the following families of switches:
  • DCS-7280R3
  • DCS-7280R4-32*
  • DCS-7280R4K-32*
  • DCS-7282R4*
  • DCS-7500R3
  • DCS-DL-7700R4K-*
  • DCS-7800R3
  • DCS-7800R4-*
  • DCS-7800R4K-36PE-LC
  • DCS-7800R4M-36PE-LC

Review the example TCAM profile here.

Configuring an SRv6 Locator

An SRv6 uN locator provides a routable IPv6 prefix that identifies a specific SRv6-capable in the network. It consists of a uSID domain and a uSID value.

Before configuring a locator, first configure the micro-segment domain referenced by the locator using the following commands:

  1. Enter SRv6 configuration mode on the switch:
    switch(config)# router srv6
    switch(config-router-srv6)# 
  2. Enter the default VRF configuration submode:
    switch(config-router-srv6)# vrf default
    switch(config-router-srv6-vrf-default)# 
  3. Enter the Micro-Segmentation Domain Configuration mode, and enter a domain with a unique name:
    switch(config-router-srv6-vrf-default)# micro-segment domain srv6_1
  4. Configure the uSID block prefix, fc00:0::/32, for the Micro-Segmentation domain:
    switch(config-router-srv6-vrf-default-domain)# block fc00:0::/32
    This step specifies the exact IPv6 prefix that uniquely identifies this micro-segment domain across the network. When an SRv6 router receives a packet matching the configured block prefix, the router recognizes the packet as a uSID container, and performs the left-shift address operations to advance to the next micro-SID in the chain.
  5. Exit the Micro-Segmentation Domain Configuration Mode:
    switch(config-router-srv6-vrf-default-domain)# exit
    switch(config-router-srv6-vrf-default)# 
  6. Configure the locator with a unique name, locator1:
    switch(config-router-srv6-vrf-default)# locator locator1
    switch(config-router-srv6-vrf-default-locator)#
  7. Add the locator micro-segment domain and uSID value:
    switch(config-router-srv6-vrf-default-locator)# prefix micro-segment domain srv6_1 end usid 51457
    Configure the usid_value in either decimal or hexadecimal format. This configuration uses 51547 (0xC901).
  8. Exit the Locator Configuration Mode and then enter the Micro-Segmentation Domain Configuration mode. Add the Global ID Block range to each micro-segment domain:
    switch(config-router-srv6-vrf-default-locator)# exit
    switch(config-router-srv6-vrf-default)# micro-segment domain srv6_1
    switch(config-router-srv6-vrf-default-domain)# gib range 1 - 57330
    switch(config-router-srv6-vrf-default-domain)#
    By default, the configuration uses the range 1 - 57343 (0xDFFF).

Disabling SRv6 Functionality

Use the following commands to disable SRv6 on a switch:

  • Enter SRv6 Configuration Mode:
    switch(config)# router srv6
  • Enter VRF Configuration Mode:
    switch(config-router-srv6)# vrf default
  • Disable SRv6:
    switch(config-router-srv6-vrf-default)# disabled

SRv6 Ping

To assist with troubleshooting and debugging networks, perform reachability checks on target uNs, node SIDs, through specific paths. Use the SRv6 ping utility with the ping srv6 command and ping a target uN through a specific path consisting of a list of uNs of each node in the path.

The command has the following format and options:

switch# ping srv6 sid targetsid via segment-list sid1 sid2 sid3 ... ping-options ?
  • dont-frag - Disable fragmentation.
  • interval - Specify the time to wait between sending each packet.
  • repeat - Specify the repeat count.
  • size - Specify the datagram size.
  • source - Specify the source address or choose an address from specified interface.
  • timeout - Specify the time to wait for a response.

Example Output

switch# ping srv6 sid fc00:42:3:: via segment-list fc00:42:4:: fc00:42:7:: fc00:42:6::
Pinging fc00:42:4:7:6:3:: [fc00:42:4:7:6:3::] with 64 bytes
64 bytes from fc00:42:3:: icmp_seq=1  ttl=61 time=6.475ms
64 bytes from fc00:42:3:: icmp_seq=2  ttl=61 time=6.153ms
64 bytes from fc00:42:3:: icmp_seq=3  ttl=61 time=6.429ms
64 bytes from fc00:42:3:: icmp_seq=4  ttl=61 time=6.190ms
64 bytes from fc00:42:3:: icmp_seq=5  ttl=61 time=5.827ms

--- fc00:42:4:7:6:3:: ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4009.661ms
rtt min/avg/max/mdev = 5.827/6.215/6.475/0.259ms

A uN prefix must be configured on an interface on the target node in order for the ping srv6 to return information. From the example, fc00:42:3::/48 must be configured on a loopback interface on the target node.

The ping srv6 command selects the source address for ICMPv6 request packet based on the following criteria:
  • The source specified in the command line.
  • The local address configured for SRv6.
  • The IPv6 address configured on an interface.

SRv6 derives the destination address by concatenating the common address block of the segment list and target, with the sequential uSIDs from the segment list and the final target uSID.

SRv6 Traceroute

The traceroute srv6 command identifies the path used by SRv6 traffic and determines the intermediate hops to a target uN along a specific path consisting of a list of uSIDs for each node in the path. The command can assist with understanding how the destination address within the SRv6 header changes as the packets traverse the SRv6 network.

The command has the following format and option:

switch# ping srv6 sid targetsid via segment-list sid1 sid2 sid3 ... traceroute-options
  • source - Specify the source address or select an address from the specified interface.

Similar to SRv6 Ping, configure the uN prefix with a /48 address representing the combined block and function lengths on a loopback interface. Also SRv6 Traceroute uses a mechanism similar to SRv6 Ping to determine the source address in the traceroute probe packets.

Example Output

switch# traceroute srv6 sid fc00:42:3:: via segment-list fc00:42:2:: traceroute to fc00:42:2:3::, 30 hops max, 64 byte packets
1 2001:db8:200:12::2 2.085ms 1.272ms 1.090ms
  DA: fc00:42:2:3:: 
2 2001:db8:200:23::3 2.014ms 1.407ms 1.405ms 
  DA: fc00:42:2:3::
3 fc00:42:3:: 2.154ms 1.845ms 1.790ms 
  DA: fc00:42:3::

The output displays information about the hop number, the source address of the ICMPv6 responses, and the destination address of the probe packets as received at an intermediate router.

In the sample output, when attempting to reach target SID fc00:42:3:: through the SID fc00:42:2::, the probe packets use the destination address fc00:42:2:3::.The first hop replied with an ICMPv6 response, containing 2001:db8:200:12::2 as the source address in the IPv6 header. The destination address in the received probe packets at the first hop uses fc00:42:2:3::. Similarly the second hop replies. Notice that the destination address in the probe packets alters when reaching the second hop. This may be due to the change in the destination address of probes at the first hop.

Displaying SRv6 Configurations

This topic contains the following sections:

Displaying SRv6 Locator Information

To display SRv6 locator information, use the following command:
switch# show srv6 locator
SRv6 configuration for VRF default
Administrative status: enabled
Operational status: enabled
Encapsulation source address: 2001:db8:100::1
Number of configured locators: 2

Locator LOC1
State: active
Type: micro-SID
Micro-SID domain: DOM1
uSID: 1 (0x1)
Prefix: fc00:42:1::/48
Block length: 32
Function length: 16

Locator LOC2
State: active
Type: micro-SID
Micro-SID domain: DOM1
uSID: 2 (0x2)
Prefix: fc00:42:2::/48
Block length: 32
Function length: 16

Displaying a Specific SRv6 Locator Information

To display information about a specific locator, add the locator name to the command:
switch# show srv6 locator LOC2
SRv6 configuration for VRF default
Administrative status: enabled
Operational status: enabled
Encapsulation source address: 2001:db8:100::1
Number of configured locators: 2

Locator LOC2
State: active
Type: micro-SID
Micro-SID domain: DOM1
uSID: 1 (0x1)
Prefix: fc00:42:1::/48
Block length: 32
Function length: 16

Displaying SRv6 Domains Information

Each Arista switch can have multiple SRv6 domains configured on it. Use the following command to display the configured domains:

switch# show srv6 domain
SRv6 configuration for VRF default
Number of configured domains: 2

Domain DOM1
State: active
Block: fc00:41::/32
GIB Range: 1 - 57343
uSID Length: 16

Domain DOM2
State: active
Block: fc00:42::/32
GIB Range: 1 - 57343
uSID Length: 16

Displaying Specific SRv6 Domain Information

To display information about a specific SRv6 domain, add the domain name to the command:

switch# show srv6 domain DOM1
SRv6 configuration for VRF default
Number of configured domains: 2

Domain DOM1
State: active
Block: fc00:41::/32
GIB Range: 1 - 57343
uSID Length: 16

Displaying SRv6 Route Information

Configuring a locator adds an entry to the system SFIB table. Use the following command to display SRV6 routes:

switch# show srv6 route
VRF default
Source Codes: S - Static
End Behaviors: End - Endpoint

S  fc00:42:1::/48, End with NEXT-CSID, locator LOC1
    via IPv6 lookup, VRF default
S  fc00:42:2::/48, End with NEXT-CSID, locator LOC2
    via IPv6 lookup, VRF default

Displaying Specific SRv6 Route Information

Configuring a locator adds an entry to the system SFIB table. Use the following command to display SRV6 routes added by a specific locator:

switch# show srv6 route locator Locator1
VRF default
Source Codes: S - Static
End Behaviors: End - Endpoint

S  fc00:42:1::/48, End with NEXT-CSID, locator <LOCATOR_NAME>
    via IPv6 lookup, VRF default

Displaying SRv6 Capabilities

Use the following command to display SRv6 capabilities on a switch:

switch# show srv6 capabilities
Supported end behaviors
End: supported
End.X: unsupported
End.DX4: unsupported
End.DX6: unsupported
End.DT4: supported
End.DT6: supported

Supported end behavior flavors
PSP: supported
USP: unsupported
USD: supported
Next-CSID: supported

Supported headend behaviors
H.Encaps: supported
H.Encaps.Red: unsupported
H.Insert: unsupported
H.Insert.Red: unsupported

Other Capabilities
uSID Formats: F3216

SRv6 Commands

router srv6

The router srv6 command in Global Configuration Mode places the switch into Segment Routing Configuration Mode and allows the configuration of SRv6 features on a switch. Once in Segment Routing Configuration Mode, using the vrf default places the switch into Segment Routing VRF Configuration Mode. Once in Segment Routing VRF Configuration Mode, disable the configuration or add a local IPv6 address.

Command Mode

Global Configuration

Default VRF Configuration Mode.

Command Syntax

router srv6

vrf default

[disabled] [local address ip6_address]

Parameters

  • router srv6 - Enters Segment Routing Configuration Mode.
  • vrf default - Enters the Default VRF Configuration Mode.
  • disabled - Disables the SRv6 functionality on the switch.
  • local address ip6_address - Define the source IPv6 address used in the outer IPv6 encapsulation header for traffic originating from the default VRF.

Examples

Use the following commands to enter Segment Routing and VRF Configuration Modes:

switch(config)# router srv6
switch(config-router-srv6)# vrf default
switch(config-router-srv6-vrf-default)#

Use the following command to disable the SRv6 configuration on the switch:

switch(config-router-srv6-vrf-default)# disabled
switch(config-router-srv6-vrf-default)#

Use the following command to add the local IPv6 address, 2001:db8:100::1, to the switch:

switch(config-router-srv6-vrf-default)# local address 2001:db8:100::1
switch(config-router-srv6-vrf-default)#

locator

The locator command in the Segment Routing VRF Configuration Mode defines a dedicated IPv6 prefix block allocated to a switch. The switch uses this block to derive local Segment Identifiers (SIDs) such as node SIDs (uN), adjacency SIDs (uA), and service SIDs. Once in Locator Configuration Mode, add the Interior Gateway Protocol (IGP) algorithm, and the prefix for the micro-segment domain name.

Note: Before configuring a Locator, configure a micro-segment domain.

Command Mode

Segment Routing (SRv6) Configuration

VRF Default Configuration

Locator Configuration

Command Syntax

locator locator_name [igp algorithm flex-algo] algo_name ] [prefix micro-segment domain domain_name end usid usid

Parameters

  • locator locator_name - Configure a name for the Locator.
  • prefix micro-segment domain domain_name - Specify the micro-segment domain name previously configured on the switch.
  • end usid usid - Specify a 16-bit end uSID to match the destination node.
  • igp algorithm flex-algo algo_name - Specify the Flex-Algorithm name.

Example

Use the following commands to add the micro-segment domain, domain_1, and an end uSID, 001, to the locator, Locate_3:

switch(config)# router srv6
switch(config-srv6)# vrf default
switch(config-router-srv6-vrf-default)# locator Locate_1
switch(config-router-srv6-vrf-default-locator)# prefix micro-segment domain domain_1 end usid 001
switch(config-router-srv6-vrf-default-locator)#

Use the following commands to add the IGP Flex-Algo, flex_red, to the configuration:

switch(config-router-srv6-vrf-default-locator)# igp algorithm flex-algo flex_red
switch(config-router-srv6-vrf-default-locator)#

micro-segment

The micro-segment command in the Segment Routing VRF Configuration Mode enables and controls Micro-Segment (uSID) behavior for the default VRF. Instead of using full, uncompressed 128-bit SRv6 service SIDs, this command instructs the switch to allocate and signal compressed uSIDs for tenant routing services associated with the VRF.

Command Mode

Segment Routing (SRv6) Configuration

VRF Default Configuration

Micro-Segment DomainConfiguration

Command Syntax

micro-segment domain domain_name block ip6_address/mask gib range hexadecimal usid length [16 | 32]

Parameters

  • micro-segment domain domain_name - Configure a name for SRV6 Micro-Segment Domain.
  • block ip6_address/mask - Specify a uSID prefix for the domain.
  • gib range hexadecimal - Specify a range for the global uSID allocations. The parameter has a default range from ox000 to 0xDFF which provides 57,344 globally unique node IDs for a single domain.
  • usid length [16 | 32] - Specify either 16-bit (standard) or 32-bit for extended or specialized functions.

Example

Use the following commands to create a micro-segment domain, MyDomain, with a usid length of 16-bits:

switch(config)# router srv6
switch(config-router-srv6)# vrf default
switch(config-router-srv6-vrf-default)# micro-segment domain myDomain
switch(config-router-srv6-vrf-default-domain)# usid length 16
switch(config-router-srv6-vrf-default-domain)#

show srv6 capabilities

The show srv6 capabilities command in the EXEC Mode displays the capabilities of Arista switches on the network.

Command Mode

EXEC

Command Syntax

show srv6 capabilities

Parameters

  • show srv6 domain - Display information about SRv6 capabilities on Arista switches.

Example

Use the following command to display SRv6 capabilities on a switch:

switch# show srv6 capabilities
Supported end behaviors
End: supported
End.X: unsupported
End.DX4: unsupported
End.DX6: unsupported
End.DT4: supported
End.DT6: supported

Supported end behavior flavors
PSP: supported
USP: unsupported
USD: supported
Next-CSID: supported

Supported headend behaviors
H.Encaps: supported
H.Encaps.Red: unsupported
H.Insert: unsupported
H.Insert.Red: unsupported

Other Capabilities
uSID Formats: F3216

show srv6 domain

The show srv6 domain command in the EXEC Mode displays the status of SRv6 domains on the network.

Command Mode

EXEC

Command Syntax

show srv6 domain domain_name

Parameters

  • show srv6 domain domain_name - Display information about all SRv6 domains or specify a specific domain.

Examples

Each Arista switch can have multiple SRv6 domains configured on it. Use the following command to display the configured domains:

switch# show srv6 domain
SRv6 configuration for VRF default
Number of configured domains: 2

Domain DOM1
State: active
Block: fc00:41::/32
GIB Range: 1 - 57343
uSID Length: 16

Domain DOM2
State: active
Block: fc00:42::/32
GIB Range: 1 - 57343
uSID Length: 16

To display information about a specific SRv6 domain, add the domain name to the command:

switch# show srv6 domain DOM1
SRv6 configuration for VRF default
Number of configured domains: 2

Domain DOM1
State: active
Block: fc00:41::/32
GIB Range: 1 - 57343
uSID Length: 16

show srv6 locator

The show srv6 locator command in the EXEC Mode displays the status of SRv6 Locators on the network.

Command Mode

EXEC

Command Syntax

show srv6 locator locator_name

Parameters

  • show srv6 locator locator_name - Display information about all SRv6 Locators or specify a specific locator.

Examples

Use the following command to display information about all SRv6 locators:

switch# show srv6 locator
SRv6 configuration for VRF default
Administrative status: enabled
Operational status: enabled
Encapsulation source address: 2001:db8:100::1
Number of configured locators: 2

Locator LOC1
State: active
Type: micro-SID
Micro-SID domain: DOM1
uSID: 1 (0x1)
Prefix: fc00:42:1::/48
Block length: 32
Function length: 16

Locator LOC2
State: active
Type: micro-SID
Micro-SID domain: DOM1
uSID: 2 (0x2)
Prefix: fc00:42:2::/48
Block length: 32
Function length: 16
Use the following command to display information about SRv6 locator, LOC1:
switch# show srv6 locator LOC2
SRv6 configuration for VRF default
Administrative status: enabled
Operational status: enabled
Encapsulation source address: 2001:db8:100::1
Number of configured locators: 2

Locator LOC2
State: active
Type: micro-SID
Micro-SID domain: DOM1
uSID: 1 (0x1)
Prefix: fc00:42:1::/48
Block length: 32
Function length: 16

show srv6 routes

The show srv6 routes command in the EXEC Mode displays the routes in the system SFIB table.

Command Mode

EXEC

Command Syntax

show srv6 routes

Parameters

  • show srv6 routes - Display information about SRv6 entries in the system SFIB.

Example

Configuring a locator adds an entry to the system SFIB table. Use the following command to display SRV6 routes:

switch# show srv6 route
VRF default
Source Codes: S - Static
End Behaviors: End - Endpoint

S  fc00:42:1::/48, End with NEXT-CSID, locator LOC1
via IPv6 lookup, VRF default
S  fc00:42:2::/48, End with NEXT-CSID, locator LOC2
via IPv6 lookup, VRF default

Configuring a locator adds an entry to the system SFIB table. Use the following command to display SRV6 routes added by a specific locator:

switch# show srv6 route locator Locator1
VRF default
Source Codes: S - Static
End Behaviors: End - Endpoint

S  fc00:42:1::/48, End with NEXT-CSID, locator <LOCATOR_NAME>
via IPv6 lookup, VRF default