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.