/* * * Copyright (C) 2003 Yokogawa Electric Corporation , * INTAP(Interoperability Technology Association for Information * Processing, Japan) , IPA (Information-technology Promotion Agency,Japan) * Copyright (C) IBM Corporation 2003. * 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. * * Author: Kazuo Hiekata * */ #include "DHCPv6_options.def" #include "DHCPv6_test.def" /*-----------------------------------------------------------------------------------* * For Server Test *-----------------------------------------------------------------------------------*/ //================================================================ // NS : NUT(server) to any address //================================================================ // For check; // Neighbor Solicitation // NS : NUT to any (Link_local address) na_client1_to_nut_local NA: na_client1_to_nut_local FEM_icmp6_ns( ns_nut_to_any_local, _HETHER_any, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(any); }, { TargetAddress = CLIENT1_LLOCAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // For send; // Neighbor Advertisement // NA: CLIENT1 (TN) ----> NUT0(Link_local address) FEM_icmp6_na( na_client1_to_nut_local, _HETHER_client1_to_nut, { HopLimit = 255; _SRC(CLIENT1_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = CLIENT1_LLOCAL_UCAST; option = opt_tll_client1; } ) // For Check; // Neighbor Solicitation // NS : NUT to any(Global address) FEM_icmp6_ns( ns_nut_to_any_global, _HETHER_any, { HopLimit = 255; _SRC(NUT_GLOBAL_UCAST); _DST(any); }, { TargetAddress = CLIENT1_GLOBAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Advertisement // NA: CLIENT1 (TN) ----> NUT0(Global address) FEM_icmp6_na( na_client1_to_nut_global, _HETHER_client1_to_nut, { HopLimit = 255; _SRC(CLIENT1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = CLIENT1_GLOBAL_UCAST; option = opt_tll_client1; } ) //================================================================ // NS : NUT(server) to relay agent //================================================================ // For check; // Neighbor Solicitation // NS : NUT --> RELAY1(Link0) FEM_icmp6_ns( ns_nut_to_relay1_0, _HETHER_any, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(any); }, { TargetAddress = RELAY1_0_LLOCAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Advertisement // NA: RELAY1(Link0) ----> NUT FEM_icmp6_na( na_relay1_0_to_nut, _HETHER_relay1_0_to_nut, { HopLimit = 255; _SRC(RELAY1_0_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY1_0_LLOCAL_UCAST; option = opt_tll_relay1_0; } ) // Neighbor Solicitation // NS : NUT --> RELAY1(Link0) FEM_icmp6_ns( ns_nut_to_relay1_0_global, _HETHER_any, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(any); }, { TargetAddress = RELAY1_0_GLOBAL_UCAST; option=_SLLOPT_nut; } ) FEM_icmp6_ns( ns_nut_to_relay1_0_global_global, _HETHER_any, { HopLimit = 255; _SRC(NUT_GLOBAL_UCAST); _DST(any); }, { TargetAddress = RELAY1_0_GLOBAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Advertisement // NA: RELAY1(Link0) ----> NUT...Global address FEM_icmp6_na( na_relay1_0_to_nut_global, _HETHER_relay1_0_to_nut, { HopLimit = 255; _SRC(RELAY1_0_GLOBAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY1_0_GLOBAL_UCAST; option = opt_tll_relay1_0; } ) FEM_icmp6_na( na_relay1_0_to_nut_global_global, _HETHER_relay1_0_to_nut, { HopLimit = 255; _SRC(RELAY1_0_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY1_0_GLOBAL_UCAST; option = opt_tll_relay1_0; } ) //================================================================ // NS : NUT(server) to relay agent //================================================================ // For check; // Neighbor Solicitation // NS : NUT--> RELAY AGENT 2 (LINK0) FEM_icmp6_ns( ns_nut_to_relay2_0, _HETHER_any, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(any); }, { TargetAddress = RELAY2_0_LLOCAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Advertisement // NA: RELAY2(Link0) ----> NUT FEM_icmp6_na( na_relay2_0_to_nut, _HETHER_relay2_0_to_nut, { HopLimit = 255; _SRC(RELAY2_0_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY2_0_LLOCAL_UCAST; option = opt_tll_relay2_0; } ) // For check; // Neighbor Solicitation // NS : NUT--> RELAY AGENT 2 (LINK0) FEM_icmp6_ns( ns_nut_to_relay2_0_global, _HETHER_any, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(any); }, { TargetAddress = RELAY2_0_GLOBAL_UCAST; option=_SLLOPT_nut; } ) FEM_icmp6_ns( ns_nut_to_relay2_0_global_global, _HETHER_any, { HopLimit = 255; _SRC(NUT_GLOBAL_UCAST); _DST(any); }, { TargetAddress = RELAY2_0_GLOBAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Advertisement // NA: RELAY2(Link0) ----> NUT FEM_icmp6_na( na_relay2_0_to_nut_global, _HETHER_relay2_0_to_nut, { HopLimit = 255; _SRC(RELAY2_0_GLOBAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY2_0_GLOBAL_UCAST; option = opt_tll_relay2_0; } ) FEM_icmp6_na( na_relay2_0_to_nut_global_global, _HETHER_relay1_0_to_nut, { HopLimit = 255; _SRC(RELAY2_0_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY2_0_GLOBAL_UCAST; option = opt_tll_relay2_0; } ) //================================================================ // Neighbor Solicitation // NS : NUT(Relay) to server NA: na_server1_to_nut FEM_icmp6_ns( ns_nutrelay_to_server, _HETHER_any, { HopLimit = 255; _SRC(NUTRELAY1_LINK0_LLOCAL_UCAST); _DST(SERVER1_LLOCAL_UCAST); }, { TargetAddress = SERVER1_LLOCAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Solicitation // NS : NUT(Relay) to server NA:na_client1_to_nut_local FEM_icmp6_ns( ns_nutrelay_to_client_local, _HETHER_any, { HopLimit = 255; _SRC(NUTRELAY1_LINK1_LLOCAL_UCAST); _DST(CLIENT1_LLOCAL_UCAST); }, { TargetAddress = CLIENT1_LLOCAL_UCAST; option=_SLLOPT_nut; } ) // NS : NUT(Relay) to server NA:na_client1_to_nut_global FEM_icmp6_ns( ns_nutrelay_to_client_global, _HETHER_any, { HopLimit = 255; _SRC(NUTRELAY1_LINK1_GLOBAL_UCAST); _DST(CLIENT1_GLOBAL_UCAST); }, { TargetAddress = CLIENT1_GLOBAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Solicitation // NS : NUT(Relay) to Relay2 NA: na_relay2_to_nut FEM_icmp6_ns( ns_nutrelay_to_relay, _HETHER_any, { HopLimit = 255; _SRC(NUTRELAY1_LINK1_GLOBAL_UCAST); _DST(any); //_DST(RELAY2_1_LLOCAL_UCAST); }, { TargetAddress = RELAY2_1_GLOBAL_UCAST; option=_SLLOPT_nut; } ) //================================================================ // Neighbor Advertisement // NA: RELAY2 ----> NUT0 FEM_icmp6_na( na_relay2_to_nut, _HETHER_relay2_1_to_nut, { HopLimit = 255; _SRC(RELAY2_1_LLOCAL_UCAST); _DST(NUTRELAY1_LINK1_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY2_1_GLOBAL_UCAST; option = opt_tll_relay2_1; } ) //================================================================ //================================================================ //looks do not be use! // Neighbor Solicitation // NS : NUT(Server) to any FEM_icmp6_ns( ns_nutserver_to_any, _HETHER_any, { HopLimit = 255; _SRC(NUTSERVER_LLOCAL_UCAST); _DST(any); }, { TargetAddress = CLIENT1_LLOCAL_UCAST; option=_SLLOPT_nut; } ) FEM_icmp6_ns( ns_nut_to_server1, _HETHER_nut_to_server1, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(SERVER1_LLOCAL_UCAST); }, { TargetAddress = SERVER1_LLOCAL_UCAST; option=opt_sll_nut; } ) //================================================================ // Neighbor Advertisement // NA: RELAY1(Link1) ----> NUT FEM_icmp6_na( na_relay1_1_to_nut, _HETHER_relay1_1_to_nut, { HopLimit = 255; _SRC(RELAY1_1_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = RELAY1_1_LLOCAL_UCAST; option = opt_tll_relay1_1; } ) //================================================================ //================================================================ //End: looks do not be use! /*-----------------------------------------------------------------------------------* * DHCPv6 Messages *-----------------------------------------------------------------------------------*/ //================================================================ // DHCPv6 Solicit FEM_dhcp6_solicit( dhcp6_solicit, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Solicit FEM_dhcp6_solicit( dhcp6_solicit_nut_to_alldhcp, _HETHER_nut_to_alldhcp, { _SRC(NUT_LLOCAL_UCAST); _DST(ALLDHCPAGENTS_MCAST_ADDR); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Solicit #define DHCP_SOLICIT 1 FEM_dhcp6_solicit( dhcp6_solicit_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_SOLICIT; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Advertise FEM_dhcp6_advertise( dhcp6_advertise, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Advertise // DHCPv6 Advertise: NUT ----> CLIENT1 FEM_dhcp6_advertise( advertise_nut_to_client1, _HETHER_nut_to_client1, { _SRC(NUT_LLOCAL_UCAST); _DST(CLIENT1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(546); }, { Identifier = ID_ADV; option = stop; } ) //================================================================ // DHCPv6 Advertise #define DHCP_ADVERTISE 2 FEM_dhcp6_advertise( dhcp6_advertise_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_ADVERTISE; Identifier = any; option = oneof(opt_Auth); option = stop; } ) //================================================================ // DHCPv6 Request FEM_dhcp6_request( dhcp6_request, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Request FEM_dhcp6_request( dhcp6_request_nut_to_alldhcp, _HETHER_nut_to_alldhcp, { _SRC(NUT_LLOCAL_UCAST); _DST(ALLDHCPAGENTS_MCAST_ADDR); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Request #define DHCP_REQUEST 3 FEM_dhcp6_request( dhcp6_request_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_REQUEST; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Request FEM_dhcp6_request( dhcp6_request_nut_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_LLOCAL_UCAST); _DST(SERVER1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Confirm FEM_dhcp6_confirm( dhcp6_confirm, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Confirm FEM_dhcp6_confirm( dhcp6_confirm_nut_to_alldhcp, _HETHER_nut_to_alldhcp, { _SRC(NUT_LLOCAL_UCAST); _DST(ALLDHCPAGENTS_MCAST_ADDR); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Confirm FEM_dhcp6_confirm( dhcp6_confirm_nut_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_LLOCAL_UCAST); _DST(SERVER1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Confirm #define DHCP_CONFIRM 4 FEM_dhcp6_confirm( dhcp6_confirm_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_CONFIRM; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Renew FEM_dhcp6_renew( dhcp6_renew, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Renew FEM_dhcp6_renew( dhcp6_renew_nut_to_alldhcp, _HETHER_nut_to_alldhcp, { _SRC(NUT_LLOCAL_UCAST); _DST(ALLDHCPAGENTS_MCAST_ADDR); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Renew FEM_dhcp6_renew( dhcp6_renew_nut_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_LLOCAL_UCAST); _DST(SERVER1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Renew #define DHCP_RENEW 5 FEM_dhcp6_renew( dhcp6_renew_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_RENEW; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Rebind FEM_dhcp6_rebind( dhcp6_rebind, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Rebind FEM_dhcp6_rebind( dhcp6_rebind_nut_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_LLOCAL_UCAST); _DST(SERVER1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Rebind #define DHCP_REBIND 6 FEM_dhcp6_rebind( dhcp6_rebind_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_REBIND; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Reply FEM_dhcp6_reply( dhcp6_reply, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Reply // DHCPv6 Reply: NUT ----> CLIENT1 FEM_dhcp6_reply( dhcp6_reply_nut_to_alldhcp, _HETHER_nut_to_alldhcp, { _SRC(NUT_LLOCAL_UCAST); _DST(ALLDHCPAGENTS_MCAST_ADDR); }, { _SPORT(any); _DPORT(546); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Reply // DHCPv6 Reply: NUT ----> CLIENT1 FEM_dhcp6_reply( dhcp6_reply_nut_to_client1, _HETHER_nut_to_client1, { _SRC(NUT_LLOCAL_UCAST); _DST(CLIENT1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(546); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Reply #define DHCP_REPLY 7 FEM_dhcp6_reply( dhcp6_reply_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_REPLY; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Release FEM_dhcp6_release( dhcp6_release, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Release FEM_dhcp6_release( dhcp6_release_nut_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_LLOCAL_UCAST); _DST(SERVER1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(547); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Release #define DHCP_RELEASE 8 FEM_dhcp6_release( dhcp6_release_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_RELEASE; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Decline FEM_dhcp6_decline( dhcp6_decline, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Reconfigure FEM_dhcp6_reconfigure( dhcp6_reconfigure, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Reconfigure // DHCPv6 Reconfigure: NUT ----> CLIENT1 FEM_dhcp6_reconfigure( dhcp6_reconfigure_nut_to_client1, _HETHER_nut_to_client1, { _SRC(NUT_LLOCAL_UCAST); _DST(CLIENT1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(546); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Reconfigure #define DHCP_RECONFIGURE 10 FEM_dhcp6_reconfigure( dhcp6_reconfigure_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_RECONFIGURE; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // DHCPv6 Information Request FEM_dhcp6_information_request( dhcp6_information_request, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Information Request // DHCPv6 Information Request: NUT ----> CLIENT1 FEM_dhcp6_information_request( dhcp6_information_request_nut_to_client1, _HETHER_nut_to_client1, { _SRC(NUT_LLOCAL_UCAST); _DST(CLIENT1_LLOCAL_UCAST); }, { _SPORT(any); _DPORT(546); }, { Identifier = any; option = stop; } ) //================================================================ // DHCPv6 Information Request #define DHCP_INFORMATION_REQUEST 11 FEM_dhcp6_information_request( dhcp6_information_request_auth, _HETHER_any, { _SRC(any); _DST(any); }, { _SPORT(any); _DPORT(any); }, { Type = DHCP_INFORMATION_REQUEST; Identifier = any; option = oneof(opt_Auth); } ) //================================================================ // Neighbor Advertisement // DAD NA: ----> NUT(GA) //=============================================================== FEM_icmp6_na( dadna_to_nutga, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(v6(_LLOCAL_ALLNODES_MCAST_ADDR)); }, { RFlag = 0; SFlag = 0; OFlag = 1; TargetAddress = NUT_GLOBAL_UCAST; option = opt_tll_nut; } ) /*-------------------------------------------------------------------------* * for Client test *-------------------------------------------------------------------------*/ //================================================================ // Neighbor Solicitation // NS : NUT to any FEM_icmp6_ns( ns_nutga_to_any, _HETHER_any, { HopLimit = 255; _SRC(NUT_GLOBAL_UCAST); _DST(any); }, { TargetAddress = any; option = any; } ) //================================================================ // Neighbor Solicitation // NS : NUT global Address 1 to any FEM_icmp6_ns( ns_nut1ga_to_any, _HETHER_any, { HopLimit = 255; _SRC(NUT_GLOBAL_UCAST1); _DST(any); }, { TargetAddress = any; option = any; } ) //================================================================ // Neighbor Solicitation // NS : NUT global Address 2 to any FEM_icmp6_ns( ns_nut2ga_to_any, _HETHER_any, { HopLimit = 255; _SRC(NUT_GLOBAL_UCAST2); _DST(any); }, { TargetAddress = any; option = any; } ) //================================================================ // Neighbor Solicitation (DAD) // DAD NS : DAD NS from NUT FEM_icmp6_ns( dadns_nutga, _HETHER_nut_dad, { HopLimit = 255; _SRC(v6(_UNSPEC_ADDR)); _DST(_IPV6_SOLNODE_MCAST(NUT_GLOBAL_UCAST)); }, { TargetAddress = NUT_GLOBAL_UCAST; } ) //================================================================ // Neighbor Solicitation to DNS Servers // NUT -----> DNS Name Server // 2006.01.23 added FEM_icmp6_ns( ns_nut_to_DNSserver, _HETHER_nut_to_dns_server, { HopLimit = 255; _SRC(any); _DST(any); }, { TargetAddress = DNS_NAME_SERVER_GLOBAL_UCAST; } ) //================================================================ // Router Solicitation // RS : NUT -----> ALL LINK LOCAL ROUTER FEM_icmp6_rs( rs_nut_to_server1, _HETHER_nut_to_linkallrouter, { HopLimit = 255; _SRC(NUT_LLOCAL_UCAST); _DST(LINK_LOCAL_ROUTER_MUTLICAST); }, { option =opt_sll_nut; } ) //================================================================ // Router Advertise // RA : SERVER1 -----> NUT FEM_icmp6_ra( ra_server1_to_nut, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_LLOCAL_UCAST); //_DST(v6(_LLOCAL_ALLNODES_MCAST_ADDR)); _DST(NUT_LLOCAL_UCAST); }, { MFlag = 1; LifeTime = 3000; option = opt_sll_server1; option = opt_prefix_server1_to_nut; } ) FEM_icmp6_ra( ra_server1ga_to_nut, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_GLOBAL_UCAST); //_DST(v6(_LLOCAL_ALLNODES_MCAST_ADDR)); _DST(NUT_LLOCAL_UCAST); }, { MFlag = 1; LifeTime = 3000; option = opt_sll_server1; option = opt_prefix_server1_to_nut; } ) //================================================================ // Neighbor Advertisement // NA: SERVER1 ----> NUT FEM_icmp6_na( na_server1_to_nut, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER1_LLOCAL_UCAST; option = opt_tll_server1; } ) //================================================================ // Neighbor Advertisement // NA: SERVER1 ----> NUT 1 FEM_icmp6_na( na_server1_to_nut1, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER1_LLOCAL_UCAST; option = opt_tll_server1; } ) //================================================================ // Neighbor Advertisement // NA: SERVER1 ----> NUT 2 FEM_icmp6_na( na_server1_to_nut2, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER1_LLOCAL_UCAST; option = opt_tll_server1; } ) //================================================================ // Neighbor Advertisement // NA: SERVER2 ----> NUT 2 FEM_icmp6_na( na_server2_to_nut2, _HETHER_server2_to_nut, { HopLimit = 255; _SRC(SERVER2_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER2_LLOCAL_UCAST; option = opt_tll_server2; } ) //================================================================ // Neighbor Advertisement // NA: SERVER2 ----> NUT FEM_icmp6_na( na_server2_to_nut, _HETHER_server2_to_nut, { HopLimit = 255; _SRC(SERVER2_LLOCAL_UCAST); _DST(NUT_LLOCAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER2_LLOCAL_UCAST; option = opt_tll_server2; } ) //================================================================ // Echo Request // Echo Request: SERVER1 ----> NUT FEM_icmp6_echo_request( echorequest_server1_to_nut, _HETHER_server1_to_nut, { _SRC(SERVER1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST); }, { payload = data8; } ) //================================================================ // Echo Request // Echo Request: SERVER1 ----> NUT 1 FEM_icmp6_echo_request( echorequest_server1_to_nut1, _HETHER_server1_to_nut, { _SRC(SERVER1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST1); }, { payload = data8; } ) //================================================================ // Echo Request // Echo Request: SERVER1 ----> NUT 2 FEM_icmp6_echo_request( echorequest_server1_to_nut2, _HETHER_server1_to_nut, { _SRC(SERVER1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST2); }, { payload = data8; } ) //================================================================ // Echo Request // Echo Request: SERVER1 ----> NUT 3 FEM_icmp6_echo_request( echorequest_server1_to_nut3, _HETHER_server1_to_nut, { _SRC(SERVER1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST3); }, { payload = data8; } ) //================================================================ // Echo Request // Echo Request: SERVER2 ----> NUT 2 FEM_icmp6_echo_request( echorequest_server2_to_nut2, _HETHER_server2_to_nut, { _SRC(SERVER2_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST2); }, { payload = data8; } ) //================================================================ // Echo Reply // Echo Reply: NUT ----> SERVER1 FEM_icmp6_echo_reply( echoreply_nut_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_GLOBAL_UCAST); _DST(SERVER1_GLOBAL_UCAST); }, { payload = data8; } ) Payload data8 { data = repeat(0x00, 8); } //================================================================ // Echo Reply // Echo Reply: NUT 1 ----> SERVER1 FEM_icmp6_echo_reply( echoreply_nut1_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_GLOBAL_UCAST1); _DST(SERVER1_GLOBAL_UCAST); }, { payload = data8; } ) //================================================================ // Echo Reply // Echo Reply: NUT 2 ----> SERVER1 FEM_icmp6_echo_reply( echoreply_nut2_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_GLOBAL_UCAST2); _DST(SERVER1_GLOBAL_UCAST); }, { payload = data8; } ) //================================================================ // Echo Reply // Echo Reply: NUT 3 ----> SERVER1 FEM_icmp6_echo_reply( echoreply_nut3_to_server1, _HETHER_nut_to_server1, { _SRC(NUT_GLOBAL_UCAST3); _DST(SERVER1_GLOBAL_UCAST); }, { payload = data8; } ) //================================================================ // Echo Reply // Echo Reply:NUT 2 ----> SERVER2 FEM_icmp6_echo_reply( echoreply_nut2_to_server2, _HETHER_nut_to_server2, { _SRC(NUT_GLOBAL_UCAST2); _DST(SERVER2_GLOBAL_UCAST); }, { payload = data8; } ) //================================================================ // Neighbor Advertisement // NA: SERVER1 ----> NUT(Global) FEM_icmp6_na( na_server1ga_to_nutga, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER1_GLOBAL_UCAST; option = opt_tll_server1; } ) //================================================================ // Neighbor Advertisement // NA: SERVER1 ----> NUT(Global) FEM_icmp6_na( na_server1ga_to_nut1ga, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST1); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER1_GLOBAL_UCAST; option = opt_tll_server1; } ) //================================================================ // Neighbor Advertisement // NA: SERVER1 ----> NUT(Global) FEM_icmp6_na( na_server1ga_to_nut2ga, _HETHER_server1_to_nut, { HopLimit = 255; _SRC(SERVER1_GLOBAL_UCAST); _DST(NUT_GLOBAL_UCAST2); }, { RFlag = 1; SFlag = 1; OFlag = 1; TargetAddress = SERVER1_GLOBAL_UCAST; option = opt_tll_server2; } ) //================================================================ // SQuery dns // FEM_udp6_dns( dns_squery, _HETHER_nut_to_dns_server, { _SRC(NUT_GLOBAL_UCAST); _DST(SERVER1_GLOBAL_UCAST); }, { _SPORT(any); _DPORT(53); }, { Identifier = any; QR = 0; Opcode = 0; RD = any; question = Question; } ) DNS_Question Question { entry = question_entry; } DNS_QuestionEntry question_entry { Name = dnsname(DNS_NAME); Type = 28; } /*-----------------------------------------------------------------------------------* * DHCPv6 Relay *-----------------------------------------------------------------------------------*/ //================================================================ // DHCPv6 Relay Forward(Solicit) // DHCPv6 Relay Forward(Solicit): CLIENT1---->Relay1 ----> NUT(Server) // For send only FEM_dhcp6_relay_forward( relayforward_solicit_client1_to_alldhcp, _HETHER_relay1_0_to_alldhcp, { HopLimit=32; _SRC(RELAY1_0_GLOBAL_UCAST); _DST(v6(_ALLDHCPSERVERS_MCAST_ADDR)); }, { // _SPORT(any); _DPORT(547); }, { LinkAddr = RELAY1_1_GLOBAL_UCAST; PeerAddr = CLIENT1_LLOCAL_UCAST; option = opt_RelayMessage_solicit_client1_to_alldhcp; //option = opt_IID; } ) // DHCPv6 Relay Forward(Solicit) Relay2 --> Relay1, // For send message!!! FEM_dhcp6_relay_forward( relayforward_solicit_relay2_to_relay1, _HETHER_relay2_1_to_relay1_1, { _SRC(RELAY2_1_LLOCAL_UCAST); _DST(RELAY1_1_LLOCAL_UCAST); }, { // _SPORT(any); _DPORT(547); }, { LinkAddr = RELAY2_2_GLOBAL_UCAST; PeerAddr = CLIENT1_LLOCAL_UCAST; option = opt_RelayMessage_solicit_client1_to_alldhcp; option = opt_IID; } ) //============================================================================= //For check ONLY //For check relay-forward message FEM_dhcp6_relay_forward( relayforward_solicit_nut_to_server1, _HETHER_nutrelayforward_to_alldhcp, { _SRC(NUTRELAY1_LINK0_GLOBAL_UCAST); _DST(v6(_ALLDHCPSERVERS_MCAST_ADDR)); }, { _SPORT(any); _DPORT(547); }, { LinkAddr = any; PeerAddr = CLIENT1_LLOCAL_UCAST; option = stop; } ) FEM_dhcp6_relay_forward( relayforward_request_nut_to_server1, _HETHER_nutrelayforward_to_alldhcp, { _SRC(NUTRELAY1_LINK0_GLOBAL_UCAST); _DST(v6(_ALLDHCPSERVERS_MCAST_ADDR)); }, { _SPORT(any); _DPORT(547); }, { LinkAddr = any; PeerAddr = CLIENT1_LLOCAL_UCAST; option = stop; } ) FEM_dhcp6_relay_forward( relayforward_infomationrequest_client1_to_alldhcp, _HETHER_nutrelayforward_to_alldhcp, { _SRC(NUTRELAY1_LINK0_GLOBAL_UCAST); _DST(v6(_ALLDHCPSERVERS_MCAST_ADDR)); }, { _SPORT(any); _DPORT(547); }, { LinkAddr = NUTRELAY1_LINK1_GLOBAL_UCAST; PeerAddr = CLIENT1_LLOCAL_UCAST; option = stop; //option = opt_RelayMessage_infomationrequest_client1_to_alldhcp; } ) // For check Relay-reply message //relay_reply_nut_relay FEM_dhcp6_relay_reply( relay_reply_nut_relay, _HETHER_any, { _SRC(any); _DST(oneof(RELAY1_0_LLOCAL_UCAST,RELAY1_0_GLOBAL_UCAST)); }, { _SPORT(any); _DPORT(547); }, { LinkAddr = any; //RELAY1_1_LLOCAL_UCAST; PeerAddr = any; //CLIENT1_LLOCAL_UCAST; option = stop; } ) // For check Relay-reply message(only for 1 link 2 relays) //relay_reply_nut_relay2_0 FEM_dhcp6_relay_reply( relay_reply_nut_relay2_0, _HETHER_any, { _SRC(any);//NUT_LLOCAL_UCAST); _DST(oneof(RELAY2_0_LLOCAL_UCAST,RELAY2_0_GLOBAL_UCAST)); }, { _SPORT(any); _DPORT(547); }, { LinkAddr = any; //RELAY1_1_LLOCAL_UCAST; PeerAddr = any; //CLIENT1_LLOCAL_UCAST; option = stop; } ) // For check Relay-forward message //relay_forward_nut_server FEM_dhcp6_relay_forward( relay_forward_nut_server, _HETHER_any, { _SRC(NUTRELAY1_LINK0_GLOBAL_UCAST); _DST(v6(_ALLDHCPSERVERS_MCAST_ADDR)); }, { _SPORT(any); _DPORT(547); }, { HopCount = any; LinkAddr = stop; PeerAddr = any; option = stop; } ) //===================================================================== // Relay agent used packets define // For SEND FEM_dhcp6_relay_forward( relayforward_infomationrequest_client1_to_alldhcp_send, _HETHER_nutrelayforward_to_alldhcp, { _SRC(RELAY1_0_GLOBAL_UCAST); _DST(v6(_ALLDHCPSERVERS_MCAST_ADDR)); }, { _DPORT(547); }, { LinkAddr = NUTRELAY1_LINK1_GLOBAL_UCAST; PeerAddr = CLIENT1_LLOCAL_UCAST; option = opt_IID; option = opt_RelayMessage_infomationrequest_client1_to_alldhcp; } ) // DHCPv6 Relay Forward(Solicit): CLIENT1 ---> Relay2(CLIENT1) ----> NUT (Relay1) FEM_dhcp6_relay_forward( relayforward_solicit_relay2_to_nut, _HETHER_relay2_1_to_nut, { // HopLimit = 32; _SRC(RELAY2_1_GLOBAL_UCAST); _DST(NUTRELAY1_LINK1_GLOBAL_UCAST); }, { // _SPORT(547); _DPORT(547); }, { LinkAddr = RELAY2_2_GLOBAL_UCAST; PeerAddr = CLIENT1_LLOCAL_UCAST; //option = opt_IID; option = opt_RelayMessage_solicit_client1_to_alldhcp; } ) // DHCPv6 Relay Forward(Solicit): // For the test: Relay2--> Relay1-->Server(NUT) FEM_dhcp6_relay_forward( relayforward_solicit_client1_to_relay2_to_relay1_alldhcp, _HETHER_relay2_1_to_nut, { _SRC(RELAY1_0_GLOBAL_UCAST); _DST(v6(_ALLDHCPSERVERS_MCAST_ADDR)); }, { // _SPORT(547); _DPORT(547); }, { LinkAddr = 0; PeerAddr = RELAY2_1_GLOBAL_UCAST; option = opt_RelayMessage_solicit_client1_relay2_relay1_server1_to_alldhcp; } ) //relay_advertise_server1_to_nut, //only for sending message FEM_dhcp6_relay_reply( relay_advertise_server1_to_client1_1relay, _HETHER_server1_to_nut, { _SRC(SERVER1_LLOCAL_UCAST); _DST(NUTRELAY1_LINK0_GLOBAL_UCAST); }, { _DPORT(547); }, { LinkAddr = 0; PeerAddr = CLIENT1_LLOCAL_UCAST; option = opt_IID; option = opt_RelayMessage_advertise_server1_to_nut; } ) //relay_advertise_server1_to_nut(Relay1) ---> Relay2, //only for send message FEM_dhcp6_relay_reply( relay_advertise_server1_to_client1_2relay, _HETHER_server1_to_nut, { _SRC(SERVER1_LLOCAL_UCAST); _DST(NUTRELAY1_LINK0_GLOBAL_UCAST); }, { _DPORT(547); }, { HopCount = 1; LinkAddr = 0; PeerAddr = RELAY2_1_GLOBAL_UCAST; option = opt_IID; option = opt_RelayMessage_advertise_server1_to_nut_2relay; } ) FEM_dhcp6_relay_reply( relayreply_advertise_relay1_to_relay2, _HETHER_nut_to_relay2, { _SRC(NUTRELAY1_LINK1_GLOBAL_UCAST); _DST(RELAY2_1_GLOBAL_UCAST); }, { _DPORT(547); }, { LinkAddr = RELAY2_2_GLOBAL_UCAST; PeerAddr = CLIENT1_LLOCAL_UCAST; option = opt_IID; option = opt_RelayMessage_advertise_server1_to_nut; } ) //relay_reply_server1_to_nut FEM_dhcp6_relay_reply( relay_reply_server1_to_client1_1relay, _HETHER_server1_to_nut, { _SRC(SERVER1_LLOCAL_UCAST); _DST(NUTRELAY1_LINK0_GLOBAL_UCAST); }, { _DPORT(547); }, { LinkAddr = 0; PeerAddr = CLIENT1_LLOCAL_UCAST; option = opt_IID; option = opt_RelayMessage_reply_server1_to_nut; } ) //Target Link-layer address Opt_ICMPv6_TLL opt_tll_nut { LinkLayerAddress = NUT_DUID_MAC_ADDR; } Opt_ICMPv6_TLL opt_tll_client1 { LinkLayerAddress = CLIENT1_MAC_ADDR; } Opt_ICMPv6_TLL opt_tll_server1 { LinkLayerAddress = SERVER1_MAC_ADDR; } Opt_ICMPv6_TLL opt_tll_server2 { LinkLayerAddress = SERVER2_MAC_ADDR; } //Source Link-layer address Opt_ICMPv6_SLL opt_sll_nut { LinkLayerAddress = NUT_MAC_ADDR; } Opt_ICMPv6_SLL opt_sll_server1{ LinkLayerAddress = SERVER1_MAC_ADDR; } Opt_ICMPv6_SLL opt_sll_server2{ LinkLayerAddress = SERVER2_MAC_ADDR; } Opt_ICMPv6_TLL opt_tll_relay1_0 { LinkLayerAddress = RELAY1_0_MAC_ADDR; } Opt_ICMPv6_TLL opt_tll_relay2_0 { LinkLayerAddress = RELAY2_0_MAC_ADDR; } Opt_ICMPv6_TLL opt_tll_relay1_1 { LinkLayerAddress = RELAY1_1_MAC_ADDR; } Opt_ICMPv6_TLL opt_tll_relay2_1 { LinkLayerAddress = RELAY2_1_MAC_ADDR; } Opt_ICMPv6_Prefix opt_prefix_server1_to_nut { // LFlag = 1; ValidLifetime = 14400; PreferredLifetime = 7200; Prefix = SERVER1_ROUTER_PREFIX; } //================================================================ // Relay Message option // //================================================================ Opt_DHCPv6_RelayMessage opt_RelayMessage_solicit_client1_to_alldhcp { relay = _UDP_DHCPV6_NAME(solicit_client1_to_alldhcp); } Opt_DHCPv6_RelayMessage opt_RelayMessage_advertise_server1_to_nut { relay = _UDP_DHCPV6_NAME(advertise_server1_to_client1); } //================================================================ // Relay Message option used for multirelayagent Opt_DHCPv6_RelayMessage opt_RelayMessage_advertise_server1_to_nut_2relay { relay = _UDP_DHCPV6_NAME(relayreply_advertise_relay1_to_relay2); } Opt_DHCPv6_RelayMessage opt_RelayMessage_reply_server1_to_nut { relay = _UDP_DHCPV6_NAME(reply_server1_to_client1); } Opt_DHCPv6_RelayMessage opt_RelayMessage_infomationrequest_client1_to_alldhcp { relay = _UDP_DHCPV6_NAME(information_request_client1_to_alldhcp); } //multiple relay , client1 -> Relay2 -> Relay1 Opt_DHCPv6_RelayMessage opt_RelayMessage_solicit_client1_relay2_relay1_to_alldhcp { relay = _UDP_DHCPV6_NAME(relayforward_solicit_client1_to_alldhcp); } //multiple relay , client1 -> Relay2 -> Relay1 -> Server1 Opt_DHCPv6_RelayMessage opt_RelayMessage_solicit_client1_relay2_relay1_server1_to_alldhcp { relay = _UDP_DHCPV6_NAME(relayforward_solicit_relay2_to_relay1); }