#!/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_heartbeat => "Send SCTP CHUNK_HEARTBEAT", sctp_chunk_heartbeat_ack => "Recv SCTP CHUNK_HEARTBEAT_ACK", ); $IF0 = Link0; vCapture($IF0); sctpCheckEnv($IF0); sctpStartClient($IF0); vListen($IF0); vAccept($IF0); vLogHTML('================ Main Test ================='); sctpUpdateRecvACK(); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_data_rcv); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_data_rcv) { vLogHTML('Cannot receive SCTP CHUNK_DATA
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } sctpUpdateRecvACK(-1); vSend($IF0, sctp_chunk_shutdown_snd); sctpUpdateRecvACK(); vSend($IF0, sctp_chunk_heartbeat); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_heartbeat_ack); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_heartbeat_ack) { vLogHTML('Cannot receive SCTP CHUNK_HEARTBEAT_ACK
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_data_rcv); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_data_rcv) { vLogHTML('Cannot receive SCTP CHUNK_DATA
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } vSend($IF0, sctp_chunk_sack_snd); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_shutdown_ack_rcv); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_shutdown_ack_rcv) { vSend($IF0, sctp_chunk_abort_snd); 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 HB_RecvInShutRecv.seq - HEARTBEAT chunk is received in SHUTDOWN-RECEIVED State =head1 PURPOSE To check that if HEARTBEAT chunk is received in SHUTDOWN-RECEIVED State, the endpoint should responds it by HEARTBEAT-ACK with the information carried in the Heartbeat message. =head1 SYNOPSIS =begin html
  ./HB_RecvInShutRecv.seq [-tooloption ...] -pkt ./HB_RespondWithAck.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 HEARTBEAT message is sent to endpoint B when endpoint B is in SHUTDOWN-RECEIVED State. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (SHUTDOWN-SENT) (SHUTDOWN-RECEIVED) HEARTBEAT -----------------> <----------------- HEARTBEAT-ACK (Information copied from the HEARTBEAT message) TEST DESCRIPTION: 1. Send HEARTBEAT message from endpoint A to B when endpoint B is in SHUTDOWN-RECEIVED State. Record the message sequence using an emulator. 2. Check A: HEARTBEAT-ACK message will be sent in response to HEARTBEAT message. 3. Check B: Information carried in the HEARTBEAT message is carried back into the HEARTBEAT-ACK message. 4. Check C: After expiry of T3-rtx timer DATA message is transmitted again. =head1 NOTE None =head1 REFERENCE RFC 4960 8.3. Path Heartbeat =begin html
    By default, an SCTP endpoint SHOULD monitor the reachability of the
    idle destination transport address(es) of its peer by sending a
    HEARTBEAT chunk periodically to the destination transport
    address(es).  HEARTBEAT sending MAY begin upon reaching the
    ESTABLISHED state and is discontinued after sending either SHUTDOWN
    or SHUTDOWN-ACK.  A receiver of a HEARTBEAT MUST respond to a
    HEARTBEAT with a HEARTBEAT-ACK after entering the COOKIE-ECHOED state
    (INIT sender) or the ESTABLISHED state (INIT receiver), up until
    reaching the SHUTDOWN-SENT state (SHUTDOWN sender) or the SHUTDOWN-
    ACK-SENT state (SHUTDOWN receiver).
=end html