#!/usr/bin/perl # # $Copyright$ # $TINY: LLA_DAD_NAPreDAD_DiffTgt.seq,v 1.6 2002/03/05 03:04:55 masaxmasa Exp $ # ######################################################################## BEGIN { $V6evalTool::TestVersion = '$Name: $ '; } use V6evalTool; use DAD_LCNA; #------------------------------------------------------ #----- get sequence arguments #------------------------------------------------------ $howto_initNUT="none"; $send = "ok"; foreach (@ARGV) { # How to configure address of NUT? # sample: boot, ra, manual+_GLOBAL0A0N_UCAST /^addrconf=(\S+)/ && do {$DAD_LCNA::howto_addrconf=$1; next; }; # How to initialize NUT? # sample: none, DADSuccess_boot, DADFail_boot /^init=(\S+)/ && do {$howto_initNUT=$1; next; }; # "none" if send no pakcet to NUT in state DADPostSendNS # sample: ok, none /^send=(\S+)/ && do {$send=$1; next; }; # sequence debug options # sample: qR /^sd=(\S+)/ && do {$seqdebugopt=$1; next; }; seqERROR("Unknown sequence option '$_'"); } #------------------------------------------------------ #----- test condition $IF=Link0; # network interface $max_retry_count = 10; # retry if NUT state becomes DADPostSendNS $max_retry_count = 2 if $DAD_LCNA::sd =~ /q/; # quick retry $send_interval = 0.1; # 1[sec] time between DAD NS and DAD NS, send to NUT # (RandomDelay is 0-1sec e.g. default RetransTimer 1000msec) $loopcnt=0; #----- start Capturing vCapture($IF); #----- Store Start time $t0 = time(); #manual address configuration or reboot start time #----- send NA to NUT with interval_time for a couple of minits #----- or wait until receiving a DAD NS from NUT in every interval. vLog("TN transmits DAD NA with different Target address than NUT"); vLog(" and wait DAD NS from NUT for $send_interval [sec],"); vLog(" TN expects to receive DAD NS or NA from NUT for $send_interval [sec],"); vLog(" NUT MUST not detect the address duplication with such packets."); vLog(" Try this process for $DAD_LCNA::wait_dadns{$DAD_LCNA::howto_addrconf} [sec]."); do { if ($loopcnt == 0){ #----- initialize NUT vLog("*** Target initialization phase ***"); $rret=vRemote("reboot_async.rmt","","timeout=5"); vLog("reboot_async.rmt returned status $rret"); # Just send trigger to reboot. vLog("*** Target testing phase ***"); } #--- Send NA vLog("Send NA to other Target: NA_to_all_DiffTgt"); %ret=vSend($IF, DADNA_from_TN_DiffTgt); seqERROR(vErrmsg(%ret)) if $ret{status} != 0 ; if ($loopcnt == 0){ $firstDADnsTime=$ret{sentTime1}; } #--- Wait NS vLog("Waiting for DAD NS or NA: dadns_from_NUT"); %ret=vRecv($IF,$send_interval,0,0,DADNS_from_NUT); if ($ret{recvTime1} > $firstDADnsTime) { vLog("Received packet count=$ret{recvCount}"); } $td = $DAD_LCNA::wait_dadns{$DAD_LCNA::howto_addrconf} - (time()-$t0); $td = 0 if $td < 0; vLog("countdown timer: $td [sec]"); $loopcnt++; } while($ret{status}!=0 && $td > 0 ); ################## if ($ret{status} == 0 && $ret{recvFrame} eq DADNS_from_NUT){ #----- if received DAD NS vLog("NUT sent DAD NS"); #----- check if NUT's address is configured vLog("Confirming that NUT had assigned the address....."); vSleep($DAD_LCNA::RetransTimerSec); if (seqCheckNUTAddrConfigured($IF) eq TRUE) { vLog("OK! NUT assigned the address to the interface."); if ($DAD_LCNA::DupAddrDetectTransmits == 0) { vLog("But DupAddrDetectTransmits == 0"); seqNG(); }else{ seqOK(); } }else{ vLog("NG! NUT had not assigned the address to the interface."); seqNG(); } } else { # timeout #----- if timeout or could not receive DAD NS vLog("Although $DAD_LCNA::wait_dadns{$DAD_LCNA::howto_addrconf}\[sec] has past since NUT's address configured, no DAD NS came from NUT."); #----- check if NUT's address is configured vLog("Confirming that NUT had assigned the address....."); vSleep($DAD_LCNA::RetransTimerSec); if (seqCheckNUTAddrConfigured($IF) eq TRUE) { vLog("OK! NUT assigned the address to the interface."); if ($DAD_LCNA::DupAddrDetectTransmits == 0) { seqOK(); }else{ vLog("But DupAddrDetectTransmits != 0"); seqNG(); } }else{ vLog("NG! NUT had not assigned the address to the interface."); seqNG(); } vLog("It seems that NUT has misunderstood to detect address duplication in state DADPreSendNS."); seqNG(); } #end ######################################################################## __END__ =head1 NAME LLA_DAD_NAPreDAD_DiffTgt - check the process when NUT receives DAD NA with different Target address before sending DAD NA. =head1 TARGET All Node =head1 SYNOPSIS LLA_DAD_NAPreDAD_DiffTgt.seq [-tooloption ...] -pkt [addrconf=] -tooloption : v6eval tool option : packet definition file (v6eval tool option) : how to configure address on NUT; boot/reboot =begin html
 detail of v6eval tool option: see perldoc V6evalTool.pm, perldoc V6evalRemote.pm
