tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

NetBSD's Implementation of IPv6 Default Router Selection



Hi,
    I am wondering whether NetBSD's implementation of "IPv6 Default
Router Selection" is correct
    as per RFC 2461 "Neighbor Discovery for IP Version 6 (IPv6)"

    This is implemented in defrouter_select and the references to this
function are
    as follows
References in nd6.c
===============
nd6_purge
nd6_free
nd6_ioctl
nd6_cache_lladdr

References in nd6_rtr.c
=================
defrtrlist_del
defrtrlist_update

    This is what the RFC has to say about Default Router Selection.
    I'd like you to look at the double-quoted portions of this text
    carefully.

6.3.6.  Default Router Selection

   The algorithm for selecting a router depends in part on whether or
   not a router is known to be reachable.  The exact details of how a
   node keeps track of a neighbor's reachability state are covered in
   Section 7.3.  "The algorithm for selecting a default router is invoked
   during next-hop determination when no Destination Cache entry exists
   for an off-link destination or when communication through an existing
   router appears to be failing"  Under normal conditions, a router
   would be selected the first time traffic is sent to a destination,
   with subsequent traffic for that destination using the same router as
   indicated in the Destination Cache modulo any changes to the
   Destination Cache caused by Redirect messages.

   The policy for selecting routers from the Default Router List is as
   follows:
     1) ...
     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) ...

    Should'nt the round-robining of default routers be happening when we try to
    determine next-hop(for default route) while trying to send packets through
    unreachable routers??

    Look at this kind of scenario:
    Say, there are 2 default routers and both are unreachable. For
argument sake,
    lets think that the 2 routers are dis-connected from the network
after they've
    sent 1/2 RAs each. My interpretation of these RFC lines would be
that, if we try to
    send packets using default route, we should pick up the default
routers in a
    round-robin fashion when we do the next-hop determination for those packets.
    For this to happen, we need to round-robin when we do next-hop
determination.

    To clarify, I am not suggesting that we do round robin selection
of default router
    for every packet that we send. But that we do round-robining only in such a
    scenario.

    I am trying to get an ANVL test to pass on a "netbsd like" implementation.
    Basically, this is the test case. With the netbsd implementation,
this is not
    passing.

    - ANVL: Send Router Advertisement Message to <DIface-0>,
        from RTR-1, containing:
        - No Source link-layer address option
- ANVL: Wait for <ProcessTime> for DUT to process Router
        Advertisement
- ANVL: Send Router Advertisement Message to <DIface-0>,
        from RTR-2, containing:
        - No Source link-layer address option
- ANVL: Wait for <ProcessTime> for DUT to process Router
        Advertisement
- ANVL: Send ICMP Echo Request from global address of HOST-1
        over prefix PREFIX-2 to global address of <DIface-0>
        over prefix PREFIX-1
- ANVL: Listen (for upto <ListenTime> seconds) on <AIface-0>
-  DUT: Select one from RTR-1, RTR-2, as default router
-  DUT: Send Neighbor Solicitation to resolve address of
        default router
- ANVL: Verify that received ICMP Message contains:
        - ICMP Type field set to ICMP-TYPE-NS
        - ICMP Target Address field set to link-local
          address of RTR-1 or RTR-2
- ANVL: Send ICMP Echo Request from global address of HOST-1
        over prefix PREFIX-2 to global address of <DIface-0>
        over prefix PREFIX-1
- ANVL: Listen (for upto <ListenTime> seconds) on <AIface-0>
-  DUT: Select the other one as default router
-  DUT: Send Neighbor Solicitation to resolve address of
        default router

    I'd like to know which interpretation of the RFC, netbsd's or ANVL's,
    is correct here?? Any answer on the same is much appreciated.

Thanks & Regards
Vijay


Home | Main Index | Thread Index | Old Index