//
// $Name: V6LC_5_0_0 $
//
// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
// 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.
//
// $Id: RAwithMTUreduce.def,v 1.2 2005/01/06 06:49:54 akisada Exp $
//

#define	IS_ROUTER_LINK0		1

#include "./CommonHost.def"

#ifndef	FRAG_ID
#define	FRAG_ID	any
#endif

#ifdef FRAG_DEF
#include "pkt_frag.def"
#endif

#ifndef	SFRAG_ID
#define	SFRAG_ID	0x00000100
#endif

//
// ICMP echo request
//

FEM_icmp6_echo_request(
	echo_request1500,
	_HETHER_tn2nut,
	{
		_SRC(TN2_GL2_ADDR);
		_DST(NUT_GL0_ADDR);
		HopLimit = 255;
	},
	{
		Identifier = PING_ID;
		SequenceNumber = PING_SN;
		payload = echo_data_1452;
	}
)


//
// ICMP echo reply
//

FEM_icmp6_echo_reply(
	echo_reply1500,
	_HETHER_nut2tn,
	{
		_SRC(NUT_GL0_ADDR);
		_DST(TN2_GL2_ADDR);
	},
	{
		Identifier = PING_ID;
		SequenceNumber = PING_SN;
		payload = echo_data_1452;
	}
)


//
// Payload Data
//

Payload echo_data_1452 {
	data = repeat(0x01, 256);
	data = repeat(0x02, 256);
	data = repeat(0x03, 256);
	data = repeat(0x04, 256);
	data = repeat(0x05, 256);
	data = repeat(0x06, 172);
}


//
// ICMPv6 Router Advertisement
//

FEM_icmp6_ra(
	ra1280,
	_HETHER_tn2allnodes,
	{
		_SRC(tnv6());
		_DST(v6(_ALLNODES_MCAST_ADDR));
		HopLimit = 255;
	},
	{
		LifeTime = 20;
		ReachableTime = 10000;
		RetransTimer = 1000;
//		option = _SLLOPT_src;
		option = mtuopt1280;
	}
)

Opt_ICMPv6_MTU mtuopt1280 {
	MTU = 1280;
}


//
// Fragmented Packet
//

FEM_hdr_ipv6_exth(
	echo_request1280_1,
	_HETHER_tn2nut,
	{
		_SRC(TN2_GL2_ADDR);
		_DST(NUT_GL0_ADDR);
	},
	{
		header = _HDR_IPV6_NAME(echo_request1280_1);
		exthdr = frag_req1280_1;
		upper = payload_req1280_1;
	}
)

FEM_hdr_ipv6_exth(
	echo_request1280_2,
	_HETHER_tn2nut,
	{
		_SRC(TN2_GL2_ADDR);
		_DST(NUT_GL0_ADDR);
	},
	{
		header = _HDR_IPV6_NAME(echo_request1280_2);
		exthdr = frag_req1280_2;
		upper = payload_req1280_2;
	}
)

Hdr_Fragment frag_req1280_1 {
	NextHeader = 58;
	FragmentOffset = 0;
	MFlag = 1;
	Identification = SFRAG_ID;
}

Hdr_Fragment frag_req1280_2 {
	NextHeader = 58;
	FragmentOffset = 154;	// 1232/8
	MFlag = 0;
	Identification = SFRAG_ID;
}


Payload payload_req1280_1 {
	data = substr(_PACKET_IPV6_NAME(echo_request1500), 40, 1232);
}

Payload payload_req1280_2 {
	data = substr(_PACKET_IPV6_NAME(echo_request1500), 1272, 228);
}

