DAD and Address configuration test sequences -- test for IPv6 Stateless Address Autoconfiguration
DADSendNS_DADPostSendNS.seq, DADFail_DADPostSendNS.seq, DADSuccess_DADPostSendNS.seq, DADFail_DADPreSendNS.seq, ADDRCONFFail.seq, ADDRCONFSuccess.seq, ADDRSTATE_reset_VLT, ADDRSTATE_not_reset_VLT, ADDRSTATE_pkt_receiving, ADDRSTATE_src_select, ADDRSTATE_sameprfxes_order
DADSendNS_DADPostSendNS.seq [-tooloption ...] -pkt <packetdef> [addrconf=<addrconfname>] [init=<initname>,<initname>...] [sd=<sdopt>] DADFail_DADPostSendNS.seq [-tooloption ...] -pkt <packetdef> [addrconf=<addrconfname>] [init=<initname>,<initname>...] [sd=<sdopt>] DADSuccess_DADPostSendNS.seq [-tooloption ...] -pkt <packetdef> [addrconf=<addrconfname>] [init=<initname>,<initname>...] [send=<sendname>] [sd=<sdopt>] DADFail_DADPreSendNS.seq [-tooloption ...] -pkt <packetdef> [addrconf=<addrconfname>] [init=<initname>,<initname>...] [sd=<sdopt>] ADDRCONFFail.seq [-tooloption ...] -pkt <packet.def> [addrconf=<addrconfname>] [init=<initname>,<initname>...] [sd=<sdopt>] ADDRCONFSuccess.seq [-tooloption ...] -pkt <packetdef> [addrconf=<addrconfname>] [init=<initname>,<initname>...] [sd=<sdopt>]
ADDRSTATE_pkt_receiving.seq [-tooloption ...] -pkt <packetdef> [addrconf=<addrconfname>] [init=<initname>,<initname>...] [sd=<sdopt>] ADDRSTATE_src_select.seq [-tooloption ...] -pkt <packetdef> waitsec=<waitsec> [init=<initname>,<initname>...] [sd=<sdopt>]
about waitsec: see ADDRSTATE_src_select.seq
ADDRSTATE_reset_VLT.seq [-tooloption ...] -pkt <packetdef> [sequence=<usolra-1>,<waitsec>,<usolra-2>] [init=<initname>,<initname>...] [sd=<sdopt>] ADDRSTATE_not_reset_VLT.seq [-tooloption ...] -pkt <packetdef> [sequence=<usolra-1>,<waitsec>,<usolra-2>] [init=<initname>,<initname>...] [sd=<sdopt>] <usolra-1,2> : send RA <usolra-1,2> to NUT ; usolra_vlt(30|60|90|120) <waitsec> : wait NN [sec]; waitNN
about usolra-1,2 and waitsec: see ADDRSTATE_reset_VLT.seq
ADDRSTATE_sameprfxes_order.seq [-tooloption ...] -pkt <packetdef> [init=<initname>,<initname>...] [sd=<sdopt>]
This is a set of conformance test for IPv6 Stateless Address Autoconfiguration that is based upon RFC2462 and RFC2461.
Tests are listed in index.html . Test coverage and How to run the tests for stateless-addrconf are described in 00README: Eache tests are defined by the following test sequences and packet definition files. Combinations of these sequence and packet definition for each tests are defined in INDEX_hostrouter: tests for a host and a router INDEX_host: tests for a host INDEX_router: tests for a router DADSendNS_DADPostSendNS.seq - check if NUT performs DAD process DADFail_DADPostSendNS.seq - check if NUT detect address duplication in state DADPostSendNS(after sending out first DAD NS) DADSuccess_DADPostSendNS.seq - check if NUT does not detect address duplication in state DADPostSendNS(after sending out first DAD NS) DADFail_DADPreSendNS.seq - check if NUT detect address duplication in state DADPreSendNS(before sending out first DAD NS) ADDRCONFFail.seq - check if address is not configured ADDRCONFSuccess.seq - check if address is configured ADDRSTATE_reset_VLT.seq - check if ValidLifetime is reset by RA with same prefix ADDRSTATE_not_reset_VLT.seq - check if ValidLifetime is not reset by RA with same prefix ADDRSTATE_pkt_receiving.seq - check packet receiving and address lifetime expiry ADDRSTATE_src_select.seq - check src address selection and address lifetime expiry ADDRSTATE_sameprfxes_order.seq - probe PrefixOptions processing order of same prefix in one RA
-tooloption: See perldoc V6evalTool.pm, perldoc V6evalRemote.pm
<packetdef>: mandatory LLOCAL*.def : testing address is a Link-local address GLOBAL*.def : testing address is a Global address
<addrconfname>: default is 'boot' boot : reboot NUT and verify DAD process ra : send RA to NUT and verify DAD process manual+<addressname>: configure address manually (ifconfig if bsd) and verify DAD process
<initname>: default is 'none' none : no initialization before test DADSuccess_boot : reboot NUT and make to be state DAD Success before test DADFail_boot : reboot NUT and force to be state DAD Fail before test ra : send RA to NUT before test
<sendname>: default is 'send' none : send no packet when NUT performs DAD process send : send packet when NUT performs DAD process
<sdopt>: default is empty sequence debug options q : quick timeout when waiting boot. R : pass remote control.
Test sequence scripts described here have a similar outline of following 4 phases. (except DADFail_DADPreSendNS.seq)
1. Initialization phase Initialize NUT. (init=none or DADSuccess_boot or DADFail_boot or ra)
2. Addrconf phase Configure address of NUT (addrconf=boot or manual or ra).
3. DAD phase Wait for DAD NS to be sent from NUT. Send DAD Packet to NUT if needed (for DAD test).
4. Check phase Check if NUT's address is configured or not configured for address configuration test, or check address state and lifetime for address lifetime expiry test.
Sequence parameter init=<initname> specifies how to initialize NUT before test.
<initname> none : no initialization before test DADSuccess_boot : reboot NUT and make to be state DAD Success before test DADFail_boot : reboot NUT and force to be state DAD Fail before test ra : send RA to NUT before test
Multiple <initname> is available, such as init=DADSuccess_boot,ra which means reboot NUT and configure Global or Site-local address with unsolicited RA.
The following shows init sequences for each <initname>. Packet name appeared in sequences: see "Packet definition file".
init=DADSuccess_boot and init=DADFail_boot
Init sequence
TN(or X) NUT ------------------------------ Login to NUT from TN and reboot NUT.
Wait for DAD NS to be sent from NUT <=== Judgement #1: DAD NS ==== name: dadns_from_NUT_init TargetAddress: NUT's Link-local address
==== Action #1: DAD NS ====> name: dadpkt_to_NUT_init TargetAddress: NUT's Link-local address
Wait for NUT to finish DAD. (sleep $RetransTimerSec [sec])
Check if NUT's address is configured or not configured. ==== Action #2: DAD NS ====> name: chkconf_dadns_to_NUT_init TargetAddress: NUT's Link-local address
<=== Judgement #2: DAD NA ==== name: chkconf_dadna_from_NUT_init (or chkconf_dadna_from_NUT_rf1_init if NUT is a Router) TargetAddress: NUT's Link-local address
Action and Judgement
Action #1. When init=DADFail_boot, send DAD NS immediately (within $RetransTimerSec [sec]) to NUT to be DAD fail on NUT stateless Link-local address autoconfiguration . Otherwise (init=DADSuccess_boot) send no packet so NUT configure Link-local address.
Judgement #2. When init=DADFail_boot, DAD NA does not come. Otherwise (init=DADSuccess_boot) DAD NA come.
init=ra
Send Unsolicited RA to configure address of NUT. Packet name appeared in sequences: see "Packet definition file".
Init sequence
TN(or X) NUT ------------------------------ Send Unsolicited RA to configure address of NUT. ==== Action #1: Unsolicited RA ===> name: usolra_init
Note: usolra_init is not defined in BASIC_init.def, define in each packet definition file.
Sequence parameter addrconf=<addrconfname> specifies how to configure address on NUT for test.
<addrconfname> boot : reboot NUT to configure Link-local address. ra : send RA to NUT to configure address with prefixes in RA. manual+<addressname>: configure address manually (ifconfig if BSD).
The following shows addrconf sequences for each <addrconfname>. Packet names appeared in addrconf sequence are defined in packet def file specified by -pkt option. Default packets are defined in "BASIC.def" file which is included by packet def file. "BASIC.def" is defined by "DAD.def" which includes packet definition macros.
addrconf=boot
Login to NUT from TN and reboot NUT to configure Link-local address on NUT. The test sequence assumes that stateless Link-local address auto configuration will be done on system rebooting process. You may set appropriate value to $wait_dadns{"boot"} variable in DAD.pm, which is a time[sec] to wait address auto configuration since reboot command issued; default 120[sec].
The test sequence uses rRebootAsync remote command to reboot NUT. See vRemote() in perldoc V6evalTool and rRebootAsync in perldoc V6evalRemote.
addrconf=manual+<addressname>
Login to NUT from TN and configure address on NUT manually. The following addressname is available. It is as same as defined name in stdaddr.def (See std.def in perldoc V6evalTool.pm)
<addressname> address prefixlen type _GLOBAL0A0N_UCAST 3ffe:501:ffff:100:200:ff:fe00:a0a0 64 unicast _GLOBAL0A0N_ACAST 3ffe:501:ffff:100:200:ff:fe00:a0a0 64 anycast _LLOCAL0A0N_UCAST FE80::200:ff:fe00:a0a0 64 unicast _LLOCAL0A0N_ACAST FE80::200:ff:fe00:a0a0 64 anycast
addrconf=ra
Send Unsolicited RA to configure address of NUT. Packet name appeared in sequences: see "Packet definition file".
Addrconf sequence
TN(or X) NUT ------------------------------ Send Unsolicited RA to configure address of NUT. ==== Action #1: Unsolicited RA ===> name: usolra
Wait for DAD NS to be sent from NUT. Send DAD Packet to NUT if needed (for DAD test). Packet name appeared in sequences: see "Packet definition file".
DAD phase sequence
TN(or X) NUT ------------------------------ TN wait for DAD NS to be sent from NUT <=== Judgement #1: DAD NS ==== name: dadns_from_NUT
Immediately (within $RetransTimerSec [sec]) send DAD Packet to test detecting address duplication. ==== Action #1: DAD NS ====> name: dadpkt_to_NUT
Wait for NUT to finish DAD. (sleep $RetransTimerSec [sec])
Action and Judgement
Action #1 is available in DAD test (DADFail_DADPostSendNS.seq, DADSuccess_DADPostSendNS.seq, DADFail_DADPreSendNS.seq) except for DADSendNS_DADPostSendNS.seq. It's not available in ADDRCONF test (ADDRCONFSuccess.seq, ADDRCONFFail.seq).
Check if NUT's address is configured or not configured. Packet name appeared in sequences: see "Packet definition file".
Check phase sequence
TN(or X) NUT ------------------------------ ==== Action #1: DAD NS ====> name: chkconf_dadns_to_NUT
<=== Judgement #1: DAD NA ==== name: chkconf_dadna_from_NUT (or chkconf_dadna_from_NUT_rf1 if NUT is a Router)
Action and Judgement
In DADSendNS_DADPostSendNS.seq, DADSuccess_DADPostSendNS.seq, ADDRCONFSuccess.seq: Action #1. Check if NUT's address is configured Judgement #1. DAD NA come from NUT because NUT does not detect address duplication and address is configured.
In DADFail_DADPostSendNS.seq, DADFail_DADPreSendNS.seq, ADDRCONFFail.seq: Action #1. Check if NUT's address is not configured Judgement #1. DAD NA does not come because NUT detect address duplicated and address is not configured.
Packet name described above is defined in <packetdef> file.
<packetdef> description LLOCAL*.def : testing address is a Link-local address GLOBAL*.def : testing address is a Global address
Packet name appeared in each phase is same in all test scripts. The following shows description and location of each packet definition. Packets are defined by macros in DAD.def file.
<packetdef> file ------------------------------------------------------------------------------------- [name] [description] include "BASIC_init.def" : Packets appeared in Initialization phase include "BASIC.def" : Packets appeared in Addrconf,DAD,Check phase dadpkt_to_NUT : DAD Packet (DAD NS or NA) send to NUT to test DAD appeared in DAD phase usolra : RA appeared in Addrconf phase usolra_init : RA appeared in Initialization phase -------------------------------------------------------------------------------------
BASIC_init.def file ------------------------------------------------------------------------------------- [name] [description] DADV6ADDR_init : v6 Tentative address for DAD on initialization phase dadns_from_NUT_init : DAD NS coming from NUT on DAD on initialization phase dadpkt_to_NUT_init : DAD Packet send to NUT to test DAD on initialization phase chkconf_dadns_to_NUT_init : DAD NS sends to NUT to check if address is configured on initialization phase chkconf_dadna_from_NUT_init : DAD NA coming from NUT if address is configured on initialization phase chkconf_dadna_from_NUT_init_rf1 : for Router test on initialization phase -------------------------------------------------------------------------------------
BASIC.def file ------------------------------------------------------------------------------------- [name] [description] DADV6ADDR : v6 Tentative address for DAD dadns_from_NUT : DAD NS coming from NUT on DAD chkconf_dadns_to_NUT : DAD NS sends to NUT to check if address is configured chkconf_dadna_from_NUT : DAD NA coming from NUT if address is configured chkconf_dadna_from_NUT_rf1 : for Router test -------------------------------------------------------------------------------------
Some tests may results in FAIL if RemoteSpeed > 0 in tn.def file.
perldoc V6evalTool.pm, perldoc V6evalRemote.pm:
00README: Test coverage and How to run the tests for stateless-addrconf. DAD.pm: Sequence library for stateless-addrconf test. DAD.def: Packet definition macro library for stateless-addrconf test. BASIC.def: Default packet definition for testing NUT. BASIC_init.def: Default packet definition for initialization of NUT.