diff options
Diffstat (limited to 'drivers/net/tun.c')
| -rw-r--r-- | drivers/net/tun.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 259b2b84b2b3..db736b944016 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -2828,7 +2828,10 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)  		rcu_assign_pointer(tfile->tun, tun);  	} -	netif_carrier_on(tun->dev); +	if (ifr->ifr_flags & IFF_NO_CARRIER) +		netif_carrier_off(tun->dev); +	else +		netif_carrier_on(tun->dev);  	/* Make sure persistent devices do not get stuck in  	 * xoff state. @@ -3056,8 +3059,8 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,  		 * This is needed because we never checked for invalid flags on  		 * TUNSETIFF.  		 */ -		return put_user(IFF_TUN | IFF_TAP | TUN_FEATURES, -				(unsigned int __user*)argp); +		return put_user(IFF_TUN | IFF_TAP | IFF_NO_CARRIER | +				TUN_FEATURES, (unsigned int __user*)argp);  	} else if (cmd == TUNSETQUEUE) {  		return tun_set_queue(file, &ifr);  	} else if (cmd == SIOCGSKNS) {  | 
