#!/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_Err_Header_Field.seq,v 1.9 2008/07/31 02:48:19 hide Exp $ #---------------------------------------------------------------------- vLog("*** test ***"); BEGIN { $V6evalTool::TestVersion = '$Name: V6LC_4_0_5 $'; } use V6evalTool; use icmp; $IF = Link0; %pktdesc = ( echo_request_1st_global => 'Send Fragmented Echo Request (Global address)', echo_reply_global_1024 => 'Receive Echo Reply (Global address)', echo_request_1st => 'Send 1st Fragmented Echo Request (Global address) Erroneous Header Field', echo_request_2nd => 'Send 2nd Fragmented Echo Request (Global address)', parameter_problem => 'Receive Parameter Problem (erroneous header field)', ); #---------------------------------------------------------------------- # Initialization #---------------------------------------------------------------------- vLogHTML("Initialization
"); vCapture($IF); $ret = setup(); if ($ret == $icmp::subFail){ goto error; } #---------------------------------------------------------------------- # Test #---------------------------------------------------------------------- vLogHTML("Test
"); vSend($IF, echo_request_1st); %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(); exit($V6evalTool::exitPass); } else { vLogHTML('TN receive unexpected packets from NUT
'); goto error; }; error: vLogHTML('FAIL
'); cleanup(); exit($V6evalTool::exitFail); #---------------------------------------------------------------------- __END__ =head1 NAME P_Problem_Err_Header_Field.seq - Erroneous Header Field (Parameter Problem Generation) =head1 TARGET Host/Router =head1 SYNOPSIS P_Problem_Err_Header_Field.seq [-tooloption ...] -p P_Problem_Err_Header_Field.def =head1 INITIALIZATION Common Test Setup 1.1 =head1 TEST PROCEDURE Verify that a node properly generates Parameter Problem Messages for an Erroneous Header Field. TN NUT | | |-------------------------->| | Echo Request (1st) | | | | | |<--------------------------| | ICMP Error | | | | | v v 1. TN1 transmits an Echo Request to the NUT. The Source Address of the Packet is set to TN's Global address. The Destination Address of the packet is set to the NUT's Global address. 2. Observe the packets transmitted by the NUT. Echo Request (1st fragment) is: IPv6 Header Version = 6 Traffic Class = 0 FlowLabel = 0 PayloadLength = 37 (not multiple of 8 octets) NextHeader = 56 (Fragment Header) SourceAddress = TN Global Address DestinationAddress = NUT Global Address Fragment Header NextHeader = 58 (ICMP) FragmentOffset = 0 (1st fragment) MFlag = 1 (more fragment) =head1 JUDGEMENT << PASS >> The NUT must diecard 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 0 (Erroneous Header Field encountered) because the Payload Length is not a multiple of 8 octets. =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