On 2022/5/23 下午9:32, Willem de Bruijn wrote:
On Mon, May 23, 2022 at 5:25 AM Yun Lu luyun_611@163.com wrote:
On 2022/5/20 下午9:52, Willem de Bruijn wrote:
On Fri, May 20, 2022 at 2:40 AM Yun Lu luyun_611@163.com wrote:
From: luyun luyun@kylinos.cn
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.
I am looking forward to your better advice on this problem.