vppinfra: Improve code portability
[vpp.git] / src / vnet / srv6 / sr_packet.h
old mode 100755 (executable)
new mode 100644 (file)
index 7af4ad4..cf9fcb7
@@ -28,7 +28,7 @@
  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  *   | Next Header   |  Hdr Ext Len  | Routing Type  | Segments Left |
  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *   | First Segment |     Flags     |           RESERVED            |
+ *   |  Last Entry   |     Flags     |              Tag              |
  *   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  *   |                                                               |
  *   |            Segment List[0] (128 bits IPv6 address)            |
  *
  *   o  Routing Type: TBD, to be assigned by IANA (suggested value: 4).
  *
- *   o  Segments Left.  Defined in [RFC2460], it contains the index, in
+ *   o  Segments Left.  Defined in [RFC8200], it contains the index, in
  *      the Segment List, of the next segment to inspect.  Segments Left
  *      is decremented at each segment.
  *
- *   o  First Segment: contains the index, in the Segment List, of the
- *      first segment of the path which is in fact the last element of the
- *      Segment List.
+ *   o  Last Entry: contains the index (zero based), in the Segment List,
+ *      of the the last element of the Segment List
  *
  *   o  Flags: 8 bits of flags.  Following flags are defined:
  *
  *        36 octets of the SRH represent the HMAC information.  See
  *        Section 3.1.5 for details on the HMAC TLV.
  *
- *   o  RESERVED: SHOULD be unset on transmission and MUST be ignored on
- *      receipt.
+ *   o  Tag: tag a packet as part of a class or group of packets, e.g.,
+ *      packets sharing the same set of properties. When tag is not used
+ *      at source it MUST be set to zero on transmission. When tag is not
+ *      used during SRH Processing it SHOULD be ignored.
  *
  *   o  Segment List[n]: 128 bit IPv6 addresses representing the nth
  *      segment in the Segment List.  The Segment List is encoded starting
 
 #define ROUTING_HEADER_TYPE_SR    4
 
+#define IP6_SRH_PT_TLV_TYPE 128
+#define IP6_SRH_PT_TLV_LEN  14
+
 typedef struct
 {
   /* Protocol for next header. */
@@ -132,7 +136,7 @@ typedef struct
   u8 segments_left;
 
   /* Pointer to the first segment in the header */
-  u8 first_segment;
+  u8 last_entry;
 
   /* Flag bits */
 #define IP6_SR_HEADER_FLAG_PROTECTED  (0x40)
@@ -142,12 +146,34 @@ typedef struct
 
   /* values 0x0, 0x4 - 0x7 are reserved */
   u8 flags;
-  u16 reserved;
+  u16 tag;
 
   /* The segment elts */
   ip6_address_t segments[0];
 } __attribute__ ((packed)) ip6_sr_header_t;
 
+typedef struct
+{
+  u8 type;
+  u8 length;
+  u8 value[0];
+} __attribute__ ((packed)) ip6_sr_tlv_t;
+
+typedef struct
+{
+  u32 sec;
+  u32 nsec;
+} __attribute__ ((packed)) timestamp_64_t;
+
+typedef struct
+{
+  u8 type;
+  u8 length;
+  u16 id_ld;
+  timestamp_64_t t64;
+  u16 session_id;
+  u16 seq_num;
+} __attribute__ ((packed)) ip6_sr_pt_tlv_t;
 /*
 * fd.io coding-style-patch-verification: ON
 *