Skip to content

Commit

Permalink
dp83640: Include hash in timestamp/packet matching
Browse files Browse the repository at this point in the history
Only using the message type and sequence id for matching timestamps
with packets is error prone, as multiple clients may very well be
sending packets with the same messagetype and timestamp at the same
time. Fix by extending the check to include the hash of bytes 20-29
(source id in PTPv2) that is provided with the timestamps.

Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Stefan Sørensen authored and David S. Miller committed Nov 3, 2015
1 parent 0561e8e commit 539e44d
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions drivers/net/phy/dp83640.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/crc32.h>
#include <linux/ethtool.h>
#include <linux/kernel.h>
#include <linux/list.h>
Expand Down Expand Up @@ -787,9 +788,12 @@ static int decode_evnt(struct dp83640_private *dp83640,
return parsed;
}

#define DP83640_PACKET_HASH_OFFSET 20
#define DP83640_PACKET_HASH_LEN 10

static int match(struct sk_buff *skb, unsigned int type, struct rxts *rxts)
{
u16 *seqid;
u16 *seqid, hash;
unsigned int offset = 0;
u8 *msgtype, *data = skb_mac_header(skb);

Expand Down Expand Up @@ -819,11 +823,19 @@ static int match(struct sk_buff *skb, unsigned int type, struct rxts *rxts)
msgtype = data + offset + OFF_PTP_CONTROL;
else
msgtype = data + offset;
if (rxts->msgtype != (*msgtype & 0xf))
return 0;

seqid = (u16 *)(data + offset + OFF_PTP_SEQUENCE_ID);
if (rxts->seqid != ntohs(*seqid))
return 0;

hash = ether_crc(DP83640_PACKET_HASH_LEN,
data + offset + DP83640_PACKET_HASH_OFFSET) >> 20;
if (rxts->hash != hash)
return 0;

return rxts->msgtype == (*msgtype & 0xf) &&
rxts->seqid == ntohs(*seqid);
return 1;
}

static void decode_rxts(struct dp83640_private *dp83640,
Expand Down

0 comments on commit 539e44d

Please sign in to comment.