In the original sockmap implementation we got away with using an array similar to devmap. However, unlike devmap where an ifindex has a nice 1:1 function into the map we have found some use cases with sockets that need to be referenced using longer keys.
This series adds support for a sockhash map reusing as much of the sockmap code as possible. I made the decision to add sockhash specific helpers vs trying to generalize the existing helpers because (a) they have sockmap in the name and (b) the keys are different types. I prefer to be explicit here rather than play type games or do something else tricky. To test this we duplicate all the sockmap testing except swap out the sockmap with a sockhash. v2: fix file stats and add v2 tag v3: move tool updates into test patch, move bpftool updates into its own patch, and fixup the test patch stats to catch the renamed file and provide only diffs +/- on that. John Fastabend (4): bpf: sockmap, refactor sockmap routines to work with hashmap bpf: sockmap, add hash map support bpf: bpftool, support for sockhash bpf: selftest additions for SOCKHASH include/linux/bpf.h | 8 + include/linux/bpf_types.h | 1 + include/linux/filter.h | 3 +- include/net/tcp.h | 3 +- include/uapi/linux/bpf.h | 6 +- kernel/bpf/core.c | 1 + kernel/bpf/sockmap.c | 638 ++++++++++++++++++--- kernel/bpf/verifier.c | 14 +- net/core/filter.c | 89 ++- tools/bpf/bpftool/map.c | 1 + tools/include/uapi/linux/bpf.h | 6 +- tools/testing/selftests/bpf/Makefile | 3 +- tools/testing/selftests/bpf/test_sockhash_kern.c | 4 + tools/testing/selftests/bpf/test_sockmap.c | 27 +- .../{test_sockmap_kern.c => test_sockmap_kern.h} | 6 +- 15 files changed, 695 insertions(+), 115 deletions(-) create mode 100644 tools/testing/selftests/bpf/test_sockhash_kern.c rename tools/testing/selftests/bpf/{test_sockmap_kern.c => test_sockmap_kern.h} (98%) -- 1.9.1