#!/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); %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; } vListen($IF0); vLogHTML('================ Main Test ================='); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_cookie_echo_rcv); if($ret{status} != 0 || $ret{recvFrame} ne 'sctp_chunk_cookie_echo_rcv') { vLogHTML('Cannot receive SCTP CHUNK_COOKIE_ECHO
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } $retrans = 0; while($ret{status} != 1) { %ret = vWarpRecv($IF0, $TIMEOUT, 0, 0, sctp_chunk_cookie_echo_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_cookie_echo_rcv') { $retrans++; } } if($MAX_INIT_RETRANS != $retrans) { vLogHTML("Received SCTP CHUNK_COOKIE_ECHO $retrans times, but expect $MAX_INIT_RETRANS times
"); vLogHTML('NG'); exit $V6evalTool::exitFail; } vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME T1CookieTimeout2.seq - Retransmit times for failure to receive COOKIE-ACK (retransmitted INIT message) =head1 PURPOSE To check that if COOKIE-ECHO 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
  ./T1CookieTimeout2.seq [-tooloption ...] -pkt ./T1CookieTimeout2.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 COOKIE-ACK is not sent in response to COOKIE-ECHO 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 INIT=ACK ----------------> <---------------- COOKIE-ECHO Don't send Start T1-cookie timer COOKIE-ACK message | | T1-cookie timer expires | <---------------- COOKIE-ECHO . Retransmit COOKIE-ECHO . '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. If INIT message is transmitted for 1 times without getting an INIT-ACK, send INIT-ACK message. 3. Receive COOKIE-ECHO message from endpoint B and not send COOKIE-ACK to response OOKIE-ECHO message. 4. Check A: If COOKIE-ECHO message is transmitted for MAX.INIT.RETRANS times without getting an COOKIE-ACK, Association is aborted and upper layers are reported of this. =head1 NOTE None =head1 REFERENCE RFC 4960 4. SCTP Association State Diagram Notes: =begin html
    3)  If the T1-cookie timer expires, the endpoint MUST retransmit
        COOKIE ECHO and restart the T1-cookie 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