cregit-Linux how code gets into the kernel

Release 4.14 net/8021q/vlan.h

Directory: net/8021q
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __BEN_VLAN_802_1Q_INC__

#define __BEN_VLAN_802_1Q_INC__

#include <linux/if_vlan.h>
#include <linux/u64_stats_sync.h>
#include <linux/list.h>

/* if this changes, algorithm will have to be reworked because this
 * depends on completely exhausting the VLAN identifier space.  Thus
 * it gives constant time look-up, but in many cases it wastes memory.
 */

#define VLAN_GROUP_ARRAY_SPLIT_PARTS  8

#define VLAN_GROUP_ARRAY_PART_LEN     (VLAN_N_VID/VLAN_GROUP_ARRAY_SPLIT_PARTS)


enum vlan_protos {
	
VLAN_PROTO_8021Q	= 0,
	
VLAN_PROTO_8021AD,
	
VLAN_PROTO_NUM,
};


struct vlan_group {
	
unsigned int		nr_vlan_devs;
	
struct hlist_node	hlist;	/* linked list */
	
struct net_device **vlan_devices_arrays[VLAN_PROTO_NUM]
					       [VLAN_GROUP_ARRAY_SPLIT_PARTS];
};


struct vlan_info {
	
struct net_device	*real_dev; /* The ethernet(like) device
                                            * the vlan is attached to.
                                            */
	
struct vlan_group	grp;
	
struct list_head	vid_list;
	
unsigned int		nr_vids;
	
struct rcu_head		rcu;
};


static inline unsigned int vlan_proto_idx(__be16 proto) { switch (proto) { case htons(ETH_P_8021Q): return VLAN_PROTO_8021Q; case htons(ETH_P_8021AD): return VLAN_PROTO_8021AD; default: BUG(); return 0; } }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy4095.24%375.00%
Joe Perches24.76%125.00%
Total42100.00%4100.00%


static inline struct net_device *__vlan_group_get_device(struct vlan_group *vg, unsigned int pidx, u16 vlan_id) { struct net_device **array; array = vg->vlan_devices_arrays[pidx] [vlan_id / VLAN_GROUP_ARRAY_PART_LEN]; return array ? array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] : NULL; }

Contributors

PersonTokensPropCommitsCommitProp
Jiri Pirko4584.91%150.00%
Patrick McHardy815.09%150.00%
Total53100.00%2100.00%


static inline struct net_device *vlan_group_get_device(struct vlan_group *vg, __be16 vlan_proto, u16 vlan_id) { return __vlan_group_get_device(vg, vlan_proto_idx(vlan_proto), vlan_id); }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy33100.00%1100.00%
Total33100.00%1100.00%


static inline void vlan_group_set_device(struct vlan_group *vg, __be16 vlan_proto, u16 vlan_id, struct net_device *dev) { struct net_device **array; if (!vg) return; array = vg->vlan_devices_arrays[vlan_proto_idx(vlan_proto)] [vlan_id / VLAN_GROUP_ARRAY_PART_LEN]; array[vlan_id % VLAN_GROUP_ARRAY_PART_LEN] = dev; }

Contributors

PersonTokensPropCommitsCommitProp
Jiri Pirko5285.25%150.00%
Patrick McHardy914.75%150.00%
Total61100.00%2100.00%

/* Must be invoked with rcu_read_lock or with RTNL. */
static inline struct net_device *vlan_find_dev(struct net_device *real_dev, __be16 vlan_proto, u16 vlan_id) { struct vlan_info *vlan_info = rcu_dereference_rtnl(real_dev->vlan_info); if (vlan_info) return vlan_group_get_device(&vlan_info->grp, vlan_proto, vlan_id); return NULL; }

Contributors

PersonTokensPropCommitsCommitProp
David Lamparter4076.92%133.33%
Jiri Pirko713.46%133.33%
Patrick McHardy59.62%133.33%
Total52100.00%3100.00%

