[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 7 Jul 2023 12:29:59 -0700
From: Stanislav Fomichev <sdf@...gle.com>
To: bpf@...r.kernel.org
Cc: ast@...nel.org, daniel@...earbox.net, andrii@...nel.org,
martin.lau@...ux.dev, song@...nel.org, yhs@...com, john.fastabend@...il.com,
kpsingh@...nel.org, sdf@...gle.com, haoluo@...gle.com, jolsa@...nel.org,
kuba@...nel.org, toke@...nel.org, willemb@...gle.com, dsahern@...nel.org,
magnus.karlsson@...el.com, bjorn@...nel.org, maciej.fijalkowski@...el.com,
hawk@...nel.org, netdev@...r.kernel.org, xdp-hints@...-project.net
Subject: [RFC bpf-next v3 07/14] bpf: Introduce tx checksum devtx kfuncs
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@...gle.com>
---
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
Powered by blists - more mailing lists