Lines Matching refs:vlan_info
71 struct vlan_info *vlan_info = rcu_dereference(dev->vlan_info); in __vlan_find_dev_deep_rcu() local
73 if (vlan_info) { in __vlan_find_dev_deep_rcu()
74 return vlan_group_get_device(&vlan_info->grp, in __vlan_find_dev_deep_rcu()
130 static void vlan_info_free(struct vlan_info *vlan_info) in vlan_info_free() argument
132 vlan_group_free(&vlan_info->grp); in vlan_info_free()
133 kfree(vlan_info); in vlan_info_free()
138 vlan_info_free(container_of(rcu, struct vlan_info, rcu)); in vlan_info_rcu_free()
141 static struct vlan_info *vlan_info_alloc(struct net_device *dev) in vlan_info_alloc()
143 struct vlan_info *vlan_info; in vlan_info_alloc() local
145 vlan_info = kzalloc(sizeof(struct vlan_info), GFP_KERNEL); in vlan_info_alloc()
146 if (!vlan_info) in vlan_info_alloc()
149 vlan_info->real_dev = dev; in vlan_info_alloc()
150 INIT_LIST_HEAD(&vlan_info->vid_list); in vlan_info_alloc()
151 return vlan_info; in vlan_info_alloc()
173 static struct vlan_vid_info *vlan_vid_info_get(struct vlan_info *vlan_info, in vlan_vid_info_get() argument
178 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vid_info_get()
198 static int __vlan_vid_add(struct vlan_info *vlan_info, __be16 proto, u16 vid, in __vlan_vid_add() argument
201 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_add()
220 list_add(&vid_info->list, &vlan_info->vid_list); in __vlan_vid_add()
221 vlan_info->nr_vids++; in __vlan_vid_add()
228 struct vlan_info *vlan_info; in vlan_vid_add() local
235 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_add()
236 if (!vlan_info) { in vlan_vid_add()
237 vlan_info = vlan_info_alloc(dev); in vlan_vid_add()
238 if (!vlan_info) in vlan_vid_add()
242 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_add()
244 err = __vlan_vid_add(vlan_info, proto, vid, &vid_info); in vlan_vid_add()
251 rcu_assign_pointer(dev->vlan_info, vlan_info); in vlan_vid_add()
257 kfree(vlan_info); in vlan_vid_add()
262 static void __vlan_vid_del(struct vlan_info *vlan_info, in __vlan_vid_del() argument
265 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_del()
283 vlan_info->nr_vids--; in __vlan_vid_del()
288 struct vlan_info *vlan_info; in vlan_vid_del() local
293 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_del()
294 if (!vlan_info) in vlan_vid_del()
297 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_del()
302 __vlan_vid_del(vlan_info, vid_info); in vlan_vid_del()
303 if (vlan_info->nr_vids == 0) { in vlan_vid_del()
304 RCU_INIT_POINTER(dev->vlan_info, NULL); in vlan_vid_del()
305 call_rcu(&vlan_info->rcu, vlan_info_rcu_free); in vlan_vid_del()
315 struct vlan_info *vlan_info; in vlan_vids_add_by_dev() local
320 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_add_by_dev()
321 if (!vlan_info) in vlan_vids_add_by_dev()
324 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vids_add_by_dev()
333 &vlan_info->vid_list, in vlan_vids_add_by_dev()
346 struct vlan_info *vlan_info; in vlan_vids_del_by_dev() local
350 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_del_by_dev()
351 if (!vlan_info) in vlan_vids_del_by_dev()
354 list_for_each_entry(vid_info, &vlan_info->vid_list, list) in vlan_vids_del_by_dev()
361 struct vlan_info *vlan_info; in vlan_uses_dev() local
365 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_uses_dev()
366 if (!vlan_info) in vlan_uses_dev()
368 return vlan_info->grp.nr_vlan_devs ? true : false; in vlan_uses_dev()