#!/usr/bin/perl
#
# $Copyright$
#
# $TAHI: ct/natpt/rfc2765_3.1_hoplimit.seq,v 1.4 2001/10/11 01:41:46 akisada Exp $
#
BEGIN { $V6evalTool::TestVersion = '$Name: $'; }
use V6evalTool;
use natpt;
checkNUT(router);
# Interface
$IF="Link0";
$IF1="Link1";
vCapture($IF);
vCapture($IF1);
%pktdesc = (
icmp4_ttl_255 => 'Send IPv4 ICMP packet with TTL = 255',
icmp6_hoplimit_254 => 'Recv IPv6 ICMP packet Hop Limit = 254',
icmp4_ttl_64 => 'Send IPv4 ICMP packet with TTL = 64',
icmp6_hoplimit_63 => 'Recv IPv6 ICMP packet Hop Limit = 63',
icmp4_ttl_2 => 'Send IPv4 ICMP packet with TTL = 2',
icmp6_hoplimit_1 => 'Recv IPv6 ICMP packet Hop Limit = 1',
icmp4_ttl_1 => 'Send IPv4 ICMP packet with TTL = 1',
icmp4_ttl_1_exceed => 'Recv IPv4 ICMP Time Exceeded (TTL = 1)',
icmp4_ttl_0_exceed => 'Recv IPv4 ICMP Time Exceeded (TTL = 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($IF1, 'icmp4_ttl_255', $IF, 'icmp6_hoplimit_254');
$result += send_recv($IF1, 'icmp4_ttl_64', $IF, 'icmp6_hoplimit_63');
$result += send_recv($IF1, 'icmp4_ttl_2', $IF, 'icmp6_hoplimit_1');
$result += send_recv($IF1, 'icmp4_ttl_1', $IF1, 'icmp4_ttl_1_exceed',
'icmp4_ttl_0_exceed');
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_hoplimit.seq - Verify IPv6 <-> IPv4 header
translation in accordance with RFC2765 [SIIT]
=head1 TARGET
Router
=head1 SYNOPSIS
rfc2765_3.1_hoplimit.seq [-tooloption ...]
-p rfc2765_3.1_hoplimit.def
=head1 INITIALIZATION
=begin html
Before this test starts, run initialize.seq.
=end html
=head1 TEST PROCEDURE
This test verifies that NUT properly translates TTL - 1 to
Hop Limit, or sends an ICMPv4 Time Exceeded.
Network Topology
Link0
--------------------------
| |
TN NUT
| |
--------------------------
Link1
TN -- (Link0) -- NUT NUT -- (Link1) -- TN
--------------------- ------------------------
=begin html
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
TTL = 255
ICMPv4 echo request
1.2.
<>
<===================
ICMPv6 Echo Request
IPv6 Header
src address : TN LINK1 IPv4 embedded IPv6 address
dst address : TN LINK0 IPv4 embedded IPv6 address
Hop Limit = 254
ICMPv6 echo request
=begin html
2.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
TTL = 64
ICMPv4 echo request
2.2.
<>
<===================
ICMPv6 Echo Request
IPv6 Header
src address : TN LINK1 IPv4 embedded IPv6 address
dst address : TN LINK0 IPv4 embedded IPv6 address
Hop Limit = 63
ICMPv6 echo request
=begin html
3.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
TTL = 2
ICMPv4 echo request
3.2.
<>
<===================
ICMPv6 Echo Request
IPv6 Header
src address : TN LINK1 IPv4 embedded IPv6 address
dst address : TN LINK0 IPv4 embedded IPv6 address
Hop Limit = 1
ICMPv6 echo request
=begin html
4.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
TTL = 1
ICMPv4 echo request
4.2.
<>
===================>
ICMPv4 Time Exceeded
IPv4 Header
src address : NUT LINK1 IPv4 address
dst address : TN LINK1 IPv4 address
ICMPv4 Time Exceeded
Code = 0
Data = ICMPv4 Echo Request, TTL = 1
=head1 JUDGMENT
<< PASS >>
NUT translates ICMPv4 with TTL = 255, 64, 2 to ICMPv6
with Hop Limit = 254, 63, 1.
NUT responds to ICMPv4 Echo Request with TTL = 1
with an ICMPv4 Time Exceeded message.
<< FAIL >>
NUT doesn't translate TTL properly, or doesn't respond
with ICMPv4 Time Exceeded messages when TTL = 1 on
incoming packages.
=head1 NOTE
=head1 REFERENCE
B
3.1. Translating IPv4 Headers into IPv6 Headers
Hop Limit:
TTL value copied from IPv4 header. Since the
translator is a router, as part of forwarding the
packet it needs to decrement either the IPv4 TTL
(before the translation) or the IPv6 Hop Limit (after
the translation). As part of decrementing the TTL or
Hop Limit the translator (as any router) needs to
check for zero and send the ICMPv4 or ICMPv6 "ttl
exceeded" error.
=head1 SEE ALSO
perldoc V6evalTool
=cut