//
// 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.
//

//======================================================================
// Address and Prefix Macro

#define GLOSITE_UCAST_PRFX     _SLOCAL0_UCAST_PRFX     
#define GLOSITE_UCAST_PRFXLEN  _SLOCAL0_UCAST_PRFXLEN
//#define GLOSITE_UCAST_PRFX     _GLOBAL0_UCAST_PRFX     
//#define GLOSITE_UCAST_PRFXLEN  _GLOBAL0_UCAST_PRFXLEN





//======================================================================
// Frame Ether definition

FEM_icmp6_echo_request( echo_request, _HETHER_tn2nut,
             {  _SRC(tn2v6(GLOSITE_UCAST_PRFX, GLOSITE_UCAST_PRFXLEN));
                _DST(nut2v6(GLOSITE_UCAST_PRFX, GLOSITE_UCAST_PRFXLEN)); },
             {  payload=apl; }
)

//----------------------------------------------------------------------
FEM_icmp6_echo_reply( echo_reply, _HETHER_nut2tn,
            {  _SRC(nut2v6(GLOSITE_UCAST_PRFX, GLOSITE_UCAST_PRFXLEN));
	       _DST(tn2v6(GLOSITE_UCAST_PRFX, GLOSITE_UCAST_PRFXLEN)); },
            {  payload=apl; }
)

//----------------------------------------------------------------------
FEM_icmp6_ns(    ns, _HETHER_nut2tnsolnode,
            {  _SRC(nutv6());
               _DST(_IPV6_SOLNODE_MCAST(tnv6()));
	       HopLimit=255; },
            {  TargetAddress=tn2v6(GLOSITE_UCAST_PRFX, GLOSITE_UCAST_PRFXLEN);
	       option=_SLLOPT_nut; }
)

//----------------------------------------------------------------------
FEM_icmp6_na(    na, _HETHER_tn2nut,
	    {  _SRC(tnv6());
	       _DST(nutv6());
	       HopLimit=255; },
            {  RFlag=1;
	       SFlag=1;
	       OFlag=1;
	       TargetAddress=tn2v6(GLOSITE_UCAST_PRFX , GLOSITE_UCAST_PRFXLEN);
	       option=_TLLOPT_tn; }
)


//----------------------------------------------------------------------
FEM_icmp6_rs(    rs, _HETHER_tn2allnodes,
            {  _SRC(tnv6());
	       _DST(v6(_ALLNODES_MCAST_ADDR));
	       HopLimit=255; },
            {  option=_SLLOPT_tn; }
)

//----------------------------------------------------------------------
FEM_icmp6_ra(    usolra, _HETHER_tn2allnodes,
            {  _SRC(tnv6());
	       _DST(v6(_ALLNODES_MCAST_ADDR));
	       HopLimit=255; },
            {  CurHopLimit=64;
	       LifeTime=1805;
	       ReachableTime=30005;
	       RetransTimer=1005;
	       option=_SLLOPT_tn;
	       option=prefixopt_a; }
)

//----------------------------------------------------------------------
FEM_icmp6_packet_too_big( packet_too_big, _HETHER_tn2nut, 
            {  _SRC(tnv6());
	       _DST(v6(_ALLNODES_MCAST_ADDR));
	       HopLimit=255; },
            { MTU=1111; 
	      payload=apl; }
)


//----------------------------------------------------------------------
FEM_icmp6_destination_unreachable( dest_unreach, _HETHER_tn2nut,
             { },
             { payload=apl; }
)

//----------------------------------------------------------------------
FEM_icmp6_parameter_problem( param_problem, _HETHER_tn2nut,
             { },
             { Pointer=123;
	       payload=apl; }
)

//----------------------------------------------------------------------
FEM_icmp6_redirect( redirect, _HETHER_tn2nut,
             { },
             { TargetAddress=tnv6();
               DestinationAddress=tnv6(); }
)

//----------------------------------------------------------------------
FEM_icmp6_mldquery( mldquery, _HETHER_tn2nut,
             { },
             { MulticastAddress=v6(_ALLNODES_MCAST_ADDR); }
)

FEM_icmp6_mldreport( mldreport, _HETHER_tn2nut,
             { },
             { MulticastAddress=v6(_ALLNODES_MCAST_ADDR); }
)

FEM_icmp6_mlddone( mlddone, _HETHER_tn2nut,
             { },
             { MulticastAddress=v6(_ALLNODES_MCAST_ADDR); }
)



//======================================================================
// Option

Opt_ICMPv6_Prefix prefixopt_a {
//	Type=3;
//	Length=4;
//	PrefixLength=64;
	LFlag=1;
	AFlag=1;	
//	Reserved1=ZERO;	
	ValidLifetime=3600005;
	PreferredLifetime=3600005;
//	Reserved2=ZERO;	
	Prefix=v6(GLOSITE_UCAST_PRFX);
}

//======================================================================
// Data
Payload apl {
	data={0xbb,0xcc,0xdd,0xee,0xff};
	data=0xbb;
	data=0xbb;
	data=0xbb;
	data=0xbb;
	data=0xbb;
	data=0xbb;
	data=0xbb;
}


//end

