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
