Lines Matching refs:vlan_info

79 	struct vlan_info *vlan_info = rcu_dereference(dev->vlan_info);  in __vlan_find_dev_deep_rcu()  local
81 if (vlan_info) { in __vlan_find_dev_deep_rcu()
82 return vlan_group_get_device(&vlan_info->grp, in __vlan_find_dev_deep_rcu()
138 static void vlan_info_free(struct vlan_info *vlan_info) in vlan_info_free() argument
140 vlan_group_free(&vlan_info->grp); in vlan_info_free()
141 kfree(vlan_info); in vlan_info_free()
146 vlan_info_free(container_of(rcu, struct vlan_info, rcu)); in vlan_info_rcu_free()
149 static struct vlan_info *vlan_info_alloc(struct net_device *dev) in vlan_info_alloc()
151 struct vlan_info *vlan_info; in vlan_info_alloc() local
153 vlan_info = kzalloc(sizeof(struct vlan_info), GFP_KERNEL); in vlan_info_alloc()
154 if (!vlan_info) in vlan_info_alloc()
157 vlan_info->real_dev = dev; in vlan_info_alloc()
158 INIT_LIST_HEAD(&vlan_info->vid_list); in vlan_info_alloc()
159 return vlan_info; in vlan_info_alloc()
180 static struct vlan_vid_info *vlan_vid_info_get(struct vlan_info *vlan_info, in vlan_vid_info_get() argument
185 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vid_info_get()
232 struct vlan_info *vlan_info; in vlan_for_each() local
238 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_for_each()
239 if (!vlan_info) in vlan_for_each()
242 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_for_each()
243 vdev = vlan_group_get_device(&vlan_info->grp, vid_info->proto, in vlan_for_each()
254 int vlan_filter_push_vids(struct vlan_info *vlan_info, __be16 proto) in vlan_filter_push_vids() argument
256 struct net_device *real_dev = vlan_info->real_dev; in vlan_filter_push_vids()
260 list_for_each_entry(vlan_vid_info, &vlan_info->vid_list, list) { in vlan_filter_push_vids()
273 &vlan_info->vid_list, list) { in vlan_filter_push_vids()
283 void vlan_filter_drop_vids(struct vlan_info *vlan_info, __be16 proto) in vlan_filter_drop_vids() argument
287 list_for_each_entry(vlan_vid_info, &vlan_info->vid_list, list) in vlan_filter_drop_vids()
289 vlan_kill_rx_filter_info(vlan_info->real_dev, in vlan_filter_drop_vids()
295 static int __vlan_vid_add(struct vlan_info *vlan_info, __be16 proto, u16 vid, in __vlan_vid_add() argument
298 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_add()
312 list_add(&vid_info->list, &vlan_info->vid_list); in __vlan_vid_add()
313 vlan_info->nr_vids++; in __vlan_vid_add()
320 struct vlan_info *vlan_info; in vlan_vid_add() local
327 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_add()
328 if (!vlan_info) { in vlan_vid_add()
329 vlan_info = vlan_info_alloc(dev); in vlan_vid_add()
330 if (!vlan_info) in vlan_vid_add()
334 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_add()
336 err = __vlan_vid_add(vlan_info, proto, vid, &vid_info); in vlan_vid_add()
343 rcu_assign_pointer(dev->vlan_info, vlan_info); in vlan_vid_add()
349 kfree(vlan_info); in vlan_vid_add()
354 static void __vlan_vid_del(struct vlan_info *vlan_info, in __vlan_vid_del() argument
357 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_del()
368 vlan_info->nr_vids--; in __vlan_vid_del()
373 struct vlan_info *vlan_info; in vlan_vid_del() local
378 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_del()
379 if (!vlan_info) in vlan_vid_del()
382 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_del()
387 __vlan_vid_del(vlan_info, vid_info); in vlan_vid_del()
388 if (vlan_info->nr_vids == 0) { in vlan_vid_del()
389 RCU_INIT_POINTER(dev->vlan_info, NULL); in vlan_vid_del()
390 call_rcu(&vlan_info->rcu, vlan_info_rcu_free); in vlan_vid_del()
400 struct vlan_info *vlan_info; in vlan_vids_add_by_dev() local
405 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_add_by_dev()
406 if (!vlan_info) in vlan_vids_add_by_dev()
409 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vids_add_by_dev()
420 &vlan_info->vid_list, in vlan_vids_add_by_dev()
435 struct vlan_info *vlan_info; in vlan_vids_del_by_dev() local
439 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_del_by_dev()
440 if (!vlan_info) in vlan_vids_del_by_dev()
443 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vids_del_by_dev()
453 struct vlan_info *vlan_info; in vlan_uses_dev() local
457 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_uses_dev()
458 if (!vlan_info) in vlan_uses_dev()
460 return vlan_info->grp.nr_vlan_devs ? true : false; in vlan_uses_dev()