tech-net archive

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

Re: point2point network interfaces cannot receive ipv6 packets



Hi

Sorry for the late response, been busy on the Spanish beaches!

On Fri, 2015-04-10 at 17:27 +0100, Robert Swindells wrote: 
> Kengo NAKAHARA <k-nakahara%iij.ad.jp@localhost> wrote:
> >On 2015/04/03 16:14, Takahiro HAYASHI wrote:
> >> It seems that IFF_POINTTOPOINT interfaces like tun and gif cannot
> >> receive ipv6 packets.
> >> This occurs on NetBSD/amd64 -current since Feb 27 2015.
> >> 
> >> For example, establishing gif tunnnel between 2 hosts.
> >> 
> >> [host1] <---> [host2]
> >> 192.168.0.1   192.168.0.2  ipv4 address of real interface
> >> fd00::1       fd00::2      gif address
> >> 
> >> When I ping6, a host can send ICMPv6 ECHO(128), but the other host
> >> returns ICMPv6 DST_UNREACH(1) code UNREACH_ADDR(3) to pinging host.
> >
> >I think the reason of this issue is below commit:
> >    http://www.nerv.org/netbsd/?q=id:20150226T095446Z.75354d997222ae09acc944ba1c6cf573c3ea724b
> 
> The following patch helps for me. It results in the RTF_LLINFO flag getting
> set for the route for the interface.
> 
> The comment looks to be incorrect in any case.
> 
> Robert Swindells
> 
> Index: in6.c
> ===================================================================
> RCS file: /cvsroot/src/sys/netinet6/in6.c,v
> retrieving revision 1.186
> diff -u -r1.186 in6.c
> --- in6.c       7 Apr 2015 23:30:36 -0000       1.186
> +++ in6.c       10 Apr 2015 16:10:31 -0000
> @@ -1695,7 +1695,7 @@
>         /* Add ownaddr as loopback rtentry, if necessary (ex. on p2p link). */
>         if (newhost) {
>                 /* set the rtrequest function to create llinfo */
> -               if ((ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT)) == 0)
> +               if ((ifp->if_flags & IFF_LOOPBACK) == 0)
>                         ia->ia_ifa.ifa_rtrequest = nd6_rtrequest;
>                 in6_ifaddlocal(&ia->ia_ifa);
>         } else {
> 

This fixes the problem where you can now ping the fd00::2 address on
gif2, but it still lacks the same gateway as in the original netstat
output. A similar patch to sys/net/route.c is needed.

Index: net/route.c
===================================================================
RCS file: /cvsroot/src/sys/net/route.c,v
retrieving revision 1.142
diff -u -r1.142 route.c
--- net/route.c 7 Apr 2015 04:36:19 -0000 1.142
+++ net/route.c 10 Apr 2015 21:23:09 -0000
@@ -1040,7 +1040,7 @@
}

flags = RTF_UP | RTF_HOST | RTF_LOCAL;
- if (!(ifa->ifa_ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT)))
+ if (!(ifa->ifa_ifp->if_flags & IFF_LOOPBACK))
flags |= RTF_LLINFO;
e = rtrequest(cmd, ifa->ifa_addr, ifa->ifa_addr, all1_sa, flags, &nrt);


However, I cannot seem to fix the IPv4 case described in the PR.
More investigation needed there.

Roy



Home | Main Index | Thread Index | Old Index