On Tue, May 24, 2022 at 6:04 AM Yun Lu <luyun_611@xxxxxxx> wrote: > > On 2022/5/23 下午9:32, Willem de Bruijn wrote: > > > On Mon, May 23, 2022 at 5:25 AM Yun Lu <luyun_611@xxxxxxx> wrote: > >> On 2022/5/20 下午9:52, Willem de Bruijn wrote: > >> > >>> On Fri, May 20, 2022 at 2:40 AM Yun Lu <luyun_611@xxxxxxx> wrote: > >>>> From: luyun <luyun@xxxxxxxxxx> > >>>> > >>>> The psock_snd test sends and recievs packets over loopback, but the > >>>> parameter lo.accept_local is disabled by default, this test will > >>>> fail with Resource temporarily unavailable: > >>>> sudo ./psock_snd.sh > >>>> dgram > >>>> tx: 128 > >>>> rx: 142 > >>>> ./psock_snd: recv: Resource temporarily unavailable > >>> I cannot reproduce this failure. > >>> > >>> Passes on a machine with accept_local 0. > >>> > >>> accept_local is defined as > >>> > >>> " > >>> accept_local - BOOLEAN > >>> Accept packets with local source addresses. In combination > >>> with suitable routing, this can be used to direct packets > >>> between two local interfaces over the wire and have them > >>> accepted properly. > >>> " > >> I did this test on my system(Centos 8.3 X86_64): > >> > >> [root@localhost net]# sysctl net.ipv4.conf.lo.accept_local > >> net.ipv4.conf.lo.accept_local = 0 > >> [root@localhost net]# ./psock_snd -d > >> tx: 128 > >> rx: 142 > >> ./psock_snd: recv: Resource temporarily unavailable > >> [root@localhost net]# sysctl -w net.ipv4.conf.lo.accept_local=1 > >> net.ipv4.conf.lo.accept_local = 1 > >> [root@localhost net]# ./psock_snd -d > >> tx: 128 > >> rx: 142 > >> rx: 100 > >> OK > >> > >> This failure does seem to be related to accept_local. > >> > >> Also, it's reported on Ubuntu: > >> https://bugs.launchpad.net/ubuntu-kernel-tests/+bug/1812618 > > That is an old kernel, 4.18 derived. > > > > I simply am unable to reproduce this on an upstream v4.18 or v5.18. > > Likely something with either the distro kernel release, or another > > distro feature that interacts with this. Can you try v5.18 or another > > clean upstream kernel? > > > > Else it requires instrumenting IN_DEV_ACCEPT_LOCAL tests to understand > > where this sysctl makes a meaningful change for you when running this > > test. > > I found another parameter rp_filter which interacts with this test: > > Set rp_filter = 0, the psock_snd test OK. > > Or set rp_filter = 1 and accept_local=1, the psock_snd test OK. > > I get the same test results on kernel v5.10 or v5.15. Analysis from > source code, this two parameters > > will change the result of fib_validate_source when running this test. > For most distro kernel releases, > > rp_filter is enabled by default, so this test will fail when > accept_local is kept to be zero. That explains. Since this test runs inside a netns, changing a sysctl is fine. Can you resubmit with a more detailed description now that the exact check is more clear, as well as interplay with rp_filter, and the default config of these two parameters configured by distros? Thanks. Please double check typos (s/recievs/receives).