Netdev List
 help / color / mirror / Atom feed
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
To: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: netdev@vger.kernel.org, Andrew Lunn <andrew+netdev@lunn.ch>,
	Chintan Vankar <c-vankar@ti.com>,
	Danish Anwar <danishanwar@ti.com>, Daolin Qiu <d-qiu@ti.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Felix Maurer <fmaurer@redhat.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Neelima Muralidharan <neelima@ti.com>,
	Paolo Abeni <pabeni@redhat.com>,
	Praneeth Bajjuri <praneeth@ti.com>,
	Pratheesh Gangadhar TK <pratheesh@ti.com>,
	Richard Cochran <richardcochran@gmail.com>,
	Simon Horman <horms@kernel.org>,
	Vignesh Raghavendra <vigneshr@ti.com>
Subject: Re: [PATCH net-next v5 3/8] hsr: Add a magic header for sending PTP packets
Date: Fri, 18 Sep 2026 18:30:43 +0200	[thread overview]
Message-ID: <20260918163043.nBGatWbi@linutronix.de> (raw)
In-Reply-To: <willemdebruijn.kernel.28f56d129e0b1@gmail.com>

On 2026-05-29 15:58:28 [-0400], Willem de Bruijn wrote:
> > --- a/net/hsr/hsr_device.c
> > +++ b/net/hsr/hsr_device.c
> > @@ -223,24 +223,61 @@ static netdev_features_t hsr_fix_features(struct net_device *dev,
> >  
> >  static netdev_tx_t hsr_dev_xmit(struct sk_buff *skb, struct net_device *dev)
> >  {
> > +	enum hsr_port_type tx_port = HSR_PT_NONE;
> >  	struct hsr_priv *hsr = netdev_priv(dev);
> >  	struct hsr_port *master;
> > +	bool has_header = false;
> >  
> >  	rcu_read_lock();
> >  	master = hsr_port_get_hsr(hsr, HSR_PT_MASTER);
> > -	if (master) {
> > -		skb->dev = master->dev;
> > -		skb_reset_mac_header(skb);
> > -		skb_reset_mac_len(skb);
> > -		spin_lock_bh(&hsr->seqnr_lock);
> > -		hsr_forward_skb(skb, master);
> > -		spin_unlock_bh(&hsr->seqnr_lock);
> > -	} else {
> > -		dev_core_stats_tx_dropped_inc(dev);
> > -		dev_kfree_skb_any(skb);
> > +	if (!master)
> > +		goto drop;
> > +
> > +	skb->dev = master->dev;
> > +	if (skb->protocol == htons(ETH_P_1588)) {
> > +		struct hsr_inline_header *hsr_opt;
> > +		unsigned int hdr_len;
> > +
> > +		BUILD_BUG_ON(sizeof(struct hsr_inline_header) != sizeof(struct ethhdr));
> > +
> > +		/* need to access the magic header */
> > +		if (!pskb_may_pull(skb, sizeof(struct hsr_inline_header)))
> > +			goto drop;
> > +
> > +		hsr_opt = (struct hsr_inline_header *)skb_mac_header(skb);
> > +		if (hsr_opt->magic == htonl(HSR_INLINE_HDR)) {
> > +			struct ethhdr *eth_hdr;
> > +
> > +			has_header = hsr_opt->hsr_hdr;
> > +			tx_port = hsr_opt->tx_port;
> > +			if (tx_port != HSR_PT_SLAVE_A && tx_port != HSR_PT_SLAVE_B)
> > +				goto drop;
> > +
> > +			eth_hdr = skb_pull(skb, sizeof(struct hsr_inline_header));
> > +			if (has_header)
> > +				hdr_len = ETH_HLEN + HSR_HLEN;
> > +			else
> > +				hdr_len = ETH_HLEN;
> > +			skb_set_network_header(skb, hdr_len);
> > +			/* Ensure the header can be accessed */
> > +			if (!pskb_may_pull(skb, hdr_len))
> > +				goto drop;
> > +			skb->protocol = eth_hdr->h_proto;
> > +		}
> 
> Should the packet be dropped otherwise?

We could make the inline header mandatory. Before this change sending
would not work anyway so this wouldn't break anything.
On the HSR side it mandatory and on PRP the stack isn't used here.
Nothing broke after testing. Let me drop the packet if the header is
missing.

Thank you Willem.

> >  	}

Sebastian

  reply	other threads:[~2026-09-18 16:30 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-27 15:08 [PATCH net-next v5 0/8] hsr: Add additional info to send/ receive skbs Sebastian Andrzej Siewior
2026-05-27 15:08 ` [PATCH net-next v5 1/8] hsr: Add header_ops::parse_protocol Sebastian Andrzej Siewior
2026-05-29 19:53   ` Willem de Bruijn
2026-09-18 15:42     ` Sebastian Andrzej Siewior
2026-05-27 15:08 ` [PATCH net-next v5 2/8] hsr: Use skb_clone() while adding the HSR header Sebastian Andrzej Siewior
2026-05-29 19:55   ` Willem de Bruijn
2026-09-18 15:43     ` Sebastian Andrzej Siewior
2026-05-27 15:08 ` [PATCH net-next v5 3/8] hsr: Add a magic header for sending PTP packets Sebastian Andrzej Siewior
2026-05-29 19:58   ` Willem de Bruijn
2026-09-18 16:30     ` Sebastian Andrzej Siewior [this message]
2026-05-27 15:08 ` [PATCH net-next v5 4/8] hsr: Drop received " Sebastian Andrzej Siewior
2026-05-27 15:08 ` [PATCH net-next v5 5/8] hsr: Use the port and header information in hsr_forward_skb() Sebastian Andrzej Siewior
2026-05-27 15:08 ` [PATCH net-next v5 6/8] hsr: Assign a socket for cloned skbs Sebastian Andrzej Siewior
2026-05-27 15:08 ` [PATCH net-next v5 7/8] hsr: Move struct hsr_ethhdr to a global header Sebastian Andrzej Siewior
2026-05-27 15:08 ` [PATCH net-next v5 8/8] selftests: hsr: Add test for the inline PTP header on HSR Sebastian Andrzej Siewior
2026-05-27 19:12   ` Jakub Kicinski
2026-05-28  6:27     ` Sebastian Andrzej Siewior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260918163043.nBGatWbi@linutronix.de \
    --to=bigeasy@linutronix.de \
    --cc=andrew+netdev@lunn.ch \
    --cc=c-vankar@ti.com \
    --cc=d-qiu@ti.com \
    --cc=danishanwar@ti.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=fmaurer@redhat.com \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=neelima@ti.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=praneeth@ti.com \
    --cc=pratheesh@ti.com \
    --cc=richardcochran@gmail.com \
    --cc=vigneshr@ti.com \
    --cc=willemdebruijn.kernel@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox