FD.io VPP  v16.12-rc0-308-g931be3a
Vector Packet Processing
sr_packet.h File Reference

The Segment Routing Header (SRH). More...

+ Include dependency graph for sr_packet.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ip6_sr_header_t
 SR header struct. More...
 

Macros

#define IPPROTO_IPV6_ROUTE   43
 
#define ROUTING_HEADER_TYPE_SR   4
 
#define IP6_SR_HEADER_FLAG_CLEANUP   (0x8000)
 Flag bits. More...
 
#define IP6_SR_HEADER_FLAG_PROTECTED   (0x4000)
 Flag bits. More...
 
#define IP6_SR_HEADER_FLAG_RESERVED   (0x3000)
 Flag bits. More...
 
#define IP6_SR_HEADER_FLAG_PL_ELT_NOT_PRESENT   (0x0)
 Flag bits. More...
 
#define IP6_SR_HEADER_FLAG_PL_ELT_INGRESS_PE   (0x1)
 Flag bits. More...
 
#define IP6_SR_HEADER_FLAG_PL_ELT_EGRESS_PE   (0x2)
 Flag bits. More...
 
#define IP6_SR_HEADER_FLAG_PL_ELT_ORIG_SRC_ADDR   (0x3)
 Flag bits. More...
 

Functions

static int ip6_sr_policy_list_shift_from_index (int pl_index)
 
static int ip6_sr_policy_list_flags (u16 flags_host_byte_order, int pl_index)
 pl_index is one-origined More...
 

Detailed Description

The Segment Routing Header (SRH).

The Segment Routing Header (SRH) is defined in the diagram below.

0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Next Header | Hdr Ext Len | Routing Type | Segments Left | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | First Segment | Flags | HMAC Key ID | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |

Segment List[0] (128 bits ipv6 address)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | | | ... | | | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |

Segment List[n] (128 bits ipv6 address)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |

Policy List[0] (optional)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |

Policy List[1] (optional)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |

Policy List[2] (optional)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

HMAC (256 bits)
(optional)

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

where:

o Next Header: 8-bit selector. Identifies the type of header immediately following the SRH.

o Hdr Ext Len: 8-bit unsigned integer, is the length of the SRH header in 8-octet units, not including the first 8 octets.

o Routing Type: TBD, to be assigned by IANA (suggested value: 4).

o Segments Left. Defined in [RFC2460], it contains the index, in the Segment List, of the next segment to inspect. Segments Left is decremented at each segment and it is used as an index in the segment list.

o First Segment: offset in the SRH, not including the first 8 octets and expressed in 16-octet units, pointing to the last element of the segment list, which is in fact the first segment of the segment routing path.

o Flags: 16 bits of flags. Following flags are defined:

                       1
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |C|P|R|R|    Policy Flags       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  C-flag: Clean-up flag.  Set when the SRH has to be removed from
  the packet when packet reaches the last segment.

  P-flag: Protected flag.  Set when the packet has been rerouted
  through FRR mechanism by a SR endpoint node.  See Section 6.3
  for more details.

  R-flags.  Reserved and for future use.

  Policy Flags.  Define the type of the IPv6 addresses encoded
  into the Policy List (see below).  The following have been
  defined:

     Bits 4-6: determine the type of the first element after the
     segment list.

     Bits 7-9: determine the type of the second element.

     Bits 10-12: determine the type of the third element.

     Bits 13-15: determine the type of the fourth element.

  The following values are used for the type:

     0x0: Not present.  If value is set to 0x0, it means the
     element represented by these bits is not present.

     0x1: SR Ingress.

     0x2: SR Egress.

     0x3: Original Source Address.

o HMAC Key ID and HMAC field, and their use are defined in [I-D.vyncke-6man-segment-routing-security].

o Segment List[n]: 128 bit IPv6 addresses representing the nth segment in the Segment List. The Segment List is encoded starting from the last segment of the path. I.e., the first element of the segment list (Segment List [0]) contains the last segment of the path while the last segment of the Segment List (Segment List[n]) contains the first segment of the path. The index contained in "Segments Left" identifies the current active segment.

o Policy List. Optional addresses representing specific nodes in the SR path such as:

SR Ingress: a 128 bit generic identifier representing the ingress in the SR domain (i.e.: it needs not to be a valid IPv6 address).

SR Egress: a 128 bit generic identifier representing the egress in the SR domain (i.e.: it needs not to be a valid IPv6 address).

Original Source Address: IPv6 address originally present in the SA field of the packet.

The segments in the Policy List are encoded after the segment list and they are optional. If none are in the SRH, all bits of the Policy List Flags MUST be set to 0x0.

Definition in file sr_packet.h.

Macro Definition Documentation

#define IP6_SR_HEADER_FLAG_CLEANUP   (0x8000)

Flag bits.

Definition at line 201 of file sr_packet.h.

#define IP6_SR_HEADER_FLAG_PL_ELT_EGRESS_PE   (0x2)

Flag bits.

Definition at line 211 of file sr_packet.h.

#define IP6_SR_HEADER_FLAG_PL_ELT_INGRESS_PE   (0x1)

Flag bits.

Definition at line 209 of file sr_packet.h.

#define IP6_SR_HEADER_FLAG_PL_ELT_NOT_PRESENT   (0x0)

Flag bits.

Definition at line 207 of file sr_packet.h.

#define IP6_SR_HEADER_FLAG_PL_ELT_ORIG_SRC_ADDR   (0x3)

Flag bits.

Definition at line 213 of file sr_packet.h.

#define IP6_SR_HEADER_FLAG_PROTECTED   (0x4000)

Flag bits.

Definition at line 203 of file sr_packet.h.

#define IP6_SR_HEADER_FLAG_RESERVED   (0x3000)

Flag bits.

Definition at line 205 of file sr_packet.h.

#define IPPROTO_IPV6_ROUTE   43

Definition at line 170 of file sr_packet.h.

#define ROUTING_HEADER_TYPE_SR   4

Definition at line 173 of file sr_packet.h.

Function Documentation

static int ip6_sr_policy_list_flags ( u16  flags_host_byte_order,
int  pl_index 
)
inlinestatic

pl_index is one-origined

Definition at line 230 of file sr_packet.h.

+ Here is the caller graph for this function:

static int ip6_sr_policy_list_shift_from_index ( int  pl_index)
inlinestatic

Definition at line 223 of file sr_packet.h.

+ Here is the caller graph for this function: