net: dsa: Implement flow_dissect callback for tag_dsa.
RPS not work for DSA devices since the 'skb_get_hash' will always get the invalid hash for dsa tagged packets. "[PATCH] tag_mtk: add flow_dissect callback to the ops struct" introduced the flow_dissect callback to get the right hash for MTK tagged packet. Tag_dsa and tag_edsa also need to implement the callback. Signed-off-by: Rundong Ge <rdong.ge@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
6e07902f56
Коммит
57fd967838
|
@ -146,8 +146,17 @@ static struct sk_buff *dsa_rcv(struct sk_buff *skb, struct net_device *dev,
|
|||
return skb;
|
||||
}
|
||||
|
||||
static int dsa_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto,
|
||||
int *offset)
|
||||
{
|
||||
*offset = 4;
|
||||
*proto = ((__be16 *)skb->data)[1];
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct dsa_device_ops dsa_netdev_ops = {
|
||||
.xmit = dsa_xmit,
|
||||
.rcv = dsa_rcv,
|
||||
.flow_dissect = dsa_tag_flow_dissect,
|
||||
.overhead = DSA_HLEN,
|
||||
};
|
||||
|
|
|
@ -165,8 +165,17 @@ static struct sk_buff *edsa_rcv(struct sk_buff *skb, struct net_device *dev,
|
|||
return skb;
|
||||
}
|
||||
|
||||
static int edsa_tag_flow_dissect(const struct sk_buff *skb, __be16 *proto,
|
||||
int *offset)
|
||||
{
|
||||
*offset = 8;
|
||||
*proto = ((__be16 *)skb->data)[3];
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct dsa_device_ops edsa_netdev_ops = {
|
||||
.xmit = edsa_xmit,
|
||||
.rcv = edsa_rcv,
|
||||
.flow_dissect = edsa_tag_flow_dissect,
|
||||
.overhead = EDSA_HLEN,
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче