#!/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 = ( sctp_chunk_error => "Send SCTP CHUNK_ERROR (Stale Cookie Error)", ); $IF0 = Link0; vCapture($IF0); sctpCheckEnv($IF0); sctpStartClient($IF0); 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; } vSend($IF0, sctp_chunk_error); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_abort, sctp_chunk_init_rcv); if($ret{status} != 0 || ($ret{recvFrame} ne sctp_chunk_abort && $ret{recvFrame} ne sctp_chunk_init_rcv)) { vLogHTML('Cannot receive SCTP CHUNK_INIT
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } if($ret{status} == 0 && $ret{recvFrame} eq sctp_chunk_abort) { vLogHTML(OK); exit $V6evalTool::exitPass; } sctpFetchInitField(\%ret); vSend($IF0, sctp_chunk_init_ack_snd); vAccept($IF0); vRecvMsg($IF0); vShutdown($IF0); vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME ErrorInCookieEchoed.seq - ERROR chunk is received in with Stale Cookie Error COOKIE-ECHOED state =head1 PURPOSE To chech that if ERROR chunk is received in with Stale Cookie Error COOKIE-ECHOED state then the endpoint should resent INIT message and adding a cookie preservative parameter requesting the extension on lifetime of cookie. =head1 SYNOPSIS =begin html
  ./ErrorInCookieEchoed.seq [-tooloption ...] -pkt ./ErrorInCookieEchoed.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 data in endpoint A such that COOKIE-ECHO chunk with stale cookie error is sent to endpoint B. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (CLOSED) (CLOSED) <----- Associate <----------------- INIT INIT-ACK -----------------> <----------------- COOKIE-ECHO ERROR -----------------> (with Cause Stale Cookie Error) TEST DESCRIPTION: 1. Attempt to make an association from endpoint A to B. Send OPEARTION ERROR message with cause Stale Cookie Error after receiving COOKIE message. 2. CHECK A: The action taken by an endpoint on receiving OPERATION ERROR with cause Stale Cookie Error should be one of the following: a. Send a new INIT message to the endpoint to generate a new cookie and reattempt the setup procedure. b. Discard the TCB and report to the upper layers the inability of setting up the association. c. Send a new INIT message to the endpoint adding a cookie preservative parameter requesting the extension on lifetime of cookie. =head1 NOTE None =head1 REFERENCE RFC 4960 3.3.10.3. Stale Cookie Error (3) Cause of error -------------- Stale Cookie Error: Indicates the receipt of a valid State Cookie that has expired. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Cause Code=3 | Cause Length=8 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Measure of Staleness (usec.) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Measure of Staleness: 32 bits (unsigned integer) This field contains the difference, in microseconds, between the current time and the time the State Cookie expired. The sender of this error cause MAY choose to report how long past expiration the State Cookie is by including a non-zero value in the Measure of Staleness field. If the sender does not wish to provide this information, it should set the Measure of Staleness field to the value of zero.