Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tap: tap as an independent module

This patch makes tap a separate module for other types of virtual interfaces, for example,
ipvlan to use.

Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Sainath Grandhi and committed by
David S. Miller
9a393b5d d9f1f61c

+22 -5
+7
drivers/net/Kconfig
··· 135 135 tristate "MAC-VLAN based tap driver" 136 136 depends on MACVLAN 137 137 depends on INET 138 + select TAP 138 139 help 139 140 This adds a specialized tap character device driver that is based 140 141 on the MAC-VLAN network interface, called macvtap. A macvtap device ··· 287 286 will be called tun. 288 287 289 288 If you don't know what to use this for, you don't need it. 289 + 290 + config TAP 291 + tristate 292 + ---help--- 293 + This option is selected by any driver implementing tap user space 294 + interface for a virtual interface to re-use core tap functionality. 290 295 291 296 config TUN_VNET_CROSS_LE 292 297 bool "Support for cross-endian vnet headers on little-endian kernels"
+1 -2
drivers/net/Makefile
··· 21 21 obj-$(CONFIG_RIONET) += rionet.o 22 22 obj-$(CONFIG_NET_TEAM) += team/ 23 23 obj-$(CONFIG_TUN) += tun.o 24 + obj-$(CONFIG_TAP) += tap.o 24 25 obj-$(CONFIG_VETH) += veth.o 25 26 obj-$(CONFIG_VIRTIO_NET) += virtio_net.o 26 27 obj-$(CONFIG_VXLAN) += vxlan.o ··· 29 28 obj-$(CONFIG_GTP) += gtp.o 30 29 obj-$(CONFIG_NLMON) += nlmon.o 31 30 obj-$(CONFIG_NET_VRF) += vrf.o 32 - 33 - macvtap-objs := macvtap_main.o tap.o 34 31 35 32 # 36 33 # Networking Drivers
drivers/net/macvtap_main.c drivers/net/macvtap.c
+11
drivers/net/tap.c
··· 312 312 /* guarantee that any future tap_set_queue will fail */ 313 313 tap->numvtaps = MAX_TAP_QUEUES; 314 314 } 315 + EXPORT_SYMBOL_GPL(tap_del_queues); 315 316 316 317 rx_handler_result_t tap_handle_frame(struct sk_buff **pskb) 317 318 { ··· 390 389 kfree_skb(skb); 391 390 return RX_HANDLER_CONSUMED; 392 391 } 392 + EXPORT_SYMBOL_GPL(tap_handle_frame); 393 393 394 394 static struct major_info *tap_get_major(int major) 395 395 { ··· 430 428 rcu_read_unlock(); 431 429 return retval < 0 ? retval : 0; 432 430 } 431 + EXPORT_SYMBOL_GPL(tap_get_minor); 433 432 434 433 void tap_free_minor(dev_t major, struct tap_dev *tap) 435 434 { ··· 452 449 unlock: 453 450 rcu_read_unlock(); 454 451 } 452 + EXPORT_SYMBOL_GPL(tap_free_minor); 455 453 456 454 static struct tap_dev *dev_get_by_tap_file(int major, int minor) 457 455 { ··· 1214 1210 kfree(arrays); 1215 1211 return ret; 1216 1212 } 1213 + EXPORT_SYMBOL_GPL(tap_queue_resize); 1217 1214 1218 1215 static int tap_list_add(dev_t major, const char *device_name) 1219 1216 { ··· 1262 1257 out1: 1263 1258 return err; 1264 1259 } 1260 + EXPORT_SYMBOL_GPL(tap_create_cdev); 1265 1261 1266 1262 void tap_destroy_cdev(dev_t major, struct cdev *tap_cdev) 1267 1263 { ··· 1278 1272 } 1279 1273 } 1280 1274 } 1275 + EXPORT_SYMBOL_GPL(tap_destroy_cdev); 1276 + 1277 + MODULE_AUTHOR("Arnd Bergmann <arnd@arndb.de>"); 1278 + MODULE_AUTHOR("Sainath Grandhi <sainath.grandhi@intel.com>"); 1279 + MODULE_LICENSE("GPL");
+1 -1
drivers/vhost/Kconfig
··· 1 1 config VHOST_NET 2 2 tristate "Host kernel accelerator for virtio net" 3 - depends on NET && EVENTFD && (TUN || !TUN) && (MACVTAP || !MACVTAP) 3 + depends on NET && EVENTFD && (TUN || !TUN) && (TAP || !TAP) 4 4 select VHOST 5 5 ---help--- 6 6 This kernel module can be loaded in host kernel to accelerate
+2 -2
include/linux/if_tap.h
··· 1 1 #ifndef _LINUX_IF_TAP_H_ 2 2 #define _LINUX_IF_TAP_H_ 3 3 4 - #if IS_ENABLED(CONFIG_MACVTAP) 4 + #if IS_ENABLED(CONFIG_TAP) 5 5 struct socket *tap_get_socket(struct file *); 6 6 #else 7 7 #include <linux/err.h> ··· 12 12 { 13 13 return ERR_PTR(-EINVAL); 14 14 } 15 - #endif /* CONFIG_MACVTAP */ 15 + #endif /* CONFIG_TAP */ 16 16 17 17 #include <net/sock.h> 18 18 #include <linux/skb_array.h>