diff -u -r linux/Documentation/Configure.help linux-tun/Documentation/Configure.help
--- linux/Documentation/Configure.help	Fri Nov  5 21:18:19 1999
+++ linux-tun/Documentation/Configure.help	Fri Nov  5 21:12:07 1999
@@ -5142,25 +5142,24 @@
   module, say M here and read Documentation/modules.txt. If unsure,
   say N.
 
-Ethertap network tap
-CONFIG_ETHERTAP
-  If you say Y here (and have said Y to "Kernel/User network link
-  driver", above) and create a character special file /dev/tap0 with
-  major number 36 and minor number 16 using mknod ("man mknod"), you
-  will be able to have a user space program read and write raw
-  Ethernet frames from/to that special file. tap0 can be configured
-  with ifconfig and route like any other Ethernet device but it is not
-  connected to any physical LAN; everything written by the user to
-  /dev/tap0 is treated by the kernel as if it had come in from a LAN
-  to the device tap0; everything the kernel wants to send out over the
-  device tap0 can instead be read by the user from /dev/tap0: the user
-  mode program replaces the LAN that would be attached to an ordinary
-  Ethernet device. Please read the file
-  Documentation/networking/ethertap.txt for more information. 
+Universal TUN/TAP driver
+CONFIG_TUN
+  If you say Y here and create a character special files /dev/tun0 
+  with major 90 and minor 0 and /dev/tap0 with major 90 and minor 128 
+  using mknod ("man mknod"), you will be able to have a user space program 
+  read and write raw IP or Ethernet frames from/to that special file. 
+  tun0 and tap0 can be configured with ifconfig and route like any other 
+  network devices but they are not connected to any physical media;
+  everything written by the user to /dev/tun0 and /dev/tap0 is treated by 
+  the kernel as if it had come in from a physical interface to the device 
+  tun0 or tap0; everything the kernel wants to send out over the
+  device tun0 or tap0 can instead be read by the user from /dev/tun0 and 
+  /dev/tap0. Please read the file Documentation/networking/tun.txt for
+  more information. 
 
   This driver is also available as a module ( = code which can be
   inserted in and removed from the running kernel whenever you want).
-  The module will be called ethertap.o. If you want to compile it as a
+  The module will be called tun.o If you want to compile it as a
   module, say M here and read Documentation/modules.txt. If you don't
   know what to use this for, you don't need it.
 
Only in linux/Documentation/networking: ethertap.txt
Only in linux-tun/Documentation/networking: tun.txt
diff -u -r linux/drivers/net/Config.in linux-tun/drivers/net/Config.in
--- linux/drivers/net/Config.in	Fri Nov  5 21:18:23 1999
+++ linux-tun/drivers/net/Config.in	Fri Nov  5 21:14:38 1999
@@ -19,11 +19,6 @@
 
 tristate 'Dummy net driver support' CONFIG_DUMMY
 tristate 'EQL (serial line load balancing) support' CONFIG_EQUALIZER
-if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-  if [ "$CONFIG_NETLINK" = "y" ]; then
-     tristate 'Ethertap network tap' CONFIG_ETHERTAP
-  fi
-fi
 
 tristate 'General Instruments Surfboard 1000' CONFIG_NET_SB1000
 
@@ -300,3 +295,8 @@
 fi
 fi
 tristate 'SBNI12-xx support' CONFIG_SBNI
+
+#
+# TUN/TAP device
+#
+tristate 'Universal TUN/TAP device driver' CONFIG_TUN
diff -u -r linux/drivers/net/Makefile linux-tun/drivers/net/Makefile
--- linux/drivers/net/Makefile	Fri Nov  5 21:18:23 1999
+++ linux-tun/drivers/net/Makefile	Fri Nov  5 21:12:07 1999
@@ -83,14 +83,6 @@
   endif
 endif
 
-ifeq ($(CONFIG_ETHERTAP),y)
-L_OBJS += ethertap.o
-else
-  ifeq ($(CONFIG_ETHERTAP),m)
-  M_OBJS += ethertap.o
-  endif
-endif
-
 ifeq ($(CONFIG_NET_SB1000),y)
 L_OBJS += sb1000.o
 else
@@ -114,7 +106,6 @@
   endif
 endif
 
-
 ifeq ($(CONFIG_SHAPER),y)
 L_OBJS += shaper.o
 else
@@ -1153,6 +1144,14 @@
 else
   ifeq ($(CONFIG_NET_FC),m)
   MOD_IN_SUB_DIRS += fc
+  endif
+endif
+
+ifeq ($(CONFIG_TUN),y)
+L_OBJS += tun.o
+else
+  ifeq ($(CONFIG_TUN),m)
+  M_OBJS += tun.o
   endif
 endif
 
diff -u -r linux/drivers/net/Space.c linux-tun/drivers/net/Space.c
--- linux/drivers/net/Space.c	Fri Nov  5 21:18:23 1999
+++ linux-tun/drivers/net/Space.c	Fri Nov  5 21:12:07 1999
@@ -104,7 +104,6 @@
 extern int mace_probe(struct device *);
 extern int bmac_probe(struct device *);
 extern int cs89x0_probe(struct device *dev);
-extern int ethertap_probe(struct device *dev);
 extern int ether1_probe (struct device *dev);
 extern int ether3_probe (struct device *dev);
 extern int etherh_probe (struct device *dev);
@@ -607,13 +606,6 @@
 }
 #endif  /* CONFIG_NET_FC */
 
