realtek: correct l2 offloading tag handling
authorBirger Koblitz <git@birger-koblitz.de>
Thu, 21 Jan 2021 13:32:44 +0000 (14:32 +0100)
committerPetr Štetiar <ynezz@true.cz>
Tue, 26 Jan 2021 14:06:50 +0000 (15:06 +0100)
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>
target/linux/realtek/patches-5.4/701-net-dsa-add-rtl838x-support-for-tag-trailer.patch

index c8a09c50d3805c4fd3441a35afe3226f409eb2d8..7bfbd0a5f6f3d14637fe5ebe893dff64a479d7fa 100644 (file)
@@ -9,21 +9,24 @@
 +      trailer[1] = dp->index;
 +#else
        trailer[1] = 1 << dp->index;
-+#endif /* CONFIG_NET_DSA_RTL83XX */
++#endif /* CONFIG_NET_DSA_RTL838X */
        trailer[2] = 0x10;
        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;
  
        trailer = skb_tail_pointer(skb) - 4;
 +
 +#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)
 +              return NULL;
 +
-+      source_port = trailer[1] & 0x1f;
++      if (trailer[1] & 0x40)
++              skb->offload_fwd_mark = 1;
++
++      source_port = trailer[1] & 0x3f;
 +#else
        if (trailer[0] != 0x80 || (trailer[1] & 0xf8) != 0x00 ||
            (trailer[2] & 0xef) != 0x00 || trailer[3] != 0x00)