mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-03 11:13:56 +08:00
net: dsa: Implement flow dissection for tag_brcm.c
Provide a flow_dissect callback which returns the network offset and where to find the skb protocol, given the tags structure a common function works for both tagging formats that are supported. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Reviewed-by: Vivien Didelot <vivien.didelot@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4076c693d3
commit
52015366e3
@ -142,6 +142,27 @@ static struct sk_buff *brcm_tag_rcv_ll(struct sk_buff *skb,
|
|||||||
|
|
||||||
return skb;
|
return skb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int brcm_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto,
|
||||||
|
int *offset)
|
||||||
|
{
|
||||||
|
/* We have been called on the DSA master network device after
|
||||||
|
* eth_type_trans() which pulled the Ethernet header already.
|
||||||
|
* Frames have one of these two layouts:
|
||||||
|
* -----------------------------------
|
||||||
|
* | MAC DA | MAC SA | 4b tag | Type | DSA_TAG_PROTO_BRCM
|
||||||
|
* -----------------------------------
|
||||||
|
* -----------------------------------
|
||||||
|
* | 4b tag | MAC DA | MAC SA | Type | DSA_TAG_PROTO_BRCM_PREPEND
|
||||||
|
* -----------------------------------
|
||||||
|
* skb->data points 2 bytes before the actual Ethernet type field and
|
||||||
|
* we have an offset of 4bytes between where skb->data and where the
|
||||||
|
* payload starts.
|
||||||
|
*/
|
||||||
|
*offset = BRCM_TAG_LEN;
|
||||||
|
*proto = ((__be16 *)skb->data)[1];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM)
|
#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM)
|
||||||
@ -177,6 +198,7 @@ static const struct dsa_device_ops brcm_netdev_ops = {
|
|||||||
.xmit = brcm_tag_xmit,
|
.xmit = brcm_tag_xmit,
|
||||||
.rcv = brcm_tag_rcv,
|
.rcv = brcm_tag_rcv,
|
||||||
.overhead = BRCM_TAG_LEN,
|
.overhead = BRCM_TAG_LEN,
|
||||||
|
.flow_dissect = brcm_tag_flow_dissect,
|
||||||
};
|
};
|
||||||
|
|
||||||
DSA_TAG_DRIVER(brcm_netdev_ops);
|
DSA_TAG_DRIVER(brcm_netdev_ops);
|
||||||
@ -205,6 +227,7 @@ static const struct dsa_device_ops brcm_prepend_netdev_ops = {
|
|||||||
.xmit = brcm_tag_xmit_prepend,
|
.xmit = brcm_tag_xmit_prepend,
|
||||||
.rcv = brcm_tag_rcv_prepend,
|
.rcv = brcm_tag_rcv_prepend,
|
||||||
.overhead = BRCM_TAG_LEN,
|
.overhead = BRCM_TAG_LEN,
|
||||||
|
.flow_dissect = brcm_tag_flow_dissect,
|
||||||
};
|
};
|
||||||
|
|
||||||
DSA_TAG_DRIVER(brcm_prepend_netdev_ops);
|
DSA_TAG_DRIVER(brcm_prepend_netdev_ops);
|
||||||
|
Loading…
Reference in New Issue
Block a user