vlan: Move vlan_set_encap_proto() to vlan header file
Open vSwitch needs this function for vlan handling. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
parent
b4e16611c4
commit
396cf94305
|
@ -310,6 +310,40 @@ static inline __be16 vlan_get_protocol(const struct sk_buff *skb)
|
||||||
|
|
||||||
return protocol;
|
return protocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void vlan_set_encap_proto(struct sk_buff *skb,
|
||||||
|
struct vlan_hdr *vhdr)
|
||||||
|
{
|
||||||
|
__be16 proto;
|
||||||
|
unsigned char *rawp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Was a VLAN packet, grab the encapsulated protocol, which the layer
|
||||||
|
* three protocols care about.
|
||||||
|
*/
|
||||||
|
|
||||||
|
proto = vhdr->h_vlan_encapsulated_proto;
|
||||||
|
if (ntohs(proto) >= 1536) {
|
||||||
|
skb->protocol = proto;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rawp = skb->data;
|
||||||
|
if (*(unsigned short *) rawp == 0xFFFF)
|
||||||
|
/*
|
||||||
|
* This is a magic hack to spot IPX packets. Older Novell
|
||||||
|
* breaks the protocol design and runs IPX over 802.3 without
|
||||||
|
* an 802.2 LLC layer. We look for FFFF which isn't a used
|
||||||
|
* 802.2 SSAP/DSAP. This won't work for fault tolerant netware
|
||||||
|
* but does for the rest.
|
||||||
|
*/
|
||||||
|
skb->protocol = htons(ETH_P_802_3);
|
||||||
|
else
|
||||||
|
/*
|
||||||
|
* Real 802.2 LLC
|
||||||
|
*/
|
||||||
|
skb->protocol = htons(ETH_P_802_2);
|
||||||
|
}
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
|
|
||||||
/* VLAN IOCTLs are found in sockios.h */
|
/* VLAN IOCTLs are found in sockios.h */
|
||||||
|
|
|
@ -110,39 +110,6 @@ static struct sk_buff *vlan_reorder_header(struct sk_buff *skb)
|
||||||
return skb;
|
return skb;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void vlan_set_encap_proto(struct sk_buff *skb, struct vlan_hdr *vhdr)
|
|
||||||
{
|
|
||||||
__be16 proto;
|
|
||||||
unsigned char *rawp;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Was a VLAN packet, grab the encapsulated protocol, which the layer
|
|
||||||
* three protocols care about.
|
|
||||||
*/
|
|
||||||
|
|
||||||
proto = vhdr->h_vlan_encapsulated_proto;
|
|
||||||
if (ntohs(proto) >= 1536) {
|
|
||||||
skb->protocol = proto;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
rawp = skb->data;
|
|
||||||
if (*(unsigned short *) rawp == 0xFFFF)
|
|
||||||
/*
|
|
||||||
* This is a magic hack to spot IPX packets. Older Novell
|
|
||||||
* breaks the protocol design and runs IPX over 802.3 without
|
|
||||||
* an 802.2 LLC layer. We look for FFFF which isn't a used
|
|
||||||
* 802.2 SSAP/DSAP. This won't work for fault tolerant netware
|
|
||||||
* but does for the rest.
|
|
||||||
*/
|
|
||||||
skb->protocol = htons(ETH_P_802_3);
|
|
||||||
else
|
|
||||||
/*
|
|
||||||
* Real 802.2 LLC
|
|
||||||
*/
|
|
||||||
skb->protocol = htons(ETH_P_802_2);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct sk_buff *vlan_untag(struct sk_buff *skb)
|
struct sk_buff *vlan_untag(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct vlan_hdr *vhdr;
|
struct vlan_hdr *vhdr;
|
||||||
|
|
Loading…
Reference in New Issue