On Thu, Aug 12, 2021 at 9:46 AM Kuniyuki Iwashima <kuniyu@xxxxxxxxxxxx> wrote: > > The iterator can output almost the same result compared to /proc/net/unix. > The header line is aligned, and the Inode column uses "%8lu" because "%5lu" > can be easily overflown. > > # cat /sys/fs/bpf/unix > Num RefCount Protocol Flags Type St Inode Path It's totally my OCD, but why the column name is not aligned with values? I mean the "Inode" column. It's left aligned, but values (numbers) are right-aligned? I'd fix that while applying, but I can't apply due to selftests failures, so please take a look. > ffff963c06689800: 00000002 00000000 00010000 0001 01 18697 private/defer > ffff963c7c979c00: 00000002 00000000 00000000 0001 01 598245 @Hello@World@ > > # cat /proc/net/unix > Num RefCount Protocol Flags Type St Inode Path > ffff963c06689800: 00000002 00000000 00010000 0001 01 18697 private/defer > ffff963c7c979c00: 00000002 00000000 00000000 0001 01 598245 @Hello@World@ > > Note that this prog requires the patch ([0]) for LLVM code gen. Thanks to > Yonghong Song for analysing and fixing. > > [0] https://reviews.llvm.org/D107483 > > Signed-off-by: Kuniyuki Iwashima <kuniyu@xxxxxxxxxxxx> > Acked-by: Yonghong Song <yhs@xxxxxx> > --- This selftests breaks test_progs-no_alu32 ([0], the error log is super long and can freeze browser; it looks like an infinite loop and BPF verifier just keeps reporting it until it runs out of 1mln instructions or something). Please check what's going on there, I can't land it as it is right now. [0] https://github.com/kernel-patches/bpf/runs/3326071112?check_suite_focus=true#step:6:124288 > tools/testing/selftests/bpf/README.rst | 38 +++++++++ > .../selftests/bpf/prog_tests/bpf_iter.c | 16 ++++ > tools/testing/selftests/bpf/progs/bpf_iter.h | 8 ++ > .../selftests/bpf/progs/bpf_iter_unix.c | 77 +++++++++++++++++++ > .../selftests/bpf/progs/bpf_tracing_net.h | 4 + > 5 files changed, 143 insertions(+) > create mode 100644 tools/testing/selftests/bpf/progs/bpf_iter_unix.c > [...] > + /* The name of the abstract UNIX domain socket starts > + * with '\0' and can contain '\0'. The null bytes > + * should be escaped as done in unix_seq_show(). > + */ > + int i, len; > + no_alu32 variant probably isn't happy about using int for this, it probably does << 32, >> 32 dance and loses track of actual value in the loop. You can try using u64 instead. > + len = unix_sk->addr->len - sizeof(short); > + > + BPF_SEQ_PRINTF(seq, " @"); > + > + /* unix_mkname() tests this upper bound. */ > + if (len < sizeof(struct sockaddr_un)) > + for (i = 1; i < len; i++) if you move above if inside the loop to break out of the loop, does it change how Clang generates code? for (i = 1; i < len i++) { if (i >= sizeof(struct sockaddr_un)) break; BPF_SEQ_PRINTF(...); } > + BPF_SEQ_PRINTF(seq, "%c", > + unix_sk->addr->name->sun_path[i] ?: > + '@'); > + } > + } > + > + BPF_SEQ_PRINTF(seq, "\n"); > + > + return 0; > +} > diff --git a/tools/testing/selftests/bpf/progs/bpf_tracing_net.h b/tools/testing/selftests/bpf/progs/bpf_tracing_net.h > index 3af0998a0623..eef5646ddb19 100644 > --- a/tools/testing/selftests/bpf/progs/bpf_tracing_net.h > +++ b/tools/testing/selftests/bpf/progs/bpf_tracing_net.h > @@ -5,6 +5,10 @@ > #define AF_INET 2 > #define AF_INET6 10 > > +#define __SO_ACCEPTCON (1 << 16) > +#define UNIX_HASH_SIZE 256 > +#define UNIX_ABSTRACT(unix_sk) (unix_sk->addr->hash < UNIX_HASH_SIZE) > + > #define SOL_TCP 6 > #define TCP_CONGESTION 13 > #define TCP_CA_NAME_MAX 16 > -- > 2.30.2 >