aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/linux/if_vlan.h84
1 files changed, 48 insertions, 36 deletions
diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
index 8e68b05b13df..d36515dae62f 100644
--- a/include/linux/if_vlan.h
+++ b/include/linux/if_vlan.h
@@ -87,7 +87,7 @@ struct vlan_group {
87}; 87};
88 88
89static inline struct net_device *vlan_group_get_device(struct vlan_group *vg, 89static inline struct net_device *vlan_group_get_device(struct vlan_group *vg,
90 unsigned int vlan_id) 90 u16 vlan_id)
91{ 91{
92 struct net_device **array; 92 struct net_device **array;
93 array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN]; 93 array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN];
@@ -95,7 +95,7 @@ static inline struct net_device *vlan_group_get_device(struct vlan_group *vg,
95} 95}
96 96
97static inline void vlan_group_set_device(struct vlan_group *vg, 97static inline void vlan_group_set_device(struct vlan_group *vg,
98 unsigned int vlan_id, 98 u16 vlan_id,
99 struct net_device *dev) 99 struct net_device *dev)
100{ 100{
101 struct net_device **array; 101 struct net_device **array;
@@ -122,7 +122,7 @@ extern struct net_device *vlan_dev_real_dev(const struct net_device *dev);
122extern u16 vlan_dev_vlan_id(const struct net_device *dev); 122extern u16 vlan_dev_vlan_id(const struct net_device *dev);
123 123
124extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, 124extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
125 unsigned short vlan_tag, int polling); 125 u16 vlan_tci, int polling);
126#else 126#else
127static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) 127static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev)
128{ 128{
@@ -137,39 +137,51 @@ static inline u16 vlan_dev_vlan_id(const struct net_device *dev)
137} 137}
138 138
139static inline int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, 139static inline int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
140 unsigned short vlan_tag, int polling) 140 u16 vlan_tci, int polling)
141{ 141{
142 BUG(); 142 BUG();
143 return NET_XMIT_SUCCESS; 143 return NET_XMIT_SUCCESS;
144} 144}
145#endif 145#endif
146 146
147/**
148 * vlan_hwaccel_rx - netif_rx wrapper for VLAN RX acceleration
149 * @skb: buffer
150 * @grp: vlan group
151 * @vlan_tci: VLAN TCI as received from the card
152 */
147static inline int vlan_hwaccel_rx(struct sk_buff *skb, 153static inline int vlan_hwaccel_rx(struct sk_buff *skb,
148 struct vlan_group *grp, 154 struct vlan_group *grp,
149 unsigned short vlan_tag) 155 u16 vlan_tci)
150{ 156{
151 return __vlan_hwaccel_rx(skb, grp, vlan_tag, 0); 157 return __vlan_hwaccel_rx(skb, grp, vlan_tci, 0);
152} 158}
153 159
160/**
161 * vlan_hwaccel_receive_skb - netif_receive_skb wrapper for VLAN RX acceleration
162 * @skb: buffer
163 * @grp: vlan group
164 * @vlan_tci: VLAN TCI as received from the card
165 */
154static inline int vlan_hwaccel_receive_skb(struct sk_buff *skb, 166static inline int vlan_hwaccel_receive_skb(struct sk_buff *skb,
155 struct vlan_group *grp, 167 struct vlan_group *grp,
156 unsigned short vlan_tag) 168 u16 vlan_tci)
157{ 169{
158 return __vlan_hwaccel_rx(skb, grp, vlan_tag, 1); 170 return __vlan_hwaccel_rx(skb, grp, vlan_tci, 1);
159} 171}
160 172
161/** 173/**
162 * __vlan_put_tag - regular VLAN tag inserting 174 * __vlan_put_tag - regular VLAN tag inserting
163 * @skb: skbuff to tag 175 * @skb: skbuff to tag
164 * @tag: VLAN tag to insert 176 * @vlan_tci: VLAN TCI to insert
165 * 177 *
166 * Inserts the VLAN tag into @skb as part of the payload 178 * Inserts the VLAN tag into @skb as part of the payload
167 * Returns a VLAN tagged skb. If a new skb is created, @skb is freed. 179 * Returns a VLAN tagged skb. If a new skb is created, @skb is freed.
168 * 180 *
169 * Following the skb_unshare() example, in case of error, the calling function 181 * Following the skb_unshare() example, in case of error, the calling function
170 * doesn't have to worry about freeing the original skb. 182 * doesn't have to worry about freeing the original skb.
171 */ 183 */
172static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short tag) 184static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, u16 vlan_tci)
173{ 185{
174 struct vlan_ethhdr *veth; 186 struct vlan_ethhdr *veth;
175 187
@@ -197,8 +209,8 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short
197 /* first, the ethernet type */ 209 /* first, the ethernet type */
198 veth->h_vlan_proto = htons(ETH_P_8021Q); 210 veth->h_vlan_proto = htons(ETH_P_8021Q);
199 211
200 /* now, the tag */ 212 /* now, the TCI */
201 veth->h_vlan_TCI = htons(tag); 213 veth->h_vlan_TCI = htons(vlan_tci);
202 214
203 skb->protocol = htons(ETH_P_8021Q); 215 skb->protocol = htons(ETH_P_8021Q);
204 216
@@ -208,17 +220,18 @@ static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short
208/** 220/**
209 * __vlan_hwaccel_put_tag - hardware accelerated VLAN inserting 221 * __vlan_hwaccel_put_tag - hardware accelerated VLAN inserting
210 * @skb: skbuff to tag 222 * @skb: skbuff to tag
211 * @tag: VLAN tag to insert 223 * @vlan_tci: VLAN TCI to insert
212 * 224 *
213 * Puts the VLAN tag in @skb->cb[] and lets the device do the rest 225 * Puts the VLAN TCI in @skb->cb[] and lets the device do the rest
214 */ 226 */
215static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, unsigned short tag) 227static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb,
228 u16 vlan_tci)
216{ 229{
217 struct vlan_skb_tx_cookie *cookie; 230 struct vlan_skb_tx_cookie *cookie;
218 231
219 cookie = VLAN_TX_SKB_CB(skb); 232 cookie = VLAN_TX_SKB_CB(skb);
220 cookie->magic = VLAN_TX_COOKIE_MAGIC; 233 cookie->magic = VLAN_TX_COOKIE_MAGIC;
221 cookie->vlan_tag = tag; 234 cookie->vlan_tag = vlan_tci;
222 235
223 return skb; 236 return skb;
224} 237}
@@ -228,28 +241,28 @@ static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, unsign
228/** 241/**
229 * vlan_put_tag - inserts VLAN tag according to device features 242 * vlan_put_tag - inserts VLAN tag according to device features
230 * @skb: skbuff to tag 243 * @skb: skbuff to tag
231 * @tag: VLAN tag to insert 244 * @vlan_tci: VLAN TCI to insert
232 * 245 *
233 * Assumes skb->dev is the target that will xmit this frame. 246 * Assumes skb->dev is the target that will xmit this frame.
234 * Returns a VLAN tagged skb. 247 * Returns a VLAN tagged skb.
235 */ 248 */
236static inline struct sk_buff *vlan_put_tag(struct sk_buff *skb, unsigned short tag) 249static inline struct sk_buff *vlan_put_tag(struct sk_buff *skb, u16 vlan_tci)
237{ 250{
238 if (skb->dev->features & NETIF_F_HW_VLAN_TX) { 251 if (skb->dev->features & NETIF_F_HW_VLAN_TX) {
239 return __vlan_hwaccel_put_tag(skb, tag); 252 return __vlan_hwaccel_put_tag(skb, vlan_tci);
240 } else { 253 } else {
241 return __vlan_put_tag(skb, tag); 254 return __vlan_put_tag(skb, vlan_tci);
242 } 255 }
243} 256}
244 257
245/** 258/**
246 * __vlan_get_tag - get the VLAN ID that is part of the payload 259 * __vlan_get_tag - get the VLAN ID that is part of the payload
247 * @skb: skbuff to query 260 * @skb: skbuff to query
248 * @tag: buffer to store vlaue 261 * @vlan_tci: buffer to store vlaue
249 * 262 *
250 * Returns error if the skb is not of VLAN type 263 * Returns error if the skb is not of VLAN type
251 */ 264 */
252static inline int __vlan_get_tag(const struct sk_buff *skb, unsigned short *tag) 265static inline int __vlan_get_tag(const struct sk_buff *skb, u16 *vlan_tci)
253{ 266{
254 struct vlan_ethhdr *veth = (struct vlan_ethhdr *)skb->data; 267 struct vlan_ethhdr *veth = (struct vlan_ethhdr *)skb->data;
255 268
@@ -257,29 +270,28 @@ static inline int __vlan_get_tag(const struct sk_buff *skb, unsigned short *tag)
257 return -EINVAL; 270 return -EINVAL;
258 } 271 }
259 272
260 *tag = ntohs(veth->h_vlan_TCI); 273 *vlan_tci = ntohs(veth->h_vlan_TCI);
261
262 return 0; 274 return 0;
263} 275}
264 276
265/** 277/**
266 * __vlan_hwaccel_get_tag - get the VLAN ID that is in @skb->cb[] 278 * __vlan_hwaccel_get_tag - get the VLAN ID that is in @skb->cb[]
267 * @skb: skbuff to query 279 * @skb: skbuff to query
268 * @tag: buffer to store vlaue 280 * @vlan_tci: buffer to store vlaue
269 * 281 *
270 * Returns error if @skb->cb[] is not set correctly 282 * Returns error if @skb->cb[] is not set correctly
271 */ 283 */
272static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb, 284static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb,
273 unsigned short *tag) 285 u16 *vlan_tci)
274{ 286{
275 struct vlan_skb_tx_cookie *cookie; 287 struct vlan_skb_tx_cookie *cookie;
276 288
277 cookie = VLAN_TX_SKB_CB(skb); 289 cookie = VLAN_TX_SKB_CB(skb);
278 if (cookie->magic == VLAN_TX_COOKIE_MAGIC) { 290 if (cookie->magic == VLAN_TX_COOKIE_MAGIC) {
279 *tag = cookie->vlan_tag; 291 *vlan_tci = cookie->vlan_tag;
280 return 0; 292 return 0;
281 } else { 293 } else {
282 *tag = 0; 294 *vlan_tci = 0;
283 return -EINVAL; 295 return -EINVAL;
284 } 296 }
285} 297}
@@ -289,16 +301,16 @@ static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb,
289/** 301/**
290 * vlan_get_tag - get the VLAN ID from the skb 302 * vlan_get_tag - get the VLAN ID from the skb
291 * @skb: skbuff to query 303 * @skb: skbuff to query
292 * @tag: buffer to store vlaue 304 * @vlan_tci: buffer to store vlaue
293 * 305 *
294 * Returns error if the skb is not VLAN tagged 306 * Returns error if the skb is not VLAN tagged
295 */ 307 */
296static inline int vlan_get_tag(const struct sk_buff *skb, unsigned short *tag) 308static inline int vlan_get_tag(const struct sk_buff *skb, u16 *vlan_tci)
297{ 309{
298 if (skb->dev->features & NETIF_F_HW_VLAN_TX) { 310 if (skb->dev->features & NETIF_F_HW_VLAN_TX) {
299 return __vlan_hwaccel_get_tag(skb, tag); 311 return __vlan_hwaccel_get_tag(skb, vlan_tci);
300 } else { 312 } else {
301 return __vlan_get_tag(skb, tag); 313 return __vlan_get_tag(skb, vlan_tci);
302 } 314 }
303} 315}
304 316