NAME

hostRecvRedirect4OfflinkDC - Verifying Redirect (to a better router) vs. Destination Cache


TARGET

Host only


SYNOPSIS

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


INITIALIZATION

  1. Clear IPv6 routes.
  2. Send RAs (src=R1 and TN) to clear the Default Router List.
  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=0 ReachableTime=0 RetransTimer=0
==== unsolicited RA ===> src=TN'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), 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)
==== 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=TN's link-local TLLA=TN's LLA
State: REACHABLE (for R1, TN)
Wait (3 sec) for DAD NS


TEST PROCEDURE

hostRecvRedirect4OfflinkDC verifies that a redirect message (ICMP Destination != ICMP Target) updates a Destination Cache entry.

  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 echo-reply that NUT throw:
    1. The redirect message is ether valid or suspicious:
      NUT must send echo-reply to the better router TN
    2. The redirect message is invalid:
      NUT must send echo-reply to the default router R1
  TN               NUT
  ----------------------

State: REACHABLE (for R1, 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 ===> valid redirect OR suspicious redirect OR invalid redirect
==== 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
<=== echo-reply ==== If the message is either valid or suspicious, NUT throw echo-reply to TN (the better router) : 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 OR If the message is invalid, NUT throw echo-reply to R1 (the default router) : 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, ie R1.

  2. Valid redirect messages vs. Destination Cache
  ========================================================+=============+=======================
  Valid redirect message that NUT receives                |Destination  | Expected packet
  ---------------------+-----------------+----------------+Cache        |
  IP                   |ICMP             |Options         |for H1       |
  ----------+----------+----------+------+-----+----------+-------+-----+
  Src       |Dst       |Target    |Dst   |TLLA |Redirected|Before |After|
  ==========+==========+==========+======+=====+==========+=======+=====+=======================
  link-local|link-local|link-local|global|none |none      |R1     |TN   |echo-reply
  (R1)      |(NUT)     |(TN)      |(H1)  |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+-------+-----+-----------------------
  -         |-         |-         |-     |none |exist     |R1     |TN   |echo-reply
            |          |          |      |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+-------+-----+-----------------------
  -         |-         |-         |-     |exist|none      |R1     |TN   |echo-reply
            |          |          |      |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+-------+-----+-----------------------
  -         |-         |-         |-     |exist|exist     |R1     |TN   |echo-reply
            |          |          |      |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+-------+-----+-----------------------
  -         |global    |-         |-     |none |none      |R1     |TN   |echo-reply
            |(NUT)     |          |      |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+-------+-----+-----------------------
  -         |-         |-         |-     |none |exist     |R1     |TN   |echo-reply
            |          |          |      |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+-------+-----+-----------------------
  -         |-         |-         |-     |exist|none      |R1     |TN   |echo-reply
            |          |          |      |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+-------+-----+-----------------------
  -         |-         |-         |-     |exist|exist     |R1     |TN   |echo-reply
            |          |          |      |     |          |       |     |  src=NUT's global
            |          |          |      |     |          |       |     |  dst=H1's global
            |          |          |      |     |          |       |     |      but, LLA is TN's
  ==========+==========+==========+======+=====+==========+=======+=====+=======================
  -: same as above

  3. Suspicious redirect messages vs. Destination Cache
  ========================================================+============+========================
  Suspicious redirect message that NUT receives           |Destination |Expected packet
  ---------------------+-----------------+----------------+Cache       |
  IP                   |ICMP             |Options         |for H1      |
  ----------+----------+----------+------+-----+----------+------+-----+
  Src       |Dst       |Target    |Dst   |TLLA |Redirected|Before|After|
  ==========+==========+==========+======+=====+==========+======+=====+========================
  link-local|link-local|link-local|global|exist|exist     |R1    |TN   |echo-reply
  (R1)      |(NUT)     |(TN)      |(H1)  |     |> 1280 and|      |     |  src=NUT's global
            |          |          |      |     |bogus     |      |     |  dst=H1's global
            |          |          |      |     |*susp.    |      |     |      but, LLA is TN's
  ----------+----------+----------+------+-----+----------+------+-----+------------------------
  -         |all-node  |-         |-     |exist|exist     |R1    |TN   |echo-reply
            |*susp.    |          |      |     |          |      |     |  src=NUT's global
            |          |          |      |     |          |      |     |  dst=H1's global
            |          |          |      |     |          |      |     |      but, LLA is TN's
  ==========+==========+==========+======+=====+==========+======+=====+========================
  -: same as above

  4. Invalid redirect messages vs. Destination Cache
  ==============================================================+============+======================
  Invalid redirect message that NUT receive                     |Destination |Expected packet
  ---------------------+----------------------------------------+Cache       |
  IP                   |ICMP                                    |for H1      |
  ----------+----------+--------+----+--------+----------+------+------------+
  Src       |Dst       |Hoplimit|Code|Checksum|Target    |Dst   |Before|After|
  ==========+==========+========+====+========+==========+======+======+=====+======================
  global    |link-local|255     |0   |valid   |link-local|global|R1    |R1   |echo-reply
  *invalid  |(NUT)     |        |    |        |(TN)      |(H1)  |      |     |  src=NUT's global
            |          |        |    |        |          |      |      |     |  dst=H1's global
            |          |        |    |        |          |      |      |     |      but LLA is R1's
  ----------+----------+--------+----+--------+----------+------+------+-----+----------------------
  bogus     |-         |-       |-   |-       |-         |-     |R1    |R1   |echo-reply
  router's  |          |        |    |        |          |      |      |     |  src=NUT's global
  link-local|          |        |    |        |          |      |      |     |  dst=H1's global
  *invalid  |          |        |    |        |          |      |      |     |      but LLA is R1's
  ----------+----------+--------+----+--------+----------+------+------+-----+----------------------
  link-local|-         |!=255   |-   |-       |-         |-     |R1    |R1   |echo-reply
  (R1)      |          |*invalid|    |        |          |      |      |     |  src=NUT's global
            |          |        |    |        |          |      |      |     |  dst=H1's global
            |          |        |    |        |          |      |      |     |      but LLA is R1's
  ----------+----------+--------+----+--------+----------+------+------+-----+----------------------
  -         |-         |255     |!=0 |-       |-         |-     |R1    |R1   |echo-reply
            |          |        |*inv|        |          |      |      |     |  src=NUT's global
            |          |        |    |        |          |      |      |     |  dst=H1's global
            |          |        |    |        |          |      |      |     |      but LLA is R1's
  ----------+----------+--------+----+--------+----------+------+------+-----+----------------------
  -         |-         |-       |0   |*invalid|-         |-     |R1    |R1   |echo-reply
            |          |        |    |        |          |      |      |     |  src=NUT's global
            |          |        |    |        |          |      |      |     |  dst=H1's global
            |          |        |    |        |          |      |      |     |      but LLA is R1's
  ==========+==========+========+====+========+==========+======+======+=====+======================
  -: same as above


TERMINATION

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

  Clear IPv6 routes by remote command. XXX


NOTE

  The test invokes the following command:
  - Clear IPv6 routes


SEE ALSO

  perldoc V6evalTool
  perldoc V6evalRemote