[dpdk-users] IP PIPELINE tap device
cristian.dumitrescu at intel.com
Wed Nov 1 19:11:36 CET 2017
> -----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
> 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 my IP pipeline application.
> As I understand here's what I must provide in order to make my
> 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 , 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!
>  http://dpdk.org/ml/archives/dev/2015-July/021293.html
More information about the users