#!/usr/bin/perl # # $Copyright$ # # $TAHI: ct/natpt/rfc2765_3.1_trafficclass.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_tos0 => 'Send IPv4 Echo Request (TOS = 00000000)', ipv4_tos15 => 'Send IPv4 Echo Request (TOS = 11110000)', ipv4_tos63 => 'Send IPv4 Echo Request (TOS = 11111100)', ipv4_tos255 => 'Send IPv4 Echo Request (TOS = 11111111)', ipv6_trafficclass0 => 'Recv IPv6 Echo Request (Traffic Class = 00000000)', ipv6_trafficclass15 => 'Recv IPv6 Echo Request (Traffic Class = 11110000)', ipv6_trafficclass63 => 'Recv IPv6 Echo Request (Traffic Class = 11111100)', ipv6_trafficclass255 => 'Recv IPv6 Echo Request (Traffic Class = 11111111)', 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($IF1, 'ipv4_tos0', $IF, 'ipv6_trafficclass0'); $result += send_recv($IF1, 'ipv4_tos15', $IF, 'ipv6_trafficclass15'); $result += send_recv($IF1, 'ipv4_tos63', $IF, 'ipv6_trafficclass63'); $result += send_recv($IF1, 'ipv4_tos255', $IF, 'ipv6_trafficclass255'); if($result == $V6evalTool::exitPass) { vLogHTML("

OK

"); exit $V6evalTool::exitPass; } $result = $V6evalTool::exitWarn; $result += send_recv($IF1, 'ipv4_tos0', $IF, 'ipv6_trafficclass0'); $result += send_recv($IF1, 'ipv4_tos15', $IF, 'ipv6_trafficclass0'); $result += send_recv($IF1, 'ipv4_tos63', $IF, 'ipv6_trafficclass0'); $result += send_recv($IF1, 'ipv4_tos255', $IF, 'ipv6_trafficclass0'); if($result == $V6evalTool::exitWarn) { vLogHTML("

WARN

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

NG

"); exit $V6evalTool::exitFail; ######################################################################## __END__ =head1 NAME rfc2765_3.1_trafficclass.seq - Verify IPv6 <-> IPv4 header translation in accordance with RFC2765 [SIIT] =head1 TARGET Router =head1 SYNOPSIS rfc2765_3.1_trafficclass.seq [-tooloption ...] -p rfc2765_3.1_trafficclass.def =head1 INITIALIZATION =begin html
	Before this test starts, run initialize.seq.
=end html =head1 TEST PROCEDURE This test verifies that NUT translates IPv4 TOS to IPv6 Traffic Class Network Topology Link0 -------------------------- | | TN NUT | | -------------------------- Link1 TN -- (Link0) -- NUT NUT -- (Link1) -- TN --------------------- ------------------------ 1.[1-4] <=================== 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 TOS = 0,15,63,255 (4 tests) ICMPv4 echo request 2.[1-4] <> <=================== ICMPv6 Echo Request IPv6 Header src address : TN LINK1 IPv4 embedded IPv6 address dst address : TN LINK0 IPv4 embedded IPv6 address Traffic Class = 0,15,63,255 or 0,0,0,0 ICMPv6 echo request =head1 JUDGMENT << PASS >> TN (Link0) receive four ICMPv6 echo requests, with Traffic class same as IPv4 TOS field. << WARN >> TN (Link0) receive four ICMPv6 echo requests, with Traffic class = 0. << FAIL >> TN (Link0) does not receive four ICMPv6 echo requests, with Traffic class = 0 or same as IPv4 TOS field. =head1 NOTE =head1 REFERENCE B 3.1. Translating IPv4 Headers into IPv6 Headers Traffic Class: By default, copied from IP Type Of Service and Precedence field (all 8 bits are copied). According to [DIFFSERV] the semantics of the bits are identical in IPv4 and IPv6. However, in some IPv4 environments these fields might be used with the old semantics of "Type Of Service and Precedence". An implementation of a translator SHOULD provide the ability to ignore the IPv4 "TOS" and always set the IPv6 traffic class to zero. =head1 SEE ALSO perldoc V6evalTool =cut