mbuf: introduce new Tx offload flag for MPLS-in-UDP
[dpdk.git] / lib / librte_mbuf / rte_mbuf.c
index 4e1fdd1..26a62b8 100644 (file)
@@ -62,7 +62,7 @@
 
 /*
  * ctrlmbuf constructor, given as a callback function to
- * rte_mempool_create()
+ * rte_mempool_obj_iter() or rte_mempool_create()
  */
 void
 rte_ctrlmbuf_init(struct rte_mempool *mp,
@@ -77,7 +77,8 @@ rte_ctrlmbuf_init(struct rte_mempool *mp,
 
 /*
  * pktmbuf pool constructor, given as a callback function to
- * rte_mempool_create()
+ * rte_mempool_create(), or called directly if using
+ * rte_mempool_create_empty()/rte_mempool_populate()
  */
 void
 rte_pktmbuf_pool_init(struct rte_mempool *mp, void *opaque_arg)
@@ -110,7 +111,7 @@ rte_pktmbuf_pool_init(struct rte_mempool *mp, void *opaque_arg)
 
 /*
  * pktmbuf constructor, given as a callback function to
- * rte_mempool_create().
+ * rte_mempool_obj_iter() or rte_mempool_create().
  * Set the fields of a packet mbuf to their default values.
  */
 void
@@ -130,8 +131,7 @@ rte_pktmbuf_init(struct rte_mempool *mp,
        RTE_ASSERT(mp->elt_size >= mbuf_size);
        RTE_ASSERT(buf_len <= UINT16_MAX);
 
-       memset(m, 0, mp->elt_size);
-
+       memset(m, 0, mbuf_size);
        /* start of buffer is after mbuf structure and priv data */
        m->priv_size = priv_size;
        m->buf_addr = (char *)m + mbuf_size;
@@ -145,6 +145,8 @@ rte_pktmbuf_init(struct rte_mempool *mp,
        m->pool = mp;
        m->nb_segs = 1;
        m->port = 0xff;
+       rte_mbuf_refcnt_set(m, 1);
+       m->next = NULL;
 }
 
 /* helper to create a mbuf pool */
@@ -309,12 +311,18 @@ const char *rte_get_rx_ol_flag_name(uint64_t mask)
        case PKT_RX_RSS_HASH: return "PKT_RX_RSS_HASH";
        case PKT_RX_FDIR: return "PKT_RX_FDIR";
        case PKT_RX_L4_CKSUM_BAD: return "PKT_RX_L4_CKSUM_BAD";
+       case PKT_RX_L4_CKSUM_GOOD: return "PKT_RX_L4_CKSUM_GOOD";
+       case PKT_RX_L4_CKSUM_NONE: return "PKT_RX_L4_CKSUM_NONE";
        case PKT_RX_IP_CKSUM_BAD: return "PKT_RX_IP_CKSUM_BAD";
+       case PKT_RX_IP_CKSUM_GOOD: return "PKT_RX_IP_CKSUM_GOOD";
+       case PKT_RX_IP_CKSUM_NONE: return "PKT_RX_IP_CKSUM_NONE";
        case PKT_RX_EIP_CKSUM_BAD: return "PKT_RX_EIP_CKSUM_BAD";
        case PKT_RX_VLAN_STRIPPED: return "PKT_RX_VLAN_STRIPPED";
        case PKT_RX_IEEE1588_PTP: return "PKT_RX_IEEE1588_PTP";
        case PKT_RX_IEEE1588_TMST: return "PKT_RX_IEEE1588_TMST";
        case PKT_RX_QINQ_STRIPPED: return "PKT_RX_QINQ_STRIPPED";
+       case PKT_RX_LRO: return "PKT_RX_LRO";
+       case PKT_RX_TIMESTAMP: return "PKT_RX_TIMESTAMP";
        default: return NULL;
        }
 }
@@ -333,13 +341,23 @@ rte_get_rx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
                { PKT_RX_VLAN_PKT, PKT_RX_VLAN_PKT, NULL },
                { PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, NULL },
                { PKT_RX_FDIR, PKT_RX_FDIR, NULL },
-               { PKT_RX_L4_CKSUM_BAD, PKT_RX_L4_CKSUM_BAD, NULL },
-               { PKT_RX_IP_CKSUM_BAD, PKT_RX_IP_CKSUM_BAD, NULL },
+               { PKT_RX_L4_CKSUM_BAD, PKT_RX_L4_CKSUM_MASK, NULL },
+               { PKT_RX_L4_CKSUM_GOOD, PKT_RX_L4_CKSUM_MASK, NULL },
+               { PKT_RX_L4_CKSUM_NONE, PKT_RX_L4_CKSUM_MASK, NULL },
+               { PKT_RX_L4_CKSUM_UNKNOWN, PKT_RX_L4_CKSUM_MASK,
+                 "PKT_RX_L4_CKSUM_UNKNOWN" },
+               { PKT_RX_IP_CKSUM_BAD, PKT_RX_IP_CKSUM_MASK, NULL },
+               { PKT_RX_IP_CKSUM_GOOD, PKT_RX_IP_CKSUM_MASK, NULL },
+               { PKT_RX_IP_CKSUM_NONE, PKT_RX_IP_CKSUM_MASK, NULL },
+               { PKT_RX_IP_CKSUM_UNKNOWN, PKT_RX_IP_CKSUM_MASK,
+                 "PKT_RX_IP_CKSUM_UNKNOWN" },
                { PKT_RX_EIP_CKSUM_BAD, PKT_RX_EIP_CKSUM_BAD, NULL },
                { PKT_RX_VLAN_STRIPPED, PKT_RX_VLAN_STRIPPED, NULL },
                { PKT_RX_IEEE1588_PTP, PKT_RX_IEEE1588_PTP, NULL },
                { PKT_RX_IEEE1588_TMST, PKT_RX_IEEE1588_TMST, NULL },
                { PKT_RX_QINQ_STRIPPED, PKT_RX_QINQ_STRIPPED, NULL },
+               { PKT_RX_LRO, PKT_RX_LRO, NULL },
+               { PKT_RX_TIMESTAMP, PKT_RX_TIMESTAMP, NULL },
        };
        const char *name;
        unsigned int i;
@@ -390,6 +408,8 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask)
        case PKT_TX_TUNNEL_GRE: return "PKT_TX_TUNNEL_GRE";
        case PKT_TX_TUNNEL_IPIP: return "PKT_TX_TUNNEL_IPIP";
        case PKT_TX_TUNNEL_GENEVE: return "PKT_TX_TUNNEL_GENEVE";
+       case PKT_TX_TUNNEL_MPLSINUDP: return "PKT_TX_TUNNEL_MPLSINUDP";
+       case PKT_TX_MACSEC: return "PKT_TX_MACSEC";
        default: return NULL;
        }
 }
@@ -420,6 +440,9 @@ rte_get_tx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
                  "PKT_TX_TUNNEL_NONE" },
                { PKT_TX_TUNNEL_GENEVE, PKT_TX_TUNNEL_MASK,
                  "PKT_TX_TUNNEL_NONE" },
+               { PKT_TX_TUNNEL_MPLSINUDP, PKT_TX_TUNNEL_MASK,
+                 "PKT_TX_TUNNEL_NONE" },
+               { PKT_TX_MACSEC, PKT_TX_MACSEC, NULL },
        };
        const char *name;
        unsigned int i;