Skip to content

Commit 0e90dfa

Browse files
linuswdavem330
authored andcommitted
net: dsa: tag_rtl4_a: Fix egress tags
I noticed that only port 0 worked on the RTL8366RB since we started to use custom tags. It turns out that the format of egress custom tags is actually different from ingress custom tags. While the lower bits just contain the port number in ingress tags, egress tags need to indicate destination port by setting the bit for the corresponding port. It was working on port 0 because port 0 added 0x00 as port number in the lower bits, and if you do this the packet appears at all ports, including the intended port. Ooops. Fix this and all ports work again. Use the define for shifting the "type A" into place while we're at it. Tested on the D-Link DIR-685 by sending traffic to each of the ports in turn. It works. Fixes: 86dd986 ("net: dsa: tag_rtl4_a: Support also egress tags") Cc: DENG Qingfang <[email protected]> Cc: Mauri Sandberg <[email protected]> Signed-off-by: Linus Walleij <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ef6c8da commit 0e90dfa

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

net/dsa/tag_rtl4_a.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,10 @@ static struct sk_buff *rtl4a_tag_xmit(struct sk_buff *skb,
5454
p = (__be16 *)tag;
5555
*p = htons(RTL4_A_ETHERTYPE);
5656

57-
out = (RTL4_A_PROTOCOL_RTL8366RB << 12) | (2 << 8);
58-
/* The lower bits is the port number */
59-
out |= (u8)dp->index;
57+
out = (RTL4_A_PROTOCOL_RTL8366RB << RTL4_A_PROTOCOL_SHIFT) | (2 << 8);
58+
/* The lower bits indicate the port number */
59+
out |= BIT(dp->index);
60+
6061
p = (__be16 *)(tag + 2);
6162
*p = htons(out);
6263

0 commit comments

Comments
 (0)