DPDK patches and discussions
 help / color / mirror / Atom feed
From: Olivier Matz <olivier.matz@6wind.com>
To: dev@dpdk.org, pablo.de.lara.guarch@intel.com
Subject: [dpdk-dev] [PATCH v3] mbuf: add function to dump ol flag list
Date: Thu,  6 Oct 2016 10:42:56 +0200	[thread overview]
Message-ID: <1475743376-10360-1-git-send-email-olivier.matz@6wind.com> (raw)
In-Reply-To: <1473407734-11253-2-git-send-email-olivier.matz@6wind.com>

The functions rte_get_rx_ol_flag_name() and rte_get_tx_ol_flag_name()
can dump one flag, or set of flag that are part of the same mask (ex:
PKT_TX_UDP_CKSUM, part of PKT_TX_L4_MASK). But they are not designed to
dump the list of flags contained in mbuf->ol_flags.

This commit introduce new functions to do that. Similarly to the packet
type dump functions, the goal is to factorize the code that could be
used in several applications and reduce the risk of desynchronization
between the flags and the dump functions.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
---

v2 -> v3:
- Move return type on a separate line in function definitions

 doc/guides/rel_notes/release_16_11.rst |  5 ++
 lib/librte_mbuf/rte_mbuf.c             | 93 ++++++++++++++++++++++++++++++++++
 lib/librte_mbuf/rte_mbuf.h             | 28 ++++++++++
 lib/librte_mbuf/rte_mbuf_version.map   |  2 +
 4 files changed, 128 insertions(+)

diff --git a/doc/guides/rel_notes/release_16_11.rst b/doc/guides/rel_notes/release_16_11.rst
index 40c09ca..3d3c417 100644
--- a/doc/guides/rel_notes/release_16_11.rst
+++ b/doc/guides/rel_notes/release_16_11.rst
@@ -50,6 +50,11 @@ New Features
 
   Added new functions ``rte_get_ptype_*()`` to dump a packet type as a string.
 
+* **Added functions to dump the offload flags as a string.**
+
+  Added two new functions ``rte_get_rx_ol_flag_list()`` and
+  ``rte_get_tx_ol_flag_list()`` to dump offload flags as a string.
+
 Resolved Issues
 ---------------
 
diff --git a/lib/librte_mbuf/rte_mbuf.c b/lib/librte_mbuf/rte_mbuf.c
index 37fd72b..37691ca 100644
--- a/lib/librte_mbuf/rte_mbuf.c
+++ b/lib/librte_mbuf/rte_mbuf.c
@@ -317,6 +317,54 @@ const char *rte_get_rx_ol_flag_name(uint64_t mask)
 	}
 }
 
