Subject: Re: [PATCH net] tap: Mark devices of type "tun" as IFF_DONT_BRIDGE

From: Stephen Hemminger <[email-masked]>
Date: Wed, 4 Jun 2014 11:54:48 -0700

On Wed,  4 Jun 2014 14:06:08 -0400
Vlad Yasevich <[email-masked]> wrote:

> Tun devices are layer 3 devices and do not work correctly
> when bridged.  Mark then as IFF_DONT_BRIDGE so that people
> trying to bridge will get an error.
> 
> Signed-off-by: Vlad Yasevich <[email-masked]>
> ---
>  drivers/net/tun.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/net/tun.c b/drivers/net/tun.c
> index ee328ba..0161aa3 100644
> --- a/drivers/net/tun.c
> +++ b/drivers/net/tun.c
> @@ -931,6 +931,7 @@ static void tun_net_init(struct net_device *dev)
>  		/* Zero header length */
>  		dev->type = ARPHRD_NONE;
>  		dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
> +		dev->priv_flags |= IFF_DONT_BRIDGE;
>  		dev->tx_queue_len = TUN_READQ_SIZE;  /* We prefer our own queue length */
>  		break;
>  

This should not be necessary since bridge already checks for non-ethernet
devices.

	/* Don't allow bridging non-ethernet like devices */
	if ((dev->flags & IFF_LOOPBACK) ||
	    dev->type != ARPHRD_ETHER || dev->addr_len != ETH_ALEN ||
	    !is_valid_ether_addr(dev->dev_addr))
		return -EINVAL;