Re: AF_XDP socket (sock2) unable to read, after writing with another AF_XDP socket (sock1)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
> >
>




[Index of Archives]     [Linux Networking Development]     [Fedora Linux Users]     [Linux SCTP]     [DCCP]     [Gimp]     [Yosemite Campsites]

  Powered by Linux