[v7,1/4] test: add ring pmd based packet rx/tx for UT
Checks
Commit Message
Added ring pmd based packet rx/tx helper functions
for verifying Latency, Bitrate and pdump lib UTs.
Signed-off-by: Naga Suresh Somarowthu <naga.sureshx.somarowthu@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
test/test/Makefile | 1 +
test/test/sample_packet_forward.c | 115 ++++++++++++++++++++++++++++++++++++++
test/test/sample_packet_forward.h | 40 +++++++++++++
3 files changed, 156 insertions(+)
create mode 100644 test/test/sample_packet_forward.c
create mode 100644 test/test/sample_packet_forward.h
Comments
Hi,
> -----Original Message-----
> From: Somarowthu, Naga SureshX
> Sent: Thursday, July 26, 2018 1:50 PM
> To: dev@dpdk.org
> Cc: Horton, Remy <remy.horton@intel.com>; Pattan, Reshma
> <reshma.pattan@intel.com>; Somarowthu, Naga SureshX
> <naga.sureshx.somarowthu@intel.com>
> Subject: [PATCH v7 1/4] test: add ring pmd based packet rx/tx for UT
>
dpdk-dpdk]$ ./devtools/check-git-log.sh
Wrong headline lowercase:
test: add ring pmd based packet rx/tx for UT
Thanks,
Reshma
On 26-Jul-18 5:43 PM, Pattan, Reshma wrote:
> Hi,
>
>> -----Original Message-----
>> From: Somarowthu, Naga SureshX
>> Sent: Thursday, July 26, 2018 1:50 PM
>> To: dev@dpdk.org
>> Cc: Horton, Remy <remy.horton@intel.com>; Pattan, Reshma
>> <reshma.pattan@intel.com>; Somarowthu, Naga SureshX
>> <naga.sureshx.somarowthu@intel.com>
>> Subject: [PATCH v7 1/4] test: add ring pmd based packet rx/tx for UT
>>
>
> dpdk-dpdk]$ ./devtools/check-git-log.sh
> Wrong headline lowercase:
> test: add ring pmd based packet rx/tx for UT
>
> Thanks,
> Reshma
>
Suggestion: do not refer to "unit tests" as "UT" as it may not be
immediately clear what you mean by that. IME they tend to be referred to
as autotests or just tests :) So, suggested rewording would be:
test: add helper functions for tests using ring-pmd rx/tx
or something like that.
@@ -165,6 +165,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_REORDER) += test_reorder.c
SRCS-y += virtual_pmd.c
SRCS-y += packet_burst_generator.c
+SRCS-y += sample_packet_forward.c
SRCS-$(CONFIG_RTE_LIBRTE_ACL) += test_acl.c
ifeq ($(CONFIG_RTE_LIBRTE_PMD_RING),y)
new file mode 100644
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+
+#include <rte_memcpy.h>
+#include <rte_common.h>
+#include <rte_eth_ring.h>
+#include <rte_ethdev.h>
+#include <rte_mbuf.h>
+#include <rte_bus_vdev.h>
+
+#include "sample_packet_forward.h"
+#include "test.h"
+
+/* Sample test to create virtual rings and tx,rx portid from rings */
+int
+test_ring_setup(struct rte_ring **ring, uint16_t *portid)
+{
+ *ring = rte_ring_create("R0", RING_SIZE, rte_socket_id(),
+ RING_F_SP_ENQ | RING_F_SC_DEQ);
+ if (*ring == NULL) {
+ printf("%s() line %u: rte_ring_create R0 failed",
+ __func__, __LINE__);
+ return -1;
+ }
+ *portid = rte_eth_from_rings("net_ringa", ring, NUM_QUEUES,
+ ring, NUM_QUEUES, rte_socket_id());
+
+ return 0;
+}
+
+/* Sample test to free the mempool */
+void
+test_mp_free(struct rte_mempool *mp)
+{
+ rte_mempool_free(mp);
+}
+
+/* Sample test to free the virtual rings */
+void
+test_ring_free(struct rte_ring *rxtx)
+{
+ rte_ring_free(rxtx);
+}
+
+/* Sample test to release the vdev */
+void
+test_vdev_uninit(const char *vdev)
+{
+ rte_vdev_uninit(vdev);
+}
+
+/* sample test to allocate the mempool */
+int
+test_get_mempool(struct rte_mempool **mp, char *poolname)
+{
+ *mp = rte_pktmbuf_pool_create(poolname, NB_MBUF, 32, 0,
+ RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
+ if (*mp == NULL)
+ return -1;
+ return 0;
+}
+
+/* sample test to allocate buffer for pkts */
+int
+test_get_mbuf_from_pool(struct rte_mempool **mp, struct rte_mbuf **pbuf,
+ char *poolname)
+{
+ int ret = 0;
+
+ ret = test_get_mempool(mp, poolname);
+ if (ret < 0)
+ return -1;
+ if (rte_pktmbuf_alloc_bulk(*mp, pbuf, NUM_PACKETS) != 0) {
+ printf("%s() line %u: rte_pktmbuf_alloc_bulk failed", __func__,
+ __LINE__);
+ return -1;
+ }
+ return 0;
+}
+
+/* sample test to deallocate the allocated buffers and mempool */
+void
+test_put_mbuf_to_pool(struct rte_mempool *mp, struct rte_mbuf **pbuf)
+{
+ int itr = 0;
+
+ for (itr = 0; itr < NUM_PACKETS; itr++)
+ rte_pktmbuf_free(pbuf[itr]);
+ rte_mempool_free(mp);
+}
+
+/* Sample test to forward packets using virtual portids */
+int
+test_packet_forward(struct rte_mbuf **pbuf, uint16_t portid, uint16_t queue_id)
+{
+ /* send and receive packet and check for stats update */
+ if (rte_eth_tx_burst(portid, queue_id, pbuf, NUM_PACKETS)
+ < NUM_PACKETS) {
+ printf("%s() line %u: Error sending packet to"
+ " port %d\n", __func__, __LINE__, portid);
+ return -1;
+ }
+ if (rte_eth_rx_burst(portid, queue_id, pbuf, NUM_PACKETS)
+ < NUM_PACKETS) {
+ printf("%s() line %u: Error receiving packet from"
+ " port %d\n", __func__, __LINE__, portid);
+ return -1;
+ }
+ return 0;
+}
new file mode 100644
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2018 Intel Corporation
+ */
+
+#ifndef _SAMPLE_PACKET_FORWARD_H_
+#define _SAMPLE_PACKET_FORWARD_H_
+
+/* MACROS to support virtual ring creation */
+#define RING_SIZE 256
+#define NUM_QUEUES 1
+#define NB_MBUF 512
+
+#define NUM_PACKETS 10
+
+/* Sample test to create virtual rings and tx,rx portid from rings */
+int test_ring_setup(struct rte_ring **ring, uint16_t *portid);
+
+/* Sample test to free the virtual rings */
+void test_ring_free(struct rte_ring *rxtx);
+
+/* Sample test to forward packet using virtual port id */
+int test_packet_forward(struct rte_mbuf **pbuf, uint16_t portid,
+ uint16_t queue_id);
+
+/* sample test to allocate buffer for pkts */
+int test_get_mbuf_from_pool(struct rte_mempool **mp, struct rte_mbuf **pbuf,
+ char *poolname);
+
+/* Sample test to create the mempool */
+int test_get_mempool(struct rte_mempool **mp, char *poolname);
+
+/* sample test to deallocate the allocated buffers and mempool */
+void test_put_mbuf_to_pool(struct rte_mempool *mp, struct rte_mbuf **pbuf);
+
+/* Sample test to free the mempool */
+void test_mp_free(struct rte_mempool *mp);
+
+/* Sample test to release the vdev */
+void test_vdev_uninit(const char *vdev);
+#endif /* _SAMPLE_PACKET_FORWARD_H_ */