|
@@ -2564,6 +2564,9 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
|
|
|
*/
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+ tun->flags = (tun->flags & ~TUN_FEATURES) |
|
|
|
+ (ifr->ifr_flags & TUN_FEATURES);
|
|
|
}
|
|
|
else {
|
|
|
char *name;
|
|
@@ -2642,6 +2645,9 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
|
|
|
~(NETIF_F_HW_VLAN_CTAG_TX |
|
|
|
NETIF_F_HW_VLAN_STAG_TX);
|
|
|
|
|
|
+ tun->flags = (tun->flags & ~TUN_FEATURES) |
|
|
|
+ (ifr->ifr_flags & TUN_FEATURES);
|
|
|
+
|
|
|
INIT_LIST_HEAD(&tun->disabled);
|
|
|
err = tun_attach(tun, file, false, ifr->ifr_flags & IFF_NAPI);
|
|
|
if (err < 0)
|
|
@@ -2656,9 +2662,6 @@ static int tun_set_iff(struct net *net, struct file *file, struct ifreq *ifr)
|
|
|
|
|
|
tun_debug(KERN_INFO, tun, "tun_set_iff\n");
|
|
|
|
|
|
- tun->flags = (tun->flags & ~TUN_FEATURES) |
|
|
|
- (ifr->ifr_flags & TUN_FEATURES);
|
|
|
-
|
|
|
/* Make sure persistent devices do not get stuck in
|
|
|
* xoff state.
|
|
|
*/
|