#!/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_sack_gap => "Recv SCTP CHUNK_SACK (Gap Block Report)", ); $IF0 = Link0; vCapture($IF0); sctpCheckEnv($IF0); sctpStartServer($IF0); vConnect($IF0); vSendMsg($IF0); vLogHTML('================ Main Test ================='); sctpUpdateSendTSN(2); vSend($IF0, sctp_chunk_data_snd); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_sack_gap); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_sack_gap) { vLogHTML('Cannot receive SCTP CHUNK_SACK
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } sctpUpdateSendTSN(-1); vSend($IF0, sctp_chunk_data_snd); sctpUpdateSendTSN(1); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_sack_rcv); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_sack_rcv) { vLogHTML('Cannot receive SCTP CHUNK_SACK
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } vClose($IF0); vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME SACK_GapBlockReport.seq - Any received DATA chunks with TSN greater than the Cumulative TSN Ack be reported in the Gap Ack Block fields =head1 PURPOSE To check that any received DATA chunks with TSN greater than the value in the Cumulative TSN Ack field SHOULD also be reported in the Gap Ack Block fields. =head1 SYNOPSIS =begin html
  ./SACK_GapBlockReport.seq [-tooloption ...] -pkt ./SACK_GapBlockReport.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 data in endpoint A such that DATA message with TSN greater than the value in the Cumulative TSN Ack field are sent to endpoint B. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) DATA ----------------> (TSN greater than the value in the Cumulative TSN Ack field) <---------------- SACK (Gap Block Report) TEST DESCRIPTION: 1. Send DATA message with TSN greater than the value in the Cumulative TSN Ack field are sent to endpoint B. 2. Check A: SACK with Gap Ack Block is send to acknowledge the reception of DATA chunk from endpoint B. =head1 NOTE None =head1 REFERENCE RFC 4960 6.2. Acknowledgement on Reception of DATA Chunks =begin html
    Acknowledgements MUST be sent in SACK chunks unless shutdown was
    requested by the ULP, in which case an endpoint MAY send an
    acknowledgement in the SHUTDOWN chunk.  A SACK chunk can acknowledge
    the reception of multiple DATA chunks.  See Section 3.3.4 for SACK
    chunk format.  In particular, the SCTP endpoint MUST fill in the
    Cumulative TSN Ack field to indicate the latest sequential TSN (of a
    valid DATA chunk) it has received.  Any received DATA chunks with TSN
    greater than the value in the Cumulative TSN Ack field are reported
    in the Gap Ack Block fields.  The SCTP endpoint MUST report as many
    Gap Ack Blocks as can fit in a single SACK chunk limited by the
    current path MTU.
=end html