]> git.droids-corp.org - dpdk.git/commitdiff
mbuf: add functions to dump offload flags
authorOlivier Matz <olivier.matz@6wind.com>
Wed, 12 Oct 2016 15:39:43 +0000 (17:39 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 12 Oct 2016 16:08:40 +0000 (18:08 +0200)
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>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
lib/librte_mbuf/rte_mbuf.c
lib/librte_mbuf/rte_mbuf.h
lib/librte_mbuf/rte_mbuf_version.map

index 04f9ed30247e790367f91a791659f331977a7de4..4e1fdd1f960173006a454234929908ce84209f4f 100644 (file)
@@ -319,6 +319,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.
@@ -345,3 +393,56 @@ 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 },
+               { PKT_TX_TUNNEL_VXLAN, PKT_TX_TUNNEL_MASK,
+                 "PKT_TX_TUNNEL_NONE" },
+               { PKT_TX_TUNNEL_GRE, PKT_TX_TUNNEL_MASK,
+                 "PKT_TX_TUNNEL_NONE" },
+               { PKT_TX_TUNNEL_IPIP, PKT_TX_TUNNEL_MASK,
+                 "PKT_TX_TUNNEL_NONE" },
+               { PKT_TX_TUNNEL_GENEVE, PKT_TX_TUNNEL_MASK,
+                 "PKT_TX_TUNNEL_NONE" },
+       };
+       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;
+}
index 55bc389f6c5df249f95790af2ee1475aed23071f..7541070f28b4235dc0d002dff11f4ea2af84b09e 100644 (file)
@@ -251,6 +251,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 output 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
  *
@@ -263,6 +277,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 output 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.
index 5455ba69551dd5d75710019af07de1c049479456..6e2ea84560ca942577557efc4d3a5fbfc85a05aa 100644 (file)
@@ -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;