#!/usr/bin/perl # # $Name: V6LC_4_0_5 $ # # 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. # # $Id: EX_NH_UnrecognizedEN.seq,v 1.9 2008/07/31 02:40:32 hide Exp $ # ###################################################################### BEGIN { $V6evalTool::TestVersion = '$Name: V6LC_4_0_5 $'; } use V6evalTool; use CommonSPEC; $pktdesc{'packet_ur'} = 'Send IPv6 packet with Unrecognized Next Header in Destination Options Header'; $pktdesc{'icmperr'} = 'Recv Parameter Problem (unrecognized Next Header type encountered)'; $pktdesc{'echo_request'} = 'Send Echo Request'; $pktdesc{'echo_reply'} = 'Recv Echo Reply'; $endStatus = $V6evalTool::exitPass; $min = 138; $max = 252; ###################################################################### $IF = 'Link0'; vCapture($IF); ###################################################################### vLogHTML(' -- Test --
'); for ($step = $min; $step <= $max; $step++) { vLogHTML("Next Header = $step
"); vCPP("-DNEXTHEADER=$step"); vSend($IF, 'packet_ur'); %ret = nd_vRecv_EN($IF, $CommonSPEC::wait_reply, 0, 0, 'icmperr'); if ($ret{'status'} != 0) { vLogHTML('Cannot receive ICMPv6 Parameter Promlem Message
'); vLogHTML('NG
'); $endStatus = $V6evalTool::exitFail; last; } vClear($IF); vSend($IF, 'echo_request'); %ret = nd_vRecv_EN($IF, $CommonSPEC::wait_reply, 0, 0, 'echo_reply'); if ($ret{'status'} == 0) { vLogHTML('Receive Echo Reply
'); vLogHTML('OK
'); } else { vLogHTML('Cannot receive Echo Reply
'); vLogHTML('NG
'); $endStatus = $V6evalTool::exitFail; last; } vClear($IF); vSleep(2); } #----- end test $ret = cleanup($IF); vStop($IF); if ($ret == $CommonSPEC::Success) { exit($endStatus); } else { exit($V6evalTool::exitFatal); } ###################################################################### __END__ =head1 NAME EX_NH_UnrecognizedEN - Unrecognized Next Header in Extension Header - End Node (Multiple Values) =head1 TARGET Host and Router =head1 SYNOPSIS =begin html
    EX_NH_UnrecognizedEN.seq [-tooloption ...] -pkt EX_NH_UnrecognizedEN.def
        -tooloption: v6eval tool option
    
=end html =head1 INITIALIZATION None =head1 TEST PROCEDURE Verify that a node discards a packet with an unrecognized next header in an extension header and transmits an ICMPv6 Parameter Problem message to the source of the packet. TN NUT | | |-------------------------->| | Echo Request (invalid) | | | | | |<--------------------------| | ICMP Error | | | | | |-------------------------->| | Echo Request (valid) | | | | | |<--------------------------| | Echo Reply | | | v v 1. TN transmits Test packet, which has a Destinatin Options header with a Next Header field of 138. 2. TN transmits a valid Echo Request to the NUT. 3. Repeat Steps1 and 2 with all unrecognized Next Header values between 139 and 252 in Step 1. 4. Observe the Packets transmitted by the NUT. Test packet is: IPv6 Header Version = 6 Traffic Class = 0 FlowLabel = 0 PayloadLength = 8 NextHeader = 60 (Destination Options) HopLimit = 64 SourceAddress = TN Link Local Address DestinationAddress = NUT Link Local Address Destination Options NextHeader = 138 - 252 (be increased for each packets.) HeaderExtLength = 0 Opt_PadN OptionType = 1 OptDataLength = 4 pad = {0, 0, 0, 0} =head1 JUDGEMENT PASS : The NUT should send an ICMPv6 Parameter Problem message to TN1. The ICMPv6 Code field should be 1(unrecognized Next Header type encountered). The ICMPv6 Pointer field should be 0x28(offset of the Next Header field). The NUT should send an Echo Reply in response to the Echo Request sent by TN in Step 3. =head1 CLEANUP Common Test Cleanup =cut # =head1 REFERENCE # # RFC2460 # # 4. IPv6 Extension Headers # # If, as a result of processing a header, a node is required to proceed # to the next header but the Next Header value in the current header is # unrecognized by the node, it should discard the packet and send an # ICMP Parameter Problem message to the source of the packet, with an # ICMP Code value of 1 ("unrecognized Next Header type encountered") # and the ICMP Pointer field containing the offset of the unrecognized # value within the original packet. The same action should be taken if # a node encounters a Next Header value of zero in any header other # than an IPv6 header. # =pod =head1 REFERENCE =begin html
RFC 2460 - IPv6 Specification
=end html =head1 SEE ALSO perldoc V6evalTool =cut