Thank you! On 2014-9-4, at 17:48, Luigi Rizzo <ri...@iet.unipi.it> wrote:
> On Thu, Sep 04, 2014 at 11:58:28AM +0000, Eggert, Lars wrote: >> Hi Luigi, >> >> I'm allocating extra rings and/or extra buffers via the nr_arg1/nr_arg3 >> parameters for NIOCREGIF. >> >> Once I've done that, how do I actually access those rings and buffers? >> >> For extra rings, the documentation and example code don't really say >> anything. >> >> For extra buffers, the documentation says "nifp->ni_bufs_head will be the >> index of the first buffer" but doesn't really explain how I can find the >> buffer given its index (since it's not in a ring, the NETMAP_BUF macro >> doesn't seem to apply?) The part about "buffers are linked to each other >> using the first uint32_t as the index" is also unclear to me. >> >> Do you have some more text or example code that shows how to use extra rings >> and buffers? > > the ifield to request extra rings is only important when you want > to make sure that the memory region for a VALE port has also > space to host some pipes. Otherwise, for physical ports (which at > the moment all share the same address space) there is not a real > need to specify it. > > For the extra buffers, remember that NETMAP_BUF() can translate > buffer indexes for any netmap buffer, even those not in a ring. > All it does is grab the base address of the buffer pool from the > ring, and add the buffer index times the buffer size. > > So you can navigate the pool of extra buffers as follows > > uint32_t x = nifp->ni_bufs_head; // index of first buf > > void *p = NETMAP_BUF(any_ring, x); // address of the first buffer > > x = *((uint32_t *)p); // index of the next buffer > > cheers > luigi
signature.asc
Description: Message signed with OpenPGP using GPGMail