# NAME

ncStateByNa4Reachable - Verifying State Machine: NS vs. REACHABLE

# TARGET

Host and Router

# SYNOPSIS

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

# INITIALIZATION

1. Set the state of neighbor cache entry to REACHABLE.
2. Cache either TN's LLA, or a bogus LLA

## Cache a LLA of TN

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

      State: NONCE (for TN)

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

      State: INCOMPLETE (for TN)

      <=== multicast NS ====
            src=NUT's link-local
            dst=solicited-node[TN's link-local]
            target=TN's link-local
            w/ SLLA
            timeout: RETRANS_TIMER * MAX_MULTICAST_SOLICIT

      ==== solicited NA ===>
            src=TN's link-local
            dst=NUT's link-local
            target=TN's link-local
            TLLA=TN's LLA

      State: REACHABLE (for TN)

## Cache a bogus LLA

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

      State: NONCE (for TN)

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

      State: INCOMPLETE (for TN)

      <=== multicast NS ====
            src=NUT's link-local
            dst=solicited-node[TN's link-local]
            target=TN's link-local
            w/ SLLA
            timeout: RETRANS_TIMER * MAX_MULTICAST_SOLICIT

      ==== solicited NA ===>
            src=TN's link-local
            dst=NUT's link-local
            target=TN's link-local
            TLLA=a bogus LLA

      State: REACHABLE (for TN)

# TEST PROCEDURE

ncStateByNa4Reachable verifies that state transition for a NUT in REACHABLE state when receiving an NS.

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

      State: REACHABLE (for TN)

      ==== NS ===>
            src=TN's link-local
            dst=NUT's link-local/solicited-node[NUT's link-local]
            w/o or w/ SLLA

      Judgment: Examining NUT's neighbor cache state

# JUDGMENT

    7.2.3.  Receipt of Neighbor Solicitations

       A valid Neighbor Solicitation that does not meet any the following
       requirements MUST be silently discarded:

        - The Target Address is a "valid" unicast or anycast address
          assigned to the receiving interface [ADDRCONF],

        - The Target Address is a unicast address for which the node is
          offering proxy service, or

        - The Target Address is a "tentative" address on which Duplicate
          Address Detection is being performed [ADDRCONF].

       If the Target Address is tentative, the Neighbor Solicitation should
       be processed as described in [ADDRCONF].  Otherwise, the following
       description applies.  If the Source Address is not the unspecified
       address and, on link layers that have addresses, the solicitation
       includes a Source Link-Layer Address option, then the recipient
       SHOULD create or update the Neighbor Cache entry for the IP Source
       Address of the solicitation.  If an entry does not already exist, the
       node SHOULD create a new one and set its reachability state to STALE
       as specified in Section 7.3.3.  If an entry already exists, and the
       cached link-layer address differs from the one in the received Source
       Link-Layer option, the cached address should be replaced by the
       received address and the entry's reachability state MUST be set to
       STALE.

      ===============================+==========+=========+=================
      NS                             |New State |LLA       Comments
      ---------+-----------+---------+          |
      Source IP|Destination|SLLA     |          |
               |IP         |         |          |
      =========+===========+=========+==========+=========*=================
      TN's link Unicast     none      REACHABLE  unchanged Not mentioned
                                                           in RFC2461
      ---------+-----------+---------+----------+---------+-----------------
      TN's link Unicast     same      REACHABLE  unchanged
      ---------+-----------+---------+----------+---------+-----------------
      TN's link Multicast   same      REACHABLE  unchanged
      =========+===========+=========+==========+=========+=================
      TN's link Unicast     different STALE      updated
      ---------+-----------+---------+----------+---------+-----------------
      TN's link Multicast   different STALE      updated
      =========+===========+=========+==========+=========+=================

# TERMINATION

      N/A

# NOTE

      The test does not invoke any remote command.

    =head1 SEE ALSO

      perldoc V6evalTool
      perldoc V6evalRemote