net/i40e: move testpmd commands
[dpdk.git] / app / test / test_distributor.c
index f4c6229..3efa4af 100644 (file)
 #include <rte_mempool.h>
 #include <rte_mbuf.h>
 #include <rte_mbuf_dyn.h>
+
+#ifdef RTE_EXEC_ENV_WINDOWS
+static int
+test_distributor(void)
+{
+       printf("distributor not supported on Windows, skipping test\n");
+       return TEST_SKIPPED;
+}
+
+#else
+
 #include <rte_distributor.h>
 #include <rte_string_fns.h>
 
@@ -217,6 +228,8 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)
        clear_packet_count();
        struct rte_mbuf *many_bufs[BIG_BATCH], *return_bufs[BIG_BATCH];
        unsigned num_returned = 0;
+       unsigned int num_being_processed = 0;
+       unsigned int return_buffer_capacity = 127;/* RTE_DISTRIB_RETURNS_MASK */
 
        /* flush out any remaining packets */
        rte_distributor_flush(db);
@@ -233,16 +246,16 @@ sanity_test(struct worker_params *wp, struct rte_mempool *p)
        for (i = 0; i < BIG_BATCH/BURST; i++) {
                rte_distributor_process(db,
                                &many_bufs[i*BURST], BURST);
-               count = rte_distributor_returned_pkts(db,
-                               &return_bufs[num_returned],
-                               BIG_BATCH - num_returned);
-               num_returned += count;
+               num_being_processed += BURST;
+               do {
+                       count = rte_distributor_returned_pkts(db,
+                                       &return_bufs[num_returned],
+                                       BIG_BATCH - num_returned);
+                       num_being_processed -= count;
+                       num_returned += count;
+                       rte_distributor_flush(db);
+               } while (num_being_processed + BURST > return_buffer_capacity);
        }
-       rte_distributor_flush(db);
-       count = rte_distributor_returned_pkts(db,
-               &return_bufs[num_returned],
-                       BIG_BATCH - num_returned);
-       num_returned += count;
        retries = 0;
        do {
                rte_distributor_flush(db);
@@ -937,4 +950,6 @@ err:
        return -1;
 }
 
+#endif /* !RTE_EXEC_ENV_WINDOWS */
+
 REGISTER_TEST_COMMAND(distributor_autotest, test_distributor);