realtek: correct l2 offloading tag handling
Makes sure the DSA trailer information on any L2 offloading done by the switch is honoured by the bridge layer Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
This commit is contained in:
parent
dc9cc0d3e2
commit
56ac4fced0
@ -9,21 +9,24 @@
|
|||||||
+ trailer[1] = dp->index;
|
+ trailer[1] = dp->index;
|
||||||
+#else
|
+#else
|
||||||
trailer[1] = 1 << dp->index;
|
trailer[1] = 1 << dp->index;
|
||||||
+#endif /* CONFIG_NET_DSA_RTL83XX */
|
+#endif /* CONFIG_NET_DSA_RTL838X */
|
||||||
trailer[2] = 0x10;
|
trailer[2] = 0x10;
|
||||||
trailer[3] = 0x00;
|
trailer[3] = 0x00;
|
||||||
|
|
||||||
@@ -61,12 +66,20 @@ static struct sk_buff *trailer_rcv(struc
|
@@ -61,12 +69,23 @@ static struct sk_buff *trailer_rcv(struc
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
trailer = skb_tail_pointer(skb) - 4;
|
trailer = skb_tail_pointer(skb) - 4;
|
||||||
+
|
+
|
||||||
+#ifdef CONFIG_NET_DSA_RTL83XX
|
+#ifdef CONFIG_NET_DSA_RTL83XX
|
||||||
+ if (trailer[0] != 0x80 || (trailer[1] & 0xe0) != 0x00 ||
|
+ if (trailer[0] != 0x80 || (trailer[1] & 0x80) != 0x00 ||
|
||||||
+ (trailer[2] & 0xef) != 0x00 || trailer[3] != 0x00)
|
+ (trailer[2] & 0xef) != 0x00 || trailer[3] != 0x00)
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+
|
+
|
||||||
+ source_port = trailer[1] & 0x1f;
|
+ if (trailer[1] & 0x40)
|
||||||
|
+ skb->offload_fwd_mark = 1;
|
||||||
|
+
|
||||||
|
+ source_port = trailer[1] & 0x3f;
|
||||||
+#else
|
+#else
|
||||||
if (trailer[0] != 0x80 || (trailer[1] & 0xf8) != 0x00 ||
|
if (trailer[0] != 0x80 || (trailer[1] & 0xf8) != 0x00 ||
|
||||||
(trailer[2] & 0xef) != 0x00 || trailer[3] != 0x00)
|
(trailer[2] & 0xef) != 0x00 || trailer[3] != 0x00)
|
||||||
|
Loading…
Reference in New Issue
Block a user