Skip to content

bpf: Add helper to do FIB lookups

David Ahern netdev 4 versions – Applied

Status from this message: Applied to bpf-next, thanks David!

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v3 Latest9 patches 6 repliesApplied
  2. v2 posting 2/29 patches 12 repliesApplied
  3. v2 RFC posting 1/29 patches 11 repliesSuperseded
Earlier versions · 1
VersionPostedPatchesRepliesStatus
v1 RFC9 patches4 repliesSuperseded

RFC v2 from the cover letter

- fixed use of foward helper from cls_act as noted by Daniel
- in patch 1 rename fib6_lookup_1 as well for consistency

Patches in v3 Applied

#Subject and filesSizeRepliesApplied
1/9net/ipv6: Rename fib6_lookup to fib6_node_lookupinclude/net/ip6_fib.h net/ipv6/ip6_fib.c net/ipv6/route.c+15 -130 replies
2/9net/ipv6: Rename rt6_multipath_selectinclude/net/ip6_fib.h net/ipv6/route.c+14 -80 replies
3/9net/ipv6: Extract table lookup from ip6_pol_routeinclude/net/ip6_fib.h net/ipv6/route.c+29 -140 replies
4/9net/ipv6: Refactor fib6_rule_actionnet/ipv6/fib6_rules.c+31 -210 replies
5/9net/ipv6: Add fib6_lookupinclude/net/ip6_fib.h net/ipv6/fib6_rules.c net/ipv6/ip6_fib.c+97 -20 replies
6/9net/ipv6: Update fib6 tracepoint to take fib6_infoinclude/trace/events/fib6.h net/ipv6/route.c+13 -150 replies
7/9net/ipv6: Add fib lookup stubs for use in bpf helperinclude/net/addrconf.h net/ipv6/addrconf_core.c net/ipv6/af_inet6.c+51 -20 replies
8/9bpf: Provide helper to do forwarding lookups in kernel FIB tableinclude/uapi/linux/bpf.h net/core/filter.c+347 -14 replies
9/9samples/bpf: Add example of ipv4 and ipv6 forwarding in XDPsamples/bpf/Makefile samples/bpf/xdp_fwd_kern.c samples/bpf/xdp_fwd_user.c +1 more+258 -01 reply

Reviews trailers per patch

All 9 patches have a Reviewed-by or Acked-by.

PatchDavid S. MillerJesper Dangaard Brouer
1/9A-b
2/9A-b
3/9A-b
4/9A-b
5/9A-b
6/9A-b
7/9A-b
8/9A-b
9/9A-b A-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v3 thread

Cover letter [bpf-next v3 0/9] bpf: Add helper to do FIB lookups

Provide a helper for doing a FIB and neighbor lookup in the kernel tables from an XDP program. The helper provides a fastpath for forwarding packets. If the packet is a local delivery or for any reason is not a simple lookup and forward, the packet is expected to continue up the stack for full processing.

The response from a FIB and neighbor lookup is either the egress index with the bpf_fib_lookup struct filled in with dmac and gateway or 0 meaning the packet should continue up the stack. In time we can revisit this to return the FIB lookup result errno if it is one of the special RTN_'s such as RTN_BLACKHOLE (-EINVAL) so that the XDP programs can do an early drop if desired.

Patches 1-6 do some more refactoring to IPv6 with the end goal of extracting a FIB lookup function that aligns with fib_lookup for IPv4, basically returning a fib6_info without creating a dst based entry.

Patch 7 adds lookup functions to the ipv6 stub. These are needed since bpf is built into the kernel and ipv6 may not be built or loaded.

Patch 8 adds the bpf helper and 9 adds a sample program.

v3
- remove ETH_ALEN and in6_addr from uapi header

v2
- removed pkt_access from bpf_func_proto as noticed by Daniel
- added check in that IPv6 forwarding is enabled
- added DaveM's ack on patches 1-7 and 9 based on v1 response and fact that no changes were made to them in v2

v1
- updated commit messages and cover letter
- added comment to sample program noting lack of verification on egress device supporting XDP

RFC v2
- fixed use of foward helper from cls_act as noted by Daniel
- in patch 1 rename fib6_lookup_1 as well for consistency

David Ahern (9):
net/ipv6: Rename fib6_lookup to fib6_node_lookup net/ipv6: Rename rt6_multipath_select
net/ipv6: Extract table lookup from ip6_pol_route net/ipv6: Refactor fib6_rule_action
net/ipv6: Add fib6_lookup
net/ipv6: Update fib6 tracepoint to take fib6_info net/ipv6: Add fib lookup stubs for use in bpf helper
bpf: Provide helper to do forwarding lookups in kernel FIB table samples/bpf: Add example of ipv4 and ipv6 forwarding in XDP

 include/net/addrconf.h                    |  14 ++
 include/net/ip6_fib.h                     |  21 ++-
 include/trace/events/fib6.h               |  14 +-
 include/uapi/linux/bpf.h                  |  81 ++++++++-
 net/core/filter.c                         | 267 ++++++++++++++++++++++++++++++
 net/ipv6/addrconf_core.c                  |  33 +++-
 net/ipv6/af_inet6.c                       |   6 +-
 net/ipv6/fib6_rules.c                     | 138 ++++++++++++---
 net/ipv6/ip6_fib.c                        |  21 ++-
 net/ipv6/route.c                          |  76 +++++----
 samples/bpf/Makefile                      |   4 +
 samples/bpf/xdp_fwd_kern.c                | 115 +++++++++++++
 samples/bpf/xdp_fwd_user.c                | 136 +++++++++++++++
 tools/testing/selftests/bpf/bpf_helpers.h |   3 +
 14 files changed, 854 insertions(+), 75 deletions(-)
 create mode 100644 samples/bpf/xdp_fwd_kern.c
 create mode 100644 samples/bpf/xdp_fwd_user.c
Signature · 1 line
2.11.0