xsk_fwd.c usage
Ferenc Fejes <[email protected]>
| Newsgroups | org.kernel.vger.xdp-newbies |
|---|---|
| Message-ID | <CAAej5NbWT3zMxTQ-UbOAOVP6Zoyk-w=Pg9B+nFCU9SKziXRPJQ@mail.gmail.com> |
Hi!
I wanted to try out the xsk_fwd.c [0] sample with Mininet. This sample
is capable of forwarding between network interfaces with AF_XDP. My
topology is very simple:
host1 <-----> switch <-----> host2
sudo mn --switch=lxbr
I started the xsk_fwd to forward between the two veth interface of the switch:
sudo ./xsk_fwd -i s1-eth1 -q0 -i s1-eth2 -q0 -c 0
This is failed with EOPNOTSUPP error first. Then I looked into the
xsk_bind function and soon after I found this (at there [1]):
if (force_copy)
/* For copy-mode, we are done. */
return 0;
if (!netdev->netdev_ops->ndo_bpf ||
!netdev->netdev_ops->ndo_xsk_wakeup) {
err = -EOPNOTSUPP;
goto err_unreg_pool;
}
After that just like the code said, I removed the XDP_ZEROCOPY from
the bind flags [2] at the xsk_fwd.c which solved the problem and the
program started successfully, but without any traffic between host1
and host2.
My main question: removing XDP_ZEROCOPY requires any semantical
modification in the forwarding code? For example I should have to
memcopy the xdp buffer manually? Or the kernel do the copy
automatically and I have to look for the problem elsewhere? I have
5.10.5 kernel version which supports shared UMEMs.
[0] https://elixir.bootlin.com/linux/v5.11-rc3/source/samples/bpf/xsk_fwd.c
[1] https://elixir.bootlin.com/linux/v5.10.5/source/net/xdp/xsk_buff_pool.c#L158
[2] https://elixir.bootlin.com/linux/v5.11-rc3/source/samples/bpf/xsk_fwd.c#L732
Thanks for the help!
Ferenc