From patchwork Tue Dec 12 09:25:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 847437 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="PhhAHxKB"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ywvcV5N5Wz9s7g for ; Tue, 12 Dec 2017 20:27:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751653AbdLLJ1g (ORCPT ); Tue, 12 Dec 2017 04:27:36 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:44582 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752483AbdLLJ1G (ORCPT ); Tue, 12 Dec 2017 04:27:06 -0500 Received: by mail-pg0-f65.google.com with SMTP id j9so13015131pgc.11; Tue, 12 Dec 2017 01:27:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=afG/bvT5e7Gw9t6YrhWz3nHjX8HXLdu7bTNqeVZ3YnY=; b=PhhAHxKB/jFdw9hX8XPP/gv7ixPVGkg4QCGnE5uW96Wo2drvWYr/jtTqw8j0VW/rnQ Msad+su868d0SqBg0ncEEQbwfy7+5+HEZ9cFSPQbuep6S4cq2ZsQM+8xG6CRv34haj2O qHaP3owq4qxNjapQFUqA8VoZEnLpVypiR5MA3hQgWqHlnXDd7MqHmJvsbektJH3q6Kok npFNbiWI5TT9ouq9p60+YgAsShnADRdFFgBxVQPWt1cH1CaE2SI+IrWf0aGPkbCiafcQ pKbamaPEXRTKDoFDkfX5Cf/d1NihyU52dlNpfpSewPGdd/vObXilwx2NhGfnxXmRJEm/ sWEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=afG/bvT5e7Gw9t6YrhWz3nHjX8HXLdu7bTNqeVZ3YnY=; b=WV0McHYg0oevMBgw18CTwzfrDUYPLTHBPlrqChCAs8nMMAPjEsaZqWVajBnVSW2ThR g7FVfjHUYuRZr+lIc3Vwd5hYk4JwEsMgf4n9NyKU3OZsGiQDtNd/Lary0W7biwh5tUXV CGl3i6OJXy0SkLR6X0suIfZWWAQIH/o4p8wFdHdRoW7uil7Q4t9t0sbW/1uZgCuy7Hgp 9Ttmnc0pPQwdV1g6/DUUuagaZbxjwswFsvbTd42WG5d4btDC8P6qNfs7M4xfmQADFpGC TTRJfM9sRhDbSOMaNwPKfJHOy77J+0oWtpsNJ7v3omhtSF4caQ2A0zJ7EC7/q8acH+C6 aIDQ== X-Gm-Message-State: AKGB3mKs0GEtP505luassSB1WzDfTdkOVV7i8vZ4j0gppfZwxqG39nu5 T3/AoNc+NVAHdnYYIEUqoOmytkBE X-Google-Smtp-Source: ACJfBosvxaDbTDpuBTsKd5WLijFHmnthX46NU4XOmNtVe/3Hf7h3C71sHRsBCkcM8ieM6o/UdaeNfQ== X-Received: by 10.84.235.203 with SMTP id m11mr1550976plt.301.1513070825926; Tue, 12 Dec 2017 01:27:05 -0800 (PST) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id c191sm33100917pfg.24.2017.12.12.01.27.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Dec 2017 01:27:05 -0800 (PST) From: Xin Long To: network dev , linux-sctp@vger.kernel.org Cc: Marcelo Ricardo Leitner , Neil Horman , davem@davemloft.net Subject: [PATCH net-next 7/8] sctp: update mid instead of ssn when doing stream and asoc reset Date: Tue, 12 Dec 2017 17:25:58 +0800 Message-Id: <2ac016924b2b0f70e801297d203697fcb5deb227.1513070662.git.lucien.xin@gmail.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <7a112fb936709ef7047548f778a895a46c31a935.1513070662.git.lucien.xin@gmail.com> References: <9b8315277069d021d8a6b581b7304af624a45c61.1513070662.git.lucien.xin@gmail.com> <807b1707f79b11d5883d71ea771e98e8f7af3ead.1513070662.git.lucien.xin@gmail.com> <5bdf9baf00c367ec91c1e06986be77835be7e451.1513070662.git.lucien.xin@gmail.com> <7a112fb936709ef7047548f778a895a46c31a935.1513070662.git.lucien.xin@gmail.com> In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When using idata and doing stream and asoc reset, setting ssn with 0 could only clear the 1st 16 bits of mid. So to make this work for both data and idata, it sets mid with 0 instead of ssn, and also mid_uo for unordered idata also need to be cleared, as said in section 2.3.2 of RFC8260. Signed-off-by: Xin Long --- net/sctp/stream.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/net/sctp/stream.c b/net/sctp/stream.c index b3a9f37..06b644d 100644 --- a/net/sctp/stream.c +++ b/net/sctp/stream.c @@ -216,11 +216,13 @@ void sctp_stream_clear(struct sctp_stream *stream) { int i; - for (i = 0; i < stream->outcnt; i++) - stream->out[i].ssn = 0; + for (i = 0; i < stream->outcnt; i++) { + stream->out[i].mid = 0; + stream->out[i].mid_uo = 0; + } for (i = 0; i < stream->incnt; i++) - stream->in[i].ssn = 0; + stream->in[i].mid = 0; } void sctp_stream_update(struct sctp_stream *stream, struct sctp_stream *new) @@ -607,10 +609,10 @@ struct sctp_chunk *sctp_process_strreset_outreq( } for (i = 0; i < nums; i++) - stream->in[ntohs(str_p[i])].ssn = 0; + stream->in[ntohs(str_p[i])].mid = 0; } else { for (i = 0; i < stream->incnt; i++) - stream->in[i].ssn = 0; + stream->in[i].mid = 0; } result = SCTP_STRRESET_PERFORMED; @@ -783,10 +785,12 @@ struct sctp_chunk *sctp_process_strreset_tsnreq( /* G5: The next expected and outgoing SSNs MUST be reset to 0 for all * incoming and outgoing streams. */ - for (i = 0; i < stream->outcnt; i++) - stream->out[i].ssn = 0; + for (i = 0; i < stream->outcnt; i++) { + stream->out[i].mid = 0; + stream->out[i].mid_uo = 0; + } for (i = 0; i < stream->incnt; i++) - stream->in[i].ssn = 0; + stream->in[i].mid = 0; result = SCTP_STRRESET_PERFORMED; @@ -976,11 +980,15 @@ struct sctp_chunk *sctp_process_strreset_resp( if (result == SCTP_STRRESET_PERFORMED) { if (nums) { - for (i = 0; i < nums; i++) - stream->out[ntohs(str_p[i])].ssn = 0; + for (i = 0; i < nums; i++) { + stream->out[ntohs(str_p[i])].mid = 0; + stream->out[ntohs(str_p[i])].mid_uo = 0; + } } else { - for (i = 0; i < stream->outcnt; i++) - stream->out[i].ssn = 0; + for (i = 0; i < stream->outcnt; i++) { + stream->out[i].mid = 0; + stream->out[i].mid_uo = 0; + } } flags = SCTP_STREAM_RESET_OUTGOING_SSN; @@ -1041,10 +1049,12 @@ struct sctp_chunk *sctp_process_strreset_resp( asoc->ctsn_ack_point = asoc->next_tsn - 1; asoc->adv_peer_ack_point = asoc->ctsn_ack_point; - for (i = 0; i < stream->outcnt; i++) - stream->out[i].ssn = 0; + for (i = 0; i < stream->outcnt; i++) { + stream->out[i].mid = 0; + stream->out[i].mid_uo = 0; + } for (i = 0; i < stream->incnt; i++) - stream->in[i].ssn = 0; + stream->in[i].mid = 0; } for (i = 0; i < stream->outcnt; i++)