Thread (31 messages) 31 messages, 6 authors, 2021-10-14

Re: [PATCH net-next 4/6] net: dsa: tag_rtl8_4: add realtek 8 byte protocol 4 tag

From: Alvin Šipraga <ALSI@bang-olufsen.dk>
Date: 2021-10-13 09:52:12
Also in: lkml, netdev

On 10/13/21 11:45 AM, DENG Qingfang wrote:
On Tue, Oct 12, 2021 at 02:35:53PM +0200, Alvin Šipraga wrote:
quoted
+static struct sk_buff *rtl8_4_tag_rcv(struct sk_buff *skb,
+				      struct net_device *dev)
+{
+	__be16 *tag;
+	u16 etype;
+	u8 proto;
+	u8 port;
+
+	if (unlikely(!pskb_may_pull(skb, RTL8_4_TAG_LEN)))
+		return NULL;
+
+	tag = dsa_etype_header_pos_rx(skb);
+
+	/* Parse Realtek EtherType */
+	etype = ntohs(tag[0]);
+	if (unlikely(etype != ETH_P_REALTEK)) {
+		dev_warn_ratelimited(&dev->dev,
+				     "non-realtek ethertype 0x%04x\n", etype);
+		return NULL;
+	}
+
+	/* Parse Protocol */
+	proto = ntohs(tag[1]) >> 8;
+	if (unlikely(proto != RTL8_4_PROTOCOL_RTL8365MB)) {
+		dev_warn_ratelimited(&dev->dev,
+				     "unknown realtek protocol 0x%02x\n",
+				     proto);
+		return NULL;
+	}
+
+	/* Parse TX (switch->CPU) */
+	port = ntohs(tag[3]) & 0xf; /* Port number is the LSB 4 bits */
+	skb->dev = dsa_master_find_slave(dev, 0, port);
+	if (!skb->dev) {
+		dev_warn_ratelimited(&dev->dev,
+				     "could not find slave for port %d\n",
+				     port);
+		return NULL;
+	}
+
+	/* Remove tag and recalculate checksum */
+	skb_pull_rcsum(skb, RTL8_4_TAG_LEN);
+
+	dsa_strip_etype_header(skb, RTL8_4_TAG_LEN);
+
+	dsa_default_offload_fwd_mark(skb);
This should not be set if the REASON is trapped to CPU.
Thanks, you're right. Although with the current state of the driver, 
skb->offload_fwd_mark will never get set, because the bridge is not 
offloaded onto the HW. But I will fix this up in v2.
quoted
+
+	return skb;
+}
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help