samples/bpf: xdp_fwd explain bpf_fib_lookup return codes
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 <a.s.protopopov@gmail.com> Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> Reviewed-by: David Ahern <dsahern@gmail.com> Acked-by: Yonghong Song <yhs@fb.com> Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
parent
a32a32cb26
commit
abcce733ad
|
@ -103,8 +103,23 @@ static __always_inline int xdp_fwd_flags(struct xdp_md *ctx, u32 flags)
|
||||||
fib_params.ifindex = ctx->ingress_ifindex;
|
fib_params.ifindex = ctx->ingress_ifindex;
|
||||||
|
|
||||||
rc = bpf_fib_lookup(ctx, &fib_params, sizeof(fib_params), flags);
|
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.
|
/* Verify egress index has been configured as TX-port.
|
||||||
* (Note: User can still have inserted an egress ifindex that
|
* (Note: User can still have inserted an egress ifindex that
|
||||||
* doesn't support XDP xmit, which will result in packet drops).
|
* doesn't support XDP xmit, which will result in packet drops).
|
||||||
|
|
Loading…
Reference in New Issue