Configuring the SRv6 Locator and SIDs

This section describes configuration of the SRv6 locator.

An SRv6 SID is a 128-bit IPv6 address which follows the structure defined by RFC 8986:

SRv6 SID={LOCATOR:FUNCTION:ARGUMENT}.

The user must configure the main SRv6 subnet for this node. This is the locator and is essentially an IPv6 subnet (prefix and length) that provides reachability (longest prefix match) to all the SIDs originated by this node. The prefix part is encoded in the LOCATOR field of the SRv6 SID.

The locator is further subdivided into a SID block and a node ID. For example, locator 3FFE:0:0:A1::/64 has a SID block of 3FFE:0 and node ID of 0:A1.

All nodes participating in a given SRv6 domain must draw their locator and SIDs from the same SID block. In the previous example, the SID block is subnet 3FFE:0::/32.

The following is the CLI structure for the configuration of the SRv6 locator.

configure
+--router
   +--segment-routing
      +--segment-routing-v6
         +--origination-fpe* <fpe>
         +--source-address <ipv6-address>
         +--locator* <locator-name>         
            +--admin-state (enable|disable) 
            +--termination-fpe <fpe> 
            +--algorithm <0, 128-255>
            +--prefix          
               +--ip-prefix <ipv6-address/prefix-length>                   
            +--block-length <0-96>   
            +--function-length <20-96>
            +--static-function
                      +--max-entries <integer> 
                      +--label-block <block-name>  

One locator is required for algorithm 0 and one for each IGP flexible algorithm (128-255). The same locator can be shared by multiple IGP instances for the same algorithm number.

The locator prefix, example 3FFE:0:0:A1::/64, is advertised in the SRv6 Locator TLV in IS-IS in both algorithm 0 and any configured flexible algorithm number as defined in draft-ietf-lsr-isis-srv6-extensions. It is also advertised as a prefix in IP Reach TLV (ISIS TLV 236) in algorithm 0, so the routers that do not support SRv6 can still route the packet to the next hop of the locator and eventually to its destination node.

The FUNCTION field is user-configurable, but the ARGUMENT field is set to all zeros and is not configurable. The ARGUMENT length must be signaled as zero in ISIS End and End.X SIDs and in BGP service SIDs. Also, the sum of the LOCATOR and FUNCTION lengths must be less than or equal to 128.

Within algorithm 0 and each IGP flexible algorithm, the locator function (FUNCTION field) assigns the value of the End SID and End.X SID, that corresponds to the node SID and adjacency or adjacency SET SID respectively.

The locator function also assigns the value of the service SIDs owned by this node and advertised in the BGP control plane (End.DT4, End.DT6, End.DT46, and End.DX2).

The FUNCTION field can be subdivided into a static and a dynamic subrange. The user can draw from the static subrange to manually assign an SRv6 SID to a node, a local adjacency, or a service. IS-IS and BGP can draw from the dynamic subrange to assign a SID to a local adjacency or a service. The SID of an adjacency to a IS-IS neighbor, over a broadcast interface (LAN End.X), is always dynamically assigned and is not configurable.

The following CLI enables the allocation of a SRv6 SID function value. Manual allocation of a static function value is supported with the node (End SID), adjacency over a P2P interace (End.X SID), and a service SID. Auto-allocation is supported with an adjacency over a P2P interace (End.X SID) and a service SID.

configure
+--router
+---segment-routing
|   +---segment-routing-v6
|   |   +--- base-routing-instance
|   |   |   |   locator <locator-name>
|   |   |   |   +---function
|   |   |   |   |   |   end <integer>
|   |   |   |   |   |   +---srh-mode <psp | usp>   
|   |   |   |   |   +---end-x-auto-allocate <psp|usp> <protected|unprotected>
|   |   |   |   |   +---end-x <integer>
|   |   |   |   |   |   +---interface <name>
|   |   |   |   |   |   +---srh-mode <psp | usp>   
|   |   |   |   |   |   +---protection <protected|unprotected>
|   |   |   |   |   +---end-dt4 [<integer>]
|   |   |   |   |   +---end-dt6 [<integer>]
|   |   |   |   |   +---end-dt46 [<integer>]