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.
                 * 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) {
 
 #define IFF_TAP                0x0002
 #define IFF_NAPI       0x0010
 #define IFF_NAPI_FRAGS 0x0020
+/* Used in TUNSETIFF to bring up tun/tap without carrier */
+#define IFF_NO_CARRIER 0x0040
 #define IFF_NO_PI      0x1000
 /* This flag has no real effect */
 #define IFF_ONE_QUEUE  0x2000