All of lore.kernel.org
 help / color / mirror / Atom feed
* [MPTCP] Re: [MPTCP][PATCH v5 mptcp-next 1/9] mptcp: add rm_list in mptcp_out_options
@ 2021-02-09  1:48 Mat Martineau
  0 siblings, 0 replies; only message in thread
From: Mat Martineau @ 2021-02-09  1:48 UTC (permalink / raw)
  To: mptcp

[-- Attachment #1: Type: text/plain, Size: 5790 bytes --]

On Mon, 8 Feb 2021, Geliang Tang wrote:

> This patch defined a new struct mptcp_rm_list, the ids field was an
> array of the removing address ids, the nr field was the valid number of
> removing address ids in the array. The array size was definced as a new
> macro MPTCP_RM_IDS_MAX. Changed the member rm_id of struct
> mptcp_out_options to rm_list.
>
> In mptcp_established_options_rm_addr, invoked mptcp_pm_rm_addr_signal to
> get the rm_list. According the number of addresses in it, calculated
> the padded RM_ADDR suboption length. And saved the ids array in struct
> mptcp_out_options's rm_list member.
>
> In mptcp_write_options, iterated each address id from struct
> mptcp_out_options's rm_list member, set the invalid ones as TCPOPT_NOP,
> then filled them into the RM_ADDR suboption.
>
> Changed TCPOLEN_MPTCP_RM_ADDR_BASE from 4 to 3.
>
> Signed-off-by: Geliang Tang <geliangtang(a)gmail.com>
> ---
> include/net/mptcp.h  |  9 ++++++++-
> net/mptcp/options.c  | 37 +++++++++++++++++++++++++++++--------
> net/mptcp/pm.c       |  4 ++--
> net/mptcp/protocol.h |  4 ++--
> 4 files changed, 41 insertions(+), 13 deletions(-)
>
> diff --git a/include/net/mptcp.h b/include/net/mptcp.h
> index 5694370be3d4..cea69c801595 100644
> --- a/include/net/mptcp.h
> +++ b/include/net/mptcp.h
> @@ -34,6 +34,13 @@ struct mptcp_ext {
> 	/* one byte hole */
> };
>
> +#define MPTCP_RM_IDS_MAX	8
> +
> +struct mptcp_rm_list {
> +	u8 ids[MPTCP_RM_IDS_MAX];
> +	u8 nr;
> +};
> +
> struct mptcp_out_options {
> #if IS_ENABLED(CONFIG_MPTCP)
> 	u16 suboptions;
> @@ -48,7 +55,7 @@ struct mptcp_out_options {
> 	u8 addr_id;
> 	u16 port;
> 	u64 ahmac;
> -	u8 rm_id;
> +	struct mptcp_rm_list rm_list;
> 	u8 join_id;
> 	u8 backup;
> 	u32 nonce;
> diff --git a/net/mptcp/options.c b/net/mptcp/options.c
> index 1c5c99c06951..9e9bbe88b58f 100644
> --- a/net/mptcp/options.c
> +++ b/net/mptcp/options.c
> @@ -671,20 +671,27 @@ static bool mptcp_established_options_rm_addr(struct sock *sk,
> {
> 	struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
> 	struct mptcp_sock *msk = mptcp_sk(subflow->conn);
> -	u8 rm_id;
> +	struct mptcp_rm_list rm_list;
> +	u8 i, align;
>
> 	if (!mptcp_pm_should_rm_signal(msk) ||
> -	    !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_id)))
> +	    !(mptcp_pm_rm_addr_signal(msk, remaining, &rm_list)))
> 		return false;
>
> -	if (remaining < TCPOLEN_MPTCP_RM_ADDR_BASE)
> +	if (rm_list.nr > 1)
> +		align = 5;
> +	if (rm_list.nr > 5)
> +		align = 9;
> +
> +	if (remaining < TCPOLEN_MPTCP_RM_ADDR_BASE + align)
> 		return false;
>
> -	*size = TCPOLEN_MPTCP_RM_ADDR_BASE;
> +	*size = TCPOLEN_MPTCP_RM_ADDR_BASE + align;
> 	opts->suboptions |= OPTION_MPTCP_RM_ADDR;
> -	opts->rm_id = rm_id;
> +	opts->rm_list = rm_list;
>
> -	pr_debug("rm_id=%d", opts->rm_id);
> +	for (i = 0; i < opts->rm_list.nr; i++)
> +		pr_debug("rm_list_ids[%d]=%d", i, opts->rm_list.ids[i]);
>
> 	return true;
> }
> @@ -1213,9 +1220,23 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
> 	}
>
> 	if (OPTION_MPTCP_RM_ADDR & opts->suboptions) {
> +		u8 i;
> +
> +		for (i = opts->rm_list.nr; i < MPTCP_RM_IDS_MAX; i++)
> +			opts->rm_list.ids[i] = TCPOPT_NOP;
> 		*ptr++ = mptcp_option(MPTCPOPT_RM_ADDR,
> -				      TCPOLEN_MPTCP_RM_ADDR_BASE,
> -				      0, opts->rm_id);
> +				      TCPOLEN_MPTCP_RM_ADDR_BASE + opts->rm_list.nr,
> +				      0, opts->rm_list.ids[0]);
> +		if (opts->rm_list.nr > 1) {
> +			put_unaligned_be32(opts->rm_list.ids[1] << 24 | opts->rm_list.ids[2] << 16 |
> +					   opts->rm_list.ids[3] << 8 | opts->rm_list.ids[4], ptr);
> +			ptr += 1;
> +		}
> +		if (opts->rm_list.nr > 5) {
> +			put_unaligned_be32(opts->rm_list.ids[5] << 24 | opts->rm_list.ids[6] << 16 |
> +					   opts->rm_list.ids[7] << 8 | TCPOPT_NOP, ptr);
> +			ptr += 1;
> +		}
> 	}
>
> 	if (OPTION_MPTCP_PRIO & opts->suboptions) {
> diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
> index a6d068d801d0..bc68d886c31d 100644
> --- a/net/mptcp/pm.c
> +++ b/net/mptcp/pm.c
> @@ -273,7 +273,7 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
> }
>
> bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
> -			     u8 *rm_id)
> +			     struct mptcp_rm_list *rm_list)
> {
> 	int ret = false;
>
> @@ -286,7 +286,7 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
> 	if (remaining < TCPOLEN_MPTCP_RM_ADDR_BASE)
> 		goto out_unlock;
>
> -	*rm_id = msk->pm.rm_id;
> +	rm_list->ids[0] = msk->pm.rm_id;

Also need:

 	rm_list->nr = 1;

> 	WRITE_ONCE(msk->pm.addr_signal, 0);
> 	ret = true;
>
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 7ad0dfef36bd..8f5dede1de81 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -60,7 +60,7 @@
> #define TCPOLEN_MPTCP_ADD_ADDR6_BASE	20
> #define TCPOLEN_MPTCP_ADD_ADDR6_BASE_PORT	24
> #define TCPOLEN_MPTCP_PORT_LEN		4
> -#define TCPOLEN_MPTCP_RM_ADDR_BASE	4
> +#define TCPOLEN_MPTCP_RM_ADDR_BASE	3
> #define TCPOLEN_MPTCP_PRIO		3
> #define TCPOLEN_MPTCP_PRIO_ALIGN	4
> #define TCPOLEN_MPTCP_FASTCLOSE		12
> @@ -722,7 +722,7 @@ static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool port)
> bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
> 			      struct mptcp_addr_info *saddr, bool *echo, bool *port);
> bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining,
> -			     u8 *rm_id);
> +			     struct mptcp_rm_list *rm_list);
> int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
>
> void __init mptcp_pm_nl_init(void);
> -- 
> 2.29.2

--
Mat Martineau
Intel

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-02-09  1:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-09  1:48 [MPTCP] Re: [MPTCP][PATCH v5 mptcp-next 1/9] mptcp: add rm_list in mptcp_out_options Mat Martineau

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.