Lines Matching defs:vlan_info

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