# NAME

ncStateByRedirect4Stale - Verifying State Machine: Redirect vs. STALE

# TARGET

Host only

# SYNOPSIS

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

# INITIALIZATION

1. Set R1 as the default router by sending RA and NA.
2. Set TN's Neighbor Cache State to STALE.
3. Cache either TN's LLA, or a bogus LLA

## Cache a LLA of TN

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

      State: NONCE (for all)

      ==== unsolicited RA ===>
           src=R1's link-local
           dst=all-node
           M=0, O=0
           RouterLifetime=600
           ReachableTime=0
           RetransTimer=0
           w/ SLLA
           Prefix Option:
               L=1, A=1
               ValidLifetime=2592000
               PreferredLifetime=604800
               Prefix=3ffe:501:ffff:100::/64

      State: STALE (for R1), NONCE (for TN)

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

      State: REACHABLE (for R1), NONCE (for TN)

      Wait (3 sec) for DAD NS

      ==== unsolicited RA ===>
           src=TN's link-local
           dst=all-node
           M=0, O=0
           RouterLifetime=600
           ReachableTime=0
           RetransTimer=0
           w/ SLLA
           Prefix Option:
               L=1, A=1
               ValidLifetime=2592000
               PreferredLifetime=604800
               Prefix=3ffe:501:ffff:100::/64

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

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

      State: REACHABLE (for R1), REACHABLE (for TN)

      Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)

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

## Cache a bogus LLA

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

      State: NONCE (for all)

      ==== unsolicited RA ===>
           src=R1's link-local
           dst=all-node
           M=0, O=0
           RouterLifetime=600
           ReachableTime=0
           RetransTimer=0
           w/ SLLA
           Prefix Option:
               L=1, A=1
               ValidLifetime=2592000
               PreferredLifetime=604800
               Prefix=3ffe:501:ffff:100::/64

      State: STALE (for R1), NONCE (for TN)

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

      State: REACHABLE (for R1), NONCE (for TN)

      Wait (3 sec) for DAD NS

      ==== unsolicited RA ===>
           src=TN's link-local
           dst=all-node
           M=0, O=0
           RouterLifetime=600
           ReachableTime=0
           RetransTimer=0
           w/ SLLA
           Prefix Option:
               L=1, A=1
               ValidLifetime=2592000
               PreferredLifetime=604800
               Prefix=3ffe:501:ffff:100::/64

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

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

      State: REACHABLE (for R1), REACHABLE (for TN)

      Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)

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

# TEST PROCEDURE

ncStateByRedirect4Stale verifies that state transition for a NUT in STALE state when receiving a Redirect.

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

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

      ==== Redirect ===>
          src=R1's link-local
          dst=NUT's link-local
          icmp target=TN's link-local
          icmp dst=H1's global
          w/ or w/o TLL option (i.e. TN's LLA)
          w/ or w/o Redirected header option

      Judgment: Examining NUT's neighbor cache state

# JUDGMENT

    8.3.  Host Specification

       If the redirect contains a Target Link-Layer Address option the host
       either creates or updates the Neighbor Cache entry for the target.
       In both cases the cached link-layer address is copied from the Target
       Link-Layer Address option.  If a Neighbor Cache entry is created for
       the target its reachability state MUST be set to STALE as specified
       in Section 7.3.3.  If a cache entry already existed and it is updated
       with a different link-layer address, its reachability state MUST also
       be set to STALE.  If the link-layer address is the same as that
       already in the cache, the cache entry's state remains unchanged.

      =====================+=====================+===========+=============================
      IP                   |ICMP                 |Option     |NC state
      ----------+----------+----------+----------+-----+-----+---------+---------+---------
      Src       |Dst       |Target    |Dst       |TLLA |R'ed |Current   |New      |LLA
      ==========+==========+==========+==========+=====+=====+=========+=========+=========
      R1's      |NUT's     |TN's      |H1's      |none |none |STALE    |STALE    |unchanged
      link-local|link-local|link-local|global    |     |     |         |         |
      ----------+----------+----------+----------+-----+-----+---------+---------+---------
      R1's      |NUT's     |TN's      |H1's      |same |none |STALE    |STALE    |unchanged
      link-local|link-local|link-local|global    |     |     |         |         |
      ----------+----------+----------+----------+-----+-----+---------+---------+---------
      R1's      |NUT's     |TN's      |H1's      |diff.|none |STALE    |STALE    |updated
      link-local|link-local|link-local|global    |     |     |         |         |
      ----------+----------+----------+----------+-----+-----+---------+---------+---------
      R1's      |NUT's     |TN's      |H1's      |diff.|exist|STALE    |STALE    |updated
      link-local|link-local|link-local|global    |     |     |         |         |
      ----------+----------+----------+----------+-----+-----+---------+---------+---------
      R1's      |NUT's     |TN's      |H1's      |diff.|exist|STALE    |STALE    |updated
      link-local|link-local|link-local|global    |     |>1280|         |         |
      ==========+==========+==========+==========+=====+=====+=========+=========+=========

# TERMINATION

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

      State: any (for TN)

      ==== Redirect ===>
          src=TN's link-local
          dst=NUT's link-local
          icmp target=R1's link-local
          icmp dst=H1's global
          w/o TLL option
          w/o Redirected header option

      ==== RA (at the end of the test) ===>
          src=R1's link-local
          dst=allnode
          RouterLifetime=0

# NOTE

      The test does not invoke any remote command.

# SEE ALSO

      perldoc V6evalTool
      perldoc V6evalRemote