[dpdk-users] IP PIPELINE tap device
longtb5 at viettel.com.vn
longtb5 at viettel.com.vn
Thu Nov 2 04:47:01 CET 2017
Thanks for the reply. I have some follow up questions:
First, I had tried rte_pipeline_port_out_packet_insert() before you pointed
it out to me that I needed to rte_pipeline_ah_packet_hijack() first (which
didn't work, should have read the API more carefully, my bad). From the
source code it looks like hijack() simply reset the pkts_mask to 0. But
inside port_out_packet_insert(), I didn't see any manipulation involving
pkts_mask; it called port_out->ops.f_tx() directly. In my case the tx
function is rte_port_ethdev_writer_tx(), which I'm assuming would perform
packet tx. In short, why would I need to hijack() first, if all I'm doing is
sending packet out right after rx without letting the packet reach the table
(we're still inside port_in_action_handler)?
My second question, how do I change the dst mac address of each packet?
Currently I'm using rte_pktmbuf_mtod() following the l2fwd sample app. The
function seems to work correctly but my pktgen couldn't capture any output
packet from pipeline_tap.
Thanks and best regards,
> -----Original Message-----
> From: cristian.dumitrescu at intel.com [mailto:cristian.dumitrescu at intel.com]
> Sent: Thursday, November 2, 2017 1:12 AM
> To: longtb5 at viettel.com.vn; users at dpdk.org
> Subject: RE: IP PIPELINE tap device
> Hi BL,
> > -----Original Message-----
> > From: longtb5 at viettel.com.vn [mailto:longtb5 at viettel.com.vn]
> > Sent: Monday, October 30, 2017 11:09 AM
> > To: users at dpdk.org
> > Cc: Dumitrescu, Cristian <cristian.dumitrescu at intel.com>
> > Subject: IP PIPELINE tap device
> > Hi,
> > I'm writing a new pipeline type called pipeline_tap, which has one
> > input and two outputs. The outputs are simply duplications of the
> > input, so basically like a l2fwd but with two outputs. There has
> > already been great suggestions  on the mailing list to use the
> > l2fwd sample app as a starting point, but I want to implement this
> > using IP pipeline/packet framework as I would like to use this device in
> IP pipeline application.
> > As I understand here's what I must provide in order to make my
> > pipeline_tap:
> > an input port, at least one table, and two output ports.
> Well, you have multiple options, depending on how statefull/stateless your
> tap/probe/mirror device is.
> What do you want to mirror?
> (A) all input traffic
> (B) just some packet types or pkts meeting a certain condition
> (B) or just some selected flows (C)
> Options (A) and (B) could be implemented without any internal table, while
> (C) most likely needs a table to be managed.
> One solution could be to create a "mirror"pipeline that does a sort of
> broadcast: assuming N output ports, the input packet is:
> 1. Removed from the pipeline using rte_pipeline_hijack() API function 2.
> Clone every input packet is cloned (N-1) times 3. All N packets are sent
> an output port using rte_pipeline_port_out_packet_insert()
> See pipeline_passthrough_be.c as example.
> Another solution could be to create a "mirror" device similar to single
> producer multiple consumer queues that clones each input packet to N
> > I have a couple of questions:
> > First, according to the doc , my input port can only be connected
> > to one table. Moreover, a packet coming from my input port can only
> > hit one table entry. However it's not clear whether that one table
> > entry can be connected to TWO output ports.
> > Second, I'm having trouble understanding the implementation for table
> > user actions and table reserved actions in rte_pipeline_run() ,
> > with all the mask thingy. Any pointers would be highly appreciated!
> > Regards,
> > BL
> >  http://dpdk.org/ml/archives/dev/2015-July/021293.html
> > 
> > ity-of-
> > ports-and-tables
> > 
> > http://dpdk.org/browse/dpdk/tree/lib/librte_pipeline/rte_pipeline.c?h=
> > v17
> > .11
> > -rc2#n1344
More information about the users