diff options
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/if_vlan.h | 84 |
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 | ||
| 89 | static inline struct net_device *vlan_group_get_device(struct vlan_group *vg, | 89 | static 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 | ||
| 97 | static inline void vlan_group_set_device(struct vlan_group *vg, | 97 | static 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); | |||
| 122 | extern u16 vlan_dev_vlan_id(const struct net_device *dev); | 122 | extern u16 vlan_dev_vlan_id(const struct net_device *dev); |
| 123 | 123 | ||
| 124 | extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, | 124 | extern 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 |
| 127 | static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev) | 127 | static 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 | ||
| 139 | static inline int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp, | 139 | static 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 | */ | ||
| 147 | static inline int vlan_hwaccel_rx(struct sk_buff *skb, | 153 | static 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 | */ | ||
| 154 | static inline int vlan_hwaccel_receive_skb(struct sk_buff *skb, | 166 | static 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 | */ |
| 172 | static inline struct sk_buff *__vlan_put_tag(struct sk_buff *skb, unsigned short tag) | 184 | static 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 | */ |
| 215 | static inline struct sk_buff *__vlan_hwaccel_put_tag(struct sk_buff *skb, unsigned short tag) | 227 | static 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 | */ |
| 236 | static inline struct sk_buff *vlan_put_tag(struct sk_buff *skb, unsigned short tag) | 249 | static 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 | */ |
| 252 | static inline int __vlan_get_tag(const struct sk_buff *skb, unsigned short *tag) | 265 | static 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 | */ |
| 272 | static inline int __vlan_hwaccel_get_tag(const struct sk_buff *skb, | 284 | static 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 | */ |
| 296 | static inline int vlan_get_tag(const struct sk_buff *skb, unsigned short *tag) | 308 | static 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 | ||
