# NAME

hostRecvRedirect4RouterLifetime02 - Verifying Redirect (to a better router) vs. RA w/ RouterLifetime=0

# TARGET

Host only

# SYNOPSIS

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

# INITIALIZATION

1. Clear IPv6 routes.
2. Clear NC state for TN.
3. Set R1 as the default router by sending RA and NA.
4. Set TN as the second router by sending RA and NA.

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

      State: NONCE (for R1, TN)

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

# TEST PROCEDURE

hostRecvRedirect4RouterLifetime02 verifies that an entry of Destination Cache updated by a redirect message (ICMP Target != ICMP Destination) is removed by RA w/ RouterLifetime=0.

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 RA whose RouterLifetime is 0.
5. Send echo-request (src:H1, dst:NUT) again.
   1. CASE 1:
      Verify that NUT send echo-reply to the default router, R1.
   2. CASE 2:
      Verify that NUT send echo-reply to the better router, TN,
      but NUD flush the redirected entries.

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

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

      ==== 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=TN's link-local
           icmp destination=H1's global
           w/  TLLA
           w/o Redirected header

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

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

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

      CASE 1: Redirected entries are flushed by RA w/ RouterLifetime=0
      ********************************************************************

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

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

      ********************************************************************

      CASE 2: Redirected entries are flushed by not RA w/ RouterLifetime=0,
              but Neighbor Unreachability Detection.
      ********************************************************************

      <=== 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,
               but LLA is TN's one

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

      Wait (5 sec)

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

      <=== NS ====
           src=NUT's link-local
           dst=TN's link-local
           target=TN's link-local

      <=== NS ====
           src=NUT's link-local
           dst=TN's link-local
           target=TN's link-local

      <=== NS ====
           src=NUT's link-local
           dst=TN's link-local
           target=TN's link-local

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

      ==== 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 whose destination is off-link global
         to the better router (i.e. TN).

# TERMINATION

      Send RA with RouterLifetime=0 to clear the Default Router List. XXX

      Clear IPv6 routes by remote command. XXX

# NOTE

      1. It is not fail that NUT does not flush the redirected entries
         with RA w/ RouterLifetime=0. Because RFC2461 does not mention
         the case where a router's address is not present in NUT's
         Default Router List and received Router Lifetime value is zero:

    6.3.4.  Processing Received Router Advertisements

       On receipt of a valid Router Advertisement, a host extracts the
       source address of the packet and does the following:

          - If the address is not already present in the host's Default
            Router List, and the advertisement's Router Lifetime is non-
            zero, create a new entry in the list, and initialize its
            invalidation timer value from the advertisement's Router
            Lifetime field.

          - If the address is already present in the host's Default Router
            List as a result of a previously-received advertisement, reset
            its invalidation timer to the Router Lifetime value in the
            newly-received advertisement.

          - If the address is already present in the host's Default Router
            List and the received Router Lifetime value is zero, immediately
            time-out the entry as specified in Section 6.3.5.

         If NUT is so, the test verify if NUT's NUD can flush the redirected
         entries or not. However, if NUT's Reachable Time is long, the redirected
         entries will remain for a while. This is why the test judges NUT
         WARN in stead of FAIL in the case.

      2. The test invokes the following command:
         - Clear IPv6 routes

# SEE ALSO

      perldoc V6evalTool
      perldoc V6evalRemote