#!/usr/bin/perl # # $Copyright$ # # $TAHI: ct/natpt/rfc2765_3.1_sourceroute.seq,v 1.4 2001/10/11 01:41:47 akisada Exp $ # BEGIN { $V6evalTool::TestVersion = '$Name: $'; } use V6evalTool; use natpt; checkNUT(router); # Interface $IF="Link0"; $IF1="Link1"; vCapture($IF); vCapture($IF1); %pktdesc = ( ipv4_looserouteunexpired => 'Send IPv4 option Loose Source Route (Route Unexpired)', ipv4_unreach_looserouteunexpired => 'Recv IPv4 Destination Unreachable/(loose) source route failed', ipv4_strictrouteunexpired => 'Send IPv4 option Strict Source Route (Route Unexpired)', ipv4_unreach_strictrouteunexpired => 'RecvIPv4 Destination Unreachable/(strict) source route failed', ipv4_multifail => 'Send IPv4 with many options (incl unexpired Strict Source Route)', ipv4_unreach_multifail => 'RecvIPv4 Destination Unreachable/(strict) source route failed', ipv6_echo => 'Recv IPv6 Translated Packet', 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; # Does NUT send back Destination Unreachable? $result = $V6evalTool::exitFail; if($V6evalTool::exitPass == send_recv($IF1, 'ipv4_looserouteunexpired', $IF1, 'ipv4_unreach_looserouteunexpired') && $V6evalTool::exitPass == send_recv($IF1, 'ipv4_strictrouteunexpired', $IF1, 'ipv4_unreach_strictrouteunexpired') && $V6evalTool::exitPass == send_recv($IF1, 'ipv4_multifail', $IF1, 'ipv4_unreach_multifail')) { $result = $V6evalTool::exitPass; } # Does NUT forwards the packet? if($result == $V6evalTool::exitFail) { if($V6evalTool::exitPass == send_recv($IF1, 'ipv4_looserouteunexpired', $IF, 'ipv6_echo') && $V6evalTool::exitPass == send_recv($IF1, 'ipv4_strictrouteunexpired', $IF, 'ipv6_echo') && $V6evalTool::exitPass == send_recv($IF1, 'ipv4_multifail', $IF, 'ipv6_echo')) { # NUT MUST NOT translate the packet $result = $V6evalTool::exitFail; } else { $result = $V6evalTool::exitWarn; } } if($result == $V6evalTool::exitPass) { vLogHTML("

OK

"); exit $V6evalTool::exitPass; } if($result == $V6evalTool::exitWarn) { vLogHTML("

WARN

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

NG

"); exit $V6evalTool::exitFail; ######################################################################## __END__ =head1 NAME rfc2765_3.1_options.seq - Verify IPv6 <-> IPv4 header translation in accordance with RFC2765 [SIIT] =head1 TARGET Router =head1 SYNOPSIS rfc2765_3.1_options.seq [-tooloption ...] -p rfc2765_3.1_options.def =head1 INITIALIZATION =begin html
	Before this test starts, run initialize.seq.
=end html =head1 TEST PROCEDURE This test verifies that NUT drops IPv4 packets with unexpired Source Route options, and reply with ICMPv4 Destination Unreachable. Network Topology Link0 -------------------------- | | TN NUT | | -------------------------- Link1 TN -- (Link0) -- NUT NUT -- (Link1) -- TN --------------------- ------------------------ =begin html
3.1.[1-2] <=================== ICMPv4 Echo request IPv4 Header src address : TN LINK1 IPv4 address dst address : TN LINK0 IPv4 address Don't Fragment = 1 More fragments = 0 Offset = 0 Option = Loose Source Route (Route unexpired) or Strict Source Route (Route unexpired) ICMPv4 echo request 3.2.[1-2] <> ===================> ICMPv4 Destination Unreachable IPv4 Header src address : NUT LINK1 IPv4 address dst address : TN LINK1 IPv4 address ICMPv6 Destination Unreachable data = IPv4 Loose Source Route (Route unexpired) or IPv4 Strict Source Route (Route unexpired) <> No packets received on either link <> <=================== ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : TN LINK1 IPv4 embedded IPv6 address Hop Limit = 63 ICMPv6 echo request =begin html
4.1.1 <=================== ICMPv4 Echo request IPv4 Header src address : TN LINK1 IPv4 address dst address : TN LINK0 IPv4 address Don't Fragment = 1 More fragments = 0 Offset = 0 option = NOP option = Loose Source Route (Route expired) option = NOP option = Strict Source Route (Route unexpired) option = NOP option = Record Route option = End of OptionList Padding = 0; Padding = 0; Padding = 0; ICMPv4 echo request 4.2.1 <> ===================> ICMPv4 Destination Unreachable IPv4 Header src address : NUT LINK1 IPv4 address dst address : TN LINK1 IPv4 address ICMPv6 Destination Unreachable data = IPv4 packet sent <> No packets received on either link <> <=================== ICMPv6 Echo Request IPv6 Header src address : TN LINK0 IPv4 embedded IPv6 address dst address : TN LINK1 IPv4 embedded IPv6 address Hop Limit = 63 ICMPv6 echo request =head1 JUDGMENT << PASS >> NUT ignores all options except unexpired Source Route. NUT sends ICMPv4 Destination Unreachable (Type 3/Code 5) upon receiving an unexpired Source Route option. << FAIL >> NUT translates IPv4 packets with unexpired Source Route option, and forwards the packet. << WARN >> NUT ignores all options except unexpired Source Route. NUT neither forwards unexpired Source Route packets, nor sends an ICMPv4 Destination Unreachable back. =head1 NOTE =head1 REFERENCE B 3.1. Translating IPv4 Headers into IPv6 Headers If IPv4 options are present in the IPv4 packet, they are ignored i.e., there is no attempt to translate them. However, if an unexpired source route option is present then the packet MUST instead be discarded, and an ICMPv4 "destination unreachable/source route failed" (Type 3/Code 5) error message SHOULD be returned to the sender. =head1 SEE ALSO perldoc V6evalTool =cut