netdev
[Top] [All Lists]

Re: 2.4.21+ - IPv6 over IPv4 tunneling b0rked

To: Mika Liljeberg <mika.liljeberg@xxxxxxxxx>
Subject: Re: 2.4.21+ - IPv6 over IPv4 tunneling b0rked
From: Mika Penttilä <mika.penttila@xxxxxxxxxxx>
Date: Fri, 11 Jul 2003 17:27:57 +0300
Cc: Pekka Savola <pekkas@xxxxxxxxxx>, Andre Tomt <andre@xxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx
References: <Pine.LNX.4.44.0307111446250.27865-100000@netcore.fi> <1057925366.896.24.camel@hades> <3F0EB227.50403@kolumbus.fi> <1057930712.895.32.camel@hades>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02
afaics, ipv6_addr_type() checks just for some rfc-specified reserved anycast addresses, not the ones in device list. Anyway, it will surely also bail out from the loopback test (anycast subnet router address is ours).

--Mika


Mika Liljeberg wrote:

On Fri, 2003-07-11 at 15:48, Mika Penttilä wrote:


It turns out to be the (otherwise valid) check for IFF_LOOPBACK for gateway's address in ip6_route_add() that gives EINVAL for prefix::, and has nothing to do with iid being 0, just a coinsidence....



Not sure. Seems to me that ipv6_addr_type() flags the gateway address as anycast. In ip6_route_addr() [2.5.74] we have:

       if (rtmsg->rtmsg_flags & RTF_GATEWAY) {
               struct in6_addr *gw_addr;
               int gwa_type;

               gw_addr = &rtmsg->rtmsg_gateway;
               ipv6_addr_copy(&rt->rt6i_gateway, &rtmsg->rtmsg_gateway);
               gwa_type = ipv6_addr_type(gw_addr);

               if (gwa_type != (IPV6_ADDR_LINKLOCAL|IPV6_ADDR_UNICAST)) {
                       struct rt6_info *grt;

                       /* IPv6 strictly inhibits using not link-local
                          addresses as nexthop address.
                          Otherwise, router will not able to send redirects.
                          It is very good, but in some (rare!) curcumstances
                          (SIT, PtP, NBMA NOARP links) it is handy to allow
                          some exceptions. --ANK
                        */
                       err = -EINVAL;
                       if (!(gwa_type&IPV6_ADDR_UNICAST))
                               goto out;

Looks like it would bail out here, unless I read the code wrong. How about:

                       if (!(gwa_type&(IPV6_ADDR_UNICAST|IPV6_ADDR_ANYCAST)))
                               goto out;

        MikaL

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/







<Prev in Thread] Current Thread [Next in Thread>