#!/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/icmp/Echo_Checksum.seq,v 1.6 2004/10/06 08:28:10 miyata Exp $
#----------------------------------------------------------------------

BEGIN { $V6evalTool::TestVersion = '$Name: V6PC_P1_1_3_3 $ '; }
use V6evalTool;
use icmp;

$IF = Link0;

#----------------------------------------------------------------------
# Initialization
#----------------------------------------------------------------------

vLogHTML("<FONT SIZE=\"+1\">Initialization</FONT><BR>");

vCapture($IF);

#----------------------------------------------------------------------
# This part is just for comparison 
#----------------------------------------------------------------------
#
#vLogHTML("<B>This is very tricky, but send echo-reply (src = NUT/dst = TN) ".
#	 "to get valid checksum value.</B><BR>");
#
#%ret1 = vSend($IF,echo_reply_link_local);
#
#$Valid_Checksum = $ret1{"Frame_Ether.Packet_IPv6.ICMPv6_EchoReply.Checksum"};
#
#vClear($IF);
#
#----------------------------------------------------------------------
# Test
#----------------------------------------------------------------------
%pktdesc = (
	ns_local	=> 'Receive Neighbor Solicitation',
	ns_local_sll	=> 'Receive Neighbor Solicitation',
	na_local	=> 'Send Neighbor Advertisement',
	echo_request	=> 'Send Echo Request (Link-local address)',
	echo_reply	=> 'Receive Echo Reply (Link-local address)'
);

vLogHTML("<FONT SIZE=\"+1\">Test</FONT><BR>");

vClear($IF);

vSend($IF, echo_request);

#%ret = vRecv($IF, 5, 0, 0, echo_reply, ns_local, ns_local_sll);
%ret = icmp_vRecv($IF, 5, 0, 0, echo_reply);

if ($ret{status} != 0) {
	vLog("TN can not receive Echo Reply from NUT.");
	goto error;
}
elsif ($ret{recvFrame} eq 'echo_reply') {
	vLog("Checksum value included in NUT's sending packet is valid");
	vLog("OK");
	exit($V6evalTool::exitPass);
}
else {
	vLog("TN received unexpected packets from NUT.");
	goto error;
};
	
error:

vLog("FAIL");
exit($V6evalTool::exitFail);


#----------------------------------------------------------------------

__END__

=head1 NAME

	Echo_Checksum.seq - check that sending and receiving Echo Request 
			    and Echo Reply (checksum)

=head1 TARGET

	Host/Router

=head1 SYNOPSIS

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

=head1 INITIALIZATION

	None

=head1 TEST PROCEDURE

	This test verifies that NUT receives valid ICMPv6 Echo Request 
	and sent ICMPv6 Echo Reply. 
	

	TN			NUT

	---------------------------

	1.
	 === ICMPv6 Echo Request ===>
			src address : TN link local address
			dst address : NUT link local address        
	2.
	<< JUDGEMENT >>

	 <=== ICMPv6 Echo Reply ===
			src address : NUT link local address
			dst address : TN link local address        
          

=head1 JUDGEMENT

	<< PASS >>
		Check Sum which is in a received packet is valid
		

	<< FAIL >>	
		Check Sum which is in a received packet is invalid

=head1 REFERENCE

RFC2463
2.3 Message Checksum Calculation

   The checksum is the 16-bit one's complement of the one's complement
   sum of the entire ICMPv6 message starting with the ICMPv6 message
   type field, prepended with a "pseudo-header" of IPv6 header fields,
   as specified in [IPv6, section 8.1].  The Next Header value used in
   the pseudo-header is 58.  (NOTE: the inclusion of a pseudo-header in
   the ICMPv6 checksum is a change from IPv4; see [IPv6] for the
   rationale for this change.)

   For computing the checksum, the checksum field is set to zero.

=head1 SEE ALSO

	  perldoc V6evalTool

=cut
