Hi Michael no, your buffer will not be overwritten, you can keep your buffer for a long period of time, provided that you have enough empty buffers to pass to recv_pkt(). When you call recv_pkt(&X), you are replacing the received buffer (let’s call it A) with the fresh buffer pointed by X (let’s call it B), thus your X pointer now points to A and the card will put the next packet (+ ring size) to B.
X = pfring_zc_get_packet_handle() <- X points to buffer B (fresh) pfring_zc_recv_pkt(queue, &X, 1); <- X points to buffer A (received) Alfredo > On 19 Jan 2015, at 13:58, Michael Nicolazzo <[email protected]> wrote: > > Hi Alfredo, > > Alfredo, > > Thanks for the quick response. The example you give is what I am writing > about. If I understand this correctly, what I am reusing is actually the > buffer handle that contains a pointer to the data. So assuming the ring is > continuous memory, what is actually passed in the handle (to avoid a copy) is > a pointer to the location in the ring where the data actually is. Every time > I call pfring_zc_recv, I get a different pointer into the ring even if I pass > the same buffer handle. Is this correct? That would mean that if I save a > buffer for later use, I would need to process it before the ring comes around > again and fills the location I’m pointing to. So that is actually the > question I am asking - if I intend to keep a buffer for a reasonably long > period of time, do I need to copy it somewhere? > > Michael > > >> On Jan 19, 2015, at 5:02 AM, Alfredo Cardigliano <[email protected]> >> wrote: >> >> Hi Michael >> what do you mean with “buffers are never returned”? could you provide an >> example? >> Usually the flow is: >> X = pfring_zc_get_packet_handle() >> pfring_zc_recv_pkt(queue, &X, 1); >> Then you can 1. process and reuse X for the next recv_pkt() call, or 2. if >> you want to >> hold X for late processing, you can allocate another buffer (provided that >> you have >> preallocated enough at cluster creation time). >> >> Alfredo >> >>> On 19 Jan 2015, at 05:10, Michael Nicolazzo <[email protected]> wrote: >>> >>> Hi, >>> >>> I am looking for some information and advice on how to manage buffers in >>> PF_RING ZC. I noticed that in the examples, the buffers are never returned. >>> Is this normally how they should be managed? If I need to pass a buffer to >>> a thread that wishes to hold onto it and deal with it later, how should >>> that be done? >>> >>> Regards, >>> >>> Michael Nicolazzo >>> >>> _______________________________________________ >>> Ntop-misc mailing list >>> [email protected] >>> http://listgateway.unipi.it/mailman/listinfo/ntop-misc >> >> _______________________________________________ >> Ntop-misc mailing list >> [email protected] >> http://listgateway.unipi.it/mailman/listinfo/ntop-misc > > _______________________________________________ > Ntop-misc mailing list > [email protected] > http://listgateway.unipi.it/mailman/listinfo/ntop-misc
signature.asc
Description: Message signed with OpenPGP using GPGMail
_______________________________________________ Ntop-misc mailing list [email protected] http://listgateway.unipi.it/mailman/listinfo/ntop-misc
