#!/usr/bin/perl
#
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
# Yokogawa Electric Corporation, YDC 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: v6eval/bin/remotes/manual/manualaddrconf.rmt,v 1.12 2010/03/30 07:34:55 akisada Exp $
#
########################################################################
use V6evalRemote;
use File::Basename;

rArg() || goto error;


#$rOpt_addr
#$rOpt_addrfamily
#$rOpt_dadtime
#$rOpt_if
#$rOpt_len
#$rOpt_netmask
#$rOpt_timeout
#$rOpt_type

$NUTif = $rOpt_if;
$NUTaddr = $rOpt_addr;
$NUTprfxlen = $rOpt_len;
$NUTnetmask = $rOpt_netmask;
$NUTaddrtype = $rOpt_type;
$rOpt_addrfamily = "inet6" if ! defined($rOpt_addrfamily);
$NUTaddrfamily = $rOpt_addrfamily;
$rOpt_timeout = 5 if ! defined($rOpt_timeout);
$rOpt_dadtime = 2 if ! defined($rOpt_dadtime);

my $basename	= basename($0, '.rmt');
my $prompt	= "$basename> ";

print "\n";
print "lio_start". "\n";
if ($NUTaddrfamily eq "inet" ) {
	if ($NUTaddrtype eq "add"){
		$NUTparam = "netmask ".$NUTnetmask if ($NUTnetmask ne "");
	}elsif ($NUTaddrtype eq "delete"){
		$NUTparam = "delete";
	}else{
		print $prompt . "$NUTaddrfamily: Unknown address type $NUTaddrtype\n";
		print "lio_stop". "\n";
		goto error;
	}
}elsif ($NUTaddrfamily eq "inet6" ) {
	if ($NUTaddrtype eq "unicast"){
		$NUTparam = "alias";
	}elsif ($NUTaddrtype eq "anycast"){
		$NUTparam = "alias anycast";
	}elsif ($NUTaddrtype eq "delete"){
		$NUTparam = "delete";
	}else{
		print $prompt . "$NUTaddrfamily: Unknown address type $NUTaddrtype\n";
		print "lio_stop". "\n";
		goto error;
	}
}else {
	print $prompt . "$NUTaddrfamily: Unknown address type $NUTaddrfamily\n";
	print "lio_stop". "\n";
	goto error;
}

if($NUTaddrfamily eq "inet6") {
	print $prompt . "Do ``ifconfig $NUTif $NUTaddrfamily $NUTaddr prefixlen ".
		"$NUTprfxlen $NUTparam'' manually,\n";
}elsif($NUTaddrfamily eq "inet") {
	print $prompt . "Do ``ifconfig $NUTif $NUTaddrfamily $NUTaddr ".
		"$NUTparam'' manually,\n";
}else {
    print "lio_stop". "\n";
    goto error;
}
print $prompt . "then press Enter key.\a\n";
print "lio_stop". "\n";
    <STDIN>;


sleep($rOpt_dadtime);

exit($V6evalRemote::exitPass);

error:
    exit($V6evalRemote::exitFail);

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

=head1 NAME

B<manualaddrconf.rmt> - manual address configuration on NUT

=head1 SYNOPSIS

B<manualaddrconf.rmt> [-commonoption ...] if=<NUTif>
  addrfamily=<NUTaddrfamily> addr=<NUTaddr> [len=<NUTprfxlen>|netmask=<NUTnetmask]
  type=<NUTaddrtype>
  [dadtime=<DAD_TIMEOUT>] [timeout=<TIMEOUT>]

 where <NUTif>        : interface name (ed0, fxp0 ...)
       <NUTaddrfamily>: address family 
       <NUTaddr>      : IPv6/v4 address (inet6, inet)
       <NUTprfxlen>   : (IPv6 only) address prefix len
       <NUTnetmask>   : (IPv4 only) address netmask
       <NUTaddrtype>  : IPv6 : unicast/anycast/delete
                        IPv4 : add/delete
       <DAD_TIMEOUT>  : sec. (default: 5sec.)
       <TIMEOUT>      : sec. (default: 2sec.)

=head1 DESCRIPTION

B<manualaddrconf.rmt> configure IPv6 address manually on NUT.
Do ``preldoc V6evalRemote'' for common options.

=head1 RETURN VALUES

The B<manualaddrconf.rmt> exits with one of the following values:
 0      command completed successfully
 NOT 0  command failed

=head1 SEE ALSO

perldoc V6evalRemote

=cut
