Skip to content

Commit

Permalink
samples/bpf: xdp_fwd explain bpf_fib_lookup return codes
Browse files Browse the repository at this point in the history
Make it clear that this XDP program depend on the network
stack to do the ARP resolution.  This is connected with the
BPF_FIB_LKUP_RET_NO_NEIGH return code from bpf_fib_lookup().

Another common mistake (seen via XDP-tutorial) is that users
don't realize that sysctl net.ipv{4,6}.conf.all.forwarding
setting is honored by bpf_fib_lookup.

Reported-by: Anton Protopopov <[email protected]>
Signed-off-by: Jesper Dangaard Brouer <[email protected]>
Reviewed-by: David Ahern <[email protected]>
Acked-by: Yonghong Song <[email protected]>
Reviewed-by: Toke Høiland-Jørgensen <[email protected]>
Signed-off-by: Daniel Borkmann <[email protected]>
  • Loading branch information
netoptimizer authored and borkmann committed Aug 9, 2019
1 parent a32a32c commit abcce73
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions samples/bpf/xdp_fwd_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,23 @@ static __always_inline int xdp_fwd_flags(struct xdp_md *ctx, u32 flags)
fib_params.ifindex = ctx->ingress_ifindex;

rc = bpf_fib_lookup(ctx, &fib_params, sizeof(fib_params), flags);

if (rc == 0) {
/*
* Some rc (return codes) from bpf_fib_lookup() are important,
* to understand how this XDP-prog interacts with network stack.
*
* BPF_FIB_LKUP_RET_NO_NEIGH:
* Even if route lookup was a success, then the MAC-addresses are also
* needed. This is obtained from arp/neighbour table, but if table is
* (still) empty then BPF_FIB_LKUP_RET_NO_NEIGH is returned. To avoid
* doing ARP lookup directly from XDP, then send packet to normal
* network stack via XDP_PASS and expect it will do ARP resolution.
*
* BPF_FIB_LKUP_RET_FWD_DISABLED:
* The bpf_fib_lookup respect sysctl net.ipv{4,6}.conf.all.forwarding
* setting, and will return BPF_FIB_LKUP_RET_FWD_DISABLED if not
* enabled this on ingress device.
*/
if (rc == BPF_FIB_LKUP_RET_SUCCESS) {
/* Verify egress index has been configured as TX-port.
* (Note: User can still have inserted an egress ifindex that
* doesn't support XDP xmit, which will result in packet drops).
Expand Down

0 comments on commit abcce73

Please sign in to comment.