X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fport%2Frte_swx_port_source_sink.c;h=93c346cfb168818052ed77103f0b4c67d4ac00c5;hb=ea0d681efa86cb8902d93409679e3ac507755345;hp=4180cba1c5c27edaff8adaa325951575963fb30a;hpb=99a2dd955fba6e4cc23b77d590a033650ced9c45;p=dpdk.git diff --git a/lib/port/rte_swx_port_source_sink.c b/lib/port/rte_swx_port_source_sink.c index 4180cba1c5..93c346cfb1 100644 --- a/lib/port/rte_swx_port_source_sink.c +++ b/lib/port/rte_swx_port_source_sink.c @@ -39,6 +39,7 @@ do { \ struct source { struct { struct rte_mempool *pool; + uint64_t n_loops; } params; struct rte_swx_port_in_stats stats; struct rte_mbuf **pkts; @@ -96,6 +97,8 @@ source_create(void *args) /* Initialization. */ p->params.pool = params->pool; + p->params.n_loops = params->n_loops ? params->n_loops : UINT64_MAX; + /* PCAP file. */ for (i = 0; i < n_pkts_max; i++) { struct pcap_pkthdr pcap_pkthdr; @@ -142,6 +145,8 @@ source_pkt_rx(void *port, struct rte_swx_pkt *pkt) struct rte_mbuf *m_dst, *m_src; uint8_t *m_dst_data, *m_src_data; + if (!p->params.n_loops) + return 0; /* m_src identification. */ m_src = p->pkts[p->pos]; m_src_data = rte_pktmbuf_mtod(m_src, uint8_t *); @@ -177,8 +182,10 @@ source_pkt_rx(void *port, struct rte_swx_pkt *pkt) /* m_src next. */ p->pos++; - if (p->pos == p->n_pkts) + if (p->pos == p->n_pkts) { p->pos = 0; + p->params.n_loops--; + } return 1; }