[dpdk-dev] DPDK Port Mirroring
On Fri, Jul 10, 2015 at 02:21:08PM +, Assaad, Sami (Sami) wrote: > Now; what if we are to encapsulate the packet within a tunnel; such as GRE, > prior to sending it out to a mirrored-port ... Must the packet be copied into > a new buffer or can we use a DPDK primitive that is more efficient? > > Sami. You don't necessarily need to copy the whole packet, since mbufs can be created that point to other mbufs. Two ways of doing this, assuming the original packet is unmodified. You can create a chain of mbufs where the first mbuf contains the extra headers, and then its "next" pointer points to the original mbuf (Updating the reference count while it's doing so). Second, there is the mbuf attach function (which will update the refcnt for you) where you end up with a second mbuf where the data area belongs to the first. Then you can use prepend on the second mbuf to stick the extra headers on the front of the packet, while leaving the original mbuf pointing beyond those headers still. Either of these, or some varient thereof should work for you. If you do need to modify the shared headers between the two ports, some data copying of the headers may be necessary, but you should never really need to copy the entire packet. /Bruce > > > -Original Message- > > From: Bruce Richardson [mailto:bruce.richardson at intel.com] > > Sent: Friday, July 10, 2015 9:48 AM > > To: Sanford, Robert > > Cc: Matt Laswell; Wiles, Keith; dev at dpdk.org; Assaad, Sami (Sami) > > Subject: Re: [dpdk-dev] DPDK Port Mirroring > > > On Fri, Jul 10, 2015 at 01:46:21PM +, Sanford, Robert wrote: > > > Silly questions: Why use rte_pktmbuf_clone()? Assuming that one is not > > > going to modify the mbuf at all, why not just increment the reference > > > count with rte_mbuf_refcnt_update()? > > > > > Yep, that should work fine too. > > > > /Bruce > > > -- > > > Thanks, > > > Robert > > > > > > > > > >Keith speaks truth. If I were going to do what you're describing, I > > > >would do the following: > > > > > > > >1. Start with the l2fwd example application. > > > >2. Remove the part where it modifies the ethernet MAC address of > > > >received packets. > > > >3. Add a call in to clone mbufs via rte_pktmbuf_clone() and send the > > > >cloned packets out of the port of your choice > > > > > > > >As long as you don't need to modify the packets - and if you're > > > >mirroring, you shouldn't - simply cloning received packets and > > > >sending them out your mirror port should get you most of the way there. > > > > > > > >On Thu, Jul 9, 2015 at 3:17 PM, Wiles, Keith > > > >wrote: > > > > > > > >> > > > >> > > > >> On 7/9/15, 12:26 PM, "dev on behalf of Assaad, Sami (Sami)" > > > >> > > >> alcatel-lucent.com> > > > >>wrote: > > > >> > > > >> >Hello, > > > >> > > > > >> >I want to build a DPDK app that is able to port-mirror all ingress > > > >> >traffic from two 10G interfaces. > > > >> > > > > >> >1. Is it possible in port-mirroring traffic consisting of > > > >> >450byte > > > >> >packets at 20G without losing more than 5% of traffic? > > > >> > > > > >> >2. Would you have any performance results due to packet copying? > > > >> > > > >> Do you need to copy the packet if you increment the reference count > > > >> you can send the packet to both ports without having to copy the > > > >> packet. > > > >> > > > > >> >3. Would you have any port mirroring DPDK sample code? > > > >> > > > >> DPDK does not have port mirroring example, but you could grab the > > > >>l2fwd or l3fwd and modify it to do what you want. > > > >> > > > > >> >Thanks in advance. > > > >> > > > > >> >Best Regards, > > > >> >Sami Assaad. > > > >> > > > >> > > >
[dpdk-dev] DPDK Port Mirroring
On Fri, Jul 10, 2015 at 01:46:21PM +, Sanford, Robert wrote: > Silly questions: Why use rte_pktmbuf_clone()? Assuming that one is not > going to modify the mbuf at all, why not just increment the reference > count with rte_mbuf_refcnt_update()? > Yep, that should work fine too. /Bruce > -- > Thanks, > Robert > > > >Keith speaks truth. If I were going to do what you're describing, I would > >do the following: > > > >1. Start with the l2fwd example application. > >2. Remove the part where it modifies the ethernet MAC address of received > >packets. > >3. Add a call in to clone mbufs via rte_pktmbuf_clone() and send the > >cloned > >packets out of the port of your choice > > > >As long as you don't need to modify the packets - and if you're mirroring, > >you shouldn't - simply cloning received packets and sending them out your > >mirror port should get you most of the way there. > > > >On Thu, Jul 9, 2015 at 3:17 PM, Wiles, Keith > >wrote: > > > >> > >> > >> On 7/9/15, 12:26 PM, "dev on behalf of Assaad, Sami (Sami)" > >> > >>wrote: > >> > >> >Hello, > >> > > >> >I want to build a DPDK app that is able to port-mirror all ingress > >> >traffic from two 10G interfaces. > >> > > >> >1. Is it possible in port-mirroring traffic consisting of 450byte > >> >packets at 20G without losing more than 5% of traffic? > >> > > >> >2. Would you have any performance results due to packet copying? > >> > >> Do you need to copy the packet if you increment the reference count you > >> can send the packet to both ports without having to copy the packet. > >> > > >> >3. Would you have any port mirroring DPDK sample code? > >> > >> DPDK does not have port mirroring example, but you could grab the l2fwd > >>or > >> l3fwd and modify it to do what you want. > >> > > >> >Thanks in advance. > >> > > >> >Best Regards, > >> >Sami Assaad. > >> > >> >
[dpdk-dev] DPDK Port Mirroring
Now; what if we are to encapsulate the packet within a tunnel; such as GRE, prior to sending it out to a mirrored-port ... Must the packet be copied into a new buffer or can we use a DPDK primitive that is more efficient? Sami. > -Original Message- > From: Bruce Richardson [mailto:bruce.richardson at intel.com] > Sent: Friday, July 10, 2015 9:48 AM > To: Sanford, Robert > Cc: Matt Laswell; Wiles, Keith; dev at dpdk.org; Assaad, Sami (Sami) > Subject: Re: [dpdk-dev] DPDK Port Mirroring > On Fri, Jul 10, 2015 at 01:46:21PM +, Sanford, Robert wrote: > > Silly questions: Why use rte_pktmbuf_clone()? Assuming that one is not > > going to modify the mbuf at all, why not just increment the reference > > count with rte_mbuf_refcnt_update()? > > > Yep, that should work fine too. > > /Bruce > > -- > > Thanks, > > Robert > > > > > > >Keith speaks truth. If I were going to do what you're describing, I > > >would do the following: > > > > > >1. Start with the l2fwd example application. > > >2. Remove the part where it modifies the ethernet MAC address of > > >received packets. > > >3. Add a call in to clone mbufs via rte_pktmbuf_clone() and send the > > >cloned packets out of the port of your choice > > > > > >As long as you don't need to modify the packets - and if you're > > >mirroring, you shouldn't - simply cloning received packets and > > >sending them out your mirror port should get you most of the way there. > > > > > >On Thu, Jul 9, 2015 at 3:17 PM, Wiles, Keith > > >wrote: > > > > > >> > > >> > > >> On 7/9/15, 12:26 PM, "dev on behalf of Assaad, Sami (Sami)" > > >> > > >>wrote: > > >> > > >> >Hello, > > >> > > > >> >I want to build a DPDK app that is able to port-mirror all ingress > > >> >traffic from two 10G interfaces. > > >> > > > >> >1. Is it possible in port-mirroring traffic consisting of 450byte > > >> >packets at 20G without losing more than 5% of traffic? > > >> > > > >> >2. Would you have any performance results due to packet copying? > > >> > > >> Do you need to copy the packet if you increment the reference count > > >> you can send the packet to both ports without having to copy the packet. > > >> > > > >> >3. Would you have any port mirroring DPDK sample code? > > >> > > >> DPDK does not have port mirroring example, but you could grab the > > >>l2fwd or l3fwd and modify it to do what you want. > > >> > > > >> >Thanks in advance. > > >> > > > >> >Best Regards, > > >> >Sami Assaad. > > >> > > >> > >
[dpdk-dev] DPDK Port Mirroring
Silly questions: Why use rte_pktmbuf_clone()? Assuming that one is not going to modify the mbuf at all, why not just increment the reference count with rte_mbuf_refcnt_update()? -- Thanks, Robert >Keith speaks truth. If I were going to do what you're describing, I would >do the following: > >1. Start with the l2fwd example application. >2. Remove the part where it modifies the ethernet MAC address of received >packets. >3. Add a call in to clone mbufs via rte_pktmbuf_clone() and send the >cloned >packets out of the port of your choice > >As long as you don't need to modify the packets - and if you're mirroring, >you shouldn't - simply cloning received packets and sending them out your >mirror port should get you most of the way there. > >On Thu, Jul 9, 2015 at 3:17 PM, Wiles, Keith >wrote: > >> >> >> On 7/9/15, 12:26 PM, "dev on behalf of Assaad, Sami (Sami)" >> >>wrote: >> >> >Hello, >> > >> >I want to build a DPDK app that is able to port-mirror all ingress >> >traffic from two 10G interfaces. >> > >> >1. Is it possible in port-mirroring traffic consisting of 450byte >> >packets at 20G without losing more than 5% of traffic? >> > >> >2. Would you have any performance results due to packet copying? >> >> Do you need to copy the packet if you increment the reference count you >> can send the packet to both ports without having to copy the packet. >> > >> >3. Would you have any port mirroring DPDK sample code? >> >> DPDK does not have port mirroring example, but you could grab the l2fwd >>or >> l3fwd and modify it to do what you want. >> > >> >Thanks in advance. >> > >> >Best Regards, >> >Sami Assaad. >> >>
[dpdk-dev] DPDK Port Mirroring
Big Thanks! Sami. From: Matt Laswell [mailto:lasw...@infiniteio.com] Sent: Thursday, July 09, 2015 4:28 PM To: Wiles, Keith Cc: Assaad, Sami (Sami); dev at dpdk.org; Richardson, Bruce Subject: Re: [dpdk-dev] DPDK Port Mirroring Keith speaks truth. If I were going to do what you're describing, I would do the following: 1. Start with the l2fwd example application. 2. Remove the part where it modifies the ethernet MAC address of received packets. 3. Add a call in to clone mbufs via rte_pktmbuf_clone() and send the cloned packets out of the port of your choice As long as you don't need to modify the packets - and if you're mirroring, you shouldn't - simply cloning received packets and sending them out your mirror port should get you most of the way there. On Thu, Jul 9, 2015 at 3:17 PM, Wiles, Keith mailto:keith.wiles at intel.com>> wrote: On 7/9/15, 12:26 PM, "dev on behalf of Assaad, Sami (Sami)" mailto:dev-bounces at dpdk.org> on behalf of sami.assaad at alcatel-lucent.com<mailto:sami.assaad at alcatel-lucent.com>> wrote: >Hello, > >I want to build a DPDK app that is able to port-mirror all ingress >traffic from two 10G interfaces. > >1. Is it possible in port-mirroring traffic consisting of 450byte >packets at 20G without losing more than 5% of traffic? > >2. Would you have any performance results due to packet copying? Do you need to copy the packet if you increment the reference count you can send the packet to both ports without having to copy the packet. > >3. Would you have any port mirroring DPDK sample code? DPDK does not have port mirroring example, but you could grab the l2fwd or l3fwd and modify it to do what you want. > >Thanks in advance. > >Best Regards, >Sami Assaad.
[dpdk-dev] DPDK Port Mirroring
On 7/9/15, 12:26 PM, "dev on behalf of Assaad, Sami (Sami)" wrote: >Hello, > >I want to build a DPDK app that is able to port-mirror all ingress >traffic from two 10G interfaces. > >1. Is it possible in port-mirroring traffic consisting of 450byte >packets at 20G without losing more than 5% of traffic? > >2. Would you have any performance results due to packet copying? Do you need to copy the packet if you increment the reference count you can send the packet to both ports without having to copy the packet. > >3. Would you have any port mirroring DPDK sample code? DPDK does not have port mirroring example, but you could grab the l2fwd or l3fwd and modify it to do what you want. > >Thanks in advance. > >Best Regards, >Sami Assaad.
[dpdk-dev] DPDK Port Mirroring
Hello, I want to build a DPDK app that is able to port-mirror all ingress traffic from two 10G interfaces. 1. Is it possible in port-mirroring traffic consisting of 450byte packets at 20G without losing more than 5% of traffic? 2. Would you have any performance results due to packet copying? 3. Would you have any port mirroring DPDK sample code? Thanks in advance. Best Regards, Sami Assaad.
[dpdk-dev] DPDK Port Mirroring
Keith speaks truth. If I were going to do what you're describing, I would do the following: 1. Start with the l2fwd example application. 2. Remove the part where it modifies the ethernet MAC address of received packets. 3. Add a call in to clone mbufs via rte_pktmbuf_clone() and send the cloned packets out of the port of your choice As long as you don't need to modify the packets - and if you're mirroring, you shouldn't - simply cloning received packets and sending them out your mirror port should get you most of the way there. On Thu, Jul 9, 2015 at 3:17 PM, Wiles, Keith wrote: > > > On 7/9/15, 12:26 PM, "dev on behalf of Assaad, Sami (Sami)" > > wrote: > > >Hello, > > > >I want to build a DPDK app that is able to port-mirror all ingress > >traffic from two 10G interfaces. > > > >1. Is it possible in port-mirroring traffic consisting of 450byte > >packets at 20G without losing more than 5% of traffic? > > > >2. Would you have any performance results due to packet copying? > > Do you need to copy the packet if you increment the reference count you > can send the packet to both ports without having to copy the packet. > > > >3. Would you have any port mirroring DPDK sample code? > > DPDK does not have port mirroring example, but you could grab the l2fwd or > l3fwd and modify it to do what you want. > > > >Thanks in advance. > > > >Best Regards, > >Sami Assaad. > >