#!/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_bad_csum => "Send SCTP CHUNK_SACK (with Invalid Checksum)", ); $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; } vSend($IF0, sctp_chunk_sack_bad_csum); sctpUpdateRecvACK(-1); vRecvMsg($IF0); vShutdown($IF0); vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME InvalidChecksumInSack.seq - SACK chunk is received with invalid checksum =head1 PURPOSE To check that if SACK chunk is received with invalid checksum, the endpoint should silently discards the SACK. =head1 SYNOPSIS =begin html
  ./InvalidChecksumInSack.seq [-tooloption ...] -pkt ./InvalidChecksumInSack.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 SACK message is send to endpoint B with invalid checksum. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (ESTABLISHED) (ESTABLISHED) <----------------- DATA SACK -----------------> Silently discard (with invalid checksum) <----------------- DATA SACK -----------------> TEST DESCRIPTION: 1. Attempt to initiate an association from endpoint A to B. Send SACK message with wrong CRC-32 checksum after received DATA. Record the message sequence using a signal emulator. 2. Check A: SACK message is discarded and no other actions are taken. 3. Check B: Was the message sequence as above. =head1 NOTE None =head1 REFERENCE RFC 4960 1.5.6. Packet Validation =begin html
    A mandatory Verification Tag field and a 32-bit checksum field (see
    Appendix B for a description of the CRC32c checksum) are included in
    the SCTP common header.  The Verification Tag value is chosen by each
    end of the association during association startup.  Packets received
    without the expected Verification Tag value are discarded, as a
    protection against blind masquerade attacks and against stale SCTP
    packets from a previous association.  The CRC32c checksum should be
    set by the sender of each SCTP packet to provide additional
    protection against data corruption in the network.  The receiver of
    an SCTP packet with an invalid CRC32c checksum silently discards the
    packet.
=end html