From: David Ahern Date: Tue, 27 Feb 2024 04:08:34 +0000 (+0000) Subject: Merge branch 'ss-socket-local-storage' into next X-Git-Tag: v6.9.0~32^2~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c05edd3eceee354f0a2fca7c90f72971a0daccf;p=thirdparty%2Fiproute2.git Merge branch 'ss-socket-local-storage' into next Quentin Deslandes says: ==================== BPF allows programs to store socket-specific data using BPF_MAP_TYPE_SK_STORAGE maps. The data is attached to the socket itself, and Martin added INET_DIAG_REQ_SK_BPF_STORAGES, so it can be fetched using the INET_DIAG mechanism. Currently, ss doesn't request the socket-local data, this patch aims to fix this. The first patch requests the socket-local data for the requested map ID (--bpf-map-id=) or all the maps (--bpf-maps). It then prints the map_id in COL_EXT. Patch #2 uses libbpf and BTF to pretty print the map's content, like `bpftool map dump` would do. Patch #3 updates ss' man page to explain new options. While I think it makes sense for ss to provide the socket-local storage content for the sockets, it's difficult to conciliate the column-based output of ss and having readable socket-local data. Hence, the socket-local data is printed in a readable fashion over multiple lines under its socket statistics, independently of the column-based approach. Here is an example of ss' output with --bpf-maps: [...] ESTAB 340116 0 [...] map_id: 114 [ (struct my_sk_storage){ .field_hh = (char)3, (union){ .a = (int)17, .b = (int)17, }, } ] Changed this series to an RFC as the merging window for net-next is closed. Changes from v8: * Remove usage of libbpf_bpf_map_type_str() which requires libbpf-1.0+ and provide very little added value (David). * Use ENABLE_BPF_SKSTORAGE_SUPPORT to gate the BPF socket-local storage support, instead of HAVE_LIBBPF. iproute2 depends on libbpf-0.1, but this change needs libbpf-0.5+. If the requirements are not met, ss can still be compiled and used without BPF socket-local storage support, but a warning will be printed at compile time. Changes from v7: * Fix comment format and checkpatch warnings (Stephen, David). * Replaced Co-authored-by with Co-developed-by + Signed-off-by for Martin's contribution on patch #1 to follow checkpatch requirements, with Martin's approval. Changes from v6: * Remove column dedicated to BPF socket-local storage (COL_SKSTOR), use COL_EXT instead (Matthieu). Changes from v5: * Add support for --oneline when printing socket-local data. * Use \t to indent instead of " " to be consistent with other columns. * Removed Martin's ack on patch #2 due to amount of lines changed. Changes from v4: * Fix return code for 2 calls. * Fix issue when inet_show_netlink() retries a request. * BPF dump object is created in bpf_map_opts_load_info(). Changes from v3: * Minor refactoring to reduce number of HAVE_LIBBF usage. * Update ss' man page. * btf_dump structure created to print the socket-local data is cached in bpf_map_opts. Creation of the btf_dump structure is performed if needed, before printing the data. * If a map can't be pretty-printed, print its ID and a message instead of skipping it. * If show_all=true, send an empty message to the kernel to retrieve all the maps (as Martin suggested). Changes from v2: * bpf_map_opts_is_enabled is not inline anymore. * Add more #ifdef HAVE_LIBBPF to prevent compilation error if libbpf support is disabled. * Fix erroneous usage of args instead of _args in vout(). * Add missing btf__free() and close(fd). Changes from v1: * Remove the first patch from the series (fix) and submit it separately. * Remove double allocation of struct rtattr. * Close BPF map FDs on exit. * If bpf_map_get_fd_by_id() fails with ENOENT, print an error message and continue to the next map ID. * Fix typo in new command line option documentation. * Only use bpf_map_info.btf_value_type_id and ignore bpf_map_info.btf_vmlinux_value_type_id (unused for socket-local storage). * Use btf_dump__dump_type_data() instead of manually using BTF to pretty-print socket-local storage data. This change alone divides the size of the patch series by 2. ==================== Signed-off-by: David Ahern --- 7c05edd3eceee354f0a2fca7c90f72971a0daccf