//
// 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.
//
//--------------------------------------------------------------------
// MLD Query to general query

#define v6lladdnode v6("ff02::1")
#define v6nutsol    v6merge("ff02::1:ff00:0000",104,nutv6())
//======================================================================
// Frame
Frame_Ether _query {
	header=eth_allnodemulti;
	packet=ip_query;
}
//----------------------------------------------------------------------
Frame_Ether _report {
	header=eth_nut2nutsol;
	packet=ip_report;
}

//======================================================================
// Ether
Hdr_Ether eth_allnodemulti {
//	SourceAddress=tnether();
	DestinationAddress=v62ethermulti(v6lladdnode);
//	Type=0x86dd; // ip6
}
//----------------------------------------------------------------------
Hdr_Ether eth_nut2nutsol {
	SourceAddress=nutether();
	DestinationAddress=v62ethermulti(v6nutsol);
	Type=0x86dd; // ip6
}

//======================================================================
// Packet
Packet_IPv6 ip_query {
	header=v6tn2llallnode;
	upper=mld_query;
}
//----------------------------------------------------------------------
Packet_IPv6 ip_report {
	header=v6nut2report;
	exthdr=_HBH_ralert;
	upper=mld_report;
}

//======================================================================
// IPv6
Hdr_IPv6 v6tn2llallnode {
//	Version=6;
//	SourceAddress=tnv6();
	DestinationAddress=v6lladdnode;
//	FlowLabel=0;
//	TrafficClass=0;
//	NextHeader=58;
//	TrafficClass=0;
	HopLimit=1;
//	PayloadLength=16;
}
//----------------------------------------------------------------------
Hdr_IPv6 v6nut2report {
//	SourceAddress=nutv6();
	DestinationAddress=v6nutsol;
//	FlowLabel=0;
//	NextHeader=58;
//	TrafficClass=0;
	HopLimit=1;
//	PayloadLength=16;
}
//======================================================================
// IPv6 Ext
//----------------------------------------------------------------------
Hdr_HopByHop _HBH_ralert {
	option=_padN;
	option=_ralert;
}
//----------------------------------------------------------------------
Opt_PadN _padN {
	pad={};
}
//----------------------------------------------------------------------
Opt_RouterAlert _ralert {
	Value=0;
}

//======================================================================
// ICMPv6
ICMPv6_MLDQuery mld_query {
	MaxResponseDelay=10000;
	MulticastAddress=v6("::");
}
//----------------------------------------------------------------------
ICMPv6_MLDReport mld_report {
//	MaxResponseDelay=0;
	MulticastAddress=v6nutsol;
}
