#!/usr/bin/perl # # $Copyright$ # $TINY: LLA_DAD_NAPostDAD_SF1.seq,v 1.5 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 = 1; # 1[sec] time between DAD NS and DAD NS, send to NUT # (RandomDelay is 0-1sec e.g. default RetransTimer 1000msec) ########################################################## #----- initialize NUT vLog("*** Target initialization phase ***"); $rret=vRemote("reboot_async.rmt","","timeout=5"); vLog("reboot_async.rmt returned status $rret"); #----- start Capturing vLog("*** Target testing phase ***"); vCapture($IF); #----- Wait DAD NS from NUT or timeout vLog("TN wait DAD NS(DADNS_from_NUT) from NUT for $DAD_LCNA::wait_dadns{$DAD_LCNA::howto_addrconf} [sec],"); %ret=vRecv($IF,$DAD_LCNA::wait_dadns{$DAD_LCNA::howto_addrconf},0,$count,DADNS_from_NUT); if ($ret{status} == 0){ %retSend=vSend($IF, DADNA_from_TN_SF1); #----- check if NUT's address is configured vSleep($DAD_LCNA::RetransTimerSec); if (seqCheckNUTAddrConfigured($IF) eq TRUE) { vLog("NUT assigned the address to the interface."); if ($DAD_LCNA::DupAddrDetectTransmits == 0) { vLog("NUT transmit DAD NS though DupAddrDetectTransmits == 0"); seqNG(); }else{ seqOK(); } }else{ vLog("Though source address of NS is unicast,"); vLog(" NUT seems to detect Address Duplication"); seqNG(); } } else{ vLog("TN wait DAD NS from NUT for $DAD_LCNA::wait_dadns{$DAD_LCNA::howto_addrconf}, but NUT had not transmit DAD NS"); seqNG(); } ########################################################## #end ######################################################################## __END__ =head1 NAME LLA_DAD_NAPostDAD_SF1 - check the process when NUT receives invalid DAD NA(SolicitedFlag==1) with same Target address after sending DAD NS. =head1 TARGET All Node =head1 SYNOPSIS LLA_DAD_NAPostDAD_SF1.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 assignes autoconfigured address, even though NUT receives invalid (SolicitedFlag==1) DAD NA for same target address as NUT, while DAD process (after transmitting DAD NS). B TN NUT --------------------------------- Initialize NUT Configure address of NUT (reboot or interface initialization etc...) TN wait the DAD NS sent from NUT <=== Judgement #1: DAD NS ======= name: DADNS_from_NUT ==== Action #1: DAD NA =========> name: DADNA_from_TN_SF1 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 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 #1. TN transmits invalid DAD NA which contains 1 as SolicitedFlag. name: DADNA_from_TN_SF1 src: TN's Link-local dst: allnode TargetAddress: NUT's Link-local RFlag: 0 SFlag: 1 OFlag: 1 TLLOPT: TN's MAC address 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