Lines Matching refs:tun

83 #define tun_debug(level, tun, fmt, args...)			\  argument
85 if (tun->debug) \
86 netdev_printk(level, tun->dev, fmt, ##args); \
94 #define tun_debug(level, tun, fmt, args...) \ argument
97 netdev_printk(level, tun->dev, fmt, ##args); \
148 struct tun_struct __rcu *tun; member
164 struct tun_struct *tun; member
209 static inline u16 tun16_to_cpu(struct tun_struct *tun, __virtio16 val) in tun16_to_cpu() argument
211 return __virtio16_to_cpu(tun->flags & TUN_VNET_LE, val); in tun16_to_cpu()
214 static inline __virtio16 cpu_to_tun16(struct tun_struct *tun, u16 val) in cpu_to_tun16() argument
216 return __cpu_to_virtio16(tun->flags & TUN_VNET_LE, val); in cpu_to_tun16()
235 static struct tun_flow_entry *tun_flow_create(struct tun_struct *tun, in tun_flow_create() argument
242 tun_debug(KERN_INFO, tun, "create flow: hash %u index %u\n", in tun_flow_create()
248 e->tun = tun; in tun_flow_create()
250 ++tun->flow_count; in tun_flow_create()
255 static void tun_flow_delete(struct tun_struct *tun, struct tun_flow_entry *e) in tun_flow_delete() argument
257 tun_debug(KERN_INFO, tun, "delete flow: hash %u index %u\n", in tun_flow_delete()
261 --tun->flow_count; in tun_flow_delete()
264 static void tun_flow_flush(struct tun_struct *tun) in tun_flow_flush() argument
268 spin_lock_bh(&tun->lock); in tun_flow_flush()
273 hlist_for_each_entry_safe(e, n, &tun->flows[i], hash_link) in tun_flow_flush()
274 tun_flow_delete(tun, e); in tun_flow_flush()
276 spin_unlock_bh(&tun->lock); in tun_flow_flush()
279 static void tun_flow_delete_by_queue(struct tun_struct *tun, u16 queue_index) in tun_flow_delete_by_queue() argument
283 spin_lock_bh(&tun->lock); in tun_flow_delete_by_queue()
288 hlist_for_each_entry_safe(e, n, &tun->flows[i], hash_link) { in tun_flow_delete_by_queue()
290 tun_flow_delete(tun, e); in tun_flow_delete_by_queue()
293 spin_unlock_bh(&tun->lock); in tun_flow_delete_by_queue()
298 struct tun_struct *tun = (struct tun_struct *)data; in tun_flow_cleanup() local
299 unsigned long delay = tun->ageing_time; in tun_flow_cleanup()
304 tun_debug(KERN_INFO, tun, "tun_flow_cleanup\n"); in tun_flow_cleanup()
306 spin_lock_bh(&tun->lock); in tun_flow_cleanup()
311 hlist_for_each_entry_safe(e, n, &tun->flows[i], hash_link) { in tun_flow_cleanup()
316 tun_flow_delete(tun, e); in tun_flow_cleanup()
323 mod_timer(&tun->flow_gc_timer, round_jiffies_up(next_timer)); in tun_flow_cleanup()
324 spin_unlock_bh(&tun->lock); in tun_flow_cleanup()
327 static void tun_flow_update(struct tun_struct *tun, u32 rxhash, in tun_flow_update() argument
332 unsigned long delay = tun->ageing_time; in tun_flow_update()
338 head = &tun->flows[tun_hashfn(rxhash)]; in tun_flow_update()
344 if (tun->numqueues == 1 || tfile->detached) in tun_flow_update()
354 spin_lock_bh(&tun->lock); in tun_flow_update()
356 tun->flow_count < MAX_TAP_FLOWS) in tun_flow_update()
357 tun_flow_create(tun, head, rxhash, queue_index); in tun_flow_update()
359 if (!timer_pending(&tun->flow_gc_timer)) in tun_flow_update()
360 mod_timer(&tun->flow_gc_timer, in tun_flow_update()
362 spin_unlock_bh(&tun->lock); in tun_flow_update()
389 struct tun_struct *tun = netdev_priv(dev); in tun_select_queue() local
395 numqueues = ACCESS_ONCE(tun->numqueues); in tun_select_queue()
399 e = tun_flow_find(&tun->flows[tun_hashfn(txq)], txq); in tun_select_queue()
416 static inline bool tun_not_capable(struct tun_struct *tun) in tun_not_capable() argument
419 struct net *net = dev_net(tun->dev); in tun_not_capable()
421 return ((uid_valid(tun->owner) && !uid_eq(cred->euid, tun->owner)) || in tun_not_capable()
422 (gid_valid(tun->group) && !in_egroup_p(tun->group))) && in tun_not_capable()
426 static void tun_set_real_num_queues(struct tun_struct *tun) in tun_set_real_num_queues() argument
428 netif_set_real_num_tx_queues(tun->dev, tun->numqueues); in tun_set_real_num_queues()
429 netif_set_real_num_rx_queues(tun->dev, tun->numqueues); in tun_set_real_num_queues()
432 static void tun_disable_queue(struct tun_struct *tun, struct tun_file *tfile) in tun_disable_queue() argument
434 tfile->detached = tun; in tun_disable_queue()
435 list_add_tail(&tfile->next, &tun->disabled); in tun_disable_queue()
436 ++tun->numdisabled; in tun_disable_queue()
441 struct tun_struct *tun = tfile->detached; in tun_enable_queue() local
445 --tun->numdisabled; in tun_enable_queue()
446 return tun; in tun_enable_queue()
458 struct tun_struct *tun; in __tun_detach() local
460 tun = rtnl_dereference(tfile->tun); in __tun_detach()
462 if (tun && !tfile->detached) { in __tun_detach()
464 BUG_ON(index >= tun->numqueues); in __tun_detach()
466 rcu_assign_pointer(tun->tfiles[index], in __tun_detach()
467 tun->tfiles[tun->numqueues - 1]); in __tun_detach()
468 ntfile = rtnl_dereference(tun->tfiles[index]); in __tun_detach()
471 --tun->numqueues; in __tun_detach()
473 RCU_INIT_POINTER(tfile->tun, NULL); in __tun_detach()
476 tun_disable_queue(tun, tfile); in __tun_detach()
479 tun_flow_delete_by_queue(tun, tun->numqueues + 1); in __tun_detach()
482 tun_set_real_num_queues(tun); in __tun_detach()
484 tun = tun_enable_queue(tfile); in __tun_detach()
489 if (tun && tun->numqueues == 0 && tun->numdisabled == 0) { in __tun_detach()
490 netif_carrier_off(tun->dev); in __tun_detach()
492 if (!(tun->flags & IFF_PERSIST) && in __tun_detach()
493 tun->dev->reg_state == NETREG_REGISTERED) in __tun_detach()
494 unregister_netdevice(tun->dev); in __tun_detach()
512 struct tun_struct *tun = netdev_priv(dev); in tun_detach_all() local
514 int i, n = tun->numqueues; in tun_detach_all()
517 tfile = rtnl_dereference(tun->tfiles[i]); in tun_detach_all()
520 RCU_INIT_POINTER(tfile->tun, NULL); in tun_detach_all()
521 --tun->numqueues; in tun_detach_all()
523 list_for_each_entry(tfile, &tun->disabled, next) { in tun_detach_all()
525 RCU_INIT_POINTER(tfile->tun, NULL); in tun_detach_all()
527 BUG_ON(tun->numqueues != 0); in tun_detach_all()
531 tfile = rtnl_dereference(tun->tfiles[i]); in tun_detach_all()
536 list_for_each_entry_safe(tfile, tmp, &tun->disabled, next) { in tun_detach_all()
541 BUG_ON(tun->numdisabled != 0); in tun_detach_all()
543 if (tun->flags & IFF_PERSIST) in tun_detach_all()
547 static int tun_attach(struct tun_struct *tun, struct file *file, bool skip_filter) in tun_attach() argument
552 err = security_tun_dev_attach(tfile->socket.sk, tun->security); in tun_attach()
557 if (rtnl_dereference(tfile->tun) && !tfile->detached) in tun_attach()
561 if (!(tun->flags & IFF_MULTI_QUEUE) && tun->numqueues == 1) in tun_attach()
566 tun->numqueues + tun->numdisabled == MAX_TAP_QUEUES) in tun_attach()
572 if (!skip_filter && (tun->filter_attached == true)) { in tun_attach()
573 err = sk_attach_filter(&tun->fprog, tfile->socket.sk); in tun_attach()
577 tfile->queue_index = tun->numqueues; in tun_attach()
578 rcu_assign_pointer(tfile->tun, tun); in tun_attach()
579 rcu_assign_pointer(tun->tfiles[tun->numqueues], tfile); in tun_attach()
580 tun->numqueues++; in tun_attach()
587 tun_set_real_num_queues(tun); in tun_attach()
599 struct tun_struct *tun; in __tun_get() local
602 tun = rcu_dereference(tfile->tun); in __tun_get()
603 if (tun) in __tun_get()
604 dev_hold(tun->dev); in __tun_get()
607 return tun; in __tun_get()
615 static void tun_put(struct tun_struct *tun) in tun_put() argument
617 dev_put(tun->dev); in tun_put()
757 struct tun_struct *tun = netdev_priv(dev); in tun_net_xmit() local
763 tfile = rcu_dereference(tun->tfiles[txq]); in tun_net_xmit()
764 numqueues = ACCESS_ONCE(tun->numqueues); in tun_net_xmit()
779 e = tun_flow_find(&tun->flows[tun_hashfn(rxhash)], in tun_net_xmit()
786 tun_debug(KERN_INFO, tun, "tun_net_xmit %d\n", skb->len); in tun_net_xmit()
793 if (!check_filter(&tun->txflt, skb)) in tun_net_xmit()
865 struct tun_struct *tun = netdev_priv(dev); in tun_net_fix_features() local
867 return (features & tun->set_features) | (features & ~TUN_USER_FEATURES); in tun_net_fix_features()
915 static void tun_flow_init(struct tun_struct *tun) in tun_flow_init() argument
920 INIT_HLIST_HEAD(&tun->flows[i]); in tun_flow_init()
922 tun->ageing_time = TUN_FLOW_EXPIRE; in tun_flow_init()
923 setup_timer(&tun->flow_gc_timer, tun_flow_cleanup, (unsigned long)tun); in tun_flow_init()
924 mod_timer(&tun->flow_gc_timer, in tun_flow_init()
925 round_jiffies_up(jiffies + tun->ageing_time)); in tun_flow_init()
928 static void tun_flow_uninit(struct tun_struct *tun) in tun_flow_uninit() argument
930 del_timer_sync(&tun->flow_gc_timer); in tun_flow_uninit()
931 tun_flow_flush(tun); in tun_flow_uninit()
937 struct tun_struct *tun = netdev_priv(dev); in tun_net_init() local
939 switch (tun->flags & TUN_TYPE_MASK) { in tun_net_init()
974 struct tun_struct *tun = __tun_get(tfile); in tun_chr_poll() local
978 if (!tun) in tun_chr_poll()
983 tun_debug(KERN_INFO, tun, "tun_chr_poll\n"); in tun_chr_poll()
995 if (tun->dev->reg_state != NETREG_REGISTERED) in tun_chr_poll()
998 tun_put(tun); in tun_chr_poll()
1030 static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile, in tun_get_user() argument
1046 if (!(tun->flags & IFF_NO_PI)) { in tun_get_user()
1056 if (tun->flags & IFF_VNET_HDR) { in tun_get_user()
1057 if (len < tun->vnet_hdr_sz) in tun_get_user()
1059 len -= tun->vnet_hdr_sz; in tun_get_user()
1066 …tun16_to_cpu(tun, gso.csum_start) + tun16_to_cpu(tun, gso.csum_offset) + 2 > tun16_to_cpu(tun, gso… in tun_get_user()
1067 …gso.hdr_len = cpu_to_tun16(tun, tun16_to_cpu(tun, gso.csum_start) + tun16_to_cpu(tun, gso.csum_off… in tun_get_user()
1069 if (tun16_to_cpu(tun, gso.hdr_len) > len) in tun_get_user()
1071 iov_iter_advance(from, tun->vnet_hdr_sz - sizeof(gso)); in tun_get_user()
1074 if ((tun->flags & TUN_TYPE_MASK) == IFF_TAP) { in tun_get_user()
1077 (gso.hdr_len && tun16_to_cpu(tun, gso.hdr_len) < ETH_HLEN))) in tun_get_user()
1090 copylen = gso.hdr_len ? tun16_to_cpu(tun, gso.hdr_len) : GOODCOPY_LEN; in tun_get_user()
1101 if (tun16_to_cpu(tun, gso.hdr_len) > good_linear) in tun_get_user()
1104 linear = tun16_to_cpu(tun, gso.hdr_len); in tun_get_user()
1110 tun->dev->stats.rx_dropped++; in tun_get_user()
1125 tun->dev->stats.rx_dropped++; in tun_get_user()
1131 if (!skb_partial_csum_set(skb, tun16_to_cpu(tun, gso.csum_start), in tun_get_user()
1132 tun16_to_cpu(tun, gso.csum_offset))) { in tun_get_user()
1133 tun->dev->stats.rx_frame_errors++; in tun_get_user()
1139 switch (tun->flags & TUN_TYPE_MASK) { in tun_get_user()
1141 if (tun->flags & IFF_NO_PI) { in tun_get_user()
1150 tun->dev->stats.rx_dropped++; in tun_get_user()
1158 skb->dev = tun->dev; in tun_get_user()
1161 skb->protocol = eth_type_trans(skb, tun->dev); in tun_get_user()
1178 tun->dev->stats.rx_frame_errors++; in tun_get_user()
1186 skb_shinfo(skb)->gso_size = tun16_to_cpu(tun, gso.gso_size); in tun_get_user()
1188 tun->dev->stats.rx_frame_errors++; in tun_get_user()
1211 tun->dev->stats.rx_packets++; in tun_get_user()
1212 tun->dev->stats.rx_bytes += len; in tun_get_user()
1214 tun_flow_update(tun, rxhash, tfile); in tun_get_user()
1221 struct tun_struct *tun = tun_get(file); in tun_chr_write_iter() local
1225 if (!tun) in tun_chr_write_iter()
1228 result = tun_get_user(tun, tfile, NULL, from, file->f_flags & O_NONBLOCK); in tun_chr_write_iter()
1230 tun_put(tun); in tun_chr_write_iter()
1235 static ssize_t tun_put_user(struct tun_struct *tun, in tun_put_user() argument
1249 if (tun->flags & IFF_VNET_HDR) in tun_put_user()
1250 vnet_hdr_sz = tun->vnet_hdr_sz; in tun_put_user()
1254 if (!(tun->flags & IFF_NO_PI)) { in tun_put_user()
1277 gso.hdr_len = cpu_to_tun16(tun, skb_headlen(skb)); in tun_put_user()
1278 gso.gso_size = cpu_to_tun16(tun, sinfo->gso_size); in tun_put_user()
1288 sinfo->gso_type, tun16_to_cpu(tun, gso.gso_size), in tun_put_user()
1289 tun16_to_cpu(tun, gso.hdr_len)); in tun_put_user()
1293 min((int)tun16_to_cpu(tun, gso.hdr_len), 64), true); in tun_put_user()
1304 gso.csum_start = cpu_to_tun16(tun, skb_checksum_start_offset(skb) + in tun_put_user()
1306 gso.csum_offset = cpu_to_tun16(tun, skb->csum_offset); in tun_put_user()
1341 tun->dev->stats.tx_packets++; in tun_put_user()
1342 tun->dev->stats.tx_bytes += skb->len + vlan_hlen; in tun_put_user()
1347 static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile, in tun_do_read() argument
1355 tun_debug(KERN_INFO, tun, "tun_do_read\n"); in tun_do_read()
1360 if (tun->dev->reg_state != NETREG_REGISTERED) in tun_do_read()
1369 ret = tun_put_user(tun, tfile, skb, to); in tun_do_read()
1382 struct tun_struct *tun = __tun_get(tfile); in tun_chr_read_iter() local
1385 if (!tun) in tun_chr_read_iter()
1387 ret = tun_do_read(tun, tfile, to, file->f_flags & O_NONBLOCK); in tun_chr_read_iter()
1391 tun_put(tun); in tun_chr_read_iter()
1397 struct tun_struct *tun = netdev_priv(dev); in tun_free_netdev() local
1399 BUG_ON(!(list_empty(&tun->disabled))); in tun_free_netdev()
1400 tun_flow_uninit(tun); in tun_free_netdev()
1401 security_tun_dev_free_security(tun->security); in tun_free_netdev()
1407 struct tun_struct *tun = netdev_priv(dev); in tun_setup() local
1409 tun->owner = INVALID_UID; in tun_setup()
1410 tun->group = INVALID_GID; in tun_setup()
1455 struct tun_struct *tun = __tun_get(tfile); in tun_sendmsg() local
1457 if (!tun) in tun_sendmsg()
1460 ret = tun_get_user(tun, tfile, m->msg_control, &m->msg_iter, in tun_sendmsg()
1462 tun_put(tun); in tun_sendmsg()
1470 struct tun_struct *tun = __tun_get(tfile); in tun_recvmsg() local
1473 if (!tun) in tun_recvmsg()
1485 ret = tun_do_read(tun, tfile, &m->msg_iter, flags & MSG_DONTWAIT); in tun_recvmsg()
1491 tun_put(tun); in tun_recvmsg()
1515 static int tun_flags(struct tun_struct *tun) in tun_flags() argument
1517 return tun->flags & (TUN_FEATURES | IFF_PERSIST | IFF_TUN | IFF_TAP); in tun_flags()
1523 struct tun_struct *tun = netdev_priv(to_net_dev(dev)); in tun_show_flags() local
1524 return sprintf(buf, "0x%x\n", tun_flags(tun)); in tun_show_flags()
1530 struct tun_struct *tun = netdev_priv(to_net_dev(dev)); in tun_show_owner() local
1531 return uid_valid(tun->owner)? in tun_show_owner()
1533 from_kuid_munged(current_user_ns(), tun->owner)): in tun_show_owner()
1540 struct tun_struct *tun = netdev_priv(to_net_dev(dev)); in tun_show_group() local
1541 return gid_valid(tun->group) ? in tun_show_group()
1543 from_kgid_munged(current_user_ns(), tun->group)): in tun_show_group()
1564 struct tun_struct *tun; in tun_set_iff() local
1577 tun = netdev_priv(dev); in tun_set_iff()
1579 tun = netdev_priv(dev); in tun_set_iff()
1584 !!(tun->flags & IFF_MULTI_QUEUE)) in tun_set_iff()
1587 if (tun_not_capable(tun)) in tun_set_iff()
1589 err = security_tun_dev_open(tun->security); in tun_set_iff()
1593 err = tun_attach(tun, file, ifr->ifr_flags & IFF_NOFILTER); in tun_set_iff()
1597 if (tun->flags & IFF_MULTI_QUEUE && in tun_set_iff()
1598 (tun->numqueues + tun->numdisabled > 1)) { in tun_set_iff()
1644 tun = netdev_priv(dev); in tun_set_iff()
1645 tun->dev = dev; in tun_set_iff()
1646 tun->flags = flags; in tun_set_iff()
1647 tun->txflt.count = 0; in tun_set_iff()
1648 tun->vnet_hdr_sz = sizeof(struct virtio_net_hdr); in tun_set_iff()
1650 tun->filter_attached = false; in tun_set_iff()
1651 tun->sndbuf = tfile->socket.sk->sk_sndbuf; in tun_set_iff()
1653 spin_lock_init(&tun->lock); in tun_set_iff()
1655 err = security_tun_dev_alloc_security(&tun->security); in tun_set_iff()
1660 tun_flow_init(tun); in tun_set_iff()
1670 INIT_LIST_HEAD(&tun->disabled); in tun_set_iff()
1671 err = tun_attach(tun, file, false); in tun_set_iff()
1675 err = register_netdevice(tun->dev); in tun_set_iff()
1680 netif_carrier_on(tun->dev); in tun_set_iff()
1682 tun_debug(KERN_INFO, tun, "tun_set_iff\n"); in tun_set_iff()
1684 tun->flags = (tun->flags & ~TUN_FEATURES) | in tun_set_iff()
1690 if (netif_running(tun->dev)) in tun_set_iff()
1691 netif_tx_wake_all_queues(tun->dev); in tun_set_iff()
1693 strcpy(ifr->ifr_name, tun->dev->name); in tun_set_iff()
1699 tun_flow_uninit(tun); in tun_set_iff()
1700 security_tun_dev_free_security(tun->security); in tun_set_iff()
1706 static void tun_get_iff(struct net *net, struct tun_struct *tun, in tun_get_iff() argument
1709 tun_debug(KERN_INFO, tun, "tun_get_iff\n"); in tun_get_iff()
1711 strcpy(ifr->ifr_name, tun->dev->name); in tun_get_iff()
1713 ifr->ifr_flags = tun_flags(tun); in tun_get_iff()
1719 static int set_offload(struct tun_struct *tun, unsigned long arg) in set_offload() argument
1750 tun->set_features = features; in set_offload()
1751 netdev_update_features(tun->dev); in set_offload()
1756 static void tun_detach_filter(struct tun_struct *tun, int n) in tun_detach_filter() argument
1762 tfile = rtnl_dereference(tun->tfiles[i]); in tun_detach_filter()
1766 tun->filter_attached = false; in tun_detach_filter()
1769 static int tun_attach_filter(struct tun_struct *tun) in tun_attach_filter() argument
1774 for (i = 0; i < tun->numqueues; i++) { in tun_attach_filter()
1775 tfile = rtnl_dereference(tun->tfiles[i]); in tun_attach_filter()
1776 ret = sk_attach_filter(&tun->fprog, tfile->socket.sk); in tun_attach_filter()
1778 tun_detach_filter(tun, i); in tun_attach_filter()
1783 tun->filter_attached = true; in tun_attach_filter()
1787 static void tun_set_sndbuf(struct tun_struct *tun) in tun_set_sndbuf() argument
1792 for (i = 0; i < tun->numqueues; i++) { in tun_set_sndbuf()
1793 tfile = rtnl_dereference(tun->tfiles[i]); in tun_set_sndbuf()
1794 tfile->socket.sk->sk_sndbuf = tun->sndbuf; in tun_set_sndbuf()
1801 struct tun_struct *tun; in tun_set_queue() local
1807 tun = tfile->detached; in tun_set_queue()
1808 if (!tun) { in tun_set_queue()
1812 ret = security_tun_dev_attach_queue(tun->security); in tun_set_queue()
1815 ret = tun_attach(tun, file, false); in tun_set_queue()
1817 tun = rtnl_dereference(tfile->tun); in tun_set_queue()
1818 if (!tun || !(tun->flags & IFF_MULTI_QUEUE) || tfile->detached) in tun_set_queue()
1834 struct tun_struct *tun; in __tun_chr_ioctl() local
1864 tun = __tun_get(tfile); in __tun_chr_ioctl()
1865 if (cmd == TUNSETIFF && !tun) { in __tun_chr_ioctl()
1879 if (tun) in __tun_chr_ioctl()
1892 if (!tun) in __tun_chr_ioctl()
1895 tun_debug(KERN_INFO, tun, "tun_chr_ioctl cmd %u\n", cmd); in __tun_chr_ioctl()
1900 tun_get_iff(current->nsproxy->net_ns, tun, &ifr); in __tun_chr_ioctl()
1915 tun_debug(KERN_INFO, tun, "ignored: set checksum %s\n", in __tun_chr_ioctl()
1923 if (arg && !(tun->flags & IFF_PERSIST)) { in __tun_chr_ioctl()
1924 tun->flags |= IFF_PERSIST; in __tun_chr_ioctl()
1927 if (!arg && (tun->flags & IFF_PERSIST)) { in __tun_chr_ioctl()
1928 tun->flags &= ~IFF_PERSIST; in __tun_chr_ioctl()
1932 tun_debug(KERN_INFO, tun, "persist %s\n", in __tun_chr_ioctl()
1943 tun->owner = owner; in __tun_chr_ioctl()
1944 tun_debug(KERN_INFO, tun, "owner set to %u\n", in __tun_chr_ioctl()
1945 from_kuid(&init_user_ns, tun->owner)); in __tun_chr_ioctl()
1955 tun->group = group; in __tun_chr_ioctl()
1956 tun_debug(KERN_INFO, tun, "group set to %u\n", in __tun_chr_ioctl()
1957 from_kgid(&init_user_ns, tun->group)); in __tun_chr_ioctl()
1962 if (tun->dev->flags & IFF_UP) { in __tun_chr_ioctl()
1963 tun_debug(KERN_INFO, tun, in __tun_chr_ioctl()
1967 tun->dev->type = (int) arg; in __tun_chr_ioctl()
1968 tun_debug(KERN_INFO, tun, "linktype set to %d\n", in __tun_chr_ioctl()
1969 tun->dev->type); in __tun_chr_ioctl()
1976 tun->debug = arg; in __tun_chr_ioctl()
1980 ret = set_offload(tun, arg); in __tun_chr_ioctl()
1986 if ((tun->flags & TUN_TYPE_MASK) != IFF_TAP) in __tun_chr_ioctl()
1988 ret = update_filter(&tun->txflt, (void __user *)arg); in __tun_chr_ioctl()
1993 memcpy(ifr.ifr_hwaddr.sa_data, tun->dev->dev_addr, ETH_ALEN); in __tun_chr_ioctl()
1994 ifr.ifr_hwaddr.sa_family = tun->dev->type; in __tun_chr_ioctl()
2001 tun_debug(KERN_DEBUG, tun, "set hw address: %pM\n", in __tun_chr_ioctl()
2004 ret = dev_set_mac_address(tun->dev, &ifr.ifr_hwaddr); in __tun_chr_ioctl()
2019 tun->sndbuf = sndbuf; in __tun_chr_ioctl()
2020 tun_set_sndbuf(tun); in __tun_chr_ioctl()
2024 vnet_hdr_sz = tun->vnet_hdr_sz; in __tun_chr_ioctl()
2039 tun->vnet_hdr_sz = vnet_hdr_sz; in __tun_chr_ioctl()
2043 le = !!(tun->flags & TUN_VNET_LE); in __tun_chr_ioctl()
2054 tun->flags |= TUN_VNET_LE; in __tun_chr_ioctl()
2056 tun->flags &= ~TUN_VNET_LE; in __tun_chr_ioctl()
2062 if ((tun->flags & TUN_TYPE_MASK) != IFF_TAP) in __tun_chr_ioctl()
2065 if (copy_from_user(&tun->fprog, argp, sizeof(tun->fprog))) in __tun_chr_ioctl()
2068 ret = tun_attach_filter(tun); in __tun_chr_ioctl()
2074 if ((tun->flags & TUN_TYPE_MASK) != IFF_TAP) in __tun_chr_ioctl()
2077 tun_detach_filter(tun, tun->numqueues); in __tun_chr_ioctl()
2082 if ((tun->flags & TUN_TYPE_MASK) != IFF_TAP) in __tun_chr_ioctl()
2085 if (copy_to_user(argp, &tun->fprog, sizeof(tun->fprog))) in __tun_chr_ioctl()
2097 if (tun) in __tun_chr_ioctl()
2098 tun_put(tun); in __tun_chr_ioctl()
2165 RCU_INIT_POINTER(tfile->tun, NULL); in tun_chr_open()
2205 struct tun_struct *tun; in tun_chr_show_fdinfo() local
2211 tun = tun_get(f); in tun_chr_show_fdinfo()
2212 if (tun) in tun_chr_show_fdinfo()
2213 tun_get_iff(current->nsproxy->net_ns, tun, &ifr); in tun_chr_show_fdinfo()
2216 if (tun) in tun_chr_show_fdinfo()
2217 tun_put(tun); in tun_chr_show_fdinfo()
2267 struct tun_struct *tun = netdev_priv(dev); in tun_get_drvinfo() local
2272 switch (tun->flags & TUN_TYPE_MASK) { in tun_get_drvinfo()
2285 struct tun_struct *tun = netdev_priv(dev); in tun_get_msglevel() local
2286 return tun->debug; in tun_get_msglevel()
2295 struct tun_struct *tun = netdev_priv(dev); in tun_set_msglevel() local
2296 tun->debug = value; in tun_set_msglevel()