mbuf: add function to reset headroom
[dpdk.git] / lib / librte_mbuf / rte_mbuf.h
index 7ae6554..85a653c 100644 (file)
@@ -787,6 +787,7 @@ struct rte_mbuf {
         * or non-atomic) is controlled by the CONFIG_RTE_MBUF_REFCNT_ATOMIC
         * config option.
         */
+       RTE_STD_C11
        union {
                rte_atomic16_t refcnt_atomic; /**< Atomically accessed refcnt */
                uint16_t refcnt;              /**< Non-atomically accessed refcnt */
@@ -806,6 +807,7 @@ struct rte_mbuf {
         * would have RTE_PTYPE_L2_ETHER and not RTE_PTYPE_L2_VLAN because the
         * vlan is stripped from the data.
         */
+       RTE_STD_C11
        union {
                uint32_t packet_type; /**< L2/L3/L4 and tunnel information. */
                struct {
@@ -827,6 +829,7 @@ struct rte_mbuf {
        union {
                uint32_t rss;     /**< RSS hash result if RSS enabled */
                struct {
+                       RTE_STD_C11
                        union {
                                struct {
                                        uint16_t hash;
@@ -854,6 +857,7 @@ struct rte_mbuf {
        /* second cache line - fields only used in slow path or on TX */
        MARKER cacheline1 __rte_cache_min_aligned;
 
+       RTE_STD_C11
        union {
                void *userdata;   /**< Can be used for external metadata */
                uint64_t udata64; /**< Allow 8-byte userdata on 32-bit */
@@ -863,8 +867,10 @@ struct rte_mbuf {
        struct rte_mbuf *next;    /**< Next segment of scattered packet. */
 
        /* fields to support TX offloads */
+       RTE_STD_C11
        union {
                uint64_t tx_offload;       /**< combined for easy fetch */
+               __extension__
                struct {
                        uint64_t l2_len:7; /**< L2 (MAC) Header Length. */
                        uint64_t l3_len:9; /**< L3 (IP) Header Length. */
@@ -1380,6 +1386,19 @@ rte_pktmbuf_priv_size(struct rte_mempool *mp)
        return mbp_priv->mbuf_priv_size;
 }
 
+/**
+ * Reset the data_off field of a packet mbuf to its default value.
+ *
+ * The given mbuf must have only one segment, which should be empty.
+ *
+ * @param m
+ *   The packet mbuf's data_off field has to be reset.
+ */
+static inline void rte_pktmbuf_reset_headroom(struct rte_mbuf *m)
+{
+       m->data_off = RTE_MIN(RTE_PKTMBUF_HEADROOM, (uint16_t)m->buf_len);
+}
+
 /**
  * Reset the fields of a packet mbuf to their default values.
  *
@@ -1400,8 +1419,7 @@ static inline void rte_pktmbuf_reset(struct rte_mbuf *m)
 
        m->ol_flags = 0;
        m->packet_type = 0;
-       m->data_off = (RTE_PKTMBUF_HEADROOM <= m->buf_len) ?
-                       RTE_PKTMBUF_HEADROOM : m->buf_len;
+       rte_pktmbuf_reset_headroom(m);
 
        m->data_len = 0;
        __rte_mbuf_sanity_check(m, 1);
@@ -1565,7 +1583,7 @@ static inline void rte_pktmbuf_detach(struct rte_mbuf *m)
        m->buf_addr = (char *)m + mbuf_size;
        m->buf_physaddr = rte_mempool_virt2phy(mp, m) + mbuf_size;
        m->buf_len = (uint16_t)buf_len;
-       m->data_off = RTE_MIN(RTE_PKTMBUF_HEADROOM, (uint16_t)m->buf_len);
+       rte_pktmbuf_reset_headroom(m);
        m->data_len = 0;
        m->ol_flags = 0;