Lines Matching refs:vlan

40 	struct macvlan_dev __rcu *vlan;  member
112 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_enable_queue() local
121 rcu_assign_pointer(vlan->taps[vlan->numvtaps], q); in macvtap_enable_queue()
122 q->queue_index = vlan->numvtaps; in macvtap_enable_queue()
125 vlan->numvtaps++; in macvtap_enable_queue()
134 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_set_queue() local
136 if (vlan->numqueues == MAX_MACVTAP_QUEUES) in macvtap_set_queue()
139 rcu_assign_pointer(q->vlan, vlan); in macvtap_set_queue()
140 rcu_assign_pointer(vlan->taps[vlan->numvtaps], q); in macvtap_set_queue()
144 q->queue_index = vlan->numvtaps; in macvtap_set_queue()
147 list_add_tail(&q->next, &vlan->queue_list); in macvtap_set_queue()
149 vlan->numvtaps++; in macvtap_set_queue()
150 vlan->numqueues++; in macvtap_set_queue()
157 struct macvlan_dev *vlan; in macvtap_disable_queue() local
164 vlan = rtnl_dereference(q->vlan); in macvtap_disable_queue()
166 if (vlan) { in macvtap_disable_queue()
168 BUG_ON(index >= vlan->numvtaps); in macvtap_disable_queue()
169 nq = rtnl_dereference(vlan->taps[vlan->numvtaps - 1]); in macvtap_disable_queue()
172 rcu_assign_pointer(vlan->taps[index], nq); in macvtap_disable_queue()
173 RCU_INIT_POINTER(vlan->taps[vlan->numvtaps - 1], NULL); in macvtap_disable_queue()
176 vlan->numvtaps--; in macvtap_disable_queue()
192 struct macvlan_dev *vlan; in macvtap_put_queue() local
195 vlan = rtnl_dereference(q->vlan); in macvtap_put_queue()
197 if (vlan) { in macvtap_put_queue()
201 vlan->numqueues--; in macvtap_put_queue()
202 RCU_INIT_POINTER(q->vlan, NULL); in macvtap_put_queue()
223 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_get_queue() local
230 int numvtaps = ACCESS_ONCE(vlan->numvtaps); in macvtap_get_queue()
239 tap = rcu_dereference(vlan->taps[rxq % numvtaps]); in macvtap_get_queue()
249 tap = rcu_dereference(vlan->taps[rxq]); in macvtap_get_queue()
253 tap = rcu_dereference(vlan->taps[0]); in macvtap_get_queue()
265 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_del_queues() local
270 list_for_each_entry_safe(q, tmp, &vlan->queue_list, next) { in macvtap_del_queues()
273 RCU_INIT_POINTER(q->vlan, NULL); in macvtap_del_queues()
275 vlan->numvtaps--; in macvtap_del_queues()
276 vlan->numqueues--; in macvtap_del_queues()
278 for (i = 0; i < vlan->numvtaps; i++) in macvtap_del_queues()
279 RCU_INIT_POINTER(vlan->taps[i], NULL); in macvtap_del_queues()
280 BUG_ON(vlan->numvtaps); in macvtap_del_queues()
281 BUG_ON(vlan->numqueues); in macvtap_del_queues()
283 vlan->numvtaps = MAX_MACVTAP_QUEUES; in macvtap_del_queues()
293 struct macvlan_dev *vlan; in macvtap_handle_frame() local
297 vlan = macvtap_get_vlan_rcu(dev); in macvtap_handle_frame()
298 if (!vlan) in macvtap_handle_frame()
315 features |= vlan->tap_features; in macvtap_handle_frame()
354 macvlan_count_rx(vlan, 0, 0, 0); in macvtap_handle_frame()
359 static int macvtap_get_minor(struct macvlan_dev *vlan) in macvtap_get_minor() argument
364 retval = idr_alloc(&minor_idr, vlan, 1, MACVTAP_NUM_DEVS, GFP_KERNEL); in macvtap_get_minor()
366 vlan->minor = retval; in macvtap_get_minor()
375 static void macvtap_free_minor(struct macvlan_dev *vlan) in macvtap_free_minor() argument
378 if (vlan->minor) { in macvtap_free_minor()
379 idr_remove(&minor_idr, vlan->minor); in macvtap_free_minor()
380 vlan->minor = 0; in macvtap_free_minor()
388 struct macvlan_dev *vlan; in dev_get_by_macvtap_minor() local
391 vlan = idr_find(&minor_idr, minor); in dev_get_by_macvtap_minor()
392 if (vlan) { in dev_get_by_macvtap_minor()
393 dev = vlan->dev; in dev_get_by_macvtap_minor()
405 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_newlink() local
408 INIT_LIST_HEAD(&vlan->queue_list); in macvtap_newlink()
413 vlan->tap_features = TUN_OFFLOADS; in macvtap_newlink()
415 err = netdev_rx_handler_register(dev, macvtap_handle_frame, vlan); in macvtap_newlink()
666 struct macvlan_dev *vlan; in macvtap_get_user() local
759 vlan = rcu_dereference(q->vlan); in macvtap_get_user()
766 if (vlan) { in macvtap_get_user()
767 skb->dev = vlan->dev; in macvtap_get_user()
781 vlan = rcu_dereference(q->vlan); in macvtap_get_user()
782 if (vlan) in macvtap_get_user()
783 this_cpu_inc(vlan->pcpu_stats->tx_dropped); in macvtap_get_user()
909 struct macvlan_dev *vlan; in macvtap_get_vlan() local
912 vlan = rtnl_dereference(q->vlan); in macvtap_get_vlan()
913 if (vlan) in macvtap_get_vlan()
914 dev_hold(vlan->dev); in macvtap_get_vlan()
916 return vlan; in macvtap_get_vlan()
919 static void macvtap_put_vlan(struct macvlan_dev *vlan) in macvtap_put_vlan() argument
921 dev_put(vlan->dev); in macvtap_put_vlan()
927 struct macvlan_dev *vlan; in macvtap_ioctl_set_queue() local
930 vlan = macvtap_get_vlan(q); in macvtap_ioctl_set_queue()
931 if (!vlan) in macvtap_ioctl_set_queue()
935 ret = macvtap_enable_queue(vlan->dev, file, q); in macvtap_ioctl_set_queue()
941 macvtap_put_vlan(vlan); in macvtap_ioctl_set_queue()
947 struct macvlan_dev *vlan; in set_offload() local
951 vlan = rtnl_dereference(q->vlan); in set_offload()
952 if (!vlan) in set_offload()
955 features = vlan->dev->features; in set_offload()
989 vlan->tap_features = feature_mask; in set_offload()
990 vlan->set_features = features; in set_offload()
991 netdev_update_features(vlan->dev); in set_offload()
1003 struct macvlan_dev *vlan; in macvtap_ioctl() local
1028 vlan = macvtap_get_vlan(q); in macvtap_ioctl()
1029 if (!vlan) { in macvtap_ioctl()
1036 if (copy_to_user(&ifr->ifr_name, vlan->dev->name, IFNAMSIZ) || in macvtap_ioctl()
1039 macvtap_put_vlan(vlan); in macvtap_ioctl()
1179 struct macvlan_dev *vlan; in macvtap_device_event() local
1187 vlan = netdev_priv(dev); in macvtap_device_event()
1195 err = macvtap_get_minor(vlan); in macvtap_device_event()
1199 devt = MKDEV(MAJOR(macvtap_major), vlan->minor); in macvtap_device_event()
1203 macvtap_free_minor(vlan); in macvtap_device_event()
1208 devt = MKDEV(MAJOR(macvtap_major), vlan->minor); in macvtap_device_event()
1210 macvtap_free_minor(vlan); in macvtap_device_event()