// // Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // 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: LLA_SAA.def,v 1.9 2005/01/06 06:49:41 akisada Exp $ // // This file has some basic definition and frames for DAD test about // any tentative address, and may be included from other *.def files. // // DADV6ADDR : v6 Tentative address for DAD // NUT_HasNoLLOCAL : if defined NUT has no link-local address // DADNA_SRC : IPv6 src address of DAD NA // dadns_from_NUT : DAD NS coming from NUT on DAD // chkconf_dadns_to_NUT : DAD NS send to NUT to check if address is configured // chkconf_dadna_from_NUT : DAD NA coming from NUT if addrss is configured // // #include "SAA.def" #define _TLLOPT_detail_define(_pNAME, _pLEN, _pLLA) \ Opt_ICMPv6_TLL _pNAME { \ Length=_pLEN; \ LinkLayerAddress=_pLLA; \ } #define LLA_SIMILAR_ADDRESS v6merge( _LLOCAL_UCAST_PRFX, \ 88, \ nutv6()) // // Ethernet Part // _HETHER_define(hether_nut2tentsolnode, nutether(), _ETHER_SOLNODE_MCAST(nutv6())) _HETHER_define(hether_tn2tentsolnode, tnether(), _ETHER_SOLNODE_MCAST(nutv6())) _HETHER_define(hether_tn2nutsolnode, tnether(), _ETHER_SOLNODE_MCAST(nutv6())) _HETHER_define(hether_tn2tnsolnode, tnether(), _ETHER_SOLNODE_MCAST(tnv6())) // // IPv6 Part // // // DADNS_from_NUT // Description: // DAD NS coming from NUT on DAD // Spec: // valid DAD NS FEM_ADDRCONF_dadns(DADNS_from_NUT, hether_nut2tentsolnode, DestinationAddress=_IPV6_SOLNODE_MCAST(nutv6()); , TargetAddress=nutv6(); // Tentative Address ) // // DADNS_from_TN_SameDstSameTgt // Description: // DAD NS send to NUT to check if address is configured // Spec: // valid DAD NS FEM_ADDRCONF_dadns(DADNS_from_TN_SameDstSameTgt, hether_tn2tentsolnode, DestinationAddress=_IPV6_SOLNODE_MCAST(nutv6()); , TargetAddress=nutv6(); // Tentative Address ) // // DADNS_from_TN_DiffDstDiffTgt // Description: // DAD NS send to NUT to check independency // Spec: // valid DAD NS FEM_ADDRCONF_dadns(DADNS_from_TN_DiffDstDiffTgt, hether_tn2tnsolnode, DestinationAddress=_IPV6_SOLNODE_MCAST(tnv6()); , TargetAddress=tnv6(); // Tentative Address ) // // DADNS_from_TN_SameDstDiffTgt // Description: // DAD NS send to NUT to check independency // Spec: // valid DAD NS FEM_ADDRCONF_dadns(DADNS_from_TN_SameDstDiffTgt, hether_tn2nutsolnode, DestinationAddress=_IPV6_SOLNODE_MCAST(nutv6()); , TargetAddress=tnv6(); // Tentative Address ) // // DADNA_from_NUT // Description: // DAD NA coming from NUT if addrss is configured // Spec: // valid DAD NA // NUT is a host FEM_ADDRCONF_dadna(DADNA_from_NUT, _HETHER_nut2allnodes, SourceAddress=nutv6(); , TargetAddress=nutv6(); option=_TLLOPT_nut; ) // // DADNA_from_NUT_woTLL // Description: // DAD NA coming from NUT if addrss is configured // Spec: // valid DAD NA // NUT is a host FEM_ADDRCONF_dadna(DADNA_from_NUT_woTLL, _HETHER_nut2allnodes, SourceAddress=nutv6(); , TargetAddress=nutv6(); ) // // DADNA_from_TN_SameTgt // Description: // DAD NA Transmitted by TN which has Target address same as NUT // Spec: // valid DAD NA // FEM_ADDRCONF_dadna(DADNA_from_TN_SameTgt, _HETHER_tn2allnodes, SourceAddress=nutv6(); , RFlag=0; TargetAddress=nutv6(); //option=_TLLOPT_tn; //not need this option(specification) ) // // DADNA_from_TN_DiffTgt // Description: // DAD NA Transmitted by TN which has Target address same as NUT // Spec: // valid DAD NA // FEM_ADDRCONF_dadna(DADNA_from_TN_DiffTgt, _HETHER_tn2allnodes, SourceAddress=tnv6(); , RFlag=0; TargetAddress=tnv6(); option=_TLLOPT_tn; ) // // SOLNS_from_TN_SameTgt // Description: // Address resolution NS send to NUT to check if address is configured // Spec: // valid DAD NS FEM_icmp6_ns ( SOLNS_from_TN_SameTgt, hether_tn2nutsolnode, { _SRC(tnv6()); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=255; }, { TargetAddress=nutv6(); option=_SLLOPT_tn; } ) // // na // NUT's link local address // to // TN's link local address // // Targetaddress TN's link local address FEM_icmp6_na ( NA_from_NUT, _HETHER_nut2tn, { _SRC(nutv6()); _DST(tnv6()); HopLimit=255; }, { RFlag=RFLAG; SFlag=1; OFlag=1; TargetAddress=nutv6(); option=_TLLOPT_nut; } ) // // na // NUT's link local address // to // TN's link local address // // Targetaddress TN's link local address FEM_icmp6_na ( NA_from_NUT_woTLL, _HETHER_nut2tn, { _SRC(nutv6()); _DST(tnv6()); HopLimit=255; }, { RFlag=RFLAG; SFlag=1; OFlag=1; TargetAddress=nutv6(); } ) // // NS_from_TN_SrcDstUni for Address Resolution // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( NS_from_TN_SrcDstUni, _HETHER_tn2nut, { _SRC(tnv6()); _DST(nutv6()); HopLimit=255; }, { TargetAddress=nutv6(); } ) // // DADNS_from_TN_SameTgt w/ HopLimit=254 // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( DADNS_from_TN_HL254, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=254; }, { TargetAddress=nutv6(); } ) // // DADNS_from_TN_invalidCHKSUM w/ Invalid Checksum // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( DADNS_from_TN_invalidCHKSUM, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=255; }, { Checksum=0xffff; TargetAddress=nutv6(); } ) // // DADNS_from_TN_CODEnon0 w/ non-Zero code // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( DADNS_from_TN_CODEnon0, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=255; }, { Code=0x01; TargetAddress=nutv6(); } ) // // DADNS_from_TN_invalidLEN w/ invalid Payload Length // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( DADNS_from_TN_invalidLEN, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); PayloadLength=0x10; HopLimit=255; }, { TargetAddress=nutv6(); } ) // // DADNS_from_TN_tgtMCAST w/ MULTICAST as Target // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( DADNS_from_TN_tgtMCAST, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=255; }, { TargetAddress=_IPV6_SOLNODE_MCAST(nutv6()); } ) // // DADNS_from_TN_Reserved w/ Reserved Field non-zero // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( DADNS_from_TN_Reserved, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=255; }, { Reserved=0xffffffff; TargetAddress=nutv6(); } ) // // DADNS_from_TN_wTLL w/ TLL Option // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_icmp6_ns ( DADNS_from_TN_wTLL, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=255; }, { TargetAddress=nutv6(); option=_TLLOPT_tn; } ) // // DADNS_from_TN_DstAll // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_ADDRCONF_dadns(DADNS_from_TN_DstAll, _HETHER_tn2allnodes, DestinationAddress=v6(_ALLNODES_MCAST_ADDR); , TargetAddress=nutv6(); // Tentative Address ) // // DADNS_from_TN_DstTent // Description: // DAD NS send to NUT to check if address is configured // Spec: // invalid DAD NS FEM_ADDRCONF_dadns(DADNS_from_TN_DstTent, _HETHER_tn2nut, DestinationAddress=nutv6(); , TargetAddress=nutv6(); // Tentative Address ) // // DAD NA w/ HopLimit=254 // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_HL254, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=254; }, { RFlag=0; SFlag=0; OFlag=1; TargetAddress=nutv6(); option=_TLLOPT_tn; } ) // // DAD NA w/ Sflag==1 // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_SF1, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { RFlag=0; SFlag=1; OFlag=1; TargetAddress=nutv6(); option=_TLLOPT_tn; } ) // // DAD NS w/ SLL // unspecified address // to // NUT's solicited multicast address // // Targetaddress TN's link local address FEM_icmp6_ns ( DADNS_from_TN_wSLL, hether_tn2tentsolnode, { _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(nutv6())); HopLimit=255; }, { TargetAddress=nutv6(); option=_SLLOPT_tn; //invalid } ) // // DAD NA w/ SLL // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_wSLL, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { RFlag=0; SFlag=0; OFlag=1; TargetAddress=nutv6(); //option=_TLLOPT_tn; //not need TTL option(specification of phase II) option=_SLLOPT_tn; } ) // // DAD NA w/o TLL // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_woTLL, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { RFlag=0; SFlag=0; OFlag=1; TargetAddress=nutv6(); } ) FEM_upp_no_next_header( PreparationPkt, _HETHER_tn2tn, { _SRC(nutv6()); _DST(tnv6()); }, {} ) // // DAD NA w/ invalid Checksum // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_invalidCHKSUM, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { RFlag=0; SFlag=0; OFlag=1; Checksum=0xffff; TargetAddress=nutv6(); option=_TLLOPT_tn; } ) // // DAD NA w/ non-ZERO code // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_CODEnon0, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { Code=0x01; RFlag=0; SFlag=0; OFlag=1; TargetAddress=nutv6(); option=_TLLOPT_tn; } ) // // DAD NA w/ invalid Payload Length // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_invalidLEN, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); PayloadLength=0x10; HopLimit=255; }, { RFlag=0; SFlag=0; OFlag=1; TargetAddress=nutv6(); option=_TLLOPT_tn; } ) // // DAD NA w/ MULTICAST as Target // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_tgtMCAST, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { RFlag=0; SFlag=0; OFlag=1; TargetAddress=_IPV6_SOLNODE_MCAST(nutv6()); option=_TLLOPT_tn; } ) // // DAD NA w/ Reserved Field non-zero // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_Reserved, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { RFlag=0; SFlag=0; OFlag=1; Reserved=0x1fffffff; TargetAddress=nutv6(); option=_TLLOPT_tn; } ) // // DAD NA w/ Invalid Option Length // TN's link local address // to // allnode multicast address // // Targetaddress TN's link local address FEM_icmp6_na ( DADNA_from_TN_invalidOptLen, _HETHER_tn2allnodes, { _SRC(tnv6()); _DST(v6(_ALLNODES_MCAST_ADDR)); HopLimit=255; }, { RFlag=0; SFlag=0; OFlag=1; TargetAddress=nutv6(); option=TLL_invalidLen_tn; } ) _TLLOPT_detail_define(TLL_invalidLen_tn, 0, tnether()) //end