mptcp: reduce branching when writing MP_FAIL option
MP_FAIL should be use in very rare cases, either when the TCP RST flag is set -- with or without an MP_RST -- or with a DSS, see mptcp_established_options(). Here, we do the same in mptcp_write_options(). Co-developed-by: Geliang Tang <geliang.tang@suse.com> Signed-off-by: Geliang Tang <geliang.tang@suse.com> Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d7889cfa0b
commit
902c8f8648
@ -1267,17 +1267,6 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
|
|||||||
const struct sock *ssk = (const struct sock *)tp;
|
const struct sock *ssk = (const struct sock *)tp;
|
||||||
struct mptcp_subflow_context *subflow;
|
struct mptcp_subflow_context *subflow;
|
||||||
|
|
||||||
if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
|
|
||||||
subflow = mptcp_subflow_ctx(ssk);
|
|
||||||
subflow->send_mp_fail = 0;
|
|
||||||
|
|
||||||
*ptr++ = mptcp_option(MPTCPOPT_MP_FAIL,
|
|
||||||
TCPOLEN_MPTCP_FAIL,
|
|
||||||
0, 0);
|
|
||||||
put_unaligned_be64(opts->fail_seq, ptr);
|
|
||||||
ptr += 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive,
|
/* DSS, MPC, MPJ, ADD_ADDR, FASTCLOSE and RST are mutually exclusive,
|
||||||
* see mptcp_established_options*()
|
* see mptcp_established_options*()
|
||||||
*/
|
*/
|
||||||
@ -1336,6 +1325,10 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
|
|||||||
}
|
}
|
||||||
ptr += 1;
|
ptr += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* We might need to add MP_FAIL options in rare cases */
|
||||||
|
if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions))
|
||||||
|
goto mp_fail;
|
||||||
} else if (OPTIONS_MPTCP_MPC & opts->suboptions) {
|
} else if (OPTIONS_MPTCP_MPC & opts->suboptions) {
|
||||||
u8 len, flag = MPTCP_CAP_HMAC_SHA256;
|
u8 len, flag = MPTCP_CAP_HMAC_SHA256;
|
||||||
|
|
||||||
@ -1476,6 +1469,21 @@ void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp,
|
|||||||
put_unaligned_be64(opts->rcvr_key, ptr);
|
put_unaligned_be64(opts->rcvr_key, ptr);
|
||||||
ptr += 2;
|
ptr += 2;
|
||||||
|
|
||||||
|
if (OPTION_MPTCP_RST & opts->suboptions)
|
||||||
|
goto mp_rst;
|
||||||
|
return;
|
||||||
|
} else if (unlikely(OPTION_MPTCP_FAIL & opts->suboptions)) {
|
||||||
|
mp_fail:
|
||||||
|
/* MP_FAIL is mutually exclusive with others except RST */
|
||||||
|
subflow = mptcp_subflow_ctx(ssk);
|
||||||
|
subflow->send_mp_fail = 0;
|
||||||
|
|
||||||
|
*ptr++ = mptcp_option(MPTCPOPT_MP_FAIL,
|
||||||
|
TCPOLEN_MPTCP_FAIL,
|
||||||
|
0, 0);
|
||||||
|
put_unaligned_be64(opts->fail_seq, ptr);
|
||||||
|
ptr += 2;
|
||||||
|
|
||||||
if (OPTION_MPTCP_RST & opts->suboptions)
|
if (OPTION_MPTCP_RST & opts->suboptions)
|
||||||
goto mp_rst;
|
goto mp_rst;
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user