Lines Matching refs:vlan_info

78 	struct vlan_info *vlan_info = rcu_dereference(dev->vlan_info);  in __vlan_find_dev_deep_rcu()  local
80 if (vlan_info) { in __vlan_find_dev_deep_rcu()
81 return vlan_group_get_device(&vlan_info->grp, in __vlan_find_dev_deep_rcu()
137 static void vlan_info_free(struct vlan_info *vlan_info) in vlan_info_free() argument
139 vlan_group_free(&vlan_info->grp); in vlan_info_free()
140 kfree(vlan_info); in vlan_info_free()
145 vlan_info_free(container_of(rcu, struct vlan_info, rcu)); in vlan_info_rcu_free()
148 static struct vlan_info *vlan_info_alloc(struct net_device *dev) in vlan_info_alloc()
150 struct vlan_info *vlan_info; in vlan_info_alloc() local
152 vlan_info = kzalloc(sizeof(struct vlan_info), GFP_KERNEL); in vlan_info_alloc()
153 if (!vlan_info) in vlan_info_alloc()
156 vlan_info->real_dev = dev; in vlan_info_alloc()
157 INIT_LIST_HEAD(&vlan_info->vid_list); in vlan_info_alloc()
158 return vlan_info; in vlan_info_alloc()
179 static struct vlan_vid_info *vlan_vid_info_get(struct vlan_info *vlan_info, in vlan_vid_info_get() argument
184 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vid_info_get()
231 struct vlan_info *vlan_info; in vlan_for_each() local
237 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_for_each()
238 if (!vlan_info) in vlan_for_each()
241 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_for_each()
242 vdev = vlan_group_get_device(&vlan_info->grp, vid_info->proto, in vlan_for_each()
253 int vlan_filter_push_vids(struct vlan_info *vlan_info, __be16 proto) in vlan_filter_push_vids() argument
255 struct net_device *real_dev = vlan_info->real_dev; in vlan_filter_push_vids()
259 list_for_each_entry(vlan_vid_info, &vlan_info->vid_list, list) { in vlan_filter_push_vids()
272 &vlan_info->vid_list, list) { in vlan_filter_push_vids()
282 void vlan_filter_drop_vids(struct vlan_info *vlan_info, __be16 proto) in vlan_filter_drop_vids() argument
286 list_for_each_entry(vlan_vid_info, &vlan_info->vid_list, list) in vlan_filter_drop_vids()
288 vlan_kill_rx_filter_info(vlan_info->real_dev, in vlan_filter_drop_vids()
294 static int __vlan_vid_add(struct vlan_info *vlan_info, __be16 proto, u16 vid, in __vlan_vid_add() argument
297 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_add()
311 list_add(&vid_info->list, &vlan_info->vid_list); in __vlan_vid_add()
312 vlan_info->nr_vids++; in __vlan_vid_add()
319 struct vlan_info *vlan_info; in vlan_vid_add() local
326 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_add()
327 if (!vlan_info) { in vlan_vid_add()
328 vlan_info = vlan_info_alloc(dev); in vlan_vid_add()
329 if (!vlan_info) in vlan_vid_add()
333 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_add()
335 err = __vlan_vid_add(vlan_info, proto, vid, &vid_info); in vlan_vid_add()
342 rcu_assign_pointer(dev->vlan_info, vlan_info); in vlan_vid_add()
348 kfree(vlan_info); in vlan_vid_add()
353 static void __vlan_vid_del(struct vlan_info *vlan_info, in __vlan_vid_del() argument
356 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_del()
367 vlan_info->nr_vids--; in __vlan_vid_del()
372 struct vlan_info *vlan_info; in vlan_vid_del() local
377 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_del()
378 if (!vlan_info) in vlan_vid_del()
381 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_del()
386 __vlan_vid_del(vlan_info, vid_info); in vlan_vid_del()
387 if (vlan_info->nr_vids == 0) { in vlan_vid_del()
388 RCU_INIT_POINTER(dev->vlan_info, NULL); in vlan_vid_del()
389 call_rcu(&vlan_info->rcu, vlan_info_rcu_free); in vlan_vid_del()
399 struct vlan_info *vlan_info; in vlan_vids_add_by_dev() local
404 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_add_by_dev()
405 if (!vlan_info) in vlan_vids_add_by_dev()
408 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vids_add_by_dev()
417 &vlan_info->vid_list, in vlan_vids_add_by_dev()
430 struct vlan_info *vlan_info; in vlan_vids_del_by_dev() local
434 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_del_by_dev()
435 if (!vlan_info) in vlan_vids_del_by_dev()
438 list_for_each_entry(vid_info, &vlan_info->vid_list, list) in vlan_vids_del_by_dev()
445 struct vlan_info *vlan_info; in vlan_uses_dev() local
449 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_uses_dev()
450 if (!vlan_info) in vlan_uses_dev()
452 return vlan_info->grp.nr_vlan_devs ? true : false; in vlan_uses_dev()