#!/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_shutdown_complete_peer => "Send SCTP CHUNK_SHUTDOWN_COMPLETE (With peer's Verification Tag and TFlag=1)", ); $IF0 = Link0; vCapture($IF0); sctpCheckEnv($IF0); sctpStartServer($IF0); vConnect($IF0); vLogHTML('================== vClose =================='); 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; } vLogHTML('================ Main Test ================='); vSend($IF0, sctp_chunk_shutdown_complete_peer); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_shutdown_ack_rcv); if($ret{status} == 0 && $ret{recvFrame} eq 'sctp_chunk_shutdown_ack_rcv') { vLogHTML('Received unexpected SCTP CHUNK_SHUTDOWN_ACK
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME ShutCompWithPeerTag1.seq - SHUTDOWN-COMPLETE chunk is received with the peer's Tag and T bit is set =head1 PURPOSE To check that receiving SHUTDOWN-COMPLETE message with the peer's Verification Tag and T bit is set can terminate an association. =head1 SYNOPSIS =begin html
  ./ShutCompWithPeerTag1.seq [-tooloption ...] -pkt ./ShutCompWithPeerTag1.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 an SHUTDOWN-COMPLETE message is sent to endpoint B containing the peer's Verification Tag and T bit is set. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) SHUTDOWN --------------> <-------------- SHUTDOWN-ACK SHUTDOWN-COMPLETE --------------> Association is removed (with peer's Verification Tag and T bit is set) Communication Lost ---------> TEST DESCRIPTION: 1. Attempt to terminate an association between endpoint A and endpoint B by sending SHUTDOWN-COMPLETE message. 2. SHUTDOWN-COMPLETE message is sent with peer's Verification Tag and T-bit set to 1. 3. Check A: No SHUTDOWN-ACK message is sent again and association is removed. 4. Check B: ULP are reported of the association closure. =head1 NOTE None =head1 REFERENCE RFC 4960 8.5.1. Exceptions in Verification Tag Rules C) Rules for packet carrying SHUTDOWN COMPLETE: - When sending a SHUTDOWN COMPLETE, if the receiver of the SHUTDOWN ACK has a TCB, then the destination endpoint's tag MUST be used, and the T bit MUST NOT be set. Only where no TCB exists should the sender use the Verification Tag from the SHUTDOWN ACK, and MUST set the T bit. =begin html
    -   The receiver of a SHUTDOWN COMPLETE shall accept the packet if
        the Verification Tag field of the packet matches its own tag and
        the T bit is not set OR if it is set to its peer's tag and the T
        bit is set in the Chunk Flags.  Otherwise, the receiver MUST
        silently discard the packet and take no further action.  An
        endpoint MUST ignore the SHUTDOWN COMPLETE if it is not in the
        SHUTDOWN-ACK-SENT state.
=end html