On Fri, Feb 04, 2005 at 10:13:44PM -0800, David S. Miller wrote: > > But Herbert, let's take a step back real quick because I want > to point something out. IPv6 does try to handle the dangling > mismatched idev's, in route.c:ip6_dst_ifdown(), this is called > via net/core/dst.c:dst_ifdown(), and this releases the ipv6 > idev correctly in the split device case. > > Did your analysis of this bridging release bug take this into > account? That's why we added this dst->ops method, specifically > to handle this problem.
This doesn't work because net/core/dst.c can only search based on dst->dev. For the split device case, dst->dev is set to loopback_dev while rt6i_idev is set to the real device. Therefore net/core/dst.c stands no chance of finding the correct local address routes that it needs to process. If we wanted to preserve the split device semantics, then we can create a local GC list in IPv6 so that it can search based on rt6i_idev as well as the other keys. Alternatively we can remove the dst->dev == dev check in dst_dev_event and dst_ifdown and move that test down to the individual ifdown functions. However, IMHO the split device semantics is inconsistent with the philosphy that addresses belong to the host and not the interface. So it doesn't really make sense in the current networking stack. Cheers, -- Visit Openswan at http://www.openswan.org/ Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/