#!/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_0_Global.seq,v 1.4 2005/04/11 08:58:38 akisada Exp $ #---------------------------------------------------------------------- BEGIN { $V6evalTool::TestVersion = '$Name: V6LC_4_0_1 $'; } use V6evalTool; use icmp; $IF = Link0; checkNUT(router); %pktdesc = ( echo_request => 'Send Echo Request to an offlink host', dst_unreach => 'Receive Destination Unreachable (No Route)' ); #----------------------------------------------------------------------- # 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_0_Global.seq - check ICMPv6 Destination Unreachable code 0 =head1 TARGET Router =head1 SYNOPSIS Dst_Unreach_0_Global.seq [-tooloption ...] -p Dst_Unreach_0_Global.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 0) in response to a packet which can not be delivered to destination address because NUT have no route. 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. === Echo Request ===> src address : TN global address dst address : offlink address 2. << JUDGEMENT >> <=== ICMPv6 Destination Unreachable === Code is 0 =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 2463 - ICMPv6 (ICMP for IPv6)
=end html =head1 SEE ALSO perldoc V6evalTool =cut