=end html =head1 INITIALIZATION =begin html
 Reboot NUT or Initialize interface of NUT or Initialize IPv6 stack of NUT.
=end html =head1 TEST PROCEDURE =over 1 =item Test for Unicast address configuration The following tests are prepared in this test package. See INDEX file. B NUT performs DAD for its Link-local unicast address made by stateless address autoconfiguration though NUT receives DAD NA which contains different target address before transimitting DAD NS. B TN NUT --------------------------------- Initialize NUT Configure address of NUT (reboot or interface initialization etc...) ==== Action #1: DAD NA =========> ==== #1: DAD NA =========> : : ==== #1: DAD NA =========> name: DADNA_from_TN_DiffTgt TN wait the DAD NS sent from NUT <=== Judgement #1: DAD NS ======= name: DADNS_from_NUT Wait for DupAddrDetectTransmits*RetransTimer Check if NUT's address is configured ==== Action #2: DAD NS =========> name: DADNS_from_TN <=== Judgement #2: DAD NA ======= name: DADNA_from_NUT, DADNA_from_NUT_woTLL =back 1 =head1 JUDGEMENT =over 1 =item Test for Link-local Unicast address autoconfiguration B B Action #1. TN transmits DAD NA which contains different target Address name: DADNA_from_TN_DiffTgt src: TN's Link-local dst: allnode TargetAddress: TN's Link-local RFlag: 0 SFlag: 0 OFlag: 1 OLLOPT: TN's MAC address Judgement #1. NUT MUST transmit DAD NS for its autoconfigured Link-local address. name: DADNS_from_NUT src: ::0 dst: solnode[NUT's tentative Link-local] TargetAddress: NUT's tentative Link-local Action #2. TN transmits DAD NS to check if NUT's address is configured name: DADNS_from_TN src: ::0 dst: solnode[NUT's Link-local] TargetAddress: NUT's Link-local Judgement #2. NUT MUST transmit DAD NA for its autoconfigured Link-local address. name: DADNA_from_NUT, DADNA_from_NUT_woTLL src: NUT's Link-local dst: allnode TargetAddress: NUT's Link-local RFlag: 0 ( if NUT is a Router then 1) SFlag: 0 OFlag: 1 TLLOPT: NUT's MAC address =back 1 =head1 SEE ALSO =begin html
 detail of v6eval tool option: see perldoc V6evalTool.pm, perldoc V6evalRemote.pm
=end html =cut