# # Copyright (C) 2003, 2004, 2005 Yokogawa Electric Corporation, # INTAP(Interoperability Technology Association # for Information Processing, 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. # # Perl Module for "Default Address Selection for IPv6" Test # # $Name: REL_2_1_2 $ # # $TAHI: ct/default-addr-select/ADDR_SELECT.pm,v 1.12 2003/05/28 00:20:27 kenta Exp $ # ######################################################################## package ADDR_SELECT; use Exporter; @ISA = qw(Exporter); @EXPORT = qw( %pktdesc nutReboot nutDefaultRouteAdd nutIPv6AddrAdd nutIPv6AddrAdd_Any nutIPv6AddrDelete nutIPv6AddrDelete_Any nutDeprecatedIPv6AddrAdd nutDeprecatedIPv6AddrAdd_Any nutAutoConfIPv6AddrAdd nutAutoConfIPv6AddrAdd_Any nutPing6 nutPing6_Link0 nutPing6Async nutPing6Async_Link0 nutPing6AsyncWait nutClear prefix2G_ADDR_NUT nutLLA nutInitialize nutInitialize_ConfiguredTunnel checkNUT_SrcAddr checkNUT_SrcAddr_Any nutTempAddrEnable nutTempAddrDisable nutDnsSet nutDnsRemove nutPing62Dest nutPing62Dest_TempAddr nutPing62Dest_Dns ); use V6evalTool; %pktdesc = ( echo_request_DESTINATION2SOURCE1 => 'NUT <------------------- DefaultRouter : ICMPv6 Echo Request', echo_reply_SOURCE12DESTINATION => 'NUT -------------------> DefaultRouter : ICMPv6 Echo Reply', echo_request_NUT2DESTINATION => 'NUT(Expected Source) --> Destination(offLink) : ICMPv6 Echo Request', echo_request_NUT2DESTINATION_ON_LINK => 'NUT(Expected Source) --> Destination(onLink) : ICMPv6 Echo Request', echo_request_NUT2DESTINATION_oneof => 'NUT(known Source) -----> Destination(offLink) : ICMPv6 Echo Request', echo_request_NUT2DESTINATION_ON_LINK_oneof => 'NUT(known Source) -----> Destination(onLink) : ICMPv6 Echo Request', echo_request_NUT2DESTINATION_any => 'NUT(any Source) -------> Destination(offLink) : ICMPv6 Echo Request', echo_request_NUT2DESTINATION_ON_LINK_any => 'NUT(any Source) -------> Destination(onLink) : ICMPv6 Echo Request', ns_NUT2DEFAULT_ROUTER_SLLA => 'NUT(known Source) -----> DefaultRouter : NS with SLLA', ns_NUT2DEFAULT_ROUTER_SLLA_any => 'NUT(any Source) -------> DefaultRouter : NS with SLLA', ns_NUT2DEFAULT_ROUTER_noOPT => 'NUT(known Source) -----> DefaultRouter : NS', ns_NUT2DEFAULT_ROUTER_noOPT_any => 'NUT(any Source) -------> DefaultRouter : NS', na_DEFAULT_ROUTER2NUT_TLLA => 'NUT <------------------- DefaultRouter : NA with TLLA', ns_NUT2DESTINATION_SLLA => 'NUT(known Source) -----> Destination(offLink) : NS with SLLA', ns_NUT2DESTINATION_SLLA_any => 'NUT(any Source) -------> Destination(offLink) : NS with SLLA', ns_NUT2DESTINATION_ON_LINK_SLLA => 'NUT(known Source) -----> Destination(onLink) : NS with SLLA', ns_NUT2DESTINATION_ON_LINK_SLLA_any => 'NUT(any Source) -------> Destination(onLink) : NS with SLLA', ns_NUT2DESTINATION_noOPT => 'NUT(known Source) -----> Destination(offLink) : NS', ns_NUT2DESTINATION_noOPT_any => 'NUT(any Source) -------> Destination(offLink) : NS', ns_NUT2DESTINATION_ON_LINK_noOPT => 'NUT(known Source) -----> Destination(onLink) : NS', ns_NUT2DESTINATION_ON_LINK_noOPT_any => 'NUT(any Source) -------> Destination(onLink) : NS', na_DESTINATION_R_2NUT_TLLA => 'NUT <------------------- Destination(offLink) : NA with TLLA & no R flag', na_DESTINATION2NUT_ON_LINK_TLLA => 'NUT <------------------- Destination(onLink) : NA with TLLA & no R flag', ns_NUT2DNS_SLLA_any => 'NUT(any Source) -------> DNS : NS with SLLA', ns_NUT2DNS_noOPT_any => 'NUT(any Source) -------> DNS : NS', na_DNS2NUT_TLLA => 'NUT <------------------- DNS : NA with TLLA', ra_DEPRECATED => 'NUT <------------------- DefaultRouter : RA with PreferredLifetime=1', ra_NORMAL => 'NUT <------------------- DefaultRouter : RA', dns_question_AAAA => 'NUT(known Source) -----> DNS : DNS query question', dns_answer_AAAA2 => 'NUT <------------------- DNS : DNS query answer x2', dns_answer_AAAA3 => 'NUT <------------------- DNS : DNS query answer x3', echo_request_LINK0_v4_tn2nut => 'NUT <------------------- TN : ICMP Echo Request', echo_reply_LINK0_v4_nut2tn => 'NUT -------------------> TN : ICMP Echo Reply', arp_LINK0_nut2tn_request => 'NUT -------------------> TN : ARP Request', arp_LINK0_tn2nut_reply => 'NUT <------------------- TN : ARP Echo Reply' ); $TRUE = 1; $FALSE = 0; $NUT_IF = $V6evalTool::NutDef{Link0_device}; $NUT_IF2 = $V6evalTool::NutDef{Link1_device}; $IF = 'Link0'; $DST_FQDN= "server.tahi.org"; $C_BLUE = '\"#0000FF\"'; $C_GREEN = '\"#009900\"'; #====================================================================== # nutReboot() - reboot NUT #====================================================================== $remote_debug = ""; sub nutReboot() { vLogHTML("
--- NUT: Reboot ---
"); $ret = vRemote("reboot.rmt", $remote_debug); if($ret == 0){ vLogHTML("--- NUT: Reboot: Success ---
"); return $TRUE; }else{ vLogHTML("--- NUT: Reboot: Fail :return status = $ret ---
"); return $FALSE; } } #====================================================================== # nutDefaultRouteAdd() - Add IPv6 Default Route in NUT # Default Router = #====================================================================== sub nutDefaultRouteAdd() { my $ADDR = vMAC2LLAddr($V6evalTool::TnDef{Link0_addr}); vLogHTML("
--- NUT: Add IPv6 Default Route ($ADDR) ---
"); $ret = vRemote("route.rmt", "", "prefix=default", "cmd=add", "addrfamily=inet6", # "gateway=$ADDR%$NUT_IF" # ); "gateway=$ADDR", "if=$NUT_IF"); if($ret == 0){ vLogHTML("--- NUT: Add IPv6 Default Route ($ADDR): Success ---
"); return $TRUE; }else{ vLogHTML("--- NUT: Add IPv6 Default Route ($ADDR): Fail :return status = $ret ---
"); return $FALSE; } } #====================================================================== # nutIPv6AddrAdd() - Add IPv6 Unicast Address in NUT Link0 #====================================================================== sub nutIPv6AddrAdd($$) { my ($ADDR,$PLEN) = @_; vLogHTML("
--- NUT: Add IPv6 Address ($ADDR/$PLEN) ---
"); $ret = vRemote("manualaddrconf.rmt", "", "if=$NUT_IF", "addrfamily=inet6", "addr=$ADDR", "len=$PLEN", "type=unicast"); if($ret){ vLogHTML("--- NUT: Add IPv6 Address ($ADDR/$PLEN) Fail :return status = $ret ---
"); return $FALSE; }else{ vLogHTML("--- NUT: Add IPv6 Address ($ADDR/$PLEN) Success ---
"); return $TRUE; } } #====================================================================== # nutIPv6AddrAdd_Any() - Add IPv6 Unicast Address in NUT any Link #====================================================================== sub nutIPv6AddrAdd_Any($$$) { my ($ADDR,$PLEN,$IF_SELECT) = @_; vLogHTML("
--- NUT: Add IPv6 Address ($ADDR/$PLEN $IF_SELECT) ---
"); my $IF_SELECTED; if($IF_SELECT eq 'Link0'){ $IF_SELECTED = $NUT_IF; }else{ $IF_SELECTED = $NUT_IF2; } $ret = vRemote("manualaddrconf.rmt", "", "if=$IF_SELECTED", "addrfamily=inet6", "addr=$ADDR", "len=$PLEN", "type=unicast"); if($ret){ vLogHTML("--- NUT: Add IPv6 Address ($ADDR/$PLEN $IF_SELECT) Fail :return status = $ret ---
"); return $FALSE; }else{ vLogHTML("--- NUT: Add IPv6 Address ($ADDR/$PLEN $IF_SELECT) Success ---
"); return $TRUE; } } #====================================================================== # nutIPv6AddrDelete() - Delete IPv6 Unicast Address in NUT Link0 #====================================================================== sub nutIPv6AddrDelete($$) { my ($ADDR,$PLEN) = @_; vLogHTML("
--- NUT: Delete IPv6 Address ($ADDR/$PLEN) ---
"); $ret = vRemote("manualaddrconf.rmt", "", "if=$NUT_IF", "addrfamily=inet6", "addr=$ADDR", "len=$PLEN", "type=delete"); if($ret){ vLogHTML("--- NUT: Delete IPv6 Address ($ADDR/$PLEN) Fail :return status = $ret ---
"); return $FALSE; }else{ vLogHTML("--- NUT: Delete IPv6 Address ($ADDR/$PLEN) Success ---
"); return $TRUE; } } #====================================================================== # nutIPv6AddrDelete_Any() - Delete IPv6 Unicast Address in NUT any Link #====================================================================== sub nutIPv6AddrDelete_Any($$$) { my ($ADDR,$PLEN,$IF_SELECT) = @_; vLogHTML("
--- NUT: Delete IPv6 Address ($ADDR/$PLEN $IF) ---
"); my $IF_SELECTED; if($IF_SELECT eq 'Link0'){ $IF_SELECTED = $NUT_IF; }else{ $IF_SELECTED = $NUT_IF2; } $ret = vRemote("manualaddrconf.rmt", "", "if=$IF_SELECTED", "addrfamily=inet6", "addr=$ADDR", "len=$PLEN", "type=delete"); if($ret){ vLogHTML("--- NUT: Delete IPv6 Address ($ADDR/$PLEN $IF) Fail :return status = $ret ---
"); return $FALSE; }else{ vLogHTML("--- NUT: Delete IPv6 Address ($ADDR/$PLEN $IF) Success ---
"); return $TRUE; } } #====================================================================== # nutDeprecatedIPv6AddrAdd() - Add Deprecated IPv6 Address in NUT Link0 #====================================================================== sub nutDeprecatedIPv6AddrAdd($$) { my ($G_PREFIX,$CPP) = @_; vLogHTML("
--- NUT: Add Deprecated IPv6 Address ($G_PREFIX + NUT'sEUI64) ---
"); vCPP("-DG_PREFIX=\\\"$G_PREFIX\\\""); vSend("$IF", 'ra_DEPRECATED'); vSleep(5); if($CPP ne ''){ vCPP($CPP); } vLogHTML("
"); } #====================================================================== # nutDeprecatedIPv6AddrAdd_Any() - Add Deprecated IPv6 Address in NUT any Link #====================================================================== sub nutDeprecatedIPv6AddrAdd_Any($$$) { my ($G_PREFIX,$CPP,$IF_SELECT) = @_; vLogHTML("
--- NUT: Add Deprecated IPv6 Address ($G_PREFIX + NUT'sEUI64) at $IF_SELECT ---
"); vCPP("-DG_PREFIX=\\\"$G_PREFIX\\\""); vSend("$IF_SELECT", 'ra_DEPRECATED'); vSleep(5); if($CPP ne ''){ vCPP($CPP); } vLogHTML("
"); } #====================================================================== # nutAutoConfIPv6AddrAdd() - Add Auto Configuration IPv6 Address in NUT Link0 #====================================================================== sub nutAutoConfIPv6AddrAdd($$) { my ($G_PREFIX,$CPP) = @_; vLogHTML("
--- NUT: Add Auto Configuration IPv6 Address ($G_PREFIX + NUT'sEUI64) ---
"); vCPP("-DG_PREFIX=\\\"$G_PREFIX\\\""); vSend("$IF", 'ra_NORMAL'); vSleep(5); if($CPP ne ''){ vCPP($CPP); } vLogHTML("
"); } #====================================================================== # nutAutoConfIPv6AddrAdd_Any() - Add Auto Configuration IPv6 Address in NUT any Link #====================================================================== sub nutAutoConfIPv6AddrAdd_Any($$$) { my ($G_PREFIX,$CPP,$IF_SELECT) = @_; vLogHTML("
--- NUT: Add Auto Configuration IPv6 Address ($G_PREFIX + NUT'sEUI64) at $IF_SELECT ---
"); vCPP("-DG_PREFIX=\\\"$G_PREFIX\\\""); vSend("$IF_SELECT", 'ra_NORMAL'); vSleep(5); if($CPP ne ''){ vCPP($CPP); } vLogHTML("
"); } #====================================================================== # nutPing6() - Ping6 from NUT to Destination #====================================================================== sub nutPing6($) { my ($ADDR) = @_; vLogHTML("
--- NUT: Ping6 to $ADDR ---
"); $ret = vRemote("showAddr.rmt"); if($ret != 0){ vLogHTML("--- NUT: Ping6 to $ADDR: Fail :return status = $ret ---
"); return $FALSE; } $ret = vRemote("ping6.rmt", "", "addr=$ADDR"); if($ret == 0){ #vLogHTML("--- NUT: Ping6 to $ADDR: Success ---
"); return $TRUE; }else{ vLogHTML("--- NUT: Ping6 to $ADDR: Fail :return status = $ret ---
"); return $FALSE; } } #====================================================================== # nutPing6_Link0() - Ping6 from NUT to Destination #====================================================================== sub nutPing6_Link0($) { my ($ADDR) = @_; vLogHTML("
--- NUT: Ping6 to $ADDR %Link0 ---
"); $ret = vRemote("showAddr.rmt"); if($ret != 0){ vLogHTML("--- NUT: Ping6 to $ADDR %Link0: Fail :return status = $ret ---
"); return $FALSE; } $ret = vRemote("ping6.rmt", "", "if=$NUT_IF", "addr=$ADDR"); if($ret == 0){ #vLogHTML("--- NUT: Ping6 to $ADDR %Link0: Success ---
"); return $TRUE; }else{ vLogHTML("--- NUT: Ping6 to $ADDR %Link0: Fail :return status = $ret ---
"); return $FALSE; } } #====================================================================== # nutPing6Async() - Ping6 from NUT to Destination (Async) #====================================================================== sub nutPing6Async($) { my ($ADDR) = @_; vLogHTML("
--- NUT: Ping6 to $ADDR (Async) ---
"); $ret = vRemote("showAddr.rmt"); if($ret != 0){ vLogHTML("--- NUT: Ping6 to $ADDR (Async): Fail :return status = $ret ---
"); return $FALSE; } $ret = vRemoteAsync("ping6.rmt", "", "addr=$ADDR"); if($ret == 0){ #vLogHTML("--- NUT: Ping6 to $ADDR (Async): Success ---
"); return $TRUE; }else{ vLogHTML("--- NUT: Ping6 to $ADDR (Async): Fail :return status = $ret ---
"); return $FALSE; } } #====================================================================== # nutPing6Async_Link0() - Ping6 from NUT to Destination (Async) #====================================================================== sub nutPing6Async_Link0($) { my ($ADDR) = @_; vLogHTML("
--- NUT: Ping6 to $ADDR %Link0 (Async) ---
"); $ret = vRemote("showAddr.rmt"); if($ret != 0){ vLogHTML("--- NUT: Ping6 to $ADDR %Link0 (Async): Fail :return status = $ret ---
"); return $FALSE; } $ret = vRemoteAsync("ping6.rmt", "", "if=$NUT_IF", "addr=$ADDR"); if($ret == 0){ #vLogHTML("--- NUT: Ping6 to $ADDR %Link0 (Async): Success ---
"); return $TRUE; }else{ vLogHTML("--- NUT: Ping6 to $ADDR %Link0 (Async): Fail :return status = $ret ---
"); return $FALSE; } } #====================================================================== # nutPing6AsyncWait() - Wait for asynchronous remote script forked by nutPing6Async() #====================================================================== sub nutPing6AsyncWait() { $ret = vRemoteAsyncWait(); if($ret == 0){ return $TRUE; }else{ vLogHTML("--- vRemoteAsyncWait: Fail :return status = $ret ---
"); return $FALSE; } } #====================================================================== # ping6_Destination2SOURCE1() - send ping6 from DESTINATION to SOURCE1 #====================================================================== sub ping6_Destination2SOURCE1($$) { my ($CPP,$IF_SELECT) = @_; my $rcv_time = 0; vCapture("$IF_SELECT"); vClear("$IF_SELECT"); vSend("$IF_SELECT", 'echo_request_DESTINATION2SOURCE1'); while($TRUE){ my $CPP_THIS = $CPP; # my %ret = vRecv("$IF_SELECT", 5, $rcv_time, 0, 'ns_NUT2DEFAULT_ROUTER_SLLA','ns_NUT2DEFAULT_ROUTER_noOPT','ns_NUT2DESTINATION_SLLA','ns_NUT2DESTINATION_noOPT','echo_reply_SOURCE12DESTINATION'); my %ret = vRecv("$IF_SELECT", 7, $rcv_time, 0, 'ns_NUT2DEFAULT_ROUTER_SLLA','ns_NUT2DEFAULT_ROUTER_noOPT','ns_NUT2DESTINATION_SLLA','ns_NUT2DESTINATION_noOPT','echo_reply_SOURCE12DESTINATION'); if($ret{status} == 0) { if($ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_SLLA' || $ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_noOPT') { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF_SELECT", 'na_DEFAULT_ROUTER2NUT_TLLA'); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq 'ns_NUT2DESTINATION_SLLA' || $ret{recvFrame} eq 'ns_NUT2DESTINATION_noOPT') { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF_SELECT", 'na_DESTINATION_R_2NUT_TLLA'); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq 'echo_reply_SOURCE12DESTINATION') { # %ret2 = vRecv("$IF_SELECT", 3, 0, 0, 'ns_NUT2DESTINATION_SLLA','ns_NUT2DESTINATION_noOPT'); %ret2 = vRecv("$IF_SELECT", 7, $rcv_time, 0, 'ns_NUT2DESTINATION_SLLA','ns_NUT2DESTINATION_noOPT'); if($ret2{status} == 0) { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret2{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); vSend("$IF_SELECT", 'na_DESTINATION_R_2NUT_TLLA'); } return $TRUE; } }else{ vLogHTML("--- Can not receive Echo Reply or NS from NUT ---
"); return $FALSE; } } } #====================================================================== # nutClear() - delete all address in NUT Link0 and Clear prefix list and Clear NDP entries #====================================================================== sub nutClear($$;$$$$$$) { my ($ADDR1,$PLEN1,$ADDR2,$PLEN2,$ADDR3,$PLEN3,$ADDR4,$PLEN4) = @_; vLogHTML("
--- Delete All Source Addresses ---
"); $ret = vRemote("clearprefix.rmt", $remote_debug); if($ret != 0){ vLogHTML("--- Delete All Source Addresses and Clear prefix list : Fail ---
"); return $FALSE; } if($ADDR1 ne ''){ $ret = nutIPv6AddrDelete($ADDR1,$PLEN1); if(!$ret){ vLogHTML("--- Delete All Source Addresses and Clear prefix list : Fail ---
"); return $FALSE; } } if($ADDR2 ne ''){ $ret = nutIPv6AddrDelete($ADDR2,$PLEN2); if(!$ret){ vLogHTML("--- Delete All Source Addresses and Clear prefix list : Fail ---
"); return $FALSE; } } if($ADDR3 ne ''){ $ret = nutIPv6AddrDelete($ADDR3,$PLEN3); if(!$ret){ vLogHTML("--- Delete All Source Addresses and Clear prefix list : Fail ---
"); return $FALSE; } } if($ADDR4 ne ''){ $ret = nutIPv6AddrDelete($ADDR4,$PLEN4); if(!$ret){ vLogHTML("--- Delete All Source Addresses and Clear prefix list : Fail ---
"); return $FALSE; } } $ret = vRemote("clearnc.rmt", $remote_debug); if($ret != 0){ vLogHTML("--- Delete All Source Addresses and Clear prefix list : Fail ---
"); return $FALSE; } $ret = vRemote("cleardefr.rmt", $remote_debug); if($ret != 0){ vLogHTML("--- Delete All Source Addresses and Clear prefix list : Fail ---
"); return $FALSE; } vLogHTML("--- Delete All Source Addresses and Clear prefix list : Success ---
"); return $TRUE; } #====================================================================== # prefix2G_ADDR_NUT() - return grobal address (prefix::NUT'sEUI64) #====================================================================== sub prefix2G_ADDR_NUT($$) { my ($prefix,$IF_SELECT) = @_; $IF_SELECT .= '_addr'; my $mac_addr =$V6evalTool::NutDef{$IF_SELECT}; my (@str, @hex); @str=split(/:/,$mac_addr); foreach(@str) { push @hex,hex($_); }; # # invert universal/local bit @hex[0] ^= 0x02; sprintf "%s%02x%02x:%02xff:fe%02x:%02x%02x",$prefix,@hex; } #====================================================================== # nutLLA() - return NUT's link local address #====================================================================== sub nutLLA($) { my ($IF_SELECT) = @_; $IF_SELECT .= '_addr'; my $mac_addr =$V6evalTool::NutDef{$IF_SELECT}; $G_ADDR = vMAC2LLAddr($mac_addr); return $G_ADDR; } #====================================================================== # nutInitialize() - NUT initialization #====================================================================== sub nutInitialize() { vLogHTML("
--- NUT Initialization ---
"); $ret = nutDefaultRouteAdd(); if (!$ret) { vLogHTML("--- NUT Initialization : Fail ---
"); return $FALSE; } vLogHTML("--- NUT Initialization : Success ---
"); return $TRUE; } #====================================================================== # nutInitialize_ConfiguredTunnel() - NUT initialization for Configured Tunnel #====================================================================== sub nutInitialize_ConfiguredTunnel($$$$) { my ($IPv4_ROUTER,$TUN_SRC,$TUN_END,$TUN_PREFIX) = @_; vLogHTML("
--- NUT Initialization for Configured Tunnel ---
"); $ret = vRemote("manualaddrconf.rmt", "", "if=$NUT_IF", "addrfamily=inet", "addr=$TUN_SRC", "type=add"); if($ret){ vLogHTML("--- NUT Initialization for Configured Tunnel : Fail :return status = $ret ---
"); return $FALSE; } $ret = vRemote("route.rmt", "", "prefix=default", "cmd=add", "addrfamily=inet", "gateway=$IPv4_ROUTER", "if=$NUT_IF"); if($ret){ vLogHTML("--- NUT Initialization for Configured Tunnel : Fail :return status = $ret ---
"); return $FALSE; } # $ret = vRemote("tunnel.rmt","if=$NUT_IF ". # "prefixlen=64 ". # "routeprefixlen=64 ". # "addrfamily=inet6 ". # "prefix=$TUN_PREFIX ". # "srcaddr=$TUN_SRC ". # "dstaddr=$TUN_END ". # "insrcaddr=$TUNv6_SOURCE ". # "indstaddr=$TUN_PREFIX "); $ret = vRemote("tunnel.rmt", "prefixlen=64 ". "routeprefixlen=64", "addrfamily=inet6", "prefix=$TUN_PREFIX", "srcaddr=$TUN_SRC", "dstaddr=$TUN_END", "if=0"); if($ret){ vLogHTML("--- NUT Initialization for Configured Tunnel : Fail :return status = $ret ---
"); return $FALSE; } #====== make arp table #====== vCapture($IF); vClear("$IF"); vSend($IF, echo_request_LINK0_v4_tn2nut); %ret=vRecv($IF,5,0,0, arp_LINK0_nut2tn_request, echo_reply_LINK0_v4_nut2tn ); if( $ret{status} !=0) { vLogHTML("--- NUT Initialization for Configured Tunnel : Fail :return status = $ret ---
"); return $FALSE; }elsif($ret{recvFrame} eq 'arp_LINK0_nut2tn_request') { vSend($IF,arp_LINK0_tn2nut_reply); %ret=vRecv($IF,5,0,0, echo_reply_LINK0_v4_nut2tn, ); if ($ret{status} != 0) { # re-send echo request vSend($IF, echo_request_LINK0_v4_tn2nut); %ret = vRecv($IF, 5, 0, 0, echo_reply_LINK1_v4_nut2tn); if( $ret{status} !=0) { vLogHTML("--- NUT Initialization for Configured Tunnel : Fail :return status = $ret ---
"); return $FALSE; } } }elsif($ret{recvFrame} eq 'echo_reply_LINK0_v4_nut2tn') { #return $PASS; } vLogHTML("--- NUT Initialization for Configured Tunnel : Success ---
"); return $TRUE; } #====================================================================== # checkNUT_SrcAddr() - check All source address in NUT # ping6 to All source address in NUT #====================================================================== sub checkNUT_SrcAddr($$$;$$$$$$) { my ($CPP_ORG,$CHECK_SRC1,$CHECK_DST1,$CHECK_SRC2,$CHECK_DST2,$CHECK_SRC3,$CHECK_DST3,$CHECK_SRC4,$CHECK_DST4) = @_; vLogHTML("
--- Check Source Addresses ($CHECK_SRC1, $CHECK_SRC2, $CHECK_SRC3, $CHECK_SRC4) ---
"); if($CHECK_SRC1 ne ''){ $CPP = "-DSOURCE1=\\\"$CHECK_SRC1\\\" -DDESTINATION=\\\"$CHECK_DST1\\\""; vCPP($CPP); $ret = ping6_Destination2SOURCE1($CPP,$IF); if(!$ret){ vLogHTML("--- Check Source Addresses : Fail ---
--- One of Source Address is not set up exactly ---

"); return $FALSE; } } if($CHECK_SRC2 ne ''){ $CPP = "-DSOURCE1=\\\"$CHECK_SRC2\\\" -DDESTINATION=\\\"$CHECK_DST2\\\""; vCPP($CPP); $ret = ping6_Destination2SOURCE1($CPP,$IF); if(!$ret){ vLogHTML("--- Check Source Addresses : Fail ---
--- One of Source Address is not set up exactly ---

"); return $FALSE; } } if($CHECK_SRC3 ne ''){ $CPP = "-DSOURCE1=\\\"$CHECK_SRC3\\\" -DDESTINATION=\\\"$CHECK_DST3\\\""; vCPP($CPP); $ret = ping6_Destination2SOURCE1($CPP,$IF); if(!$ret){ vLogHTML("--- Check Source Addresses : Fail ---
--- One of Source Address is not set up exactly ---

"); return $FALSE; } } if($CHECK_SRC4 ne ''){ $CPP = "-DSOURCE1=\\\"$CHECK_SRC4\\\" -DDESTINATION=\\\"$CHECK_DST4\\\""; vCPP($CPP); $ret = ping6_Destination2SOURCE1($CPP,$IF); if(!$ret){ vLogHTML("--- Check Source Addresses : Fail ---
--- One of Source Address is not set up exactly ---

"); return $FALSE; } } if($CPP_ORG ne ''){ vCPP($CPP_ORG); } vLogHTML("--- Check Source Addresses ($CHECK_SRC1 $CHECK_SRC2 $CHECK_SRC3 $CHECK_SRC4) : Success ---
"); return $TRUE; } #====================================================================== # checkNUT_SrcAddr_Any() - check source address in NUT any Link # ping6 to source address in NUT any Link #====================================================================== sub checkNUT_SrcAddr_Any($$$$) { my ($CPP_ORG,$CHECK_SRC1,$CHECK_DST1,$IF_SELECT) = @_; vLogHTML("
--- Check Source Addresses ($CHECK_SRC1) ---
"); if($CHECK_SRC1 ne ''){ $CPP = "-DSOURCE1=\\\"$CHECK_SRC1\\\" -DDESTINATION=\\\"$CHECK_DST1\\\""; vCPP($CPP); $ret = ping6_Destination2SOURCE1($CPP,$IF_SELECT); if(!$ret){ vLogHTML("--- Check Source Addresses : Fail ---
--- One of Source Address is not set up exactly ---

"); return $FALSE; } } if($CPP_ORG ne ''){ vCPP($CPP_ORG); } vLogHTML("--- Check Source Addresses ($CHECK_SRC1) : Success ---
"); return $TRUE; } #====================================================================== # nutTempAddrEnable() - NUT enable temporary address #====================================================================== sub nutTempAddrEnable() { vLogHTML("
--- NUT enable temporary address ---
"); $ret = vRemote("useTempAddr.rmt","","useTempAddr=enable"); if ($ret != 0) { vLogHTML("--- NUT enable temporary address : Fail :return status = $ret ---
"); return $FALSE; } vLogHTML("--- NUT enable temporary address : Success ---
"); return $TRUE; } #====================================================================== # nutTempAddrDisable() - NUT disable temporary address #====================================================================== sub nutTempAddrDisable() { vLogHTML("
--- NUT disable temporary address ---
"); $ret = vRemote("useTempAddr.rmt","","useTempAddr=disable"); if ($ret != 0) { vLogHTML("--- NUT disable temporary address : Fail :return status = $ret ---
"); return $FALSE; } vLogHTML("--- NUT disable temporary address : Success ---
"); return $TRUE; } #====================================================================== # nutDnsSet() - NUT set DNS #====================================================================== sub nutDnsSet($) { my ($DNS_ADDR) = @_; vLogHTML("
--- NUT set DNS ($DNS_ADDR) ---
"); $ret = vRemote("setDNS.rmt","","useDNS=enable","dnsAddr=$DNS_ADDR"); if ($ret != 0) { vLogHTML("--- NUT set DNS ($DNS_ADDR) : Fail :return status = $ret ---
"); return $FALSE; } vLogHTML("--- NUT set DNS ($DNS_ADDR) : Success ---
"); return $TRUE; } #====================================================================== # nutDnsRemove() - NUT remove DNS #====================================================================== sub nutDnsRemove() { vLogHTML("
--- NUT remove DNS ---
"); $ret = vRemote("setDNS.rmt","","useDNS=disable","useDNS=''"); if ($ret != 0) { vLogHTML("--- NUT remove DNS : Fail :return status = $ret ---
"); return $FALSE; } vLogHTML("--- NUT remove DNS : Success ---
"); return $TRUE; } #====================================================================== # nutPing62Dest() - ping6 NUT to DESTNATION #====================================================================== sub nutPing62Dest($$$;$) { my ($CPP,$SEND_DEST,$ON_LINK,$NO_IF) = @_; my $rcv_time = 0; if($ON_LINK == $TRUE){ $NS_SLLA = 'ns_NUT2DESTINATION_ON_LINK_SLLA'; $NS_noOPT = 'ns_NUT2DESTINATION_ON_LINK_noOPT'; $NA_TLLA = 'na_DESTINATION2NUT_ON_LINK_TLLA'; $PING6 = 'echo_request_NUT2DESTINATION_ON_LINK'; }else{ $NS_SLLA = 'ns_NUT2DESTINATION_SLLA'; $NS_noOPT = 'ns_NUT2DESTINATION_noOPT'; $NA_TLLA = 'na_DESTINATION_R_2NUT_TLLA'; $PING6 = 'echo_request_NUT2DESTINATION'; } #====== Check : Send ping6 to DESTINATION #====== vCapture($IF); vClear("$IF"); if($NO_IF == $TRUE){ nutPing6Async($SEND_DEST) || exit $V6evalTool::exitFatal; }else{ nutPing6Async_Link0($SEND_DEST) || exit $V6evalTool::exitFatal; } while($TRUE){ my $CPP_THIS = $CPP; my %ret = vRecv("$IF", 10, $rcv_time, 0, 'ns_NUT2DEFAULT_ROUTER_SLLA','ns_NUT2DEFAULT_ROUTER_noOPT', $NS_SLLA,$NS_noOPT,$PING6); if($ret{status} == 0) { if($ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_SLLA' || $ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_noOPT') { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF", 'na_DEFAULT_ROUTER2NUT_TLLA'); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq $NS_SLLA || $ret{recvFrame} eq $NS_noOPT) { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF", $NA_TLLA); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq $PING6) { nutPing6AsyncWait() || exit $V6evalTool::exitFatal; return $TRUE; } }else{ vLogHTML('#### No response from NUT, Configuration Problem ? ####
'); nutPing6AsyncWait() || exit $V6evalTool::exitFatal; return $FALSE; } } } #====================================================================== # nutPing62Dest_TempAddr() - ping6 NUT to DESTNATION #====================================================================== sub nutPing62Dest_TempAddr($$$;$) { my ($CPP,$SEND_DEST,$ON_LINK,$NO_IF) = @_; my $rcv_time = 0; if($ON_LINK == $TRUE){ $NS_SLLA = 'ns_NUT2DESTINATION_ON_LINK_SLLA_any'; $NS_noOPT = 'ns_NUT2DESTINATION_ON_LINK_noOPT_any'; $NA_TLLA = 'na_DESTINATION2NUT_ON_LINK_TLLA'; $PING6_UNEXP = 'echo_request_NUT2DESTINATION_ON_LINK_oneof'; $PING6_ANY = 'echo_request_NUT2DESTINATION_ON_LINK_any'; }else{ $NS_SLLA = 'ns_NUT2DESTINATION_SLLA_any'; $NS_noOPT = 'ns_NUT2DESTINATION_noOPT_any'; $NA_TLLA = 'na_DESTINATION_R_2NUT_TLLA'; $PING6_UNEXP = 'echo_request_NUT2DESTINATION_oneof'; $PING6_ANY = 'echo_request_NUT2DESTINATION_any'; } #====== Check : Send ping6 to DESTINATION #====== vCapture($IF); vClear("$IF"); if($NO_IF == $TRUE){ nutPing6Async($SEND_DEST) || exit $V6evalTool::exitFatal; }else{ nutPing6Async_Link0($SEND_DEST) || exit $V6evalTool::exitFatal; } while($TRUE){ my $CPP_THIS = $CPP; my %ret = vRecv("$IF", 10, $rcv_time, 0, 'ns_NUT2DEFAULT_ROUTER_SLLA_any','ns_NUT2DEFAULT_ROUTER_noOPT_any', $NS_SLLA,$NS_noOPT,$PING6_UNEXP,$PING6_ANY); if($ret{status} == 0) { if($ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_SLLA_any' || $ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_noOPT_any') { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF", 'na_DEFAULT_ROUTER2NUT_TLLA'); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq $NS_SLLA || $ret{recvFrame} eq $NS_noOPT) { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF", $NA_TLLA); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq $PING6_UNEXP) { vLogHTML("#### SourceAddress is not expected one ####
"); nutPing6AsyncWait() || exit $V6evalTool::exitFatal; return $FALSE; }elsif($ret{recvFrame} eq $PING6_ANY) { my $RESULT_ADDR = $ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}; vLogHTML("#### Probably $RESULT_ADDR is temporary address. ####
"); nutPing6AsyncWait() || exit $V6evalTool::exitFatal; return $TRUE; } }else{ vLogHTML('#### No response from NUT, Configuration Problem ? ####
'); nutPing6AsyncWait() || exit $V6evalTool::exitFatal; return $FALSE; } } } #====================================================================== # nutPing62Dest_Dns() - ping6 NUT to DESTNATION #====================================================================== sub nutPing62Dest_Dns($$$;$) { my ($CPP,$ANS_NUM,$ON_LINK,$NO_IF) = @_; my $rcv_time = 0; if($ON_LINK == $TRUE){ $NS_SLLA = 'ns_NUT2DESTINATION_ON_LINK_SLLA'; $NS_noOPT = 'ns_NUT2DESTINATION_ON_LINK_noOPT'; $NA_TLLA = 'na_DESTINATION2NUT_ON_LINK_TLLA'; $PING6 = 'echo_request_NUT2DESTINATION_ON_LINK'; }else{ $NS_SLLA = 'ns_NUT2DESTINATION_SLLA'; $NS_noOPT = 'ns_NUT2DESTINATION_noOPT'; $NA_TLLA = 'na_DESTINATION_R_2NUT_TLLA'; $PING6 = 'echo_request_NUT2DESTINATION'; } #====== Check : Send ping6 to DESTINATION #====== vCapture($IF); vClear("$IF"); if($NO_IF == $TRUE){ nutPing6Async($DST_FQDN) || exit $V6evalTool::exitFatal; }else{ nutPing6Async_Link0($DST_FQDN) || exit $V6evalTool::exitFatal; } while($TRUE){ my $CPP_THIS = $CPP; my %ret = vRecv("$IF", 10, $rcv_time, 0, 'ns_NUT2DEFAULT_ROUTER_SLLA','ns_NUT2DEFAULT_ROUTER_noOPT', 'dns_question_AAAA', $NS_SLLA,$NS_noOPT,$PING6,'ns_NUT2DNS_SLLA_any','ns_NUT2DNS_noOPT_any'); if($ret{status} == 0) { if($ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_SLLA' || $ret{recvFrame} eq 'ns_NUT2DEFAULT_ROUTER_noOPT') { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF", 'na_DEFAULT_ROUTER2NUT_TLLA'); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq 'dns_question_AAAA') { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\" -DSOURCE_PORT=$ret{'Frame_Ether.Packet_IPv6.Upp_UDP.Hdr_UDP.SourcePort'} -DDNS_ID=$ret{'Frame_Ether.Packet_IPv6.Upp_UDP.Udp_DNS.Identifier'}"; vCPP($CPP_THIS); if($ANS_NUM == 3){ %ret2 = vSend("$IF", 'dns_answer_AAAA3'); }else{ %ret2 = vSend("$IF", 'dns_answer_AAAA2'); } $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq $NS_SLLA || $ret{recvFrame} eq $NS_noOPT) { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF", $NA_TLLA); $rcv_time = $ret2{sentTime1}; }elsif($ret{recvFrame} eq $PING6) { nutPing6AsyncWait() || exit $V6evalTool::exitFatal; return $TRUE; }elsif($ret{recvFrame} eq 'ns_NUT2DNS_SLLA_any' || $ret{recvFrame} eq 'ns_NUT2DNS_noOPT_any') { $CPP_THIS .= " -DRECEIVE_SOURCE=\\\"$ret{'Frame_Ether.Packet_IPv6.Hdr_IPv6.SourceAddress'}\\\""; vCPP($CPP_THIS); %ret2 = vSend("$IF", 'na_DNS2NUT_TLLA'); $rcv_time = $ret2{sentTime1}; } }else{ vLogHTML('#### No response from NUT, Configuration Problem ? ####
'); nutPing6AsyncWait() || exit $V6evalTool::exitFatal; return $FALSE; } } } 1; ######################################################################## __END__ =head1 NAME ADDR_SELECT.pm - utility functions for "Default Address Selection for IPv6" test =head1 SYNOPSIS nutReboot nutDefaultRouteAdd nutIPv6AddrAdd nutIPv6AddrAdd_Any nutIPv6AddrDelete nutIPv6AddrDelete_Any nutDeprecatedIPv6AddrAdd nutDeprecatedIPv6AddrAdd_Any nutAutoConfIPv6AddrAdd nutAutoConfIPv6AddrAdd_Any nutPing6 nutPing6_Link0 nutPing6Async nutPing6Async_Link0 nutPing6AsyncWait nutClear prefix2G_ADDR_NUT nutLLA nutInitialize nutInitialize_ConfiguredTunnel checkNUT_SrcAddr checkNUT_SrcAddr_Any nutTempAddrEnable nutTempAddrDisable nutDnsSet nutDnsRemove nutPing62Dest nutPing62Dest_TempAddr nutPing62Dest_Dns =head1 DESCRIPTION #nutReboot() - reboot NUT This routine calls vRemote("reboot.rmt") simply. #nutDefaultRouteAdd() - Add IPv6 Default Route in NUT route.rmt wrapper method. (FreeBSD) route add -inet6 default % #nutIPv6AddrAdd($ADDR,$PLEN) - Add IPv6 Unicast Address in NUT Link0 manualaddrconf.rmt wrapper method. (FreeBSD) ifconfig inet6 <$ADDR> prefixlen <$PLEN> alias #nutIPv6AddrAdd_Any($ADDR,$PLEN,$IF) - Add IPv6 Unicast Address in NUT any Link manualaddrconf.rmt wrapper method. (FreeBSD) ifconfig <$IF> inet6 <$ADDR> prefixlen <$PLEN> alias #nutIPv6AddrDelete($ADDR,$PLEN) - Delete IPv6 Unicast Address in NUT Link0 manualaddrconf.rmt wrapper method. (FreeBSD) ifconfig inet6 <$ADDR> prefixlen <$PLEN> delete #nutIPv6AddrDelete_Any($ADDR,$PLEN,$IF) - Delete IPv6 Unicast Address in NUT any Link manualaddrconf.rmt wrapper method. (FreeBSD) ifconfig <$IF> inet6 <$ADDR> prefixlen <$PLEN> delete #nutDeprecatedIPv6AddrAdd($G_PREFIX,$CPP) - Add Deprecated IPv6 Address in NUT Link0 Send 'ra_DEPRECATED' packet simply. #nutDeprecatedIPv6AddrAdd($G_PREFIX,$CPP) - Add Deprecated IPv6 Address in NUT Link0 Send 'ra_DEPRECATED' packet simply. #nutDeprecatedIPv6AddrAdd_Any($G_PREFIX,$CPP,$IF) - Add Deprecated IPv6 Address in NUT any Link Send 'ra_DEPRECATED' packet simply. #nutAutoConfIPv6AddrAdd($G_PREFIX,$CPP) - Add IPv6 Address in NUT Link0 by RA Send 'ra_NORMAL' packet simply. #nutAutoConfIPv6AddrAdd_Any($G_PREFIX,$CPP,$IF) - Add IPv6 Address in NUT any Link by RA Send 'ra_NORMAL' packet simply. #nutPing6($ADDR) - Ping6 from NUT ping6.rmt wrapper method. (FreeBSD) ping6 -n -c 1 -i 1 -h 64 -s 2 -p 00 <$ADDR> #nutPing6_Link0($ADDR) - Ping6 from NUT ping6.rmt wrapper method. (FreeBSD) ping6 -n -c 1 -i 1 -h 64 -s 2 -p 00 -I <$ADDR> #nutPing6Async($ADDR) - Ping6 from NUT ping6.rmt wrapper method. * use vRemoteAsync() (FreeBSD) ping6 -n -c 1 -i 1 -h 64 -s 2 -p 00 <$ADDR> #nutPing6Async_Link0($ADDR) - Ping6 from NUT ping6.rmt wrapper method. * use vRemoteAsync() (FreeBSD) ping6 -n -c 1 -i 1 -h 64 -s 2 -p 00 -I <$ADDR> #nutPing6AsyncWait($ADDR) - vRemoteAsyncWait() wrapper method. #ping6_Destination2SOURCE1($CPP,$IF) - internal subroutine #nutClear($ADDR1,$PLEN1, ; $ADDR2,$PLEN2,$ADDR3,$PLEN3,$ADDR4,$PLEN4) - delete all address & NCE in NUT Link0 Call nutIPv6AddrDelete($ADDR1,$PLEN1) , nutIPv6AddrDelete($ADDR2,$PLEN2),... simply and Call clearprefix.rmt & clearnc.rmt & cleardefr.rmt simply. #prefix2G_ADDR_NUT($G_PREFIX,$IF_SELECT) - return grobal address ($G_PREFIX::NUT'sEUI64) #nutLLA($IF_SELECT) - return link local address (NUT's LLA) #nutInitialize() - NUT initialization Call nutDefaultRouteAdd() simply #nutInitialize_ConfiguredTunnel($IPv4_ROUTER,$TUN_SRC,$TUN_END,$TUN_PREFIX) - NUT initialization ConfiguredTunnel #checkNUT_SrcAddr($CPP_ORG,$CHECK_SRC1,$CHECK_DST1 ; $CHECK_SRC2,$CHECK_DST2,$CHECK_SRC3,$CHECK_DST3,$CHECK_SRC4,$CHECK_DST4) - check All source address in NUT Send ping6 from CHECK_DST1 to CHECK_SRC1, Send ping6 from CHECK_DST2 to CHECK_SRC2, Send ping6 from CHECK_DST3 to CHECK_SRC3, Send ping6 from CHECK_DST4 to CHECK_SRC4 return true(1) : ping6 success return false(0) : One of ping6 fail # checkNUT_SrcAddr_Any($CPP_ORG,$CHECK_SRC1,$CHECK_DST1,$IF_SELECT) - check source address in NUT any Link Send ping6 from CHECK_DST1 to CHECK_SRC1($IF_SELECT) return true(1) : ping6 success return false(0) : ping6 fail #nutTempAddrEnable() - NUT enable temporary address #nutTempAddrDisable() - NUT disable temporary address #nutDnsSet($DNS_ADDR) - NUT set DNS(server=$DNS_ADDR) #nutDnsRemove() - NUT remove DNS #nutPing62Dest() - ping6 NUT to DESTNATION #nutPing62Dest_TempAddr() - ping6 NUT to DESTNATION #nutPing62Dest_Dns() - ping6 NUT to DESTNATION =head1 SEE ALSO =begin html ADDR_SELECT.pm =end html perldoc V6EvalTool perldoc V6Remote =cut