@@ -128,7 +128,6 @@ void mptcp_parse_option(const struct sk_buff *skb, const unsigned char *ptr,
}
break;
-
case MPTCPOPT_DSS:
pr_debug("DSS");
ptr++;
@@ -565,8 +564,12 @@ static bool check_fourth_ack(struct mptcp_subflow_context *subflow,
TCP_SKB_CB(skb)->seq != subflow->ssn_offset + 1))
return true;
- if (mp_opt->use_ack)
+ if (mp_opt->use_ack) {
subflow->fourth_ack = 1;
+ if (subflow->mp_join)
+ mptcp_pm_subflow_established(mptcp_sk(subflow->conn),
+ subflow);
+ }
if (subflow->can_ack)
return true;
@@ -55,6 +55,7 @@ static bool subflow_token_join_request(struct request_sock *req,
struct mptcp_subflow_request_sock *subflow_req = mptcp_subflow_rsk(req);
u8 hmac[MPTCPOPT_HMAC_LEN];
struct mptcp_sock *msk;
+ int local_id;
msk = mptcp_token_get_sock(subflow_req->token);
if (!msk) {
@@ -63,10 +64,12 @@ static bool subflow_token_join_request(struct request_sock *req,
return false;
}
- if (mptcp_pm_get_local_id(req, (struct sock *)msk, skb)) {
+ local_id = mptcp_pm_get_local_id(msk, (struct sock_common *)req);
+ if (local_id < 0) {
sock_put((struct sock *)msk);
return false;
}
+ subflow_req->local_id = local_id;
get_random_bytes(&subflow_req->local_nonce, sizeof(u32));
Update mptcp_pm_get_local_id() callers to new API. Hook mptcp_pm_subflow_established() when MP_JOIN completes successfully Signed-off-by: Paolo Abeni <pabeni@redhat.com> --- net/mptcp/options.c | 7 +++++-- net/mptcp/subflow.c | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-)