On 15/11/2022 04.02, Stanislav Fomichev wrote:
Implement new bpf_xdp_metadata_export_to_skb kfunc which
prepares compatible xdp metadata for kernel consumption.
This kfunc should be called prior to bpf_redirect
or when XDP_PASS'ing the frame into the kernel (note, the drivers
have to be updated to enable consuming XDP_PASS'ed metadata).
veth driver is amended to consume this metadata when converting to skb.
Internally, XDP_FLAGS_HAS_SKB_METADATA flag is used to indicate
whether the frame has skb metadata. The metadata is currently
stored prior to xdp->data_meta. bpf_xdp_adjust_meta refuses
to work after a call to bpf_xdp_metadata_export_to_skb (can lift
this requirement later on if needed, we'd have to memmove
xdp_skb_metadata).
I think it is wrong to refuses using metadata area (bpf_xdp_adjust_meta)
when the function bpf_xdp_metadata_export_to_skb() have been called.
In my design they were suppose to co-exist, and BPF-prog was expected to
access this directly themselves.
With this current design, I think it is better to place the struct
xdp_skb_metadata (maybe call it xdp_skb_hints) after xdp_frame (in the
top of the frame). This way we don't conflict with metadata and
headroom use-cases. Plus, verifier will keep BPF-prog from accessing
this area directly (which seems to be one of the new design goals).
By placing it after xdp_frame, I think it would be possible to let veth
unroll functions seamlessly access this info for XDP_REDIRECT'ed
xdp_frame's.
WDYT?
--Jesper