#!/usr/bin/perl
#
# Copyright (C) 1999, 2000, 2001, 2002, 2003 Yokogawa Electric Corporation,
# IPA (Information-technology Promotion Agency, Japan).
# All rights reserved.
#
# Redistribution and use of this software in source and binary forms, with
# or without modification, are permitted provided that the following
# conditions and disclaimer are agreed and accepted by the user:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# 3. Neither the names of the copyrighters, the name of the project which
# is related to this software (hereinafter referred to as "project") nor
# the names of the contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# 4. No merchantable use may be permitted without prior written
# notification to the copyrighters. However, using this software for the
# purpose of testing or evaluating any products including merchantable
# products may be permitted without any notification to the copyrighters.
#
#
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING
# BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
# FOR A PARTICULAR PURPOSE, ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
# THE POSSIBILITY OF SUCH DAMAGE.
#
# $TAHI: ct/nd/ncStateByNs4Reachable.seq,v 1.33 2002/02/27 01:08:27 masaxmasa Exp $
########################################################################
BEGIN { $V6evalTool::TestVersion = '$Name: REL_2_1_1 $ '; }
use V6evalTool;
use nd;
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 ne host && $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=();
#
@reply_unicast_ns_tn2nut=
(unicast_na_nut2tn_rSo, unicast_na_nut2tn_rSO_tll) if $type eq host;
@reply_unicast_ns_tn2nut=
(unicast_na_nut2tn_RSo, unicast_na_nut2tn_RSO_tll) if $type eq router;
@def_unicast_ns_tn2nut=
(
unicast_ns_tn2nut,
same,
REACHABLE,
unchanged,
'unicast NS w/o SLL',
\@null, \@null, \@reply_unicast_ns_tn2nut, \@null,
\@null, \@null, \@null,
\@null, \@null,
);
#
@reply_unicast_ns_tn2nut_sll=
(unicast_na_nut2tn_rSo, unicast_na_nut2tn_rSO_tll) if $type eq host;
@reply_unicast_ns_tn2nut_sll=
(unicast_na_nut2tn_RSo, unicast_na_nut2tn_RSO_tll) if $type eq router;
@def_unicast_ns_tn2nut_sll=
(
unicast_ns_tn2nut_sll,
same,
REACHABLE,
unchanged,
'unicast NS w/ SLL',
\@null, \@null, \@reply_unicast_ns_tn2nut_sll, \@null,
\@null, \@null, \@null,
\@null, \@null,
);
#
@reply_multicast_ns_tn2nut_sll=
(unicast_na_nut2tn_rSo, unicast_na_nut2tn_rSO_tll) if $type eq host;
@reply_multicast_ns_tn2nut_sll=
(unicast_na_nut2tn_RSo, unicast_na_nut2tn_RSO_tll) if $type eq router;
@def_multicast_ns_tn2nut_sll=
(
multicast_ns_tn2nut_sll,
same,
REACHABLE,
unchanged,
'multicast NS w/ SLL',
\@null, \@null, \@reply_multicast_ns_tn2nut_sll, \@null,
\@null, \@null, \@null,
\@null, \@null,
);
#
#@reply_ip_unicast_ns_tn2nut_diff=
# (unicast_na_nut2tn_rSo, unicast_na_nut2tn_rSO_tll) if $type eq host;
#@reply_ip_unicast_ns_tn2nut_diff=
# (unicast_na_nut2tn_RSo, unicast_na_nut2tn_RSO_tll) if $type eq router;
@reply_ip_unicast_ns_tn2nut_diff=
(
unicast_na_nut2tn_rSo,
unicast_na_nut2tn_rSO_tll,
nd_unicast_na_rSo_to_z,
nd_unicast_na_rSO_tll_to_z,
) if $type eq host;
@reply_ip_unicast_ns_tn2nut_diff=
(
unicast_na_nut2tn_RSo,
unicast_na_nut2tn_RSO_tll,
nd_unicast_na_RSo_to_z,
nd_unicast_na_RSO_tll_to_z
) if $type eq router;
#@ignore_ip_unicast_ns_tn2nut_diff=
# (nd_unicast_na_rSo_to_z, nd_unicast_na_rSO_tll_to_z) if $type eq host;
#@ignore_ip_unicast_ns_tn2nut_diff=
# (nd_unicast_na_RSo_to_z, nd_unicast_na_RSO_tll_to_z) if $type eq router;
@reply_n_unicast_ns_tn2nut_diff=
(nd_echo_reply_to_z2);
#@def_unicast_ns_tn2nut_diff=
# (
# unicast_ns_tn2nut,
# diff,
# REACHABLE,
# 'unicast NS w/o SLL, diff. LLA',
# \@null, \@null, \@reply_ip_unicast_ns_tn2nut_diff, \@ignore_ip_unicast_ns_tn2nut_diff,
# \@null, \@reply_n_unicast_ns_tn2nut_diff, \@null,
# \@null, \@null,
# );
@def_unicast_ns_tn2nut_diff=
(
unicast_ns_tn2nut,
diff,
REACHABLE,
updated,
'unicast NS w/o SLL, diff. LLA',
\@null, \@null, \@reply_ip_unicast_ns_tn2nut_diff, \@null,
\@null, \@reply_n_unicast_ns_tn2nut_diff, \@null,
\@null, \@null,
);
#
@reply_unicast_ns_tn2nut_sll_diff=
(unicast_na_nut2tn_rSo, unicast_na_nut2tn_rSO_tll,) if $type eq host;
@reply_unicast_ns_tn2nut_sll_diff=
(unicast_na_nut2tn_RSo, unicast_na_nut2tn_RSO_tll) if $type eq router;
@def_unicast_ns_tn2nut_sll_diff=
(
unicast_ns_tn2nut_sll,
diff,
STALE,
updated,
'unicast NS w/ SLL, diff. LLA',
\@null, \@null, \@reply_unicast_ns_tn2nut_sll_diff, \@null,
\@null, \@null, \@null,
\@null, \@null
);
#
@reply_multicast_ns_tn2nut_sll_diff=
(unicast_na_nut2tn_rSo, unicast_na_nut2tn_rSO_tll) if $type eq host;
@reply_multicast_ns_tn2nut_sll_diff=
(unicast_na_nut2tn_RSo, unicast_na_nut2tn_RSO_tll) if $type eq router;
@def_multicast_ns_tn2nut_sll_diff=
(
multicast_ns_tn2nut_sll,
diff,
STALE,
updated,
'multicast NS w/ SLL: Different LLA',
\@null, \@null, \@reply_multicast_ns_tn2nut_sll_diff, \@null,
\@null, \@null, \@null,
\@null, \@null
);
#
#
#
@defs=
(
\@def_unicast_ns_tn2nut,
\@def_unicast_ns_tn2nut_sll,
\@def_multicast_ns_tn2nut_sll,
# \@def_unicast_ns_tn2nut_diff,
\@def_unicast_ns_tn2nut_sll_diff,
\@def_multicast_ns_tn2nut_sll_diff,
);
#
#
#
vCapture($IF);
#
#
#
$idx=0;
foreach(@defs) {
$exp=@$_[$idx_exp];
$explla=@$_[$idx_explla];
$msg=@$_[$idx_msg];
vLogHTML("
TN NUT ----------------------=end html =head2 Cache a bogus LLA =begin html
State: NONCE (for TN)
==== echo-request ===> src=TN's link-local dst=NUT's link-local
State: INCOMPLETE (for TN)
<=== multicast NS ==== src=NUT's link-local 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)
TN NUT ----------------------=end html =head1 TEST PROCEDURE B
State: NONCE (for TN)
==== echo-request ===> src=TN's link-local dst=NUT's link-local
State: INCOMPLETE (for TN)
<=== multicast NS ==== src=NUT's link-local 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)
TN NUT ----------------------=end html =head1 JUDGMENT =begin html
State: REACHABLE (for TN)
==== NS ===> src=TN's link-local dst=NUT's link-local/solicited-node[NUT's link-local] w/o or w/ SLLA
Judgment: Examining NUT's neighbor cache state
=end html =head1 TERMINATION N/A =head1 NOTE The test does not invoke any remote command. =head1 SEE ALSO perldoc V6evalTool perldoc V6evalRemote =cut
7.2.3. Receipt of Neighbor Solicitations
A valid Neighbor Solicitation that does not meet any the following requirements MUST be silently discarded:
- The Target Address is a "valid" unicast or anycast address assigned to the receiving interface [ADDRCONF],
- The Target Address is a unicast address for which the node is offering proxy service, or
- The Target Address is a "tentative" address on which Duplicate Address Detection is being performed [ADDRCONF].
If the Target Address is tentative, the Neighbor Solicitation should be processed as described in [ADDRCONF]. Otherwise, the following description applies. If the Source Address is not the unspecified address and, on link layers that have addresses, the solicitation includes a Source Link-Layer Address option, then the recipient SHOULD create or update the Neighbor Cache entry for the IP Source Address of the solicitation. If an entry does not already exist, the node SHOULD create a new one and set its reachability state to STALE as specified in Section 7.3.3. If an entry already exists, and the cached link-layer address differs from the one in the received Source Link-Layer option, the cached address should be replaced by the received address and the entry's reachability state MUST be set to STALE.
===============================+==========+=========+================= NS |New State |LLA Comments ---------+-----------+---------+ | Source IP|Destination|SLLA | | |IP | | | =========+===========+=========+==========+=========*================= TN's link Unicast none REACHABLE unchanged Not mentioned in RFC2461 ---------+-----------+---------+----------+---------+----------------- TN's link Unicast same REACHABLE unchanged ---------+-----------+---------+----------+---------+----------------- TN's link Multicast same REACHABLE unchanged =========+===========+=========+==========+=========+================= TN's link Unicast different STALE updated ---------+-----------+---------+----------+---------+----------------- TN's link Multicast different STALE updated =========+===========+=========+==========+=========+=================