#!/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_dup => "Recv SCTP CHUNK_SACK (Dup Block Report)", ); $IF0 = Link0; vCapture($IF0); sctpCheckEnv($IF0); sctpStartServer($IF0); vConnect($IF0); vSendMsg($IF0); vLogHTML('================ Main Test ================='); vSend($IF0, sctp_chunk_data_snd); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_sack_dup); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_sack_dup) { vLogHTML('Cannot receive SCTP CHUNK_SACK
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } vClose($IF0); vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME SACK_DupWithNoNewData.seq - Duplicate DATA chunk is received with no new DATA chunk =head1 PURPOSE To chech that if duplicate DATA chunk is received with no new DATA chunk then the endpoint MUST immediately send a SACK with no delay. =head1 SYNOPSIS =begin html
  ./SACK_DupWithNoNewData.seq [-tooloption ...] -pkt ./SACK_DupWithNoNewData.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 duplicate TSN number are sent to endpoint B. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) DATA -----------------> (with duplicate TSN number) <----------------- SACK (Dup Block Report) TEST DESCRIPTION: 1. Send DATA message with duplicate TSN number is sent to endpoint B. 2. Check A: SACK with Dup Ack Report is send to acknowledge the reception of DATA chunk from endpoint B with no delay. =head1 NOTE None =head1 REFERENCE RFC 4960 6.2. Acknowledgement on Reception of DATA Chunks =begin html
    When a packet arrives with duplicate DATA chunk(s) and with no new
    DATA chunk(s), the endpoint MUST immediately send a SACK with no
    delay.  If a packet arrives with duplicate DATA chunk(s) bundled with
    new DATA chunks, the endpoint MAY immediately send a SACK.  Normally,
    receipt of duplicate DATA chunks will occur when the original SACK
    chunk was lost and the peer's RTO has expired.  The duplicate TSN
    number(s) SHOULD be reported in the SACK as duplicate.
=end html When an endpoint receives a SACK, it MAY use the duplicate TSN information to determine if SACK loss is occurring. Further use of this data is for future study.