# NAME

hostRecvRedirect4OnlinkNUD - Verifying Redirect (to a better router) vs. Neighbor Unreachability Detection

# TARGET

Host only

# SYNOPSIS

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

# INITIALIZATION

1. Clear IPv6 routes.
2. Send RA with RouterLifetime=0 to clear the Default Router List.
3. Set R1 as the default router by sending RA and NA.

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

      State: NONCE (for all)

      ==== unsolicited RA ===>
           src=R1's link-local
           dst=all-node
           M=0, O=0
           RouterLifetime=0
           ReachableTime=0
           RetransTimer=0

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

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

      Wait (3 sec) for DAD NS

# TEST PROCEDURE

hostRecvRedirect4OnlinkNUD verifies that an entry of Destination Cache updated by a redirect message is removed by Neighbor Unreachability Detection.

1. Send echo-request (src:H1, dst:NUT)
2. Verify that NUT send echo-reply to the default router, R1
3. Send redirect message to NUT.
4. Send echo-request (src:H1, dst:NUT) again.
5. Verify that NUT throw echo-reply to on-link.
6. Wait for NC state to NONCE.
7. Send echo-request (src:H1, dst:NUT) again.
8. Verify that NUT send echo-reply to the default router, R1

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

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

      ==== echo-request ===>
           src=H1(off-link global), prefix=3ffe:501:ffff:109::/64,
               but LLA is R1's one
           dst=NUT's global, prefix=3ffe:501:ffff:100::/64

      <=== Judgment #1: echo-reply ====
           src=NUT's global, prefix=3ffe:501:ffff:100::/64
           dst=H1(off-link global), prefix=3ffe:501:ffff:109::/64,
               but LLA is R1's one

      ==== redirect ===>
           src=R1's link-local
           dst=NUT's link-local
           icmp target=H1's global
           icmp destination=H1's global
           TLLA=H1's LLA
           w/o Redirected header

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

      ==== echo-request ===>
           src=H1(off-link global), prefix=3ffe:501:ffff:109::/64,
               but LLA is R1's one
           dst=NUT's global, prefix=3ffe:501:ffff:100::/64

      <=== Judgment #2: echo-reply ====
           src=NUT's global, prefix=3ffe:501:ffff:100::/64
           dst=H1(off-link global), prefix=3ffe:501:ffff:109::/64,
               LLA is as same as TLLA option of the redirect message has.

      State: REACHABLE (for R1), DELAY (for H1)

      Wait (5 sec)

      State: REACHABLE (for R1), PROBE (for H1)

      Wait (3 sec)

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

      ==== echo-request ===>
           src=H1(off-link global), prefix=3ffe:501:ffff:109::/64,
               but LLA is R1's one
           dst=NUT's global, prefix=3ffe:501:ffff:100::/64

      <=== Judgment #1: echo-reply ====
           src=NUT's global, prefix=3ffe:501:ffff:100::/64
           dst=H1(off-link global), prefix=3ffe:501:ffff:109::/64,
               but LLA is R1's one

# JUDGMENT

      1. NUT must throw echo-reply whose destination is off-link global
        to the default router (i.e. R1).

      2. NUT must throw echo-reply to on-link.

# TERMINATION

      - Send RA with RouterLifetime=0 to clear the Default Router List.
      - Clear IPv6 routes with remote command. XXX

# NOTE

      The test invokes the following command:
      - Clear IPv6 routes

# SEE ALSO

      perldoc V6evalTool
      perldoc V6evalRemote