#!/usr/bin/perl # # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # 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_2.seq,v 1.3 2008/04/01 07:03:10 akisada Exp $ #---------------------------------------------------------------------- BEGIN { $V6evalTool::TestVersion = '$Name: V6LC_4_0_1 $'; } use V6evalTool; use icmp; use lib '../'; use AdvancedFunctionality; $IF = Link0; checkNUT(router); %pktdesc = ( 'echo_request' => 'Send Echo Request to an offlink host', 'dst_unreach' => 'Receive Destination Unreachable (Beyond scope of source address)' ); #----------------------------------------------------------------------- # Initialization #----------------------------------------------------------------------- vLogHTML("Initialization
"); vCapture($IF); $ret = setup("no_route"); if ($ret == $icmp::subFail){ goto error; } #----------------------------------------------------------------------- # Test #----------------------------------------------------------------------- vLogHTML("Test
"); vSend($IF, echo_request); #%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("no_route"); vStop($IF); exit($V6evalTool::exitPass); } else { vLogHTML('TN receive unexpected packets from NUT
'); goto error; }; error: vLogHTML('FAIL
'); cleanup("no_route"); vStop($IF); exit($V6evalTool::exitFail); #---------------------------------------------------------------------- __END__ =head1 NAME Dst_Unreach_2.seq - check ICMPv6 Destination Unreachable code 0 =head1 TARGET Router =head1 SYNOPSIS Dst_Unreach_2.seq [-tooloption ...] -p Dst_Unreach_2.def =head1 INITIALIZATION When test starts, configure a default route with TN as the next hop. And states of Neighbor Cache Entry for TN's addresses are reachable. =head1 TEST PROCEDURE This test verifies that NUT sends valid ICMPv6 Destination Unreachable (code 2) in response to a packet when the scope of the source address is smaller than the scope of the destination address and the packet cannot be delivered to the destination without leaving the scope of the source address. TN NUT --------------------------- 1. === Echo Request ===> src address : TN link-local address dst address : offlink address 2. << JUDGEMENT >> <=== ICMPv6 Destination Unreachable === Code is 2 =head1 JUDGEMENT << PASS >> NUT send ICMPv6 Destination Unreachable. << FAIL >> NUT do not send ICMPv6 Destination Unreachable. =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
# Copied from the Source Address field of the invoking # packet. #
# # =end html # # ICMPv6 Fields: # # =begin html #
#    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.) # # =begin html #
#    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).
# 
# # =end html # # 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. # # 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. # =pod =head1 REFERENCE =begin html
RFC 4443 - ICMPv6 (ICMP for IPv6)
=end html =head1 SEE ALSO perldoc V6evalTool =cut