Commit 20d29d7a authored by Arnd Bergmann's avatar Arnd Bergmann Committed by David S. Miller

net: macvtap driver

In order to use macvlan with qemu and other tools that require
a tap file descriptor, the macvtap driver adds a small backend
with a character device with the same interface as the tun
driver, with a minimum set of features.

Macvtap interfaces are created in the same way as macvlan
interfaces using ip link, but the netif is just used as a
handle for configuration and accounting, while the data
goes through the chardev. Each macvtap interface has its
own character device, simplifying permission management
significantly over the generic tun/tap driver.

Cc: Patrick McHardy <kaber@trash.net>
Cc: Stephen Hemminger <shemminger@linux-foundation.org>
Cc: David S. Miller" <davem@davemloft.net>
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Or Gerlitz <ogerlitz@voltaire.com>
Cc: netdev@vger.kernel.org
Cc: bridge@lists.linux-foundation.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent fc0663d6
...@@ -90,6 +90,18 @@ config MACVLAN ...@@ -90,6 +90,18 @@ config MACVLAN
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
will be called macvlan. will be called macvlan.
config MACVTAP
tristate "MAC-VLAN based tap driver (EXPERIMENTAL)"
depends on MACVLAN
help
This adds a specialized tap character device driver that is based
on the MAC-VLAN network interface, called macvtap. A macvtap device
can be added in the same way as a macvlan device, using 'type
macvlan', and then be accessed through the tap user space interface.
To compile this driver as a module, choose M here: the module
will be called macvtap.
config EQUALIZER config EQUALIZER
tristate "EQL (serial line load balancing) support" tristate "EQL (serial line load balancing) support"
---help--- ---help---
......
...@@ -169,6 +169,7 @@ obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o ...@@ -169,6 +169,7 @@ obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o
obj-$(CONFIG_DUMMY) += dummy.o obj-$(CONFIG_DUMMY) += dummy.o
obj-$(CONFIG_IFB) += ifb.o obj-$(CONFIG_IFB) += ifb.o
obj-$(CONFIG_MACVLAN) += macvlan.o obj-$(CONFIG_MACVLAN) += macvlan.o
obj-$(CONFIG_MACVTAP) += macvtap.o
obj-$(CONFIG_DE600) += de600.o obj-$(CONFIG_DE600) += de600.o
obj-$(CONFIG_DE620) += de620.o obj-$(CONFIG_DE620) += de620.o
obj-$(CONFIG_LANCE) += lance.o obj-$(CONFIG_LANCE) += lance.o
......
This diff is collapsed.
...@@ -34,6 +34,7 @@ struct macvlan_dev { ...@@ -34,6 +34,7 @@ struct macvlan_dev {
enum macvlan_mode mode; enum macvlan_mode mode;
int (*receive)(struct sk_buff *skb); int (*receive)(struct sk_buff *skb);
int (*forward)(struct net_device *dev, struct sk_buff *skb); int (*forward)(struct net_device *dev, struct sk_buff *skb);
struct macvtap_queue *tap;
}; };
static inline void macvlan_count_rx(const struct macvlan_dev *vlan, static inline void macvlan_count_rx(const struct macvlan_dev *vlan,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment