> -----Original Message-----
> From: Shiri Kuzin <shi...@nvidia.com>
> 
> From: Viacheslav Ovsiienko <viachesl...@nvidia.com>
> 
> 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 <viachesl...@nvidia.com>
> ---
>  lib/librte_net/rte_gtp.h | 33 ++++++++++++++++++++++++++++++---
>  1 file changed, 30 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/librte_net/rte_gtp.h b/lib/librte_net/rte_gtp.h
> index 104384cc53..6a6f9b238d 100644
> --- a/lib/librte_net/rte_gtp.h
> +++ b/lib/librte_net/rte_gtp.h
> @@ -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))
> --
> 2.21.0

Acked-by: Ori Kam <or...@nvidia.com>
Thanks,
Ori

Reply via email to