-
-#ifdef CONFIG_ETHERTAP
-    static struct device tap0_dev = { "tap0", 0, 0, 0, 0, NETLINK_TAPBASE, 0, 0, 0, 0, NEXT_DEV, ethertap_probe, };
-#   undef NEXT_DEV
-#   define NEXT_DEV	(&tap0_dev)
-#endif
-
 #ifdef CONFIG_SDLA
     extern int sdla_init(struct device *);
     static struct device sdla0_dev = { "sdla0", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, sdla_init, };
@@ -897,7 +889,15 @@
 #   undef       NEXT_DEV
 #   define      NEXT_DEV        (&sb1000_dev)
 #endif
-	
+
+#ifdef CONFIG_TUN
+    extern int tun_init(struct device *dev);
+    static struct device tun_dev = {
+        "tun", 0, 0, 0, 0, 0, 0, 0, 0, 0, NEXT_DEV, tun_init };
+#   undef       NEXT_DEV
+#   define      NEXT_DEV        (&tun_dev)
+#endif
+
 extern int loopback_init(struct device *dev);
 struct device loopback_dev = {
 	"lo",			/* Software Loopback interface		*/
Only in linux/drivers/net: ethertap.c
Only in linux-tun/drivers/net: tun.c
Only in linux-tun/include/linux: if_tun.h
diff -u -r linux/include/linux/major.h linux-tun/include/linux/major.h
--- linux/include/linux/major.h	Mon Oct  4 22:32:27 1999
+++ linux-tun/include/linux/major.h	Fri Nov  5 21:12:07 1999
@@ -109,6 +109,12 @@
 
 #define AURORA_MAJOR 79
 
+/*
+ * TUN/TAP device
+ */
+
+#define TUN_MAJOR 90
+
 #define UNIX98_PTY_MASTER_MAJOR	128
 #define UNIX98_PTY_MAJOR_COUNT	8
 #define UNIX98_PTY_SLAVE_MAJOR	(UNIX98_PTY_MASTER_MAJOR+UNIX98_PTY_MAJOR_COUNT)
diff -u -r linux/include/linux/netlink.h linux-tun/include/linux/netlink.h
--- linux/include/linux/netlink.h	Thu Aug 27 22:33:08 1998
+++ linux-tun/include/linux/netlink.h	Fri Nov  5 21:12:07 1999
@@ -8,7 +8,6 @@
 #define NETLINK_ARPD		8
 #define NETLINK_ROUTE6		11	/* af_inet6 route comm channel */
 #define NETLINK_IP6_FW		13
-#define NETLINK_TAPBASE		16	/* 16 to 31 are ethertap */
 
 #define MAX_LINKS 32		
 
diff -u -r linux/net/Config.in linux-tun/net/Config.in
--- linux/net/Config.in	Thu Feb 25 13:46:47 1999
+++ linux-tun/net/Config.in	Fri Nov  5 21:12:07 1999
@@ -7,7 +7,6 @@
 bool 'Kernel/User netlink socket' CONFIG_NETLINK
 if [ "$CONFIG_NETLINK" = "y" ]; then
   bool 'Routing messages' CONFIG_RTNETLINK
-  tristate 'Netlink device emulation' CONFIG_NETLINK_DEV
 fi
 bool 'Network firewalls' CONFIG_FIREWALL
 bool 'Socket Filtering'  CONFIG_FILTER
diff -u -r linux/net/netlink/Makefile linux-tun/net/netlink/Makefile
--- linux/net/netlink/Makefile	Sun Nov 30 17:00:40 1997
+++ linux-tun/net/netlink/Makefile	Fri Nov  5 21:12:07 1999
@@ -15,12 +15,4 @@
 
 M_OBJS :=
 
-ifeq ($(CONFIG_NETLINK_DEV), y)
-  O_OBJS += netlink_dev.o
-endif
-
-ifeq ($(CONFIG_NETLINK_DEV), m)
-  M_OBJS += netlink_dev.o
-endif
-
 include $(TOPDIR)/Rules.make
Only in linux/net/netlink: netlink_dev.c
