diff mbox

[API-NEXT,PATCHv4,2/2] validation: test odp_pktio_link_status()

Message ID 1451481205-20606-3-git-send-email-maxim.uvarov@linaro.org
State Accepted
Commit 2a735e4526ae019b41653f66c2b0891265ba3cd5
Headers show

Commit Message

Maxim Uvarov Dec. 30, 2015, 1:13 p.m. UTC
Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
---
 test/validation/pktio/pktio.c | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)
diff mbox

Patch

diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
index e473a1d..4beb681 100644
--- a/test/validation/pktio/pktio.c
+++ b/test/validation/pktio/pktio.c
@@ -74,6 +74,29 @@  pkt_segmented_e pool_segmentation = PKT_POOL_UNSEGMENTED;
 
 odp_pool_t pool[MAX_NUM_IFACES] = {ODP_POOL_INVALID, ODP_POOL_INVALID};
 
+static inline void _pktio_wait_linkup(odp_pktio_t pktio)
+{
+	/* wait 1 second for link up */
+	uint64_t wait_ns = (10 * ODP_TIME_MSEC_IN_NS);
+	int wait_num = 100;
+	int i;
+	int ret = -1;
+
+	for (i = 0; i < wait_num; i++) {
+		ret = odp_pktio_link_status(pktio);
+		if (ret < 0 || ret == 1)
+			break;
+		/* link is down, call status again after delay */
+		odp_time_wait_ns(wait_ns);
+	}
+
+	if (ret != -1) {
+		/* assert only if link state supported and
+		 * it's down. */
+		CU_ASSERT_FATAL(ret == 1);
+	}
+}
+
 static void set_pool_len(odp_pool_param_t *params)
 {
 	switch (pool_segmentation) {
@@ -514,6 +537,8 @@  static void test_txrx(odp_pktio_input_mode_t in_mode, int num_pkts)
 
 		ret = odp_pktio_start(io->id);
 		CU_ASSERT(ret == 0);
+
+		_pktio_wait_linkup(io->id);
 	}
 
 	/* if we have two interfaces then send through one and receive on
@@ -757,6 +782,8 @@  void pktio_test_start_stop(void)
 	ret = odp_pktio_start(pktio[0]);
 	CU_ASSERT(ret < 0);
 
+	_pktio_wait_linkup(pktio[0]);
+
 	/* Test Rx on a stopped interface. Only works if there are 2 */
 	if (num_ifaces > 1) {
 		for (alloc = 0; alloc < 1000; alloc++) {
@@ -804,6 +831,8 @@  void pktio_test_start_stop(void)
 		ret = odp_pktio_start(pktio[1]);
 		CU_ASSERT(ret == 0);
 
+		_pktio_wait_linkup(pktio[1]);
+
 		/* flush packets with magic number in pipes */
 		for (i = 0; i < 1000; i++) {
 			ev = odp_schedule(NULL, wait);
@@ -915,6 +944,8 @@  void pktio_test_send_failure(void)
 	ret = odp_pktio_start(pktio_tx);
 	CU_ASSERT_FATAL(ret == 0);
 
+	_pktio_wait_linkup(pktio_tx);
+
 	/* configure the pool so that we can generate test packets larger
 	 * than the interface MTU */
 	memset(&pool_params, 0, sizeof(pool_params));
@@ -930,6 +961,8 @@  void pktio_test_send_failure(void)
 					ODP_PKTOUT_MODE_SEND);
 		ret = odp_pktio_start(pktio_rx);
 		CU_ASSERT_FATAL(ret == 0);
+
+		_pktio_wait_linkup(pktio_rx);
 	} else {
 		pktio_rx = pktio_tx;
 	}
@@ -1052,6 +1085,8 @@  void pktio_test_recv_on_wonly(void)
 	ret = odp_pktio_start(pktio);
 	CU_ASSERT_FATAL(ret == 0);
 
+	_pktio_wait_linkup(pktio);
+
 	ret = odp_pktio_recv(pktio, &pkt, 1);
 	CU_ASSERT(ret < 0);
 
@@ -1082,6 +1117,8 @@  void pktio_test_send_on_ronly(void)
 	ret = odp_pktio_start(pktio);
 	CU_ASSERT_FATAL(ret == 0);
 
+	_pktio_wait_linkup(pktio);
+
 	pkt = odp_packet_alloc(default_pkt_pool, packet_len);
 	CU_ASSERT_FATAL(pkt != ODP_PACKET_INVALID)