#!/usr/bin/perl
#
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
# Yokogawa Electric Corporation.
# All rights reserved.
#
# Redistribution and use of this software in source and binary
# forms, with or without modification, are permitted provided that
# the following conditions and disclaimer are agreed and accepted
# by the user:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with
# the distribution.
#
# 3. Neither the names of the copyrighters, the name of the project
# which is related to this software (hereinafter referred to as
# "project") nor the names of the contributors may be used to
# endorse or promote products derived from this software without
# specific prior written permission.
#
# 4. No merchantable use may be permitted without prior written
# notification to the copyrighters.
#
# 5. The copyrighters, the project and the contributors may prohibit
# the use of this software at any time.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# $TAHI: ct/icmp.p2/Dst_Unreach_4_Global.seq,v 1.9 2008/07/31 02:48:19 hide Exp $
#----------------------------------------------------------------------
BEGIN { $V6evalTool::TestVersion = '$Name: V6LC_4_0_5 $'; }
use V6evalTool;
use icmp;
$IF = Link0;
%pktdesc = (
udp_pkt => 'Send UDP packet dst port = 9000 (Global address)',
dst_unreach => 'Receive Destination Unreachable (Port Unreachable)'
);
#-----------------------------------------------------------------------
# Initialization
#-----------------------------------------------------------------------
vLogHTML("Initialization
");
vCapture($IF);
$ret = setup();
if ($ret == $icmp::subFail){
goto error;
}
#-----------------------------------------------------------------------
# Test
#-----------------------------------------------------------------------
vLogHTML("Test
");
vSend($IF, udp_pkt);
#%ret = vRecv($IF, $icmp::wait_reply, 0, 0, dst_unreach);
%ret = icmp_vRecv($IF, $icmp::wait_reply, 0, 0, dst_unreach);
if ($ret{status} != 0) {
vLogHTML('TN can not receive ICMPv6 error message from NUT
');
goto error;
}
elsif ($ret{recvFrame} eq 'dst_unreach') {
vLog("TN can receive ICMPv6 error message from NUT");
vLog("OK");
cleanup();
vStop($IF);
exit($V6evalTool::exitPass);
}
else {
vLogHTML('TN receive unexpected packets from NUT
');
goto error;
};
error:
vLogHTML('FAIL
');
cleanup();
vStop($IF);
exit($V6evalTool::exitFail);
#----------------------------------------------------------------------
__END__
=head1 NAME
Dst_Unreach_4_Global.seq - Port Unreachable - Global Address
=head1 TARGET
Host/Router
=head1 SYNOPSIS
Dst_Unreach_4_Global.seq [-tooloption ...] -p
Dst_Unreach_4_Global.def
=head1 INITIALIZATION
Common Test Setup 1.1
=head1 TEST PROCEDURE
Verify that a node properly generates Destination Unreachable Messages.
This test verifies that NUT sends valid ICMPv6 Destination
Unreachable (code 4) in response to a packet which can not
be delivered to destination port.
And this test verifies that the message processing rule ,
If the message is a response to a message sent to one of the
node's unicast addresses, the Source Address of the reply must
be that same address.
TN NUT
---------------------------
1.
=== UDP packet ===>
src address : TN global address
dst address : NUT global address
port : not used in NUT (9000)
2.
<< JUDGEMENT >>
<=== ICMPv6 Destination Unreachable ===
Code is 4
=head1 JUDGEMENT
<< PASS >>
The NUT should send a Destination Unreachable Message to TN.
The Source Address of the Packet should be one of the NUT's unicast addresses,
while the Destination Address should be the same as the Global Source Address in TN's packet.
The Code field should be set to "4".
The invoking Echo Request packet included in the Error Message must not exceed minimum IPv6 MTU.
=head1 CLEANUP
Common Test Cleanup
=cut
# =head1 REFERENCE
#
# RFC2463
# 3.1 Destination Unreachable Message
#
# 0 1 2 3
# 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | Type | Code | Checksum |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | Unused |
# +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
# | As much of invoking packet |
# + as will fit without the ICMPv6 packet +
# | exceeding the minimum IPv6 MTU [IPv6] |
#
# IPv6 Fields:
#
# =begin html
#
# Destination Address# # =end html # # ICMPv6 Fields: # # =begin html #
# Copied from the Source Address field of the invoking # packet. #
# Type 1 ## # =end html # # =begin html #
# Code 0 - no route to destination # 1 - communication with destination # administratively prohibited # 2 - (not assigned) # 3 - address unreachable # 4 - port unreachable ## # =end html # # Unused This field is unused for all code values. # It must be initialized to zero by the sender # and ignored by the receiver. # # Description # # A Destination Unreachable message SHOULD be generated by a router, or # by the IPv6 layer in the originating node, in response to a packet # that cannot be delivered to its destination address for reasons other # than congestion. (An ICMPv6 message MUST NOT be generated if a # packet is dropped due to congestion.) # # If the reason for the failure to deliver is lack of a matching entry # in the forwarding node's routing table, the Code field is set to 0 # (NOTE: this error can occur only in nodes that do not hold a "default # route" in their routing tables). # # If the reason for the failure to deliver is administrative # prohibition, e.g., a "firewall filter", the Code field is set to 1. # # If there is any other reason for the failure to deliver, e.g., # inability to resolve the IPv6 destination address into a # corresponding link address, or a link-specific problem of some sort, # then the Code field is set to 3. # # =begin html #
# A destination node SHOULD send a Destination Unreachable message with # Code 4 in response to a packet for which the transport protocol # (e.g., UDP) has no listener, if that transport protocol has no # alternative means to inform the sender. ## # =end html # # =pod =head1 REFERENCE =begin html
=end html =head1 SEE ALSO perldoc V6evalTool =cutRFC 4443 - ICMPv6 (ICMP for IPv6)