Den fre 2 nov. 2018 kl 17:08 skrev Konrad Djimeli <kdjimeli@xxxxxxxxxx>: > > On 2018-11-01 19:49, Björn Töpel wrote: > > Den tors 1 nov. 2018 kl 18:14 skrev Konrad Djimeli <kdjimeli@xxxxxxxxxx>: > >> > >> Hello, > >> > >> I am working on developing a Snabb Switch app which uses Af_XDP sockets > >> and so far I have not found any AF_XDP sample example online, except for > >> the sample in the Linux Kernel source. I have tried modifying the > >> example, to create two sockets (sock1 and sock2) sharing a UMEM with > >> custom write_sock and read_sock functions. But when I do a write with > >> "sock1" I am unable to read the data with "sock2". Here is the code > >> https://github.com/djkonro/afxdp/blob/master/xdpsock/xdpsock_user.c , > >> and I am new to working with AF_XDP sockets and I wish I could get some > >> pointers to what may be wrong with the program. > >> > > > > Hi Konrad, > > > > Let's recap what your application does: > > > > 1. Create two AF_XDP sockets bound to ifindex and a shared UMEM. > > 2. The pass NUM_DESCS descriptors to the UMEM fill ring > > 3. In write_sock BATCH_SIZE packets are put on the Tx ring. > > 4. In read_sock up to BATCH_SIZE packets are picked from the Rx ring. > > 5. The application exits. > > > > 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. > > Hello Björn, > > Thanks for taking time to go through the program in detail and providing > feedback. > > > > > 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? > > Since I am calling the hex_dump(...) function within the write_sock and > read_sock function, I expect to see a printout of the packet that is > written and read when I call the functions. > > I think the packet is actually sent because when I call the read with > the same socket that I used for the write "write_sock(sock1, data, > len);read_sock(sock1);", I get the example output below. > How is you networking set up? Everything you send out, is ping-ponged back to the same interface? Then yes. :-) " > Writing = 1485946880 > length = 42 > addr=0 | 01 01 01 01 01 01 04 01 03 02 12 5D 08 06 00 01 08 00 06 04 00 > 01 36 15 FD 2A EE A3 C0 A8 08 64 | ...........]..........6.�*����.d > addr=0 | 00 00 00 00 00 00 D8 3A D4 64 __ __ __ __ __ __ __ __ __ __ __ > __ __ __ __ __ __ __ __ __ __ __ | ......�:�d > > Reading = 1485946880 > length = 42 > addr=0 | 01 01 01 01 01 01 04 01 03 02 12 5D 08 06 00 01 08 00 06 04 00 > 01 36 15 FD 2A EE A3 C0 A8 08 64 | ...........]..........6.�*����.d > addr=0 | 00 00 00 00 00 00 D8 3A D4 64 __ __ __ __ __ __ __ __ __ __ __ > __ __ __ __ __ __ __ __ __ __ __ | ......�:�d > " > > But when I use one socket for the write and the other socket for the > read "write_sock(sock1, data, len);read_sock(sock2);", I don't get any > output for the read call as seen in the example output below. > " > Writing = 1417486336 > length = 42 > addr=0 | 01 01 01 01 01 01 04 01 03 02 12 5D 08 06 00 01 08 00 06 04 00 > 01 36 15 FD 2A EE A3 C0 A8 08 64 | ...........]..........6.�*����.d > addr=0 | 00 00 00 00 00 00 D8 3A D4 64 __ __ __ __ __ __ __ __ __ __ __ > __ __ __ __ __ __ __ __ __ __ __ | ......�:�d > " > Your XDP program only redirects packets to the first AF_XDP socket, according to: https://github.com/djkonro/afxdp/blob/master/xdpsock/xdpsock_kern.c#L33 and onward, so this would be excepted. > > > > I think it would help if you explained what you are trying to do > > first! > > I am just trying to test and understand how to send packets using an > AF_XDP socket and to receive the packets using an another AF_XDP socket. > OK! Cheers, Björn > > > > What XDP program are you running? > > > > The XDP program can be found > https://github.com/djkonro/afxdp/blob/master/xdpsock/xdpsock_kern.c > > > Thanks > Konrad > > > > > > Cheers, > > Björn > > >