Den tors 8 nov. 2018 kl 16:15 skrev Konrad Djimeli <kdjimeli@xxxxxxxxxx>: > [...] > > In terms of correctness: > > > > In 3. you pass the same UMEM indicies to the Tx ring (ids={0, > > FRAME_SIZE, 2*FRAME_SIZE, ...}), as you have passed to the fill > > ring. This is not correct. Userspace to track what ids are owned by > > the user and by the kernel. Now, both the fill ring and Tx ring > > contain the same id. > Please I have been looking into this for some days now, but I have not > been able to understand what you where referring to and how to fix it. > Ok, let's talk about the basics, and hopefully it will clear up. The indicies/ids into the UMEM are used to point out packet buffers. The Rx/Tx/Completion/Fill rings are used to pass ownership between the kernel and the user application. E.g. if fill id X with data and pass that to the kernel for transmission, the application has passed ownership of buffer X to the kernel. The application cannot (well, shouldn't) touch the buffer pointed out by X until the kernel is done with the buffer -- in other words, when the buffer is passed back to the application via the completion ring. Analogous, when you pass id Y to the fill ring, Y is owned by the kernel. The application cannot (again, shouldn't) touch the data pointed out by Y until ownership is passed back to the application via the Rx ring. What you did in your old code (I haven't looked at your updates!) is that you passed X, Y and Z to the fill ring. And then, prior obtaining ownership of the buffers, you passed X, Y and Z to the Tx ring. > I also updated the xdp program bpf_redirect_map index to write to the > second socket (sock2) but I can not observe the reading working when I > use any other networking interface except for the 'lo' interface. I > would like to inquire if it may have something to do with the code. > - https://github.com/djkonro/afxdp/blob/master/xdpsock/xdpsock_kern.c > - https://github.com/djkonro/afxdp/blob/master/xdpsock/xdpsock_user.c > If you rely on that all sent packets out to a certain interface should be hairpinned back to same interface, you need to set that up in your switching plane. Or continue to use the loopback interface as you do(?). Björn > Thanks > Konrad > > > > > I'm not sure what the expected output of your program should be? Have > > you verified that packets are being sent? Is the inferface/queue 0 > > receiving packets? > > > > I think it would help if you explained what you are trying to do > > first! > > > > What XDP program are you running? > > > > > > Cheers, > > Björn > > > > > > > > * > > > >> Thanks, > >> Konrad > >> www.djimeli.me