#!/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); sctpStartEchoClient($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; } sctpUpdateRecvACK(-1); vSend($IF0, sctp_chunk_shutdown_snd); sctpUpdateRecvACK(1); sctpUpdateSendTSN(); vSend($IF0, sctp_chunk_data_snd); vSend($IF0, sctp_chunk_sack_snd); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_sack_rcv, sctp_chunk_shutdown_ack_rcv); if ($ret{status} != 0 || ($ret{recvFrame} ne sctp_chunk_sack_rcv && $ret{recvFrame} ne sctp_chunk_shutdown_ack_rcv)) { vLogHTML('Cannot receive SCTP CHUNK_SHUTDOWN_ACK
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } if ($ret{status} == 0 && $ret{recvFrame} eq sctp_chunk_sack_rcv) { %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 ShutInEstab1.seq - Stop accepting new data from its SCTP user in SHUTDOWN-RECEIVED State =head1 PURPOSE To check that if endpoint is in SHUTDOWN-RECEIVED state then the endpoint should stop accepting new data from its SCTP user. =head1 SYNOPSIS =begin html
  ./ShutInEstab1.seq [-tooloption ...] -pkt ./ShutInEstab1.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 the data in endpoint A such that SHUTDOWN message is sent to endpoint B after receiving DATA message from it. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) <----- Send <----------------- DATA SHUTDOWN -----------------> DATA -----------------> <----------------- SACK SACK -----------------> <----- Send DATA will not be sent TEST DESCRIPTION: 1. Attempt to terminate an association from endpoint A to endpoint B by sending SHUTDOWN. Record the message sequence using a signal emulator. 2. Send data from ULP while in SHUTDOWN-RECEIVED state. 3. Check A: DATA will not be sent. =head1 NOTE None =head1 REFERENCE RFC 4960 9.2. Shutdown of an Association An endpoint should limit the number of retransmissions of the SHUTDOWN chunk to the protocol parameter 'Association.Max.Retrans'. If this threshold is exceeded, the endpoint should destroy the TCB and MUST report the peer endpoint unreachable to the upper layer (and thus the association enters the CLOSED state). The reception of any packet from its peer (i.e., as the peer sends all of its queued DATA chunks) should clear the endpoint's retransmission count and restart the T2-shutdown timer, giving its peer ample opportunity to transmit all of its queued DATA chunks that have not yet been sent. Upon reception of the SHUTDOWN, the peer endpoint shall - enter the SHUTDOWN-RECEIVED state, =begin html
    -  stop accepting new data from its SCTP user, and
=end 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.