#!/usr/bin/perl
#
# $Copyright_v6PC$
#
# $Copyright$
#
# $TAHI: ct/nd/ncStateByRs4Incomplete.seq,v 1.13 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;
#
#
#
$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);
$pktdesc{nd_echo_reply}="Got echo-reply";
@reply=(nd_echo_reply);
#
@def_rs_tn2allrouter=
(
rs_tn2allrouter,
same,
'(INCOMPLETE|NONCE)',
unchanged,
'RS w/o SLL',
\@null, \@null, \@null, \@ignore,
\@null, \@null, \@null,
\@null, \@null,
);
@def_rs_tn2allrouter_sll=
(
rs_tn2allrouter_sll,
same,
'STALE',
unchanged,
'RS w/ SLL',
\@null, \@null, \@reply, \@ignore,
\@null, \@null, \@null,
\@null, \@ignore,
);
#
#
#
@defs=
(
# \@def_rs_tn2allrouter,
\@def_rs_tn2allrouter_sll,
);
#
#
#
vCapture($IF);
#
#
#
$idx=0;
foreach(@defs) {
$exp=@$_[$idx_exp];
$explla=@$_[$idx_explla];
$msg=@$_[$idx_msg];
vLogHTML("
TN NUT ----------------------=end html =head1 JUDGMENT ===============================+==========+=========+================= NS |New State |LLA Comments ---------+-----------+---------+ | Source IP|Destination|SLLA | | |IP | | | =========+===========+=========+==========+=========+================= TN's all-router exist STALE updated link =========+===========+=========+==========+=========+================= =head1 TERMINATION N/A =head1 NOTE The test does not invoke any remote command. =head1 REFERENCE =begin html
State: INCOMPLETE (for TN)
==== RS ===>
Judgment: Examining NUT's neighbor cache state
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.