#!/usr/bin/perl
#
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation.
# 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.
# 
# 5. The copyrighters, the project and the contributors may prohibit
#    the use of this software at any time.
# 
# 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.
#
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation.
# 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.
# 
# 5. The copyrighters, the project and the contributors may prohibit
#    the use of this software at any time.
# 
# 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/routerSendUnsolRaMax.seq,v 1.10 2004/04/02 02:28:24 akisada Exp $

########################################################################
BEGIN { $V6evalTool::TestVersion = '$Name: V6PC_P1_1_3_3 $ '; }
 
use V6evalTool;
use nd;
use ra;

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;
$wait_ra=$ra::maxRAmaxInterval*2;

#
#
#
$type=$V6evalTool::NutDef{Type};
if($type eq host) {
    vLogHTML("This test is for the router only<BR>");
    exit $V6evalTool::exitRouterOnly;
}

$type=$V6evalTool::NutDef{Type};
if($type ne router) {
    vLogHTML(ndErrmsg("ERROR: $V6evalTool::NutDef{Type}: ".
		      "Unknown target type<BR>"));
    exit $V6evalTool::exitFail;
}

#
#
#
raStartMaxRA() || exit $V6evalTool::exitFail;

#
#
#
vCapture($IF);

#
#
#
$r=raRecvMaxRA($IF, $wait_ra, 0, 0, %ret);
if($ret{status} != 0 || $r == 0) {
    $exit_rtn=$V6evalTool::exitFail;
    goto end;
}

#
#
#
end:
    if($exit_rtn == $V6evalTool::exitPass) {
	vLogHTML("OK<BR>");
    } else {
	vLogHTML(ndErrmsg("NG<BR>"));
        readout($IF, $wait_readout);
    }
    exit $exit_rtn;

sub readout($$) {
        my ($if, $timeout) = @_;
        return(vRecv($if, $timeout, 0, 0));
}

########################################################################
__END__

=head1 NAME

routerSendUnsolRaMax - NUT sends configured RAs.

=head1 TARGET

  Router only

=head1 SYNOPSIS

  routerSendUnsolRaMax.seq [-tooloption ...] -p routerSendUnsolRaMax.def

=head1 INITIALIZATION

  Start NUT advertising RAs:

    MaxRtrAdvInterval                   10
    MinRtrAdvInterval                   7
    AdvCurHopLimit                      64
    AdvManagedFlag&AdvOtherConfigFlag   False
    AdvDefaultLifetime                  9000 (max value)
    AdvReachableTime                    3600000 (max value)
    AdvRetransTimer                     0
    AdvOnlinkFlag&AdvAutonomousFlag     True
    AdvValidLifetime                    2592000
    AdvPreferredLifetime                604800
    AdvLinkMTU                          1500

=head1 TEST PROCEDURE

=begin html
<B>routerSendUnsolRaMax</B> verifies that NUT sends RAs
<UL>
<LI>whose parameters are as same as <A HREF="#INITIALIZATION">configured</A>.
<LI>that may contain a Prefix option and/or a MUT option and/or SLL option.
</UL>

=end html

=head1 TERMINATION

  N/A

=head1 NOTE

  The test invokes remote command - rtadvd.rmt.

=head1 REFERENCE

=begin html
<pre>
RFC2461
<hr>
6.2.4.  Sending Unsolicited Router Advertisements<br>
   A host MUST NOT send Router Advertisement messages at any time.<br>
   Unsolicited Router Advertisements are not strictly periodic: the
   interval between subsequent transmissions is randomized to reduce the
   probability of synchronization with the advertisements from other
   routers on the same link [SYNC].  Each advertising interface has its
   own timer.  <b>Whenever a multicast advertisement is sent from an
   interface, the timer is reset to a uniformly-distributed random value
   between the interface's configured MinRtrAdvInterval and
   MaxRtrAdvInterval; expiration of the timer causes the next
   advertisement to be sent and a new random value to be chosen.</b>
</pre>

=end html

=head1 SEE ALSO

  perldoc V6evalTool
  perldoc V6evalRemote

=cut
