@@ -29,6 +29,9 @@ metadata is supported, this set will grow:
.. kernel-doc:: net/core/xdp.c
:identifiers: bpf_xdp_metadata_rx_stag
+.. kernel-doc:: net/core/xdp.c
+ :identifiers: bpf_xdp_metadata_rx_csum_lvl
+
An XDP program can use these kfuncs to read the metadata into stack
variables for its own consumption. Or, to pass the metadata on to other
consumers, an XDP program can store it into the metadata area carried
@@ -1657,6 +1657,7 @@ struct xdp_metadata_ops {
enum xdp_rss_hash_type *rss_type);
int (*xmo_rx_ctag)(const struct xdp_md *ctx, u16 *vlan_tag);
int (*xmo_rx_stag)(const struct xdp_md *ctx, u16 *vlan_tag);
+ int (*xmo_rx_csum_lvl)(const struct xdp_md *ctx, u8 *csum_level);
};
/**
@@ -393,6 +393,8 @@ void xdp_attachment_setup(struct xdp_attachment_info *info,
bpf_xdp_metadata_rx_ctag) \
XDP_METADATA_KFUNC(XDP_METADATA_KFUNC_RX_STAG, \
bpf_xdp_metadata_rx_stag) \
+ XDP_METADATA_KFUNC(XDP_METADATA_KFUNC_RX_CSUM_LVL, \
+ bpf_xdp_metadata_rx_csum_lvl) \
enum {
#define XDP_METADATA_KFUNC(name, _) name,
@@ -852,6 +852,8 @@ void *bpf_dev_bound_resolve_kfunc(struct bpf_prog *prog, u32 func_id)
p = ops->xmo_rx_ctag;
else if (func_id == bpf_xdp_metadata_kfunc_id(XDP_METADATA_KFUNC_RX_STAG))
p = ops->xmo_rx_stag;
+ else if (func_id == bpf_xdp_metadata_kfunc_id(XDP_METADATA_KFUNC_RX_CSUM_LVL))
+ p = ops->xmo_rx_csum_lvl;
out:
up_read(&bpf_devs_lock);
@@ -762,6 +762,18 @@ __bpf_kfunc int bpf_xdp_metadata_rx_stag(const struct xdp_md *ctx, u16 *vlan_tag
return -EOPNOTSUPP;
}
+/**
+ * bpf_xdp_metadata_rx_csum_lvl - Get depth at which HW has checked the checksum.
+ * @ctx: XDP context pointer.
+ * @csum_level: Return value pointer.
+ *
+ * Returns 0 on success (HW has checked the checksum) or ``-errno`` on error.
+ */
+__bpf_kfunc int bpf_xdp_metadata_rx_csum_lvl(const struct xdp_md *ctx, u8 *csum_level)
+{
+ return -EOPNOTSUPP;
+}
+
__diag_pop();
BTF_SET8_START(xdp_metadata_kfunc_ids)
Implement functionality that enables drivers to expose to XDP code, whether checksums was checked and on what level. Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com> --- Documentation/networking/xdp-rx-metadata.rst | 3 +++ include/linux/netdevice.h | 1 + include/net/xdp.h | 2 ++ kernel/bpf/offload.c | 2 ++ net/core/xdp.c | 12 ++++++++++++ 5 files changed, 20 insertions(+)