All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Abeni <pabeni@redhat.com>
To: mptcp@lists.linux.dev
Subject: [PATCH v6 mptcp-next 02/22] mptcp: generate the data checksum
Date: Tue,  4 May 2021 23:41:50 +0200	[thread overview]
Message-ID: <3084d7d24b452d871d26309b89b32af449c573f1.1620163861.git.pabeni@redhat.com> (raw)
In-Reply-To: <cover.1620163861.git.pabeni@redhat.com>

From: Geliang Tang <geliangtang@gmail.com>

This patch added a new member named csum in struct mptcp_ext, implemented
a new function named mptcp_generate_data_checksum().

Generate the data checksum in mptcp_sendmsg_frag, save it in mpext->csum.

Signed-off-by: Geliang Tang <geliangtang@gmail.com>
---
 include/net/mptcp.h  |  1 +
 net/mptcp/protocol.c | 21 +++++++++++++++++++++
 net/mptcp/protocol.h |  7 +++++++
 3 files changed, 29 insertions(+)

diff --git a/include/net/mptcp.h b/include/net/mptcp.h
index 83f23774b908..23bbd439e115 100644
--- a/include/net/mptcp.h
+++ b/include/net/mptcp.h
@@ -23,6 +23,7 @@ struct mptcp_ext {
 	u64		data_seq;
 	u32		subflow_seq;
 	u16		data_len;
+	__sum16		csum;
 	u8		use_map:1,
 			dsn64:1,
 			data_fin:1,
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 4cf8965fae4a..2a094d35a099 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1279,6 +1279,25 @@ static bool mptcp_alloc_tx_skb(struct sock *sk, struct sock *ssk)
 	return __mptcp_alloc_tx_skb(sk, ssk, sk->sk_allocation);
 }
 
+static __sum16 mptcp_generate_data_checksum(struct sk_buff *skb)
+{
+	struct csum_pseudo_header header;
+	struct mptcp_ext *mpext;
+	__wsum csum;
+
+	mpext = mptcp_get_ext(skb);
+
+	header.data_seq = mpext->data_seq;
+	header.subflow_seq = mpext->subflow_seq;
+	header.data_len = mpext->data_len;
+	header.csum = 0;
+
+	csum = skb_checksum(skb, 0, skb->len, 0);
+	csum = csum_partial(&header, sizeof(header), csum);
+
+	return csum_fold(csum);
+}
+
 static int mptcp_sendmsg_frag(struct sock *sk, struct sock *ssk,
 			      struct mptcp_data_frag *dfrag,
 			      struct mptcp_sendmsg_info *info)
@@ -1377,6 +1396,8 @@ static int mptcp_sendmsg_frag(struct sock *sk, struct sock *ssk,
 		tcp_push_pending_frames(ssk);
 	}
 out:
+	if (READ_ONCE(msk->csum_enabled))
+		mpext->csum = mptcp_generate_data_checksum(tail);
 	mptcp_subflow_ctx(ssk)->rel_write_seq += ret;
 	return ret;
 }
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 6cbbe7403402..63a1651f9069 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -335,6 +335,13 @@ static inline struct mptcp_data_frag *mptcp_rtx_head(const struct sock *sk)
 	return list_first_entry_or_null(&msk->rtx_queue, struct mptcp_data_frag, list);
 }
 
+struct csum_pseudo_header {
+	u64 data_seq;
+	u32 subflow_seq;
+	u16 data_len;
+	__sum16 csum;
+};
+
 struct mptcp_subflow_request_sock {
 	struct	tcp_request_sock sk;
 	u16	mp_capable : 1,
-- 
2.26.2


  parent reply	other threads:[~2021-05-04 21:42 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-04 21:41 [PATCH v6 mptcp-next 00/22] mptcp: data checksum support Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 01/22] mptcp: add csum_enabled in mptcp_sock Paolo Abeni
2021-05-04 21:41 ` Paolo Abeni [this message]
2021-05-04 21:41 ` [PATCH v6 mptcp-next 03/22] Squash-to: "mptcp: generate the data checksum" Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 04/22] mptcp: add csum_reqd in mptcp_out_options Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 05/22] mptcp: send out checksum for MP_CAPABLE with data Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 06/22] Squash-to: "mptcp: send out checksum for MP_CAPABLE with data" Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 07/22] mptcp: send out checksum for DSS Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 08/22] Squash-to "mptcp: send out checksum for DSS" Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 09/22] mptcp: add sk parameter for mptcp_parse_option Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 10/22] mptcp: add csum_reqd in mptcp_options_received Paolo Abeni
2021-05-04 21:41 ` [PATCH v6 mptcp-next 11/22] mptcp: receive checksum for MP_CAPABLE with data Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 12/22] Squash-to: "mptcp: receive checksum for MP_CAPABLE with data" Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 13/22] mptcp: receive checksum for DSS Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 14/22] Squash-to: "mptcp: receive checksum for DSS" Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 15/22] mptcp: validate the data checksum Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 16/22] Squash-to: " Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 17/22] mptcp: cleanup error path in subflow_check_data_avail() Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 18/22] mptcp: tune re-injections for csum enabled mode Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 19/22] mptcp: add the mib for data checksum Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 20/22] mptcp: add a new sysctl checksum_enabled Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 21/22] selftests: mptcp: enable checksum in mptcp_connect.sh Paolo Abeni
2021-05-04 21:42 ` [PATCH v6 mptcp-next 22/22] selftests: mptcp: enable checksum in mptcp_join.sh Paolo Abeni
2021-05-05 10:12 ` [PATCH v6 mptcp-next 00/22] mptcp: data checksum support Paolo Abeni
2021-05-05 18:03   ` Mat Martineau
2021-05-05 23:56 ` Mat Martineau
2021-05-06  8:31 ` Matthieu Baerts

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3084d7d24b452d871d26309b89b32af449c573f1.1620163861.git.pabeni@redhat.com \
    --to=pabeni@redhat.com \
    --cc=mptcp@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.