Hi BL,
> -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: Monday, October 30, 2017 11:09 AM > To: [email protected] > Cc: Dumitrescu, Cristian <[email protected]> > 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 > [1] 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 my 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 out to 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 SWQs. > > I have a couple of questions: > First, according to the doc [2], 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() [3], with all the > mask thingy. Any pointers would be highly appreciated! > > Regards, > BL > > [1] http://dpdk.org/ml/archives/dev/2015-July/021293.html > [2] > http://dpdk.org/doc/guides/prog_guide/packet_framework.html#connectiv > ity-of- > ports-and-tables > [3] > http://dpdk.org/browse/dpdk/tree/lib/librte_pipeline/rte_pipeline.c?h=v17 > .11 > -rc2#n1344 > > Regards, Cristian
