Lines Matching refs:vlan

40 	struct macvlan_dev __rcu *vlan;  member
167 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_enable_queue() local
176 rcu_assign_pointer(vlan->taps[vlan->numvtaps], q); in macvtap_enable_queue()
177 q->queue_index = vlan->numvtaps; in macvtap_enable_queue()
180 vlan->numvtaps++; in macvtap_enable_queue()
189 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_set_queue() local
191 if (vlan->numqueues == MAX_MACVTAP_QUEUES) in macvtap_set_queue()
194 rcu_assign_pointer(q->vlan, vlan); in macvtap_set_queue()
195 rcu_assign_pointer(vlan->taps[vlan->numvtaps], q); in macvtap_set_queue()
199 q->queue_index = vlan->numvtaps; in macvtap_set_queue()
202 list_add_tail(&q->next, &vlan->queue_list); in macvtap_set_queue()
204 vlan->numvtaps++; in macvtap_set_queue()
205 vlan->numqueues++; in macvtap_set_queue()
212 struct macvlan_dev *vlan; in macvtap_disable_queue() local
219 vlan = rtnl_dereference(q->vlan); in macvtap_disable_queue()
221 if (vlan) { in macvtap_disable_queue()
223 BUG_ON(index >= vlan->numvtaps); in macvtap_disable_queue()
224 nq = rtnl_dereference(vlan->taps[vlan->numvtaps - 1]); in macvtap_disable_queue()
227 rcu_assign_pointer(vlan->taps[index], nq); in macvtap_disable_queue()
228 RCU_INIT_POINTER(vlan->taps[vlan->numvtaps - 1], NULL); in macvtap_disable_queue()
231 vlan->numvtaps--; in macvtap_disable_queue()
247 struct macvlan_dev *vlan; in macvtap_put_queue() local
250 vlan = rtnl_dereference(q->vlan); in macvtap_put_queue()
252 if (vlan) { in macvtap_put_queue()
256 vlan->numqueues--; in macvtap_put_queue()
257 RCU_INIT_POINTER(q->vlan, NULL); in macvtap_put_queue()
278 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_get_queue() local
285 int numvtaps = ACCESS_ONCE(vlan->numvtaps); in macvtap_get_queue()
294 tap = rcu_dereference(vlan->taps[rxq % numvtaps]); in macvtap_get_queue()
304 tap = rcu_dereference(vlan->taps[rxq]); in macvtap_get_queue()
308 tap = rcu_dereference(vlan->taps[0]); in macvtap_get_queue()
320 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_del_queues() local
324 list_for_each_entry_safe(q, tmp, &vlan->queue_list, next) { in macvtap_del_queues()
326 RCU_INIT_POINTER(q->vlan, NULL); in macvtap_del_queues()
328 vlan->numvtaps--; in macvtap_del_queues()
329 vlan->numqueues--; in macvtap_del_queues()
332 BUG_ON(vlan->numvtaps); in macvtap_del_queues()
333 BUG_ON(vlan->numqueues); in macvtap_del_queues()
335 vlan->numvtaps = MAX_MACVTAP_QUEUES; in macvtap_del_queues()
342 struct macvlan_dev *vlan; in macvtap_handle_frame() local
346 vlan = macvtap_get_vlan_rcu(dev); in macvtap_handle_frame()
347 if (!vlan) in macvtap_handle_frame()
364 features |= vlan->tap_features; in macvtap_handle_frame()
403 macvlan_count_rx(vlan, 0, 0, 0); in macvtap_handle_frame()
408 static int macvtap_get_minor(struct macvlan_dev *vlan) in macvtap_get_minor() argument
413 retval = idr_alloc(&minor_idr, vlan, 1, MACVTAP_NUM_DEVS, GFP_KERNEL); in macvtap_get_minor()
415 vlan->minor = retval; in macvtap_get_minor()
424 static void macvtap_free_minor(struct macvlan_dev *vlan) in macvtap_free_minor() argument
427 if (vlan->minor) { in macvtap_free_minor()
428 idr_remove(&minor_idr, vlan->minor); in macvtap_free_minor()
429 vlan->minor = 0; in macvtap_free_minor()
437 struct macvlan_dev *vlan; in dev_get_by_macvtap_minor() local
440 vlan = idr_find(&minor_idr, minor); in dev_get_by_macvtap_minor()
441 if (vlan) { in dev_get_by_macvtap_minor()
442 dev = vlan->dev; in dev_get_by_macvtap_minor()
454 struct macvlan_dev *vlan = netdev_priv(dev); in macvtap_newlink() local
457 INIT_LIST_HEAD(&vlan->queue_list); in macvtap_newlink()
462 vlan->tap_features = TUN_OFFLOADS; in macvtap_newlink()
464 err = netdev_rx_handler_register(dev, macvtap_handle_frame, vlan); in macvtap_newlink()
715 struct macvlan_dev *vlan; in macvtap_get_user() local
818 vlan = rcu_dereference(q->vlan); in macvtap_get_user()
825 if (vlan) { in macvtap_get_user()
826 skb->dev = vlan->dev; in macvtap_get_user()
840 vlan = rcu_dereference(q->vlan); in macvtap_get_user()
841 if (vlan) in macvtap_get_user()
842 this_cpu_inc(vlan->pcpu_stats->tx_dropped); in macvtap_get_user()
969 struct macvlan_dev *vlan; in macvtap_get_vlan() local
972 vlan = rtnl_dereference(q->vlan); in macvtap_get_vlan()
973 if (vlan) in macvtap_get_vlan()
974 dev_hold(vlan->dev); in macvtap_get_vlan()
976 return vlan; in macvtap_get_vlan()
979 static void macvtap_put_vlan(struct macvlan_dev *vlan) in macvtap_put_vlan() argument
981 dev_put(vlan->dev); in macvtap_put_vlan()
987 struct macvlan_dev *vlan; in macvtap_ioctl_set_queue() local
990 vlan = macvtap_get_vlan(q); in macvtap_ioctl_set_queue()
991 if (!vlan) in macvtap_ioctl_set_queue()
995 ret = macvtap_enable_queue(vlan->dev, file, q); in macvtap_ioctl_set_queue()
1001 macvtap_put_vlan(vlan); in macvtap_ioctl_set_queue()
1007 struct macvlan_dev *vlan; in set_offload() local
1011 vlan = rtnl_dereference(q->vlan); in set_offload()
1012 if (!vlan) in set_offload()
1015 features = vlan->dev->features; in set_offload()
1049 vlan->tap_features = feature_mask; in set_offload()
1050 vlan->set_features = features; in set_offload()
1051 netdev_update_features(vlan->dev); in set_offload()
1063 struct macvlan_dev *vlan; in macvtap_ioctl() local
1089 vlan = macvtap_get_vlan(q); in macvtap_ioctl()
1090 if (!vlan) { in macvtap_ioctl()
1097 if (copy_to_user(&ifr->ifr_name, vlan->dev->name, IFNAMSIZ) || in macvtap_ioctl()
1100 macvtap_put_vlan(vlan); in macvtap_ioctl()
1173 vlan = macvtap_get_vlan(q); in macvtap_ioctl()
1174 if (!vlan) { in macvtap_ioctl()
1179 u = vlan->dev->type; in macvtap_ioctl()
1180 if (copy_to_user(&ifr->ifr_name, vlan->dev->name, IFNAMSIZ) || in macvtap_ioctl()
1181 copy_to_user(&ifr->ifr_hwaddr.sa_data, vlan->dev->dev_addr, ETH_ALEN) || in macvtap_ioctl()
1184 macvtap_put_vlan(vlan); in macvtap_ioctl()
1192 vlan = macvtap_get_vlan(q); in macvtap_ioctl()
1193 if (!vlan) { in macvtap_ioctl()
1197 ret = dev_set_mac_address(vlan->dev, &sa); in macvtap_ioctl()
1198 macvtap_put_vlan(vlan); in macvtap_ioctl()
1277 struct macvlan_dev *vlan; in macvtap_device_event() local
1285 vlan = netdev_priv(dev); in macvtap_device_event()
1293 err = macvtap_get_minor(vlan); in macvtap_device_event()
1297 devt = MKDEV(MAJOR(macvtap_major), vlan->minor); in macvtap_device_event()
1301 macvtap_free_minor(vlan); in macvtap_device_event()
1306 devt = MKDEV(MAJOR(macvtap_major), vlan->minor); in macvtap_device_event()
1308 macvtap_free_minor(vlan); in macvtap_device_event()