#!/usr/bin/perl # # SCTP Conformance Test Suite Implementation # (C) Copyright Fujitsu Ltd. 2008, 2009 # # This file is part of the SCTP Conformance Test Suite implementation. # # The SCTP Conformance Test Suite implementation is free software; # you can redistribute it and/or modify it under the terms of # the GNU General Public License version 2 as published by # the Free Software Foundation. # # The SCTP Conformance Test Suite implementation is distributed in the # hope that it will be useful, but WITHOUT ANY WARRANTY; without even # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU CC; see the file COPYING. If not, write to # the Free Software Foundation, 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # # Please send any bug reports or fixes you make to the # email address(es): # networktest sctp # # Or submit a bug report through the following website: # http://networktest.sourceforge.net/ # # Written or modified by: # Hiroaki Kago # Wei Yongjun # # Any bugs reported given to us we will try to fix... any fixes shared will # be incorporated into the next SCTP release. # ############################################################################## BEGIN { $V6evalTool::TestVersion = '$Name: REL_1_0_0 $'; } use lib "../common"; use V6evalTool; use SCTP; %pktdesc = (); $IF0 = Link0; vCapture($IF0); sctpCheckEnv($IF0); sctpStartClient($IF0); vListen($IF0); vAccept($IF0); vLogHTML('================ Main Test ================='); sctpUpdateRecvACK(); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_data_rcv); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_data_rcv) { vLogHTML('Cannot receive SCTP CHUNK_DATA
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } vSend($IF0, sctp_chunk_shutdown_snd); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_shutdown_ack_rcv); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_shutdown_ack_rcv) { vLogHTML('Cannot receive SCTP CHUNK_SHUTDOWN_ACK
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } vSend($IF0, sctp_chunk_shutdown_complete_snd); vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME ShutWithCTSN.seq - SHUTDOWN is received with TSN equal to the Cumulative TSN Ack point =head1 PURPOSE To check that if SHUTDOWN is received with TSN equal to the Cumulative TSN Ack point, endpoint should verify all its outstanding DATA chunks have been received by the SHUTDOWN sender. =head1 SYNOPSIS =begin html
  ./ShutWithCTSN.seq [-tooloption ...] -pkt ./ShutWithCTSN.def
    -tooloption : v6eval tool option
  See Also: ../common/STD_PKT_COMMON.def
            ../common/SCTP_COMMON.def
=end html =head1 PRE-TEST CONDITION Association is established between endpoint A and B. Arrange data in endpoint A such that SHUTDOWN chunk with TSN equal to the Cumulative TSN Ack point is sent to endpoint B. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) <---------------- DATA (Do not send SACK) SHUTDOWN -----------------> (with TSN equal to the Cumulative TSN Ack point) <---------------- SHUTDOWN-ACK SHUTDOWN-COMPLETE -----------------> TEST DESCRIPTION: 1. Send SHUTDOWN chunk from endpoint A to B with TSN equal to the Cumulative TSN Ack point. 2. Check A: Endpoint B should verify all its outstanding DATA chunks have been received by endpoint A. SHUTDOWN-ACK should be received at endpoint A. =head1 NOTE None =head1 REFERENCE RFC 4960 9.2. Shutdown of an Association Upon reception of the SHUTDOWN, the peer endpoint shall - enter the SHUTDOWN-RECEIVED state, - stop accepting new data from its SCTP user, and =begin html
    -  verify, by checking the Cumulative TSN Ack field of the chunk,
       that all its outstanding DATA chunks have been received by the
       SHUTDOWN sender.
=end html Once an endpoint has reached the SHUTDOWN-RECEIVED state, it MUST NOT send a SHUTDOWN in response to a ULP request, and should discard subsequent SHUTDOWN chunks. If there are still outstanding DATA chunks left, the SHUTDOWN receiver MUST continue to follow normal data transmission procedures defined in Section 6, until all outstanding DATA chunks are acknowledged; however, the SHUTDOWN receiver MUST NOT accept new data from its SCTP user.