On Mon, Sep 07, 2015 at 02:14:50PM +0300, Maxim Uvarov wrote:
> On 09/04/15 12:55, Stuart Haslam wrote:
> >Add a couple of tests for receiving packets directly via
> >odp_pktio_recv().
> >
> >Signed-off-by: Stuart Haslam <[email protected]>
> >---
> >  test/validation/pktio/pktio.c | 103 
> > ++++++++++++++++++++++++++----------------
> >  test/validation/pktio/pktio.h |   2 +
> >  2 files changed, 66 insertions(+), 39 deletions(-)
> >
> >diff --git a/test/validation/pktio/pktio.c b/test/validation/pktio/pktio.c
> >index c74fab3..95c3c34 100644
> >--- a/test/validation/pktio/pktio.c
> >+++ b/test/validation/pktio/pktio.c
> >@@ -34,6 +34,7 @@ typedef struct {
> >     odp_pktio_t id;
> >     odp_queue_t outq;
> >     odp_queue_t inq;
> >+    odp_pktio_input_mode_t in_mode;
> >  } pktio_info_t;
> >  /** magic number and sequence at start of UDP payload */
> >@@ -250,7 +251,7 @@ static int default_pool_create(void)
> >     return 0;
> >  }
> >-static odp_pktio_t create_pktio(int iface_idx, odp_queue_type_t q_type)
> >+static odp_pktio_t create_pktio(int iface_idx, odp_pktio_input_mode_t mode)
> >  {
> >     odp_pktio_t pktio;
> >     odp_pktio_param_t pktio_param;
> >@@ -258,10 +259,7 @@ static odp_pktio_t create_pktio(int iface_idx, 
> >odp_queue_type_t q_type)
> >     memset(&pktio_param, 0, sizeof(pktio_param));
> >-    if (q_type == ODP_QUEUE_TYPE_POLL)
> >-            pktio_param.in_mode = ODP_PKTIN_MODE_POLL;
> >-    else
> >-            pktio_param.in_mode = ODP_PKTIN_MODE_SCHED;
> >+    pktio_param.in_mode = mode;
> >     pktio = odp_pktio_open(iface, pool[iface_idx], &pktio_param);
> >     if (pktio == ODP_PKTIO_INVALID)
> >@@ -348,33 +346,41 @@ static odp_event_t queue_deq_wait_time(odp_queue_t 
> >queue, uint64_t ns)
> >     return ODP_EVENT_INVALID;
> >  }
> >-static odp_packet_t wait_for_packet(odp_queue_t queue,
> >+static odp_packet_t wait_for_packet(pktio_info_t *pktio_rx,
> >                                 uint32_t seq, uint64_t ns)
> >  {
> >     uint64_t start, now, diff;
> >     odp_event_t ev;
> >-    odp_packet_t pkt = ODP_PACKET_INVALID;
> >+    odp_packet_t pkt;
> >     uint64_t wait;
> >     start = odp_time_cycles();
> >     wait = odp_schedule_wait_time(ns);
> >     do {
> >-            if (queue != ODP_QUEUE_INVALID &&
> >-                odp_queue_type(queue) == ODP_QUEUE_TYPE_POLL)
> >-                    ev = queue_deq_wait_time(queue, ns);
> >-            else
> >-                    ev  = odp_schedule(NULL, wait);
> >-
> >-            if (ev != ODP_EVENT_INVALID) {
> >-                    if (odp_event_type(ev) == ODP_EVENT_PACKET) {
> >-                            pkt = odp_packet_from_event(ev);
> >-                            if (pktio_pkt_seq(pkt) == seq)
> >-                                    return pkt;
> >+            pkt = ODP_PACKET_INVALID;
> >+
> setting to invalid.
> >+            if (pktio_rx->in_mode == ODP_PKTIN_MODE_RECV) {
> >+                    odp_pktio_recv(pktio_rx->id, &pkt, 1);
> issue recv
> >+            } else {
> >+                    if (pktio_rx->in_mode == ODP_PKTIN_MODE_POLL)
> >+                            ev = queue_deq_wait_time(pktio_rx->inq, ns);
> >+                    else
> >+                            ev = odp_schedule(NULL, wait);
> >+
> >+                    if (ev != ODP_EVENT_INVALID) {
> >+                            if (odp_event_type(ev) == ODP_EVENT_PACKET)
> >+                                    pkt = odp_packet_from_event(ev);
> >+                            else
> >+                                    odp_event_free(ev);
> >                     }
> >+            }
> >-                    /* not interested in this event */
> >-                    odp_event_free(ev);
> >+            if (pkt != ODP_PACKET_INVALID) {
> 
> and that check for invalid.
> 
> In my understanding recv() can return -1 and in the same time it can
> corrupt buffer memory or already set it to some valid packet value.
> In case with direct recv() it's better to relay on return code then
> on memory buffer (&pkt).
> 
> Maxim.

I agree, should be checking the return value, I'll change it.

-- 
Stuart.
_______________________________________________
lng-odp mailing list
[email protected]
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to