Lines Matching defs:tap

99 	.name = "tap",
146 static int tap_enable_queue(struct tap_dev *tap, struct file *file,
157 rcu_assign_pointer(tap->taps[tap->numvtaps], q);
158 q->queue_index = tap->numvtaps;
161 tap->numvtaps++;
167 static int tap_set_queue(struct tap_dev *tap, struct file *file,
170 if (tap->numqueues == MAX_TAP_QUEUES)
173 rcu_assign_pointer(q->tap, tap);
174 rcu_assign_pointer(tap->taps[tap->numvtaps], q);
178 q->queue_index = tap->numvtaps;
181 list_add_tail(&q->next, &tap->queue_list);
183 tap->numvtaps++;
184 tap->numqueues++;
191 struct tap_dev *tap;
198 tap = rtnl_dereference(q->tap);
200 if (tap) {
202 BUG_ON(index >= tap->numvtaps);
203 nq = rtnl_dereference(tap->taps[tap->numvtaps - 1]);
206 rcu_assign_pointer(tap->taps[index], nq);
207 RCU_INIT_POINTER(tap->taps[tap->numvtaps - 1], NULL);
210 tap->numvtaps--;
226 struct tap_dev *tap;
229 tap = rtnl_dereference(q->tap);
231 if (tap) {
235 tap->numqueues--;
236 RCU_INIT_POINTER(q->tap, NULL);
254 static struct tap_queue *tap_get_queue(struct tap_dev *tap,
263 int numvtaps = READ_ONCE(tap->numvtaps);
275 queue = rcu_dereference(tap->taps[rxq % numvtaps]);
285 queue = rcu_dereference(tap->taps[rxq]);
290 queue = rcu_dereference(tap->taps[0]);
300 void tap_del_queues(struct tap_dev *tap)
305 list_for_each_entry_safe(q, tmp, &tap->queue_list, next) {
307 RCU_INIT_POINTER(q->tap, NULL);
309 tap->numvtaps--;
310 tap->numqueues--;
313 BUG_ON(tap->numvtaps);
314 BUG_ON(tap->numqueues);
316 tap->numvtaps = MAX_TAP_QUEUES;
324 struct tap_dev *tap;
329 tap = tap_dev_get_rcu(dev);
330 if (!tap)
333 q = tap_get_queue(tap, skb);
344 features |= tap->tap_features;
373 /* If we receive a partial checksum and the tap side
396 if (tap->count_rx_dropped)
397 tap->count_rx_dropped(tap);
415 int tap_get_minor(dev_t major, struct tap_dev *tap)
428 retval = idr_alloc(&tap_major->minor_idr, tap, 1, TAP_NUM_DEVS, GFP_ATOMIC);
430 tap->minor = retval;
432 netdev_err(tap->dev, "Too many tap devices\n");
443 void tap_free_minor(dev_t major, struct tap_dev *tap)
454 if (tap->minor) {
455 idr_remove(&tap_major->minor_idr, tap->minor);
456 tap->minor = 0;
468 struct tap_dev *tap;
474 tap = NULL;
479 tap = idr_find(&tap_major->minor_idr, minor);
480 if (tap) {
481 dev = tap->dev;
488 return tap;
514 struct tap_dev *tap;
519 tap = dev_get_by_tap_file(imajor(inode), iminor(inode));
520 if (!tap)
528 if (ptr_ring_init(&q->ring, tap->dev->tx_queue_len, GFP_KERNEL)) {
545 * so far only KVM virtio_net uses tap, enable zero copy between
551 if ((tap->dev->features & NETIF_F_HIGHDMA) && (tap->dev->features & NETIF_F_SG))
554 err = tap_set_queue(tap, file, q);
560 /* tap groks IOCB_NOWAIT just fine, mark it as such */
563 dev_put(tap->dev);
571 if (tap)
572 dev_put(tap->dev);
642 struct tap_dev *tap;
727 tap = rcu_dereference(q->tap);
728 if (!tap) {
733 skb->dev = tap->dev;
769 tap = rcu_dereference(q->tap);
770 if (tap && tap->count_tx_dropped)
771 tap->count_tx_dropped(tap);
916 struct tap_dev *tap;
919 tap = rtnl_dereference(q->tap);
920 if (tap)
921 dev_hold(tap->dev);
923 return tap;
926 static void tap_put_tap_dev(struct tap_dev *tap)
928 dev_put(tap->dev);
934 struct tap_dev *tap;
937 tap = tap_get_tap_dev(q);
938 if (!tap)
942 ret = tap_enable_queue(tap, file, q);
948 tap_put_tap_dev(tap);
954 struct tap_dev *tap;
958 tap = rtnl_dereference(q->tap);
959 if (!tap)
962 features = tap->dev->features;
981 /* tun/tap driver inverts the usage for TSO offloads, where
985 * For tap, we have to invert it to mean the same thing.
995 /* tap_features are the same as features on tun/tap and
998 tap->tap_features = feature_mask;
999 if (tap->update_features)
1000 tap->update_features(tap, features);
1006 * provide compatibility with generic tun/tap interface
1012 struct tap_dev *tap;
1038 tap = tap_get_tap_dev(q);
1039 if (!tap) {
1046 if (copy_to_user(&ifr->ifr_name, tap->dev->name, IFNAMSIZ) ||
1049 tap_put_tap_dev(tap);
1125 tap = tap_get_tap_dev(q);
1126 if (!tap) {
1131 dev_get_mac_address(&sa, dev_net(tap->dev), tap->dev->name);
1132 if (copy_to_user(&ifr->ifr_name, tap->dev->name, IFNAMSIZ) ||
1135 tap_put_tap_dev(tap);
1143 tap = tap_get_tap_dev(q);
1144 if (!tap) {
1148 ret = dev_set_mac_address_user(tap->dev, &sa, NULL);
1149 tap_put_tap_dev(tap);
1176 struct tap_dev *tap;
1208 tap = rcu_dereference(q->tap);
1209 if (tap) {
1210 skb->dev = tap->dev;
1224 tap = rcu_dereference(q->tap);
1225 if (tap && tap->count_tx_dropped)
1226 tap->count_tx_dropped(tap);
1313 int tap_queue_resize(struct tap_dev *tap)
1315 struct net_device *dev = tap->dev;
1318 int n = tap->numqueues;
1325 list_for_each_entry(q, &tap->queue_list, next)