SRH is a new type of IPv6 Routing Extension Header and it includes SRv6 SIDs. It may include a Segment List encoded as an IPv6 Address. It is not an exact IPv6 address. You may think like it is just a format and we will call it SRv6 SID. Format is IPv6 address but in the Segment Routing model these addresses have 2 fields namely Locator and Function.(And optional Arguments) There is no restriction about how many bits will be locator or function.(or arguments)
Locator
Routed to the node performing the function. You can think like it is like a network address. It is most significant bits are used to route the segment to its parent node. Locator will be global. As of today, the locator information of any node will be distributed by IGP. There is no restriction about how many bits will be locator. But in my idea about locator planning, it seems better to use first 64 bits as a locator information.
Function
Any possible function, either local to NPU or app in VM/Container.There are several functions already defined. The simplest one is the END function. END is very similar to NEXT operation in SR MPLS. Least significant bits identify the action to be performed on the parent node. If there is not Arguments usage, the last 64 bits of the SRv6 SID may be used as function. Some examples for function are; End.DT4 function for VPNv4 services, End and End.X function for traffic engineering and TI-LFA, End.DX2 function for layer 2 vpn services etc.
Arguments
optional argument bits to be used only by that SID. It may be part of function and if you want to use, I suggest to use 32 bits of funvtion and 32 bits of arguments.
(According to draft RFC A function may require additional arguments that would be placed immediately after the FUNCT. In such case, the SRv6 SID will have the form LOC:FUNCT:ARGS::. For this reason, the “My SID Table” matches on a per longest-prefix-match basis. For simplicity I will go with Locator and Function it the first phase)
These lenghts are my suggestion as of today. Please remember, there is no restriction to use how many bits as a locator, fuction or arguments.
Example: SRv6 SID planning and distribution.
Assume that 2981:40:A6:: /64 is configured as a locator for Node A6. This locator information will be distributed by IGP and all other nodes will install this information to their IPv6 routing table. Even it is not a real address, the other nodes will be able to route packets to the this address aka SRv6 SID.
There are some functions defined as well. These are locally significant and they don’t need to be distributed by IGP.
Example: VPNv4 Packet Forwarding with SRv6 Underlay
Let’s say, there is a VPNv4 service on Node A6 and function is defined as ::41. In this case the packets from other nodes, let’s say from Node A1 will be sent to 2981:40:A6::41 SRv6 SID. (the function definition for End.DT4 should be bind to a vrf and in this case our vrf name is VRF-1.
- Node A1 will sent this packet according to its ipv6 routing table. (Remember the longest match rule)
- Node A2 and Node A4 will do the same ipv6 routing. They have no knowledge about the function and they just do ipv6 routing. (Assume the shortst path from A1 to A6 is through A2 and A4)
- Node A6 has the definition for ::41 function and it poinnts to the VRF-1. Node A6 will remove IPv6 header and will do routing lookup inside the VRF-1.
It is possible to define more than one locator as of today. For instance, You can define different locators for different services. Or better example may be, You can define different locators for different Flex Algos.
Some SRv6 Functions
There are several functions already defined in draft rfc and I guess there will be more. Here are some important ones;
End : Endpoint Function
End.X: Endpoint with cross-connect function
End.DX2: Decapsulation and L2 cross-connect function
End.DX6: Decapsulation and IPv6 cross-connect function
End.DT4: Decapsulation and specific IPv4 table lookup function
End.DT6: Decapsulation and specific IPv6 table lookup function
End.B6.Insert: Endpoint bound to an SRv6 policy function
End.B6.Encaps: Endpoint bound to an SRv6 policy with encapsulation function
End.BM: Endpoint bound to an SR-MPLS policy function,
Etc..