From: Christian Eggers <ceggers@arri.de>
To: "David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Krzysztof Halasa <khalasa@piap.pl>,
Richard Cochran <richardcochran@gmail.com>
Cc: Vishal Kulkarni <vishal@chelsio.com>,
Florian Fainelli <f.fainelli@gmail.com>, <netdev@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
Christian Eggers <ceggers@arri.de>
Subject: [PATCH net-next] net: ptp: get rid of IPV4_HLEN() and OFF_IHL macros
Date: Wed, 14 Oct 2020 13:58:05 +0200 [thread overview]
Message-ID: <20201014115805.23905-1-ceggers@arri.de> (raw)
Both macros are already marked for removal. IPV4_HLEN(data) is
misleading as it expects an Ethernet header instead of an IPv4 header as
argument. Because it is defined (and only used) within PTP, it should be
named PTP_IPV4_HLEN or similar.
As the whole rest of the IPv4 stack has no problems using iphdr->ihl
directly, also PTP should be able to do so.
OFF_IHL has only been used by IPV4_HLEN. Additionally it is superfluous
as ETH_HLEN already exists for the same.
Signed-off-by: Christian Eggers <ceggers@arri.de>
---
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c | 4 ++--
drivers/net/ethernet/chelsio/cxgb4/sge.c | 5 ++++-
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 4 +++-
drivers/net/ethernet/xscale/ixp4xx_eth.c | 4 +++-
include/linux/ptp_classify.h | 2 --
net/core/ptp_classifier.c | 6 +++---
6 files changed, 15 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c
index 70dbee89118e..b32a9006b222 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c
@@ -83,8 +83,8 @@ bool is_ptp_enabled(struct sk_buff *skb, struct net_device *dev)
*/
bool cxgb4_ptp_is_ptp_rx(struct sk_buff *skb)
{
- struct udphdr *uh = (struct udphdr *)(skb->data + ETH_HLEN +
- IPV4_HLEN(skb->data));
+ struct iphdr *ih = (struct iphdr *)(skb->data + ETH_HLEN);
+ struct udphdr *uh = (struct udphdr *)((char *)ih + (ih->ihl << 2));
return uh->dest == htons(PTP_EVENT_PORT) &&
uh->source == htons(PTP_EVENT_PORT);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
index a9e9c7ae565d..c8bec874bc66 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
@@ -40,6 +40,7 @@
#include <linux/dma-mapping.h>
#include <linux/jiffies.h>
#include <linux/prefetch.h>
+#include <linux/ptp_classify.h>
#include <linux/export.h>
#include <net/xfrm.h>
#include <net/ipv6.h>
@@ -3386,7 +3387,9 @@ static noinline int t4_systim_to_hwstamp(struct adapter *adapter,
data = skb->data + sizeof(*cpl);
skb_pull(skb, 2 * sizeof(u64) + sizeof(struct cpl_rx_mps_pkt));
- offset = ETH_HLEN + IPV4_HLEN(skb->data) + UDP_HLEN;
+ offset = ETH_HLEN;
+ offset += ((struct iphdr *)(skb->data + offset))->ihl << 2;
+ offset += UDP_HLEN;
if (skb->len < offset + OFF_PTP_SEQUENCE_ID + sizeof(short))
return RX_PTP_PKT_ERR;
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
index ade8c44c01cd..4e95621997d1 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
@@ -113,7 +113,9 @@ static int pch_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid)
if (ptp_classify_raw(skb) == PTP_CLASS_NONE)
return 0;
- offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
+ offset = ETH_HLEN;
+ offset += ((struct iphdr *)(data + offset))->ihl << 2;
+ offset += UDP_HLEN;
if (skb->len < offset + OFF_PTP_SEQUENCE_ID + sizeof(seqid))
return 0;
diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c
index 2e5202923510..7443bc1f9bec 100644
--- a/drivers/net/ethernet/xscale/ixp4xx_eth.c
+++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c
@@ -264,7 +264,9 @@ static int ixp_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid)
if (ptp_classify_raw(skb) != PTP_CLASS_V1_IPV4)
return 0;
- offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
+ offset = ETH_HLEN;
+ offset += ((struct iphdr *)(data + offset))->ihl << 2;
+ offset += UDP_HLEN;
if (skb->len < offset + OFF_PTP_SEQUENCE_ID + sizeof(seqid))
return 0;
diff --git a/include/linux/ptp_classify.h b/include/linux/ptp_classify.h
index c6487b7ab026..56b2d7d66177 100644
--- a/include/linux/ptp_classify.h
+++ b/include/linux/ptp_classify.h
@@ -40,8 +40,6 @@
/* Below defines should actually be removed at some point in time. */
#define IP6_HLEN 40
#define UDP_HLEN 8
-#define OFF_IHL 14
-#define IPV4_HLEN(data) (((struct iphdr *)(data + OFF_IHL))->ihl << 2)
struct clock_identity {
u8 id[8];
diff --git a/net/core/ptp_classifier.c b/net/core/ptp_classifier.c
index e33fde06d528..6a964639b704 100644
--- a/net/core/ptp_classifier.c
+++ b/net/core/ptp_classifier.c
@@ -114,9 +114,11 @@ struct ptp_header *ptp_parse_header(struct sk_buff *skb, unsigned int type)
if (type & PTP_CLASS_VLAN)
ptr += VLAN_HLEN;
+ ptr += ETH_HLEN;
+
switch (type & PTP_CLASS_PMASK) {
case PTP_CLASS_IPV4:
- ptr += IPV4_HLEN(ptr) + UDP_HLEN;
+ ptr += (((struct iphdr *)ptr)->ihl << 2) + UDP_HLEN;
break;
case PTP_CLASS_IPV6:
ptr += IP6_HLEN + UDP_HLEN;
@@ -127,8 +129,6 @@ struct ptp_header *ptp_parse_header(struct sk_buff *skb, unsigned int type)
return NULL;
}
- ptr += ETH_HLEN;
-
/* Ensure that the entire header is present in this packet. */
if (ptr + sizeof(struct ptp_header) > skb->data + skb->len)
return NULL;
--
Christian Eggers
Embedded software developer
Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
Sitz: Muenchen - Registergericht: Amtsgericht Muenchen - Handelsregisternummer: HRA 57918
Persoenlich haftender Gesellschafter: Arnold & Richter Cine Technik GmbH
Sitz: Muenchen - Registergericht: Amtsgericht Muenchen - Handelsregisternummer: HRB 54477
Geschaeftsfuehrer: Dr. Michael Neuhaeuser; Stephan Schenk; Walter Trauninger; Markus Zeiler
next reply other threads:[~2020-10-14 11:58 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-14 11:58 Christian Eggers [this message]
2020-10-15 3:36 ` [PATCH net-next] net: ptp: get rid of IPV4_HLEN() and OFF_IHL macros Richard Cochran
2020-10-15 16:56 ` Florian Fainelli
2020-10-16 7:04 ` Christian Eggers
2020-10-16 12:52 ` Richard Cochran
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=20201014115805.23905-1-ceggers@arri.de \
--to=ceggers@arri.de \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=khalasa@piap.pl \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=richardcochran@gmail.com \
--cc=vishal@chelsio.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.