Lines Matching refs:vlan_info
69 struct vlan_info *vlan_info = rcu_dereference(dev->vlan_info); in __vlan_find_dev_deep_rcu() local
71 if (vlan_info) { in __vlan_find_dev_deep_rcu()
72 return vlan_group_get_device(&vlan_info->grp, in __vlan_find_dev_deep_rcu()
128 static void vlan_info_free(struct vlan_info *vlan_info) in vlan_info_free() argument
130 vlan_group_free(&vlan_info->grp); in vlan_info_free()
131 kfree(vlan_info); in vlan_info_free()
136 vlan_info_free(container_of(rcu, struct vlan_info, rcu)); in vlan_info_rcu_free()
139 static struct vlan_info *vlan_info_alloc(struct net_device *dev) in vlan_info_alloc()
141 struct vlan_info *vlan_info; in vlan_info_alloc() local
143 vlan_info = kzalloc(sizeof(struct vlan_info), GFP_KERNEL); in vlan_info_alloc()
144 if (!vlan_info) in vlan_info_alloc()
147 vlan_info->real_dev = dev; in vlan_info_alloc()
148 INIT_LIST_HEAD(&vlan_info->vid_list); in vlan_info_alloc()
149 return vlan_info; in vlan_info_alloc()
171 static struct vlan_vid_info *vlan_vid_info_get(struct vlan_info *vlan_info, in vlan_vid_info_get() argument
176 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vid_info_get()
196 static int __vlan_vid_add(struct vlan_info *vlan_info, __be16 proto, u16 vid, in __vlan_vid_add() argument
199 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_add()
215 list_add(&vid_info->list, &vlan_info->vid_list); in __vlan_vid_add()
216 vlan_info->nr_vids++; in __vlan_vid_add()
223 struct vlan_info *vlan_info; in vlan_vid_add() local
230 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_add()
231 if (!vlan_info) { in vlan_vid_add()
232 vlan_info = vlan_info_alloc(dev); in vlan_vid_add()
233 if (!vlan_info) in vlan_vid_add()
237 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_add()
239 err = __vlan_vid_add(vlan_info, proto, vid, &vid_info); in vlan_vid_add()
246 rcu_assign_pointer(dev->vlan_info, vlan_info); in vlan_vid_add()
252 kfree(vlan_info); in vlan_vid_add()
257 static void __vlan_vid_del(struct vlan_info *vlan_info, in __vlan_vid_del() argument
260 struct net_device *dev = vlan_info->real_dev; in __vlan_vid_del()
275 vlan_info->nr_vids--; in __vlan_vid_del()
280 struct vlan_info *vlan_info; in vlan_vid_del() local
285 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_vid_del()
286 if (!vlan_info) in vlan_vid_del()
289 vid_info = vlan_vid_info_get(vlan_info, proto, vid); in vlan_vid_del()
294 __vlan_vid_del(vlan_info, vid_info); in vlan_vid_del()
295 if (vlan_info->nr_vids == 0) { in vlan_vid_del()
296 RCU_INIT_POINTER(dev->vlan_info, NULL); in vlan_vid_del()
297 call_rcu(&vlan_info->rcu, vlan_info_rcu_free); in vlan_vid_del()
307 struct vlan_info *vlan_info; in vlan_vids_add_by_dev() local
312 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_add_by_dev()
313 if (!vlan_info) in vlan_vids_add_by_dev()
316 list_for_each_entry(vid_info, &vlan_info->vid_list, list) { in vlan_vids_add_by_dev()
325 &vlan_info->vid_list, in vlan_vids_add_by_dev()
338 struct vlan_info *vlan_info; in vlan_vids_del_by_dev() local
342 vlan_info = rtnl_dereference(by_dev->vlan_info); in vlan_vids_del_by_dev()
343 if (!vlan_info) in vlan_vids_del_by_dev()
346 list_for_each_entry(vid_info, &vlan_info->vid_list, list) in vlan_vids_del_by_dev()
353 struct vlan_info *vlan_info; in vlan_uses_dev() local
357 vlan_info = rtnl_dereference(dev->vlan_info); in vlan_uses_dev()
358 if (!vlan_info) in vlan_uses_dev()
360 return vlan_info->grp.nr_vlan_devs ? true : false; in vlan_uses_dev()