#!/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); sctpStartServer($IF0); vConnect($IF0); vLogHTML('================ Main Test ================='); 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; } # SHUTDOWN-ACK message is transmitted again if T2-shutdown timer expires %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 T2ShutdownRetrans2.seq - SHUTDOWN-ACK message is transmitted again if T2-shutdown timer expires =head1 PURPOSE To check that if the T2-shutdown timer expires, the endpoint MUST retransmit SHUTDOWN-ACK and restart the T2-shutdown timer without changing state. =head1 SYNOPSIS =begin html
  ./T2ShutdownRetrans2.seq [-tooloption ...] -pkt ./T2ShutdownRetrans2.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-COMPLETE is not sent in response to SHUTDOWN-ACK message. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) SHUTDOWN -----------------> <----------------- SHUTDOWN-ACK | | T2 Shutdown | Timer expired | <----------------- SHUTDOWN-ACK 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-COMPLETE or any DATAGRAM from the endpoint A. 2. Check A: After expiry of T2-Shutdown timer, SHUTDOWN-ACK message is sent again. =head1 NOTE None =head1 REFERENCE RFC 4960 9.2. Shutdown of an Association =begin html
    If the receiver of the SHUTDOWN has no more outstanding DATA chunks,
    the SHUTDOWN receiver MUST send a SHUTDOWN ACK and start a T2-
    shutdown timer of its own, entering the SHUTDOWN-ACK-SENT state.  If
    the timer expires, the endpoint must resend the SHUTDOWN ACK.
=end html The sender of the SHUTDOWN ACK should limit the number of retransmissions of the SHUTDOWN ACK chunk to the protocol parameter 'Association.Max.Retrans'. If this threshold is exceeded, the endpoint should destroy the TCB and may report the peer endpoint unreachable to the upper layer (and thus the association enters the CLOSED state).