Root/
1 | #ifndef __BEN_VLAN_802_1Q_INC__ |
2 | #define __BEN_VLAN_802_1Q_INC__ |
3 | |
4 | #include <linux/if_vlan.h> |
5 | |
6 | |
7 | /** |
8 | * struct vlan_priority_tci_mapping - vlan egress priority mappings |
9 | * @priority: skb priority |
10 | * @vlan_qos: vlan priority: (skb->priority << 13) & 0xE000 |
11 | * @next: pointer to next struct |
12 | */ |
13 | struct vlan_priority_tci_mapping { |
14 | u32 priority; |
15 | u16 vlan_qos; |
16 | struct vlan_priority_tci_mapping *next; |
17 | }; |
18 | |
19 | |
20 | /** |
21 | * struct vlan_rx_stats - VLAN percpu rx stats |
22 | * @rx_packets: number of received packets |
23 | * @rx_bytes: number of received bytes |
24 | * @multicast: number of received multicast packets |
25 | * @rx_errors: number of errors |
26 | */ |
27 | struct vlan_rx_stats { |
28 | unsigned long rx_packets; |
29 | unsigned long rx_bytes; |
30 | unsigned long multicast; |
31 | unsigned long rx_errors; |
32 | }; |
33 | |
34 | /** |
35 | * struct vlan_dev_info - VLAN private device data |
36 | * @nr_ingress_mappings: number of ingress priority mappings |
37 | * @ingress_priority_map: ingress priority mappings |
38 | * @nr_egress_mappings: number of egress priority mappings |
39 | * @egress_priority_map: hash of egress priority mappings |
40 | * @vlan_id: VLAN identifier |
41 | * @flags: device flags |
42 | * @real_dev: underlying netdevice |
43 | * @real_dev_addr: address of underlying netdevice |
44 | * @dent: proc dir entry |
45 | * @cnt_inc_headroom_on_tx: statistic - number of skb expansions on TX |
46 | * @cnt_encap_on_xmit: statistic - number of skb encapsulations on TX |
47 | * @vlan_rx_stats: ptr to percpu rx stats |
48 | */ |
49 | struct vlan_dev_info { |
50 | unsigned int nr_ingress_mappings; |
51 | u32 ingress_priority_map[8]; |
52 | unsigned int nr_egress_mappings; |
53 | struct vlan_priority_tci_mapping *egress_priority_map[16]; |
54 | |
55 | u16 vlan_id; |
56 | u16 flags; |
57 | |
58 | struct net_device *real_dev; |
59 | unsigned char real_dev_addr[ETH_ALEN]; |
60 | |
61 | struct proc_dir_entry *dent; |
62 | unsigned long cnt_inc_headroom_on_tx; |
63 | unsigned long cnt_encap_on_xmit; |
64 | struct vlan_rx_stats __percpu *vlan_rx_stats; |
65 | }; |
66 | |
67 | static inline struct vlan_dev_info *vlan_dev_info(const struct net_device *dev) |
68 | { |
69 | return netdev_priv(dev); |
70 | } |
71 | |
72 | #define VLAN_GRP_HASH_SHIFT 5 |
73 | #define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT) |
74 | #define VLAN_GRP_HASH_MASK (VLAN_GRP_HASH_SIZE - 1) |
75 | |
76 | /* Find a VLAN device by the MAC address of its Ethernet device, and |
77 | * it's VLAN ID. The default configuration is to have VLAN's scope |
78 | * to be box-wide, so the MAC will be ignored. The mac will only be |
79 | * looked at if we are configured to have a separate set of VLANs per |
80 | * each MAC addressable interface. Note that this latter option does |
81 | * NOT follow the spec for VLANs, but may be useful for doing very |
82 | * large quantities of VLAN MUX/DEMUX onto FrameRelay or ATM PVCs. |
83 | * |
84 | * Must be invoked with rcu_read_lock (ie preempt disabled) |
85 | * or with RTNL. |
86 | */ |
87 | struct net_device *__find_vlan_dev(struct net_device *real_dev, u16 vlan_id); |
88 | |
89 | /* found in vlan_dev.c */ |
90 | int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev, |
91 | struct packet_type *ptype, struct net_device *orig_dev); |
92 | void vlan_dev_set_ingress_priority(const struct net_device *dev, |
93 | u32 skb_prio, u16 vlan_prio); |
94 | int vlan_dev_set_egress_priority(const struct net_device *dev, |
95 | u32 skb_prio, u16 vlan_prio); |
96 | int vlan_dev_change_flags(const struct net_device *dev, u32 flag, u32 mask); |
97 | void vlan_dev_get_realdev_name(const struct net_device *dev, char *result); |
98 | |
99 | int vlan_check_real_dev(struct net_device *real_dev, u16 vlan_id); |
100 | void vlan_setup(struct net_device *dev); |
101 | int register_vlan_dev(struct net_device *dev); |
102 | void unregister_vlan_dev(struct net_device *dev, struct list_head *head); |
103 | |
104 | static inline u32 vlan_get_ingress_priority(struct net_device *dev, |
105 | u16 vlan_tci) |
106 | { |
107 | struct vlan_dev_info *vip = vlan_dev_info(dev); |
108 | |
109 | return vip->ingress_priority_map[(vlan_tci >> VLAN_PRIO_SHIFT) & 0x7]; |
110 | } |
111 | |
112 | #ifdef CONFIG_VLAN_8021Q_GVRP |
113 | extern int vlan_gvrp_request_join(const struct net_device *dev); |
114 | extern void vlan_gvrp_request_leave(const struct net_device *dev); |
115 | extern int vlan_gvrp_init_applicant(struct net_device *dev); |
116 | extern void vlan_gvrp_uninit_applicant(struct net_device *dev); |
117 | extern int vlan_gvrp_init(void); |
118 | extern void vlan_gvrp_uninit(void); |
119 | #else |
120 | static inline int vlan_gvrp_request_join(const struct net_device *dev) { return 0; } |
121 | static inline void vlan_gvrp_request_leave(const struct net_device *dev) {} |
122 | static inline int vlan_gvrp_init_applicant(struct net_device *dev) { return 0; } |
123 | static inline void vlan_gvrp_uninit_applicant(struct net_device *dev) {} |
124 | static inline int vlan_gvrp_init(void) { return 0; } |
125 | static inline void vlan_gvrp_uninit(void) {} |
126 | #endif |
127 | |
128 | extern const char vlan_fullname[]; |
129 | extern const char vlan_version[]; |
130 | extern int vlan_netlink_init(void); |
131 | extern void vlan_netlink_fini(void); |
132 | |
133 | extern struct rtnl_link_ops vlan_link_ops; |
134 | |
135 | static inline int is_vlan_dev(struct net_device *dev) |
136 | { |
137 | return dev->priv_flags & IFF_802_1Q_VLAN; |
138 | } |
139 | |
140 | extern int vlan_net_id; |
141 | |
142 | struct proc_dir_entry; |
143 | |
144 | struct vlan_net { |
145 | /* /proc/net/vlan */ |
146 | struct proc_dir_entry *proc_vlan_dir; |
147 | /* /proc/net/vlan/config */ |
148 | struct proc_dir_entry *proc_vlan_conf; |
149 | /* Determines interface naming scheme. */ |
150 | unsigned short name_type; |
151 | }; |
152 | |
153 | #endif /* !(__BEN_VLAN_802_1Q_INC__) */ |
154 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9