# NAME

sendNsBasicGlobLink - Verify that NUT send NSs (link ==> global)

# TARGET

Host and Router

# SYNOPSIS

      sendNsBasicGlobLink.seq [-tooloption ...] -p sendNsBasicGlobLink.def

# INITIALIZATION

## A CASE OF A HOST

1. Set a global prefix (3ffe:501:ffff:100::/64) with RA.
2. Set NC state for TN to REACHABLE

      TN                 NUT
      ----------------------

      State: any (for TN, X)

      ==== multicast RA ===>
           src=X's link-local
           dst=all-node
           M=0, O=0,
           Lifetime=600, ReachableTime=0, RetransTimer=0
           w/ SLLA
           Prefix:
               F=1, A=1,
               ValidLifetime=2592000, PreferredLifetime=604800
               Prefix=3ffe:501:ffff:100::, PrefixLength=64

      Wait (3 sec.)
            Ignoring DAD packets.

      State: any (for TN), STALE (for X)

      ==== echo-request ===>
           src=TN's global
           dst:NUT's link-local

      ==== solicited NA ===>
           src=TN's global
           dst=NUT's link-local
           R=0, S=1, O=1
           w/ TLLA

      State: REACHABLE (for TN), STALE (for X)

## A CASE OF A ROUTER

1. NUT must be configured its interface under test (Link0) to have a global prefix of "3ffe:501:ffff:100::/64".
2. Set NC state for TN to REACHABLE

      TN                 NUT
      ----------------------

      State: any (for TN)

      ==== echo-request ===>
           src=TN's global
           dst:NUT's link-local

      ==== solicited NA ===>
           src=TN's global
           dst=NUT's link-local
           R=0, S=1, O=1
           w/ TLLA

      State: REACHABLE (for TN)

# TEST PROCEDURE

sendNsBasicGlobLink verifies that NUT send valid NSs in both INCOMPLETE state and PROBE state.

      TN                               NUT
      ------------------------------------

      State: REACHABLE (for TN)

      Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)

      State: STALE (for TN)

      ==== echo-request ===>
           src=TN's global
           dst=NUT's link-local

      <=== Judgment #1: echo-reply   ====
           src=NUT's link
           dst=TN's global
           timeout: 2 sec

      State: DELAY (for TN)

      Wait (DELAY_FIRST_PROBE_TIME)

      State: PROBE (for TN)

      <=== Judgment #2: unicast NS   ====
           src=NUT's link-local or global
           dst=TN's global
           w/ or w/o SLLA
           timeout: RETRANS_TIMER * MAX_UNICAST_SOLICIT

      State: NONCE (for TN)

      ==== echo-request ===>
           src=TN's global
           dst:NUT's link-local

      State: INCOMPLETE (for TN)

      <=== Judgment #3: multicast NS ====
           src=NUT's link-local
           dst=sol-node[TN's global]
           w/ SLLA
           timeout: RETRANS_TIMER * MAX_MULTICAST_SOLICIT

      State: NONCE (for TN)

# JUDGMENT

      1. NUT must send an echo-reply:
         src: link, dst: global

      2. NUT must send at the most three unicast NS:
         src: link/global, dst: global, w/ or w/o SLLA

      3. NUT must send at the most three multicast NS:
         src: link(SHOULD), dst: sol-node[global], w/ SLLA

# TERMINATION

      Send RA with RouterLifetime=0 to flush the Default Router List.

# NOTE

      1. RFC2461 does not describe the case where a NS sends in PROBE state
         The test judges "PASS" even if NUT sends an NS whose source
         address is not link-local when PROBE state.

      2. The test does not invoke any remote command.

# REFERENCE

    RFC2461

    7.2.2.  Sending Neighbor Solicitations

       When a node has a unicast packet to send to a neighbor, but does not
       know the neighbor's link-layer address, it performs address
       resolution.  For multicast-capable interfaces this entails creating a
       Neighbor Cache entry in the INCOMPLETE state and transmitting a
       Neighbor Solicitation message targeted at the neighbor.  The
       solicitation is sent to the solicited-node multicast address
       corresponding to the target address.

       If the source address of the packet prompting the solicitation is the
       same as one of the addresses assigned to the outgoing interface, that
       address SHOULD be placed in the IP Source Address of the outgoing
       solicitation.  Otherwise, any one of the addresses assigned to the
       interface should be used.  Using the prompting packet's source
       address when possible insures that the recipient of the Neighbor
       Solicitation installs in its Neighbor Cache the IP address that is
       highly likely to be used in subsequent return traffic belonging to
       the prompting packet's "connection".

# SEE ALSO

      perldoc V6evalTool
      perldoc V6evalRemote