#!/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_init_ack_bad_hostname => "Send SCTP CHUNK_INIT_ACK (with Unresolvable Host Name)", sctp_chunk_abort_bad_hostname => "Recv SCTP CHUNK_ABORT (with Unresolvable Address)", ); $IF0 = Link0; vCapture($IF0); sctpCheckEnv($IF0); sctpStartClient($IF0); vLogHTML('================ Main Test ================='); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_init_rcv); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_init_rcv) { vLogHTML('Cannot receive SCTP CHUNK_INIT
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } sctpFetchInitField(\%ret); vSend($IF0, sctp_chunk_init_ack_bad_hostname); %ret = vWarpRecv($IF0, 10, 0, 0, sctp_chunk_abort_bad_hostname); if($ret{status} != 0 || $ret{recvFrame} ne sctp_chunk_abort_bad_hostname) { vLogHTML('Cannot receive SCTP CHUNK_ABORT
'); vLogHTML('NG'); exit $V6evalTool::exitFail; } vLogHTML(OK); exit $V6evalTool::exitPass; ###################################################################### __END__ =head1 NAME InitAckBadHostName.seq - INIT-ACK chunk is received with Unresolvable Host Name Address =head1 PURPOSE To chech that if INIT-ACK chunk is received with Unresolvable Host Name Address then the endpoint response with ABORT message and error cause is set to "Unresolvable Address". =head1 SYNOPSIS =begin html
  ./InitAckBadHostName.seq [-tooloption ...] -pkt ./InitAckBadHostName.def
    -tooloption : v6eval tool option
  See Also: ../common/STD_PKT_COMMON.def
            ../common/SCTP_COMMON.def
=end html =head1 PRE-TEST CONDITION Association is not established between endpoint A and B. Arrange the data in endpoint A such that Host Name address is sent to Endpoint B with no other IP address in INIT-ACK message. Also Host Name address sent by endpoint A is not resolvable at Endpoint B. =head1 TEST PROCEDURE Endpoint A Endpoint B ULP (CLOSED) (CLOSED) <----- Associate <----------------- INIT INIT-ACK -----------------> (with Unresolvable Host Name Address) <----------------- ABORT (with error Unresolvable Address) TEST DESCRIPTION: 1. Attempt to make an association from endpoint B to A. Send INIT-ACK message containing Host Name Address with no other IP address. Record the message sequence using a signal emulator. 2. Check A: ABORT is sent at the IP address from where INIT message is received with error cause Unresolvable Address. =head1 NOTE None =head1 REFERENCE RFC 4960 5.1.2. Handle Address Parameters B) If there is a Host Name parameter present in the received INIT or INIT ACK chunk, the endpoint shall resolve that host name to a list of IP address(es) and derive the transport address(es) of this peer by combining the resolved IP address(es) with the SCTP source port. The endpoint MUST ignore any other IP Address parameters if they are also present in the received INIT or INIT ACK chunk. The time at which the receiver of an INIT resolves the host name has potential security implications to SCTP. If the receiver of an INIT resolves the host name upon the reception of the chunk, and the mechanism the receiver uses to resolve the host name involves potential long delay (e.g., DNS query), the receiver may open itself up to resource attacks for the period of time while it is waiting for the name resolution results before it can build the State Cookie and release local resources. Therefore, in cases where the name translation involves potential long delay, the receiver of the INIT MUST postpone the name resolution till the reception of the COOKIE ECHO chunk from the peer. In such a case, the receiver of the INIT SHOULD build the State Cookie using the received Host Name (instead of destination transport addresses) and send the INIT ACK to the source IP address from which the INIT was received. The receiver of an INIT ACK shall always immediately attempt to resolve the name upon the reception of the chunk. The receiver of the INIT or INIT ACK MUST NOT send user data (piggy-backed or stand-alone) to its peer until the host name is successfully resolved. =begin html
       If the name resolution is not successful, the endpoint MUST
       immediately send an ABORT with "Unresolvable Address" error cause
       to its peer.  The ABORT shall be sent to the source IP address
       from which the last peer packet was received.
=end html