# NAME

ncStateByRa4Probe - Verifying State Machine: RA vs. PROBE

# TARGET

Host only

# SYNOPSIS

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

# INITIALIZATION

1. Set the state of neighbor cache entry to PROBE.
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
          SLLA=NUT's LLA
          timeout: RETRANS_TIMER * MAX_MULTICAST_SOLICIT

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

      State: REACHABLE (for TN)

      Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)

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

      <=== echo-reply ====
          src=NUT's link-local
          dst=TN's link-local
          timeout=2 sec

      State: DELAY (for TN)

      Wait (DELAY_FIRST_PROBE_TIME)

      State: PROBE (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
          SLLA=NUT's LLA
          timeout: RETRANS_TIMER * MAX_MULTICAST_SOLICIT

      ==== solicited NA ===>
          src=TN's link-local
          dst=NUT's link-local
          R=0, S=1, O=1
          target=TN's link-local
          TLLA=bogus LLA

      State: REACHABLE (for TN)

      Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)

      State: STALE (for TN)
      ==== echo-request ===>
          src=TN's link-local
          dst=NUT's link-local

      <=== echo-reply ====
          src=NUT's link-local
          dst=TN's link-local
          timeout=2 sec

      State: DELAY (for TN)

      Wait (DELAY_FIRST_PROBE_TIME)

      State: PROBE (for TN)

# TEST PROCEDURE

ncStateByRa4Stale verifies that state transition for a NUT in PROBE state when receiving a RA.

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

      State: PROBE (for TN)

      ==== RA ===>
          src=TN's link
          dst=all-node
          RouterLifetime=600
          ReachableTime=0
          RetransTimer=0
          M=0, O=0
          w/o or w/ TLLA

      Judgment: Examining NUT's neighbor cache state

# JUDGMENT

    6.3.4.  Processing Received Router Advertisements

       After extracting information from the fixed part of the Router
       Advertisement message, the advertisement is scanned for valid
       options.  If the advertisement contains a Source Link-Layer Address
       option the link-layer address SHOULD be recorded in the Neighbor
       Cache entry for the router (creating an entry if necessary) and the
       IsRouter flag in the Neighbor Cache entry MUST be set to TRUE.  If no
       Source Link-Layer Address is included, but a corresponding Neighbor
       Cache entry exists, its IsRouter flag MUST be set to TRUE.  The
       IsRouter flag is used by Neighbor Unreachability Detection to
       determine when a router changes to being a host (i.e., no longer
       capable of forwarding packets).  If a Neighbor Cache entry is created
       for the router its reachability state MUST be set to STALE as
       specified in Section 7.3.3.  If a cache entry already exists and is
       updated with a different link-layer address the reachability state
       MUST also be set to STALE.

    APPENDIX C: STATE MACHINE FOR THE REACHABILITY STATE

    State           Event                   Action                New state

    -               NS, RS, RA, Redirect    Create entry.         STALE

    INCOMPLETE      NS, RS, RA, Redirect    Record link-layer     STALE
                                            address.  Send queued
                                            packets.

    !INCOMPLETE     NS, RS, RA, Redirect    Update link-layer     STALE
                    Different link-layer    address
                    address than cached.

    !INCOMPLETE     NS, RS, RA, Redirect    -                     unchanged
                    Same link-layer
                    address as cached.

      ========================+=================================+==============
      RA                      | Neighbor Cache                  |
      ------------+-----------+---------+-----------+-----------+
      Destination | TLLA      | Current | New       | LLA       |
      ============+===========+=========+===========+===========+==============
      all-node    | none      | PROBE   | unchanged | unchanged | Not mentioned
                  |           |         |           |           | in RFC2461
      ------------+-----------+---------+-----------+-----------+--------------
      all-node    | same      | PROBE   | unchanged | unchanged |
      ------------+-----------+---------+-----------+-----------+--------------
      all-node    | different | PROBE   | STALE     | updated   |
      ============+===========+=========+===========+===========+==============

# TERMINATION

      N/A

# NOTE

      The test does not invoke any remote command.

# SEE ALSO

      perldoc V6evalTool
      perldoc V6evalRemote