ethdev: update GTP headers
authorViacheslav Ovsiienko <viacheslavo@nvidia.com>
Mon, 11 Jan 2021 18:21:48 +0000 (20:21 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 19 Jan 2021 02:30:13 +0000 (03:30 +0100)
This patch introduces the GTP header individual flag bit fields
and the header optional word with N-PDU number, Sequence Number
and Next Extension Header type.

Signed-off-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
Acked-by: Ori Kam <orika@nvidia.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
lib/librte_net/rte_gtp.h

index 104384c..6a6f9b2 100644 (file)
@@ -27,13 +27,40 @@ extern "C" {
  * 16-bit payload length after mandatory header, 32-bit TEID.
  * No optional fields and next extension header.
  */
+__extension__
 struct rte_gtp_hdr {
-       uint8_t gtp_hdr_info; /**< GTP header info */
+       union {
+               uint8_t gtp_hdr_info; /**< GTP header info */
+               struct {
+#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN
+                       uint8_t pn:1;   /**< N-PDU Number present bit */
+                       uint8_t s:1;    /**< Sequence Number Present bit */
+                       uint8_t e:1;    /**< Extension Present bit */
+                       uint8_t res1:1; /**< Reserved */
+                       uint8_t pt:1;   /**< Protocol Type bit */
+                       uint8_t ver:3;  /**< Version Number */
+#elif RTE_BYTE_ORDER == RTE_BIG_ENDIAN
+                       uint8_t ver:3;  /**< Version Number */
+                       uint8_t pt:1;   /**< Protocol Type bit */
+                       uint8_t res1:1; /**< Reserved */
+                       uint8_t e:1;    /**< Extension Present bit */
+                       uint8_t s:1;    /**< Sequence Number Present bit */
+                       uint8_t pn:1;   /**< N-PDU Number present bit */
+#endif
+               };
+       };
        uint8_t msg_type;     /**< GTP message type */
-       uint16_t plen;        /**< Total payload length */
-       uint32_t teid;        /**< Tunnel endpoint ID */
+       rte_be16_t plen;      /**< Total payload length */
+       rte_be32_t teid;      /**< Tunnel endpoint ID */
 } __rte_packed;
 
+/* Optional word of GTP header, present if any of E, S, PN is set. */
+struct rte_gtp_hdr_ext_word {
+       rte_be16_t sqn;       /**< Sequence Number. */
+       uint8_t npdu;         /**< N-PDU number. */
+       uint8_t next_ext;     /**< Next Extension Header Type. */
+}  __rte_packed;
+
 /** GTP header length */
 #define RTE_ETHER_GTP_HLEN \
        (sizeof(struct rte_udp_hdr) + sizeof(struct rte_gtp_hdr))