#define vlan_group_for_each_dev(grp, i, dev) \ for ((i) = 0; i < VLAN_PROTO_NUM * VLAN_N_VID; i++) \ if (((dev) = __vlan_group_get_device((grp), (i) / VLAN_N_VID, \ (i) % VLAN_N_VID))) /* found in vlan_dev.c */ void vlan_dev_set_ingress_priority(const struct net_device *dev, u32 skb_prio, u16 vlan_prio); int vlan_dev_set_egress_priority(const struct net_device *dev, u32 skb_prio, u16 vlan_prio); int vlan_dev_change_flags(const struct net_device *dev, u32 flag, u32 mask); void vlan_dev_get_realdev_name(const struct net_device *dev, char *result); int vlan_check_real_dev(struct net_device *real_dev, __be16 protocol, u16 vlan_id); void vlan_setup(struct net_device *dev); int register_vlan_dev(struct net_device *dev); void unregister_vlan_dev(struct net_device *dev, struct list_head *head); bool vlan_dev_inherit_address(struct net_device *dev, struct net_device *real_dev);
static inline u32 vlan_get_ingress_priority(struct net_device *dev, u16 vlan_tci) { struct vlan_dev_priv *vip = vlan_dev_priv(dev); return vip->ingress_priority_map[(vlan_tci >> VLAN_PRIO_SHIFT) & 0x7]; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy3692.31%250.00%
Jiri Pirko25.13%125.00%
Eric Dumazet12.56%125.00%
Total39100.00%4100.00%

#ifdef CONFIG_VLAN_8021Q_GVRP int vlan_gvrp_request_join(const struct net_device *dev); void vlan_gvrp_request_leave(const struct net_device *dev); int vlan_gvrp_init_applicant(struct net_device *dev); void vlan_gvrp_uninit_applicant(struct net_device *dev); int vlan_gvrp_init(void); void vlan_gvrp_uninit(void); #else
static inline int vlan_gvrp_request_join(const struct net_device *dev) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy16100.00%1100.00%
Total16100.00%1100.00%


static inline void vlan_gvrp_request_leave(const struct net_device *dev) {}

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy12100.00%1100.00%
Total12100.00%1100.00%


static inline int vlan_gvrp_init_applicant(struct net_device *dev) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy15100.00%1100.00%
Total15100.00%1100.00%


static inline void vlan_gvrp_uninit_applicant(struct net_device *dev) {}

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy11100.00%1100.00%
Total11100.00%1100.00%


static inline int vlan_gvrp_init(void) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy12100.00%1100.00%
Total12100.00%1100.00%


static inline void vlan_gvrp_uninit(void) {}

Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy8100.00%1100.00%
Total8100.00%1100.00%

#endif #ifdef CONFIG_VLAN_8021Q_MVRP int vlan_mvrp_request_join(const struct net_device *dev); void vlan_mvrp_request_leave(const struct net_device *dev); int vlan_mvrp_init_applicant(struct net_device *dev); void vlan_mvrp_uninit_applicant(struct net_device *dev); int vlan_mvrp_init(void); void vlan_mvrp_uninit(void); #else
static inline int vlan_mvrp_request_join(const struct net_device *dev) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
David Ward16100.00%1100.00%
Total16100.00%1100.00%


static inline void vlan_mvrp_request_leave(const struct net_device *dev) {}

Contributors

PersonTokensPropCommitsCommitProp
David Ward12100.00%1100.00%
Total12100.00%1100.00%


static inline int vlan_mvrp_init_applicant(struct net_device *dev) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
David Ward15100.00%1100.00%
Total15100.00%1100.00%


static inline void vlan_mvrp_uninit_applicant(struct net_device *dev) {}

Contributors

PersonTokensPropCommitsCommitProp
David Ward11100.00%1100.00%
Total11100.00%1100.00%


static inline int vlan_mvrp_init(void) { return 0; }

Contributors

PersonTokensPropCommitsCommitProp
David Ward12100.00%1100.00%
Total12100.00%1100.00%


static inline void vlan_mvrp_uninit(void) {}

Contributors

PersonTokensPropCommitsCommitProp
David Ward8100.00%1100.00%
Total8100.00%1100.00%

#endif extern const char vlan_fullname[]; extern const char vlan_version[]; int vlan_netlink_init(void); void vlan_netlink_fini(void); extern struct rtnl_link_ops vlan_link_ops; extern unsigned int vlan_net_id; struct proc_dir_entry; struct vlan_net { /* /proc/net/vlan */ struct proc_dir_entry *proc_vlan_dir; /* /proc/net/vlan/config */ struct proc_dir_entry *proc_vlan_conf; /* Determines interface naming scheme. */ unsigned short name_type; }; #endif /* !(__BEN_VLAN_802_1Q_INC__) */

Overall Contributors

PersonTokensPropCommitsCommitProp
Patrick McHardy37344.89%1034.48%
Jiri Pirko16820.22%310.34%
David Ward13115.76%13.45%
David Lamparter414.93%13.45%
Pavel Emelyanov293.49%310.34%
David S. Miller283.37%13.45%
Mike Manning141.68%13.45%
Linus Torvalds121.44%13.45%
Stephen Hemminger121.44%13.45%
Ben Greear101.20%13.45%
Eric Dumazet91.08%310.34%
Joe Perches20.24%13.45%
Alexey Dobriyan10.12%13.45%
Greg Kroah-Hartman10.12%13.45%
Total831100.00%29100.00%
Directory: net/8021q
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.