#!/usr/bin/perl # # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation, # IPA (Information-technology Promotion Agency, Japan). # 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. However, using this software for the # purpose of testing or evaluating any products including merchantable # products may be permitted without any notification to the copyrighters. # # # # 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/natpt/rfc2765_4.1_options.seq,v 1.4 2001/10/11 01:41:47 akisada Exp $ # BEGIN { $V6evalTool::TestVersion = '$Name: REL_2_1_2 $'; } use V6evalTool; use natpt; checkNUT(router); # Interface $IF="Link0"; $IF1="Link1"; vCapture($IF); vCapture($IF1); %pktdesc = ( ipv6_hopbyhop => 'Send IPv6 echo with Hop-By-Hop option header', ipv6_routing => 'Send IPv6 echo with finished Routing option header', ipv6_fragment => 'Send IPv6 echo with Fragment option header', ipv6_destination => 'Send IPv6 echo with Destination option header', ipv6_combined => 'Send IPv6 echo with Hop-By-Hop, Routing, Fragment and Destination option headers', ipv6_routing_nut => 'Send IPv6 echo with unfiniehed Routing option header (NUT is last hop)', ipv4_echo_df => 'Recv IPv4 echo request (DF = 1)', ipv4_echo => 'Recv IPv4 echo request (DF = 0)', arp_nut2tn_request => 'Recv ARP request on Link1 (TN IPv4addr)', arp_tn2nut_reply => 'Send ARP reply on Link1 (TN IPv4addr)', ns_nut2tn_siit0 => 'Recv Neighbor Solicitation on Link0 (SIIT V6addr)', na_tn2nut_siit0 => 'Send Neighbor Advertisement on Link0 (SIIT V6addr)', ); $result = $V6evalTool::exitPass; $result += send_recv($IF, 'ipv6_hopbyhop', $IF1, 'ipv4_echo_df'); $result += send_recv($IF, 'ipv6_routing', $IF1, 'ipv4_echo_df'); $result += send_recv($IF, 'ipv6_fragment', $IF1, 'ipv4_echo'); $result += send_recv($IF, 'ipv6_destination', $IF1, 'ipv4_echo_df'); $result += send_recv($IF, 'ipv6_combined', $IF1, 'ipv4_echo'); $result += send_recv($IF, 'ipv6_routing_nut', $IF1, 'ipv4_echo'); if($result == $V6evalTool::exitPass) { vLogHTML("

OK

"); exit $V6evalTool::exitPass; } error: vLogHTML("

NG

"); exit $V6evalTool::exitFail; ######################################################################## __END__ =head1 NAME rfc2765_4.1_options.seq - Verify IPv6 <-> IPv4 header translation in accordance with RFC2765 [SIIT] =head1 TARGET Router =head1 SYNOPSIS rfc2765_4.1_options.seq [-tooloption ...] -p rfc2765_4.1_options.def =head1 INITIALIZATION =begin html
	Before this test starts, run initialize.seq.
=end html =head1 TEST PROCEDURE This test verifies that NUT ignores IPv6 header options (except unexpired Routing Headers, which are not tested here.) Network Topology Link0 -------------------------- | | TN NUT | | -------------------------- Link1 TN -- (Link0) -- NUT NUT -- (Link1) -- TN --------------------- ------------------------ =begin html
1.1. ===================> ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : TN LINK1 IPv4 embedded IPv6 address Hop-By-Hop option header PadN (3 bytes) Pad1 (1 bytes) Pad1 (1 bytes) Pad1 (1 bytes) ICMPv6 echo request 1.2. <> ===================> ICMPv4 Echo request IPv4 Header src address : TN LINK0 IPv4 address dst address : TN LINK1 IPv4 address ICMPv4 echo request =begin html
2.1. ===================> ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : TN LINK1 IPv4 embedded IPv6 address Routing option header RoutingType = 0; SegmentsLeft = 0; Address = "::" ICMPv6 echo request 2.2. <> ===================> ICMPv4 Echo request IPv4 Header src address : TN LINK0 IPv4 address dst address : TN LINK1 IPv4 address ICMPv4 echo request =begin html
3.1. ===================> ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : TN LINK1 IPv4 embedded IPv6 address Fragment option header NextHeader = 58; // ICMPv6 ICMPv6 echo request 3.2. <> ===================> ICMPv4 Echo request IPv4 Header src address : TN LINK0 IPv4 address dst address : TN LINK1 IPv4 address DF = 1 ICMPv4 echo request =begin html
4.1. ===================> ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : TN LINK1 IPv4 embedded IPv6 address Destination option header PadN (3 bytes) Pad1 (1 bytes) Pad1 (1 bytes) Pad1 (1 bytes) ICMPv6 echo request 4.2. <> ===================> ICMPv4 Echo request IPv4 Header src address : TN LINK0 IPv4 address dst address : TN LINK1 IPv4 address ICMPv4 echo request =begin html
5.1. ===================> ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : TN LINK1 IPv4 embedded IPv6 address Hop-By-Hop option header PadN (3 bytes) Pad1 (1 bytes) Pad1 (1 bytes) Pad1 (1 bytes) Routing option header RoutingType = 0; SegmentsLeft = 0; Address = "::" Fragment option header NextHeader = 60; // Destination option header Destination option header PadN (3 bytes) Pad1 (1 bytes) Pad1 (1 bytes) Pad1 (1 bytes) ICMPv6 echo request 5.2. <> ===================> ICMPv4 Echo request IPv4 Header src address : TN LINK0 IPv4 address dst address : TN LINK1 IPv4 address DF = 1 ICMPv4 echo request =begin html
6.1. ===================> ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : NUT LINK0 global IPv6 address Routing option header RoutingType = 0; SegmentsLeft = 1; Address = TN LINK1 IPv4 embedded IPv6 address ICMPv6 echo request 6.2. <> ===================> ICMPv4 Echo request IPv4 Header src address : TN LINK0 IPv4 address dst address : TN LINK1 IPv4 address ICMPv4 echo request =head1 JUDGMENT << PASS >> NUT ignores all options and translates the echo requests. << FAIL >> NUT doesn't translate the ICMPv6 echo requests to ICMPv4 echo requests. =head1 NOTE =head1 REFERENCE B 4.1. Translating IPv6 Headers into IPv4 Headers If any of an IPv6 hop-by-hop options header, destination options header, or routing header with the Segments Left field equal to zero are present in the IPv6 packet, they are ignored i.e., there is no attempt to translate them. However, the Total Length field and the Protocol field would have to be adjusted to "skip" these extension headers. =head1 SEE ALSO perldoc V6evalTool =cut