#!/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/P_Problem_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 = ( unrecognized_nxthdr => 'Send packet include unrecognized next header field value', parameter_problem => 'Receive Parameter Problem (unrecognized Next Header)' ); #---------------------------------------------------------------------- # Initialization #---------------------------------------------------------------------- vLogHTML("Initialization
"); vCapture($IF); $ret = setup(); if ($ret == $icmp::subFail){ goto error; } #---------------------------------------------------------------------- # Test #---------------------------------------------------------------------- vLogHTML("Test
"); vSend($IF, unrecognized_nxthdr); #%ret = vRecv($IF, $icmp::wait_reply, 0, 0, parameter_problem); %ret = icmp_vRecv($IF, $icmp::wait_reply, 0, 0, parameter_problem); if ($ret{status} != 0) { vLogHTML('TN can not receive ICMPv6 error message from NUT
'); goto error; } elsif ($ret{recvFrame} eq 'parameter_problem') { vLog("TN can receive ICMPv6 Parameter Problem 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 P_Problem_Global.seq - Unrecognized Next Header (Parameter Problem Generation) =head1 TARGET Host/Router =head1 SYNOPSIS P_Problem_Global.seq [-tooloption ...] -p P_Problem_Global.def =head1 INITIALIZATION Common Test Setup 1.1 =head1 TEST PROCEDURE Verify that a node properly generates Parameter Problem Message when an Unrecognized Next Header type is encountered. This test verifies that NUT send valid ICMPv6 Parameter Problem (code 1) in response to a packet include unknown next header field value. 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. === IPv6 packet ===> src address : TN global address dst address : NUT global address Destination Option Header : next header(128) is not used in NUT 2. << JUDGEMENT >> <=== ICMPv6 Prameter Problem === src address : NUT global address dst address : TN global address Code is 1 Pointer is 40 =head1 JUDGEMENT << PASS >> The NUT must discard the ICMPv6 Echo Request from TN. Therefore, it must not send an Echo Reply. The NUT should send a Parameter Problem Meesage to TN with a code field valude of 1 (Unrecognized Next Header type encountered) The Pointer Field should be 0x28 (offset of the Next Header field). The Source Address of the Packet must be the same as the Global Destination Address of TN's Echo Request packet. =head1 CLEANUP Common Test Cleanup =cut # =head1 REFERENCE # # RFC2463 # # 3.4 Parameter Problem 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 | # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | Pointer | # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ # | 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           4
# 
# # =end html # # =begin html #
#    Code           0 - erroneous header field encountered
# 1 - unrecognized Next Header type encountered
# 2 - unrecognized IPv6 option encountered #
# # =end html # # =begin html #
#    Pointer        Identifies the octet offset within the
#                   invoking packet where the error was detected.
# The pointer will point beyond the end of the ICMPv6 # packet if the field in error is beyond what can fit # in the maximum size of an ICMPv6 error message.
#
# # =end html # # Description # # =begin html #
#    If an IPv6 node processing a packet finds a problem with a field in
#    the IPv6 header or extension headers such that it cannot complete
#    processing the packet, it MUST discard the packet and SHOULD send an
#    ICMPv6 Parameter Problem message to the packet's source, indicating
#    the type and location of the problem.
# 
# # =end html # # =begin html #
#    The pointer identifies the octet of the original packet's header
#    where the error was detected. For example, an ICMPv6 message with
#    Type field = 4, Code field = 1, and Pointer field = 40 would indicate
#    that the IPv6 extension header following the IPv6 header of the
#    original packet holds an unrecognized Next Header field value.
# 
# # =end html # =pod =head1 REFERENCE =begin html
RFC 4443 - ICMPv6 (ICMP for IPv6)
=end html =head1 SEE ALSO perldoc V6evalTool =cut