Add new kfunc that will be used for tx checksum offloading. The API mirrors existing one from sk_buff: - csum_start - checksum the packet starting from this position - csum_offset - put checksum at this offset Signed-off-by: Stanislav Fomichev <sdf@xxxxxxxxxx> --- include/linux/netdevice.h | 2 ++ include/net/offload.h | 5 ++++- net/core/devtx.c | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 5be6649ea3fa..aeb1fa024d65 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1662,6 +1662,8 @@ struct xdp_metadata_ops { enum xdp_rss_hash_type *rss_type); int (*xmo_request_tx_timestamp)(const struct devtx_ctx *ctx); int (*xmo_tx_timestamp)(const struct devtx_ctx *ctx, u64 *timestamp); + int (*xmo_request_l4_checksum)(const struct devtx_ctx *ctx, + u16 csum_start, u16 csum_offset); }; /** diff --git a/include/net/offload.h b/include/net/offload.h index 7e2c19c5aaef..d8f908af9e59 100644 --- a/include/net/offload.h +++ b/include/net/offload.h @@ -15,7 +15,10 @@ #define DEVTX_SUBMIT_KFUNC_xxx \ NETDEV_METADATA_KFUNC(DEVTX_KFUNC_REQUEST_TX_TIMESTAMP, \ bpf_devtx_request_tx_timestamp, \ - xmo_request_tx_timestamp) + xmo_request_tx_timestamp) \ + NETDEV_METADATA_KFUNC(DEVTX_KFUNC_REQUEST_L4_CHECKSUM, \ + bpf_devtx_request_l4_csum, \ + xmo_request_l4_checksum) #define DEVTX_COMPLETE_KFUNC_xxx \ NETDEV_METADATA_KFUNC(DEVTX_KFUNC_TX_TIMESTAMP, \ diff --git a/net/core/devtx.c b/net/core/devtx.c index 991a52fe81a3..fd8a9ea125db 100644 --- a/net/core/devtx.c +++ b/net/core/devtx.c @@ -106,6 +106,23 @@ __bpf_kfunc int bpf_devtx_tx_timestamp(const struct devtx_ctx *ctx, __u64 *times return -EOPNOTSUPP; } +/** + * bpf_devtx_request_l4_csum - Request TX checksum offload on the packet. + * Callable only from the devtx-submit hook. + * @ctx: devtx context pointer. + * @csum_start: start checksumming from given position + * @csum_offset: add resulting checksum at given offset + * + * Note, this checksum offload doesn't calculate pseudo-header part. + * + * Returns 0 on success or ``-errno`` on error. + */ +__bpf_kfunc int bpf_devtx_request_l4_csum(const struct devtx_ctx *ctx, + u16 csum_start, u16 csum_offset) +{ + return -EOPNOTSUPP; +} + __diag_pop(); BTF_SET8_START(devtx_sb_kfunc_ids) -- 2.41.0.255.g8b1d071c50-goog