On Wed, Jan 31, 2007 at 01:16:29AM +0900, YOSHIFUJI Hideaki / 吉藤英明 wrote:
> In article <[EMAIL PROTECTED]> (at Tue, 30 Jan 2007 08:02:08 -0500), Neil 
> Horman <[EMAIL PROTECTED]> says:
> 
> > > I do not think we should copy neighbor information from (one of)
> > > default routers, but use temporary neigh entry (or neigh in new state)
> > > for such datagrams in stead.  We should aware that:
> > > 
> > Not sure how that is different from what I'm proposing.  a neighbor entry 
> > that
> > maps a given host on the current subnet to the MAC of the default router, 
> > that
> > then gets flushed when DAD completes is temporary, as far as I can see.
> > 
> > >  1) default router's link-layer address may change.
> > True, but if this changes, all our network connectivity is lost, until the
> > normal neighbor solicitation process completes anyway.
> 
> No, router may update its link-layer address by NA with Override flag set.
> In that case, we must use new link-layer for subsequent packets from
> our opportunistic address duing DAD.
> 
> > >  2) we may have more than one default routers.
> > True, but I would think we could select any of them and this would work.
> > Granted, we wouldn't use all the default routers in the table as we would 
> > with
> > routed frames, but I'm not sure how we avoid that.
> 
> I mean, if the status of the selected default router has changed or 
> has been deleted, we should try other router, at least.
> 
> > >  3) the default router's link-layer may be invalidated.
> > > 
> > yes, but this would be bad for the same reason as (1)
> 
> We MUST take this into account.
> 

Ok, understood.  In summary, we can't simply fill out the neighbor entry for a
given host with the address of a default router because

1) Any changes to the router link layer address wont be reflected in that when
it (the change) happens, redering the local address unable to communicate until
the neighbour entries age out.

2) There may be more than one default router as selected by the routing policy,
and we should be able to try those routes if the selected router becomes
unavailable


It sounds like what we need to do is shim into the route lookup code, and detect
there if we need to redirect every packet as they are sent.  I think I may have
an idea for this.  What if we implement the lookup in ip6_dst_lookup_tail.  In
there we can check if the associated neigh entry for the resolved dst_entry is
in a INCOMPLETE or FAILED state, and if the ifaddr associated withe the source
address passed in via the flowi struct is in an OPTIMISTIC state.  If both
conditions are true, we release the dst_entry that we origionally looked up, and
instead conduct a second lookup with a newly constructed flowi struct with the
dst addr replaced with an all zeros address (which I think should return a
gateway, selected as per routing policy).  Then we can return that dst entry
instead.  Since ip6_push_pending frames seems to bulid the ipv6 header using the
addresses in the flowi struct passed into ip6_*_dst_lookup from *_sendmsg
routines, and the link layer header is built based on the info gathered from the
resolved dst_entry (If I'm reading the code right), I think this give us what we
want, in that we redirect to a gatweway when we send from an optimistic address,
and we select the gateway based on the logic in the route lookup code
(ip6_route_output() specifically).  I'm trying to implement this right now, and
will post a new patch as soon as I have it done.  In the meantime, any thoughts
would be most appreciated.

Regards
Neil

> --yoshfuji
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to