NAME

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


SYNOPSIS

  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>]


DESCRIPTION

  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
  


Parameters

 -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.


Outline of test sequence

  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.


Initialization phase

   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.


Addrconf phase

   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


DAD phase

     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 phase

  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 definition file

  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
    -------------------------------------------------------------------------------------


Known Bugs

 Some tests may results in FAIL if RemoteSpeed > 0 in tn.def file.


See also

 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.