Re: [RFC net-next 2/2] net: dsa: tag_mtk: handle VLAN tag insertion on TX

From: Vladimir Oltean
Date: Wed Aug 25 2021 - 20:03:55 EST


On Wed, Aug 25, 2021 at 04:38:31PM +0800, DENG Qingfang wrote:
> Advertise TX VLAN offload features, and handle VLAN tag insertion in
> the tag_xmit function.
>
> Signed-off-by: DENG Qingfang <dqfext@xxxxxxxxx>
> ---
> net/dsa/tag_mtk.c | 46 ++++++++++++++++++++++------------------------
> 1 file changed, 22 insertions(+), 24 deletions(-)
>
> diff --git a/net/dsa/tag_mtk.c b/net/dsa/tag_mtk.c
> index 415d8ece242a..e407abefa06c 100644
> --- a/net/dsa/tag_mtk.c
> +++ b/net/dsa/tag_mtk.c
> @@ -22,7 +22,6 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb,
> struct net_device *dev)
> {
> struct dsa_port *dp = dsa_slave_to_port(dev);
> - u8 xmit_tpid;
> u8 *mtk_tag;
>
> /* Build the special tag after the MAC Source Address. If VLAN header
> @@ -31,33 +30,31 @@ static struct sk_buff *mtk_tag_xmit(struct sk_buff *skb,
> * the both special and VLAN tag at the same time and then look up VLAN
> * table with VID.
> */
> - switch (skb->protocol) {
> - case htons(ETH_P_8021Q):
> - xmit_tpid = MTK_HDR_XMIT_TAGGED_TPID_8100;
> - break;
> - case htons(ETH_P_8021AD):
> - xmit_tpid = MTK_HDR_XMIT_TAGGED_TPID_88A8;
> - break;
> - default:
> - xmit_tpid = MTK_HDR_XMIT_UNTAGGED;
> - skb_push(skb, MTK_HDR_LEN);
> - dsa_alloc_etype_header(skb, MTK_HDR_LEN);
> - }
> -

You cannot just remove the old code. Only things like 8021q uppers will
send packets with the VLAN in the hwaccel area.

If you have an application that puts the VLAN in the actual AF_PACKET
payload, like:

https://github.com/vladimiroltean/tsn-scripts/blob/master/isochron/send.c

then you need to handle the VLAN being in the skb payload.