#!/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); $MAX_INIT_RETRANS = $SCTP::CONF{"MAX_INIT_RETRANS"}; $TIMEOUT = $SCTP::CONF{"RTO_MAX"} + 5; sctpStartClient($IF0); vLogHTML('================ Main Test ================='); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_init_rcv); if($ret{status} != 0 || $ret{recvFrame} ne 'sctp_chunk_init_rcv') { vLogHTML('Cannot receive SCTP CHUNK_INIT
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } $retrans = 0; while($ret{status} != 1) { %ret = vWarpRecv($IF0, $TIMEOUT, 0, 0, sctp_chunk_init_rcv, sctp_chunk_abort_rcv); last if($ret{status} == 0 && $ret{recvFrame} eq 'sctp_chunk_abort_rcv'); if($ret{status} == 0 && $ret{recvFrame} eq 'sctp_chunk_init_rcv') { $retrans++; } } if($MAX_INIT_RETRANS != $retrans) { vLogHTML("Received SCTP CHUNK_INIT $retrans times, but expect $MAX_INIT_RETRANS times
"); vLogHTML('NG'); exit $V6evalTool::exitFail; } vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME T1InitTimeout.seq - Failure to receive INIT-ACK after retransmit times to 'Max.Init.Retransmits' =head1 PURPOSE To check that if INIT is retransmitted for 'Max.Init.Retransmits' times then the endpoint MUST abort the initialization process and report the error to the SCTP user. =head1 SYNOPSIS =begin html
  ./T1InitTimeout.seq [-tooloption ...] -pkt ./T1InitTimeout.def
    -tooloption : v6eval tool option
  See Also: ../common/STD_PKT_COMMON.def
            ../common/SCTP_COMMON.def
=end html =head1 PRE-TEST CONDITION Association is not established between endpoint A and B. Arrange the data in Endpoint A such that INIT-ACK is not sent in response to INIT message. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (CLOSED) (CLOSED) <----- Associate <---------------- INIT Don't send Start T1-Init timer INIT-ACK | | T1-INIT timer Expires | <---------------- INIT . Retransmit INIT . 'Max.Init.Retransmits' times . <---------------- ABORT Communications Lost -------> TEST DESCRIPTION: 1. Attempt to make an association from endpoint B to endpoint A by sending INIT message from endpoint B. Record the message sequence using a signal emulator. 2. Check A: If INIT message is transmitted for MAX.INIT.RETRANS times without getting an INIT-ACK, Association is aborted and upper layers are reported of this. =head1 NOTE None =head1 REFERENCE RFC 4960 4. SCTP Association State Diagram Notes: 1) If the State Cookie in the received COOKIE ECHO is invalid (i.e., failed to pass the integrity check), the receiver MUST silently discard the packet. Or, if the received State Cookie is expired (see Section 5.1.5), the receiver MUST send back an ERROR chunk. In either case, the receiver stays in the CLOSED state. =begin html
    2)  If the T1-init timer expires, the endpoint MUST retransmit INIT
        and restart the T1-init timer without changing state.  This MUST
        be repeated up to 'Max.Init.Retransmits' times.  After that, the
        endpoint MUST abort the initialization process and report the
        error to the SCTP user.
=end html