#!/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); vRecvMsg($IF0); vLogHTML('================ Main Test ================='); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_shutdown_rcv); if($ret{status} != 0 || $ret{recvFrame} ne 'sctp_chunk_shutdown_rcv') { vLogHTML('Cannot receive SCTP CHUNK_SHUTDOWN
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } # SHUTDOWN message is transmitted again if T2-shutdown timer expires vShutdown($IF0); vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME T2ShutdownRetrans1.seq - SHUTDOWN message is transmitted again if T2-shutdown timer expires =head1 PURPOSE To check that if T1-shutdown timer expires then the endpoint MUST retransmit SHUTDOWN and restart the T1-shutdown timer. =head1 SYNOPSIS =begin html
  ./T2ShutdownRetrans1.seq [-tooloption ...] -pkt ./T2ShutdownRetrans1.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 no SHUTDOWN-ACK is sent in response to SHUTDOWN. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) <----- Terminate <---------------- SHUTDOWN | | T2-Shutdown | Timer | <---------------- SHUTDOWN TEST DESCRIPTION: 1. Try to terminate an association between endpoint A and endpoint B by sending SHUTDOWN message from endpoint B. Don't send the SHUTDOWN-ACK or any DATAGRAM from the endpoint A. 2. Check A: After expiry of T2-Shutdown timer, SHUTDOWN message is sent again. =head1 NOTE None =head1 REFERENCE RFC 4960 9.2. Shutdown of an Association =begin html
    Once all its outstanding data has been acknowledged, the endpoint
    shall send a SHUTDOWN chunk to its peer including in the Cumulative
    TSN Ack field the last sequential TSN it has received from the peer.
    It shall then start the T2-shutdown timer and enter the SHUTDOWN-SENT
    state.  If the timer expires, the endpoint must resend the SHUTDOWN
    with the updated last sequential TSN received from its peer.
=end html The rules in Section 6.3 MUST be followed to determine the proper timer value for T2-shutdown. To indicate any gaps in TSN, the endpoint may also bundle a SACK with the SHUTDOWN chunk in the same SCTP packet. 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.