Re http://permalink.gmane.org/gmane.os.openbsd.misc/185629 To set IPv6 tunnel endpoints for gif/gre, you have to use syntax like "ifconfig gif0 inet6 tunnel 1::1 2::2" rather than just "ifconfig gif0 tunnel 1::1 2::2".
This is because settunnel provides an af hint to getaddrinfo, so it only considers addresses of a specified family. The code already checks that the families match, so the hint seems to be pointless. How about this diff? Works as expected in my tests with v4 and v6. Index: ifconfig.c =================================================================== RCS file: /cvs/src/sbin/ifconfig/ifconfig.c,v retrieving revision 1.246 diff -u -p -u -7 -r1.246 ifconfig.c --- ifconfig.c 23 Mar 2011 18:36:41 -0000 1.246 +++ ifconfig.c 16 May 2011 10:53:39 -0000 @@ -3151,27 +3151,23 @@ in6_status(int force) } #endif /*INET6*/ #ifndef SMALL void settunnel(const char *src, const char *dst) { - struct addrinfo hints, *srcres, *dstres; + struct addrinfo *srcres, *dstres; int ecode; struct if_laddrreq req; - memset(&hints, 0, sizeof(hints)); - hints.ai_family = afp->af_af; - hints.ai_socktype = SOCK_DGRAM; /*dummy*/ - - if ((ecode = getaddrinfo(src, NULL, &hints, &srcres)) != 0) + if ((ecode = getaddrinfo(src, NULL, NULL, &srcres)) != 0) errx(1, "error in parsing address string: %s", gai_strerror(ecode)); - if ((ecode = getaddrinfo(dst, NULL, &hints, &dstres)) != 0) + if ((ecode = getaddrinfo(dst, NULL, NULL, &dstres)) != 0) errx(1, "error in parsing address string: %s", gai_strerror(ecode)); if (srcres->ai_addr->sa_family != dstres->ai_addr->sa_family) errx(1, "source and destination address families do not match");