# NAME

hostRecvRaURD - Verifying that NUD updates DRL

# TARGET

Host only

# SYNOPSIS

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

# INITIALIZATION

1. Set NC state for TN, Y and Z to STALEs.
2. Give a global prefix, 3ffe:501:ffff:100::/64 with their RAs

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

      State: NONCE (for TN, Y, Z)

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

      ==== unsolicited RA ===>
           src=Y'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

      ==== unsolicited RA ===>
           src=Z'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 TN, Y, Z)

      <=== Ns for DAD (if any) ====
           src=unspecified
           dst=solicited-node[NUT's global, prefix=3ffe:501:ffff:100::/64]
           target=NUT's global
           Wait (3 sec)

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

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

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

      State: REACHABLE (for TN, Y, Z)

      Wait (REACHABLE_TIME * MAX_RANDOM_FACTOR)

      State: STALE (for TN, Y, Z)

# TEST PROCEDURE

hostRecvRaURD verifies the followings:

- The Default Router List must hold at the least two entries.
- Routers that are reachable or probably reachable should be preferred over routers whose reachability is unknown or suspect.
- When no routers on the Default Router List are known to be reachable or probably reachable, routers should be selected in a round-robin fashion.

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

      State: STALE (for TN, Y, Z)

      ==== echo-request ===>
           src=off-link global, but LLA is the W's one
           dst=NUT's global

      <=== Judgment #1: echo-reply ====
           src=NUT's global
           dst=off-link global, but LLA is TN's one

      State: DELAY (for TN), STALE (for Y, Z)

      Wait (DELAY_FIRST_PROBE_TIME + (RETRANS_TIMER * $MAX_UNICAST_SOLICIT))
          for the entry of the Default Router List to be unreachable.

      State: NONCE (for TN), STALE (for Y, Z)

      ==== echo-request ===>
           src=off-link global, but LLA is the W's one
           dst=NUT's global

      <=== Judgment #2: echo-reply ====
           src=NUT's global
           dst=off-link global, but LLA is Y's one

      State: NONCE (for TN), DELAY (for Y), STALE (for Z)

      Wait (DELAY_FIRST_PROBE_TIME + (RETRANS_TIMER * $MAX_UNICAST_SOLICIT))
          for the entry of the Default Router List to be unreachable.

      State: NONCE (for TN, Y), STALE (for Z)

      ==== echo-request ===>
           src=off-link global, but LLA is the W's one
           dst=NUT's global

      <=== Judgment #3: echo-reply ====
           src=NUT's global
           dst=off-link global, but LLA is Z's one

      State: NONCE (for TN, Y), DELAY (for Z)

      Wait (DELAY_FIRST_PROBE_TIME + (RETRANS_TIMER * $MAX_UNICAST_SOLICIT))
          for the entry of the Default Router List to be unreachable.

      State: NONCE (for all)

      ==== echo-request ===>
           src=off-link global, but LLA is the W's one
           dst=NUT's global

      State: INCOMPLETE (for TN), NONCE (for Y, Z)

      <=== Judgment #4: multicast NS ====
           src=NUT's global
           dst=solicited-node[TN's link-local]
           target=TN's link-local
           w/ SLLA

      Wait (RETRANS_TIMER * $MAX_MULTICAST_SOLICIT)

      State: NONCE (for all)

      ==== echo-request ===>
           src=off-link global, but LLA is the W's one
           dst=NUT's global

      State: INCOMPLETE (for Y), NONCE (for TN, Z)

      <=== Judgment #4: multicast NS ====
           src=NUT's global
           dst=solicited-node[Y's link-local]
           target=Y's link-local
           w/ SLLA

      Wait (RETRANS_TIMER * $MAX_MULTICAST_SOLICIT)

      State: NONCE (for all)

      ==== echo-request ===>
           src=off-link global, but LLA is the W's one
           dst=NUT's global

      State: INCOMPLETE (for Z), NONCE (for TN, Y)

      <=== Judgment #4: multicast NS ====
           src=NUT's global
           dst=solicited-node[Z's link-local]
           target=Z's link-local
           w/ SLLA

      Wait (RETRANS_TIMER * $MAX_MULTICAST_SOLICIT)

      State: NONCE (for all)

# JUDGMENT

      1. NUT must throw an echo-reply to the default router (i.e. NUT).

      2. NUT must throw an echo-reply to the default router (i.e. Y).

      3. NUT must throw an echo-reply to the default router (i.e. Z).

      4. Routers should be selected in a round-robin fashion.

# TERMINATION

      Send RAs to clear the Default Router List:
      - RA (src=TN) with RouterLifetime=0
      - RA (src=Y)  with RouterLifetime=0
      - RA (src=Z)  with RouterLifetime=0

# NOTE

      1. The test does not invoke any remote command:

# REFERENCE

RFC2461

    6.3.4.  Processing Received Router Advertisements

       To limit the storage needed for the Default Router List, a host MAY
       choose not to store all of the router addresses discovered via
       advertisements.  However, a host MUST retain at least two router
       addresses and SHOULD retain more.  Default router selections are made
       whenever communication to a destination appears to be failing.  Thus,
       the more routers on the list, the more likely an alternative working
       router can be found quickly (e.g., without having to wait for the
       next advertisement to arrive).

    6.3.6.  Default Router Selection

       The policy for selecting routers from the Default Router List is as
       follows:

         1) Routers that are reachable or probably reachable (i.e., in any
            state other than INCOMPLETE) SHOULD be preferred over routers
            whose reachability is unknown or suspect (i.e., in the
            INCOMPLETE state, or for which no Neighbor Cache entry exists).
            An implementation may choose to always return the same router or
            cycle through the router list in a round-robin fashion as long
            as it always returns a reachable or a probably reachable router
            when one is available.

         2) When no routers on the list are known to be reachable or
            probably reachable, routers SHOULD be selected in a round-robin
            fashion, so that subsequent requests for a default router do not
            return the same router until all other routers have been
            selected.

            Cycling through the router list in this case ensures that all
            available routers are actively probed by the Neighbor
            Unreachability Detection algorithm.  A request for a default
            router is made in conjunction with the sending of a packet to a
            router, and the selected router will be probed for reachability
            as a side effect.

         3) If the Default Router List is empty, assume that all
            destinations are on-link as specified in Section 5.2.

# SEE ALSO

      perldoc V6evalTool
      perldoc V6evalRemote