#!/usr/bin/perl
#
# $Copyright$
#
# $Id: HL_ZeroToRouter.seq,v 1.1.1.1 2000/10/31 22:39:21 sekiya Exp $
#
######################################################################
BEGIN {
$V6evalTool::TestVersion = '$Name: $';
}
use V6evalTool;
if ($V6evalTool::NutDef{Type} ne 'router') {
vLogHTML("This test is for the router only
");
exit $V6evalTool::exitRouterOnly;
}
%pktdesc = (
echo_request_to_link0 => 'Send Echo Request to Link0 (Hop Limit 0)',
icmp_type3_code0 => 'Recv ICMP Error at Link0 (Time Exceeded, hop limit exceeded in transit)',
icmp_type3_code0_link1 => 'Recv ICMP Error at Link1 (Time Exceeded, hop limit exceeded in transit)',
ns_from_link0 => 'Recv Neighbor Solicitation from Link0 (Global Address)',
na_to_link0 => 'Send Neighbor Advertisement to Link0 (Global Address)',
);
$IF0 = Link0;
vCapture($IF0);
vSend($IF0, echo_request_to_link0);
%ret = vRecv($IF0, 5, 0, 0, ns_from_link0, icmp_type3_code0, icmp_type3_code0_link1);
if ($ret{status} != 0) {
vLogHTML('NG');
exit $V6evalTool::exitFail;
}
if ($ret{recvFrame} eq 'ns_from_link0') {
vSend($IF0, na_to_link0);
%ret = vRecv($IF0, 5, 0, 0, icmp_type3_code0, icmp_type3_code0_link1);
if ($ret{status} != 0) {
vLogHTML('NG');
exit $V6evalTool::exitFail;
}
}
if ($ret{recvFrame} eq 'icmp_type3_code0') {
vLogHTML('OK');
exit $V6evalTool::exitPass;
}
if ($ret{recvFrame} eq 'icmp_type3_code0_link1') {
vLogHTML('OK');
exit $V6evalTool::exitPass;
}
vLogHTML('NG');
exit $V6evalTool::exitFail;
######################################################################
__END__
=head1 NAME
HL_ZeroToRouter - check Hop Limit 0 to Router
=head1 TARGET
Router
=head1 SYNOPSIS
=begin html
HL_ZeroToRouter.seq [-tooloption ...] -pkt HL_ZeroToRouter.def
-tooloption : v6eval tool option
See also IH_Router.def
=end html
=head1 INITIALIZATION
None
=head1 TEST PROCEDURE
Tester Target Tester
(Link0) (Link1)
| | |
|-------------------------->| |
| Echo Request to Link0 | |
| | (no forwarding) |
| | |
|<--------------------------| |
| Neighbor Solicitation | |
| | |
|-------------------------->| |
| Neighbor Advertisement | |
| | |
|<--------------------------| |
| ICMP Error at Link0 | |
| or | |
| ICMP Error at Link1 | |
| | |
v v v
1. Send Echo Request to Link0
2. Wait ICMP Error or NS from Link0
3. If NS received then send NA to Link0, and wait ICMP Error again
4. Receive ICMP Error
Echo Request to Link0 Data is:
IPv6 Header
Version = 6
Traffic Class = 0
FlowLabel = 0
PayloadLength = 16
NextHeader = 58 (ICMP)
HopLimit = 0
SourceAddress = Tester Global Address (Link0)
DestinationAddress = Tester Global Address (Link1)
ICMP Echo Request
Type = 128 (Echo Request)
Code = 0
Checksum = (auto)
Identifier = 0xffff
SequenceNumber = 1
PayloadData = {1,2,3,4,5,6,7,8}
=head1 JUDGEMENT
PASS: ICMP Error at Link0 Received
IPv6 Header
Version = 6
Traffic Class = 0
FlowLabel = 0
PayloadLength = 16
NextHeader = 58 (ICMP)
HopLimit = 64
SourceAddress = Target Global Address (Link0)
DestinationAddress = Tester Global Address (Link0)
ICMP Error
Type = 3 (Time Exceeded)
Code = 0 (hop limit exceeded in transit)
Checksum = (auto)
PayloadData = (Echo Request)
PASS: ICMP Error at Link1 Received
IPv6 Header
Version = 6
Traffic Class = 0
FlowLabel = 0
PayloadLength = 16
NextHeader = 58 (ICMP)
HopLimit = 64
SourceAddress = Target Global Address (Link1)
DestinationAddress = Tester Global Address (Link0)
ICMP Error
Type = 3 (Time Exceeded)
Code = 0 (hop limit exceeded in transit)
Checksum = (auto)
PayloadData = (Echo Request)
=head1 SEE ALSO
perldoc V6evalTool
=cut