bpf: Add BPF_FIB_LOOKUP_SKIP_NEIGH for bpf_fib_lookup
authorMartin KaFai Lau <martin.lau@kernel.org>
Fri, 17 Feb 2023 20:55:14 +0000 (12:55 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 17 Feb 2023 21:12:04 +0000 (22:12 +0100)
commit31de4105f00d64570139bc5494a201b0bd57349f
tree16b85d933eb7572af8530eb3a2d1dcd04f8f816d
parent49b5e77ae3e214acff4728595b4ac7bf776693ca
bpf: Add BPF_FIB_LOOKUP_SKIP_NEIGH for bpf_fib_lookup

The bpf_fib_lookup() also looks up the neigh table.
This was done before bpf_redirect_neigh() was added.

In the use case that does not manage the neigh table
and requires bpf_fib_lookup() to lookup a fib to
decide if it needs to redirect or not, the bpf prog can
depend only on using bpf_redirect_neigh() to lookup the
neigh. It also keeps the neigh entries fresh and connected.

This patch adds a bpf_fib_lookup flag, SKIP_NEIGH, to avoid
the double neigh lookup when the bpf prog always call
bpf_redirect_neigh() to do the neigh lookup. The params->smac
output is skipped together when SKIP_NEIGH is set because
bpf_redirect_neigh() will figure out the smac also.

Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20230217205515.3583372-1-martin.lau@linux.dev
include/uapi/linux/bpf.h
net/core/filter.c
tools/include/uapi/linux/bpf.h