+struct flag_mask {
+	uint64_t flag;
+	uint64_t mask;
+	const char *default_name;
+};
+
+/* write the list of rx ol flags in buffer buf */
+int
+rte_get_rx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
+{
+	const struct flag_mask rx_flags[] = {
+		{ 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_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 },
+	};
+	const char *name;
+	unsigned int i;
+	int ret;
+
+	if (buflen == 0)
+		return -1;
+
+	buf[0] = '\0';
+	for (i = 0; i < RTE_DIM(rx_flags); i++) {
+		if ((mask & rx_flags[i].mask) != rx_flags[i].flag)
+			continue;
+		name = rte_get_rx_ol_flag_name(rx_flags[i].flag);
+		if (name == NULL)
+			name = rx_flags[i].default_name;
+		ret = snprintf(buf, buflen, "%s ", name);
+		if (ret < 0)
+			return -1;
+		if ((size_t)ret >= buflen)
+			return -1;
+		buf += ret;
+		buflen -= ret;
+	}
+
+	return 0;
+}
+
 /*
  * Get the name of a TX offload flag. Must be kept synchronized with flag
  * definitions in rte_mbuf.h.
@@ -339,3 +387,48 @@ const char *rte_get_tx_ol_flag_name(uint64_t mask)
 	default: return NULL;
 	}
 }
+
+/* write the list of tx ol flags in buffer buf */
+int
+rte_get_tx_ol_flag_list(uint64_t mask, char *buf, size_t buflen)
+{
+	const struct flag_mask tx_flags[] = {
+		{ PKT_TX_VLAN_PKT, PKT_TX_VLAN_PKT, NULL },
+		{ PKT_TX_IP_CKSUM, PKT_TX_IP_CKSUM, NULL },
+		{ PKT_TX_TCP_CKSUM, PKT_TX_L4_MASK, NULL },
+		{ PKT_TX_SCTP_CKSUM, PKT_TX_L4_MASK, NULL },
+		{ PKT_TX_UDP_CKSUM, PKT_TX_L4_MASK, NULL },
+		{ PKT_TX_L4_NO_CKSUM, PKT_TX_L4_MASK, "PKT_TX_L4_NO_CKSUM" },
+		{ PKT_TX_IEEE1588_TMST, PKT_TX_IEEE1588_TMST, NULL },
+		{ PKT_TX_TCP_SEG, PKT_TX_TCP_SEG, NULL },
+		{ PKT_TX_IPV4, PKT_TX_IPV4, NULL },
+		{ PKT_TX_IPV6, PKT_TX_IPV6, NULL },
+		{ PKT_TX_OUTER_IP_CKSUM, PKT_TX_OUTER_IP_CKSUM, NULL },
+		{ PKT_TX_OUTER_IPV4, PKT_TX_OUTER_IPV4, NULL },
+		{ PKT_TX_OUTER_IPV6, PKT_TX_OUTER_IPV6, NULL },
+	};
+	const char *name;
+	unsigned int i;
+	int ret;
+
+	if (buflen == 0)
+		return -1;
+
+	buf[0] = '\0';
+	for (i = 0; i < RTE_DIM(tx_flags); i++) {
+		if ((mask & tx_flags[i].mask) != tx_flags[i].flag)
+			continue;
+		name = rte_get_tx_ol_flag_name(tx_flags[i].flag);
+		if (name == NULL)
+			name = tx_flags[i].default_name;
+		ret = snprintf(buf, buflen, "%s ", name);
+		if (ret < 0)
+			return -1;
+		if ((size_t)ret >= buflen)
+			return -1;
+		buf += ret;
+		buflen -= ret;
+	}
+
+	return 0;
+}
diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
index 1451ec3..5e349e7 100644
--- a/lib/librte_mbuf/rte_mbuf.h
+++ b/lib/librte_mbuf/rte_mbuf.h
@@ -240,6 +240,20 @@ extern "C" {
 const char *rte_get_rx_ol_flag_name(uint64_t mask);
 
 /**
+ * Dump the list of RX offload flags in a buffer
+ *
+ * @param mask
+ *   The mask describing the RX flags.
+ * @param buf
+ *   The ouput buffer.
+ * @param buflen
+ *   The length of the buffer.
+ * @return
+ *   0 on success, (-1) on error.
+ */
+int rte_get_rx_ol_flag_list(uint64_t mask, char *buf, size_t buflen);
+
+/**
  * Get the name of a TX offload flag
  *
  * @param mask
@@ -252,6 +266,20 @@ const char *rte_get_rx_ol_flag_name(uint64_t mask);
 const char *rte_get_tx_ol_flag_name(uint64_t mask);
 
 /**
+ * Dump the list of TX offload flags in a buffer
+ *
+ * @param mask
+ *   The mask describing the TX flags.
+ * @param buf
+ *   The ouput buffer.
+ * @param buflen
+ *   The length of the buffer.
+ * @return
+ *   0 on success, (-1) on error.
+ */
+int rte_get_tx_ol_flag_list(uint64_t mask, char *buf, size_t buflen);
+
+/**
  * Some NICs need at least 2KB buffer to RX standard Ethernet frame without
  * splitting it into multiple segments.
  * So, for mbufs that planned to be involved into RX/TX, the recommended
diff --git a/lib/librte_mbuf/rte_mbuf_version.map b/lib/librte_mbuf/rte_mbuf_version.map
index 5455ba6..6e2ea84 100644
--- a/lib/librte_mbuf/rte_mbuf_version.map
+++ b/lib/librte_mbuf/rte_mbuf_version.map
@@ -31,5 +31,7 @@ DPDK_16.11 {
 	rte_get_ptype_l4_name;
 	rte_get_ptype_name;
 	rte_get_ptype_tunnel_name;
+	rte_get_rx_ol_flag_list;
+	rte_get_tx_ol_flag_list;
 
 } DPDK_2.1;
-- 
2.8.1

  parent reply	other threads:[~2016-10-06  8:43 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-09  7:55 [dpdk-dev] [PATCH v2 0/8] Misc enhancements in testpmd Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 1/8] mbuf: add function to dump ol flag list Olivier Matz
2016-10-05  6:45   ` De Lara Guarch, Pablo
2016-10-05 14:19     ` Olivier Matz
2016-10-06  8:42   ` Olivier Matz [this message]
2016-10-07  3:51     ` [dpdk-dev] [PATCH v3] " De Lara Guarch, Pablo
2016-10-07 15:39       ` Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 2/8] app/testpmd: use new function to dump offload flags Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 3/8] app/testpmd: dump rx flags in csum engine Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 4/8] app/testpmd: add option to enable lro Olivier Matz
2016-10-05  6:26   ` De Lara Guarch, Pablo
2016-10-05 14:18     ` Olivier Matz
2016-10-06  8:44   ` [dpdk-dev] [PATCH v3] " Olivier Matz
2016-10-06  8:47     ` [dpdk-dev] [PATCH v4] " Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 5/8] app/testpmd: do not change ip addrs in csum engine Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 6/8] app/testpmd: display rx port " Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 7/8] app/testpmd: don't use tso if packet is too small Olivier Matz
2016-09-09  7:55 ` [dpdk-dev] [PATCH v2 8/8] app/testpmd: hide segsize when unrelevant in csum engine Olivier Matz
2016-10-03  9:02 ` [dpdk-dev] [PATCH v2 0/8] Misc enhancements in testpmd Olivier Matz
2016-10-07 16:05 ` [dpdk-dev] [PATCH v5 " Olivier Matz
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 1/8] mbuf: add function to dump ol flag list Olivier Matz
2016-10-11 20:42     ` Thomas Monjalon
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 2/8] app/testpmd: use new function to dump offload flags Olivier Matz
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 3/8] app/testpmd: dump Rx flags in csum engine Olivier Matz
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 4/8] app/testpmd: add option to enable lro Olivier Matz
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 5/8] app/testpmd: do not change ip addrs in csum engine Olivier Matz
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 6/8] app/testpmd: display Rx port " Olivier Matz
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 7/8] app/testpmd: don't use tso if packet is too small Olivier Matz
2016-10-07 16:05   ` [dpdk-dev] [PATCH v5 8/8] app/testpmd: hide segsize when unrelevant in csum engine Olivier Matz
2016-10-11 18:13   ` [dpdk-dev] [PATCH v5 0/8] Misc enhancements in testpmd De Lara Guarch, Pablo
2016-10-12 15:39   ` [dpdk-dev] [PATCH v6 " Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 1/8] mbuf: add function to dump ol flag list Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 2/8] app/testpmd: use new function to dump offload flags Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 3/8] app/testpmd: dump Rx flags in csum engine Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 4/8] app/testpmd: add option to enable lro Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 5/8] app/testpmd: do not change ip addrs in csum engine Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 6/8] app/testpmd: display Rx port " Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 7/8] app/testpmd: don't use tso if packet is too small Olivier Matz
2016-10-12 15:39     ` [dpdk-dev] [PATCH v6 8/8] app/testpmd: hide segsize when unrelevant in csum engine Olivier Matz
2016-10-12 16:41     ` [dpdk-dev] [PATCH v6 0/8] Misc enhancements in testpmd Thomas Monjalon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1475743376-10360-1-git-send-email-olivier.matz@6wind.com \
    --to=olivier.matz@6wind.com \
    --cc=dev@dpdk.org \
    --cc=pablo.de.lara.guarch@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).