#!/usr/bin/perl
#
# $Copyright_v6PC$
#
# $Copyright$
#
# $TAHI: ct/nd/ncStateByRs4Probe.seq,v 1.14 2004/04/02 02:28:23 akisada Exp $
########################################################################
BEGIN { $V6evalTool::TestVersion = '$Name: $ '; }
use V6evalTool;
use nd;
my $wait_readout = $nd::DELAY_FIRST_PROBE_TIME +
$nd::RETRANS_TIMER * $nd::MAX_UNICAST_SOLICIT + 1;
ndOptions(@ARGV);
# The following generate debugging messages.
$nd::debug=$ndOpt_v|$ndOpt_vv;
# You can specifies debug options to a remote control program.
# If you want to know more detail, please see the following:
# - V6evalTool.pm: perldoc V6evalTool
# - V6evalRemote.pm: perldoc V6evalRemote
$nd::remote_debug="-o1" if $ndOpt_vv;
$IF=Link0;
$exit_rtn=$V6evalTool::exitPass;
$idx=0;
#
#
#
$type=$V6evalTool::NutDef{Type};
if($type eq host) {
vLogHTML("This test is for the router only
");
exit $V6evalTool::exitRouterOnly;
}
$type=$V6evalTool::NutDef{Type};
if($type ne router) {
vLogHTML(ndErrmsg("ERROR: $V6evalTool::NutDef{Type}: ".
"Unknown target type
"));
exit $V6evalTool::exitFail;
}
#
# sub test definition:
# - sending pattern,
# - SLLA vs cached LLA
# - expected state
# - message
#
$idx_ptn=0;
$idx_lla=1;
$idx_exp=2;
$idx_explla=3;
$idx_msg=4;
$idx_inc_ip=5;
$idx_prb_ip=6;
$idx_rpy_ip=7;
$idx_ign_ip=8;
$idx_non_n=9;
$idx_rpy_n=10;
$idx_ign_n=11;
$idx_stl_sr=12;
$idx_ign_sr=13;
#
@null=();
$pktdesc{RAra_nut2allnode_any}="Got multicast RA, but ignored";
$pktdesc{RAra_nut2tn_any}="Got unicast RA, but ignored";
@ignore=(RAra_nut2allnode_any, RAra_nut2tn_any);
#
@def_rs_tn2allrouter=
(
rs_tn2allrouter,
same,
PROBE,
unchanged,
'RS w/o SLL',
\@null, \@null, \@null, \@ignore,
\@null, \@null, \@null,
\@null, \@null,
);
#
@def_rs_tn2allrouter_sll=
(
rs_tn2allrouter_sll,
same,
PROBE,
unchanged,
'RS w/ SLL',
\@null, \@null, \@null, \@ignore,
\@null, \@null, \@null,
\@null, \@null,
);
@def_rs_tn2allrouter_sll_diff=
(
rs_tn2allrouter_sll,
diff,
STALE,
updated,
'RS w/ SLL, diff. LLA',
\@null, \@null, \@null, \@ignore,
\@null, \@null, \@null,
\@null, \@null
);
#
#
#
@defs=
(
# \@def_rs_tn2allrouter,
\@def_rs_tn2allrouter_sll,
\@def_rs_tn2allrouter_sll_diff,
);
#
#
#
vCapture($IF);
#
#
#
$idx=0;
foreach(@defs) {
$exp=@$_[$idx_exp];
$explla=@$_[$idx_explla];
$msg=@$_[$idx_msg];
vLogHTML("
TN NUT ---------------------- State: No neighbor cache entry (for TN)=end html =head2 Cache a bogus LLA =begin html
==== echo-request ===> src=TN's link-local dst=NUT's link-local
State: INCOMPLETE (for TN)
<=== multicast NS ==== src=NUT's link-local or global dst=solicited-node[TN's link-local] target=TN's link-local w/ SLLA timeout: RETRANS_TIMER * MAX_MULTICAST_SOLICIT
==== solicited NA ===> src=TN's link-local dst=NUT's link-local target=TN's link-local TLLA=TN's LLA
State: REACHABLE (for TN)
<=== echo-reply ==== src=NUT's link-local dst=TN's link-local timeout: 2 sec
Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)
State: STALE (for TN)
==== echo-request ===> src=TN's link-local dst=NUT's link-local
<=== echo-reply ==== src=NUT's link-local dst=TN's link-local timeout: 2 sec
State: DELAY (for TN)
Wait (DELAY_FIRST_PROBE_TIME)
State: PROBE (for TN)
TN NUT ---------------------- State: No neighbor cache entry (for TN)=end html =head1 TEST PROCEDURE B
==== echo-request ===> src=TN's link-local dst=NUT's link-local
State: INCOMPLETE (for TN)
<=== multicast NS ==== src=NUT's link-local or global dst=solicited-node[TN's link-local] target=TN's link-local w/ SLLA timeout: RETRANS_TIMER * MAX_MULTICAST_SOLICIT
==== solicited NA ===> src=TN's link-local dst=NUT's link-local target=TN's link-local TLLA=a bogus LLA
State: REACHABLE (for TN)
<=== echo-reply ==== src=NUT's link-local dst=TN's link-local timeout: 2 sec
Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)
State: STALE (for TN)
==== echo-request ===> src=TN's link-local dst=NUT's link-local
<=== echo-reply ==== src=NUT's link-local dst=TN's link-local timeout: 2 sec
State: DELAY (for TN)
Wait (DELAY_FIRST_PROBE_TIME)
State: PROBE (for TN)
TN NUT ----------------------=end html =head1 JUDGMENT =begin html
State: PROBE (for TN)
==== RS ===>
Judgment: Examining NUT's neighbor cache state
===============================+==========+=========+=================
RS |New State |LLA Comments
---------+-----------+---------+ |
Source IP|Destination|SLLA | |
|IP | | |
=========+===========+=========+==========+=========*=================
TN's link all-router same PROBE unchanged
---------+-----------+---------+----------+---------+-----------------
TN's link all-router different STALE updated
=========+===========+=========+==========+=========+=================
=end html
=head1 TERMINATION
N/A
=head1 NOTE
The test does not invoke any remote command.
=head1 REFERENCE
=begin html
6.2.6. Processing Router Solicitations=end html =head1 SEE ALSO perldoc V6evalTool perldoc V6evalRemote =cut
Router Solicitations in which the Source Address is the unspecified address MUST NOT update the router's Neighbor Cache; solicitations with a proper source address update the Neighbor Cache as follows. If the router already has a Neighbor Cache entry for the solicitation's sender, the solicitation contains a Source Link-Layer Address option, and the received link-layer address differs from that already in the cache, the link-layer address SHOULD be updated in the appropriate Neighbor Cache entry, and its reachability state MUST also be set to STALE. If there is no existing Neighbor Cache entry for the solicitation's sender, the router creates one, installs the link- layer address and sets its reachability state to STALE as specified in Section 7.3.3. Whether or not a Source Link-Layer Address option is provided, if a Neighbor Cache entry for the solicitation's sender exists (or is created) the entry's IsRouter flag MUST be set to FALSE.