Subject: Re: pkg/32929: net/openvpn fails to work with tap device
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Johnny C. Lam <jlam@pkgsrc.org>
List: pkgsrc-bugs
Date: 04/10/2006 04:30:03
The following reply was made to PR pkg/32929; it has been noted by GNATS.

From: "Johnny C. Lam" <jlam@pkgsrc.org>
To: apb@cequrux.com
Cc: gnats-bugs@netbsd.org
Subject: Re: pkg/32929: net/openvpn fails to work with tap device
Date: Mon, 10 Apr 2006 04:26:38 +0000

 --SUOF0GtieIMvvwua
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: inline
 
 On Sat, Feb 25, 2006 at 04:25:01PM +0000, Alan Barrett wrote:
 > >Description:
 > 	The net/openvpn package needs to be patched to support
 > 	NetBSD's cloning tap device.
 > >How-To-Repeat:
 > 	install openvpn-2.05.
 > 	Configure it with "dev tap".
 > 	Watch it fail.
 > >Fix:
 > 	Apply appended patch.  Also bump PKGREVISION.
 
 I've applied your patch to openvpn-2.0.6, which is the current version
 of OpenVPN in pkgsrc, and I've verified that it does compile.  Could you
 verify that it still works?  For simplicity, I've attached a patch with
 the complete set of changes to the package.
 
 	Thanks,
 
 	-- Johnny Lam <jlam@pkgsrc.org>
 
 --SUOF0GtieIMvvwua
 Content-Type: text/plain; charset=us-ascii
 Content-Disposition: attachment; filename="openvpn.diff"
 
 Index: Makefile
 ===================================================================
 RCS file: /cvsroot/pkgsrc/net/openvpn/Makefile,v
 retrieving revision 1.16
 diff -u -r1.16 Makefile
 --- Makefile	5 Apr 2006 13:49:26 -0000	1.16
 +++ Makefile	10 Apr 2006 04:21:32 -0000
 @@ -2,6 +2,7 @@
  #
  
  DISTNAME=	openvpn-2.0.6
 +PKGREVISION=	1
  CATEGORIES=	net
  MASTER_SITES=	http://openvpn.net/release/ \
  		http://openvpn.net/release/old/
 Index: distinfo
 ===================================================================
 RCS file: /cvsroot/pkgsrc/net/openvpn/distinfo,v
 retrieving revision 1.7
 diff -u -r1.7 distinfo
 --- distinfo	5 Apr 2006 13:49:26 -0000	1.7
 +++ distinfo	10 Apr 2006 04:21:32 -0000
 @@ -3,3 +3,8 @@
  SHA1 (openvpn-2.0.6.tar.gz) = 046f3811831a06e4fbc9c64544faaecf04547ae5
  RMD160 (openvpn-2.0.6.tar.gz) = cf3cd807bb657baf317e896b57900958cf442a63
  Size (openvpn-2.0.6.tar.gz) = 664816 bytes
 +SHA1 (patch-ab) = 05c9df0a7a71cb1cfa4a2f132df02cac822ba3ba
 +SHA1 (patch-ac) = 7a225a0b88dcf0039cd40f72a10564c72f41b2f1
 +SHA1 (patch-ad) = ee577ad5c5621bbfa05d522e85e467e937929f6e
 +SHA1 (patch-ae) = b6f8f869b5c727120df8dd433e54ffe3537e0006
 +SHA1 (patch-af) = ae697790e648c4d351c8c99e21ff79a56c572ddf
 Index: patches/patch-ab
 ===================================================================
 RCS file: patches/patch-ab
 diff -N patches/patch-ab
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ patches/patch-ab	10 Apr 2006 04:21:32 -0000
 @@ -0,0 +1,15 @@
 +$NetBSD$
 +
 +--- syshead.h.orig	2005-12-08 15:57:49.000000000 -0500
 ++++ syshead.h
 +@@ -254,6 +254,10 @@
 + 
 + #ifdef TARGET_NETBSD
 + 
 ++#ifdef HAVE_NET_IF_TAP_H
 ++#include <net/if_tap.h>
 ++#endif
 ++
 + #ifdef HAVE_NET_IF_TUN_H
 + #include <net/if_tun.h>
 + #endif
 Index: patches/patch-ac
 ===================================================================
 RCS file: patches/patch-ac
 diff -N patches/patch-ac
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ patches/patch-ac	10 Apr 2006 04:21:32 -0000
 @@ -0,0 +1,43 @@
 +$NetBSD$
 +
 +--- tun.c.orig	2006-04-05 02:29:24.000000000 -0400
 ++++ tun.c
 +@@ -877,7 +877,37 @@ open_tun_generic (const char *dev, const
 + 	  if (dynamic && !has_digit(dev))
 + 	    {
 + 	      int i;
 +-	      for (i = 0; i < 256; ++i)
 ++#if defined(TAPGIFNAME)
 ++	      /*
 ++	       * Perhaps we have a cloning device.  Try opening
 ++	       * the device without any appended digits,
 ++	       * and use ioctl(,TAPGIFNAME,) to get the resulting
 ++	       * interface name.
 ++	       */
 ++	      openvpn_snprintf (tunname, sizeof (tunname), "/dev/%s", dev);
 ++	      if ((tt->fd = open (tunname, O_RDWR)) > 0)
 ++		{
 ++		  struct ifreq ifr;
 ++		  if (ioctl (tt->fd, TAPGIFNAME, (void*)&ifr) < 0)
 ++		    {
 ++		      msg (D_READ_WRITE | M_ERRNO,
 ++			   "ioctl(,TAPGIFNAME,) failed for %s", tunname);
 ++		      close(tt->fd);
 ++		    }
 ++		  else
 ++		    {
 ++		      strlcpy (dynamic_name, ifr.ifr_name,
 ++			       sizeof (dynamic_name));
 ++		      dynamic_opened = true;
 ++		      msg (M_INFO, "TUN/TAP dynamic interface %s opened",
 ++			   dynamic_name);
 ++		    }
 ++		}
 ++	      if (!dynamic_opened)
 ++		msg (D_READ_WRITE | M_ERRNO, "Tried opening %s (failed)",
 ++		     tunname);
 ++#endif /* TAPGIFNAME */
 ++	      for (i = 0; i < 256 && !dynamic_opened; ++i)
 + 		{
 + 		  openvpn_snprintf (tunname, sizeof (tunname),
 + 				    "/dev/%s%d", dev, i);
 Index: patches/patch-ad
 ===================================================================
 RCS file: patches/patch-ad
 diff -N patches/patch-ad
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ patches/patch-ad	10 Apr 2006 04:21:32 -0000
 @@ -0,0 +1,14 @@
 +$NetBSD$
 +
 +--- config.h.in.orig	2006-04-05 04:03:07.000000000 -0400
 ++++ config.h.in
 +@@ -201,6 +201,9 @@
 + /* Define to 1 if you have the <net/if.h> header file. */
 + #undef HAVE_NET_IF_H
 + 
 ++/* Define to 1 if you have the <net/if_tap.h> header file. */
 ++#undef HAVE_NET_IF_TAP_H
 ++
 + /* Define to 1 if you have the <net/if_tun.h> header file. */
 + #undef HAVE_NET_IF_TUN_H
 + 
 Index: patches/patch-ae
 ===================================================================
 RCS file: patches/patch-ae
 diff -N patches/patch-ae
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ patches/patch-ae	10 Apr 2006 04:21:32 -0000
 @@ -0,0 +1,13 @@
 +$NetBSD$
 +
 +--- configure.ac.orig	2006-04-05 04:02:59.000000000 -0400
 ++++ configure.ac
 +@@ -266,7 +266,7 @@ AC_CHECK_HEADERS(sys/time.h sys/socket.h
 + 		 sys/mman.h fcntl.h sys/file.h stdlib.h stdint.h dnl
 + 		 stdarg.h unistd.h signal.h stdio.h string.h dnl
 + 		 strings.h ctype.h errno.h syslog.h pwd.h grp.h dnl
 +-		 net/if_tun.h net/if.h stropts.h sys/sockio.h dnl
 ++		 net/if_tap.h net/if_tun.h net/if.h stropts.h sys/sockio.h dnl
 + 		 netinet/in.h netinet/in_systm.h netinet/ip.h dnl
 + 		 netinet/if_ether.h netinet/tcp.h resolv.h arpa/inet.h dnl
 + 		 netdb.h sys/uio.h linux/if_tun.h linux/sockios.h dnl
 Index: patches/patch-af
 ===================================================================
 RCS file: patches/patch-af
 diff -N patches/patch-af
 --- /dev/null	1 Jan 1970 00:00:00 -0000
 +++ patches/patch-af	10 Apr 2006 04:21:32 -0000
 @@ -0,0 +1,13 @@
 +$NetBSD$
 +
 +--- configure.orig	2006-04-05 04:03:06.000000000 -0400
 ++++ configure
 +@@ -4881,7 +4881,7 @@ fi
 + 
 + 
 + 
 +-for ac_header in sys/time.h sys/socket.h sys/ioctl.h sys/stat.h 		 sys/mman.h fcntl.h sys/file.h stdlib.h stdint.h 		 stdarg.h unistd.h signal.h stdio.h string.h 		 strings.h ctype.h errno.h syslog.h pwd.h grp.h 		 net/if_tun.h net/if.h stropts.h sys/sockio.h 		 netinet/in.h netinet/in_systm.h netinet/ip.h 		 netinet/if_ether.h netinet/tcp.h resolv.h arpa/inet.h 		 netdb.h sys/uio.h linux/if_tun.h linux/sockios.h 		 linux/types.h sys/poll.h sys/epoll.h
 ++for ac_header in sys/time.h sys/socket.h sys/ioctl.h sys/stat.h 		 sys/mman.h fcntl.h sys/file.h stdlib.h stdint.h 		 stdarg.h unistd.h signal.h stdio.h string.h 		 strings.h ctype.h errno.h syslog.h pwd.h grp.h 		 net/if_tap.h net/if_tun.h net/if.h stropts.h sys/sockio.h 		 netinet/in.h netinet/in_systm.h netinet/ip.h 		 netinet/if_ether.h netinet/tcp.h resolv.h arpa/inet.h 		 netdb.h sys/uio.h linux/if_tun.h linux/sockios.h 		 linux/types.h sys/poll.h sys/epoll.h
 + do
 + as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 + if eval "test \"\${$as_ac_Header+set}\" = set"; then
 
 --SUOF0GtieIMvvwua--