mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-17 22:36:37 +07:00
net: dsa: sja1105: Build a minimal understanding of meta frames
Meta frames are sent on the CPU port by the switch if RX timestamping is enabled. They contain a partial timestamp of the previous frame. They are Ethernet frames with the Ethernet header constructed out of: - SJA1105_META_DMAC - SJA1105_META_SMAC - ETH_P_SJA1105_META The Ethernet payload will be decoded in a follow-up patch. Signed-off-by: Vladimir Oltean <olteanv@gmail.com> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
47ed985e97
commit
d3f9b90bf1
@ -12,6 +12,7 @@
|
||||
#include <net/dsa.h>
|
||||
|
||||
#define ETH_P_SJA1105 ETH_P_DSA_8021Q
|
||||
#define ETH_P_SJA1105_META 0x0008
|
||||
|
||||
/* IEEE 802.3 Annex 57A: Slow Protocols PDUs (01:80:C2:xx:xx:xx) */
|
||||
#define SJA1105_LINKLOCAL_FILTER_A 0x0180C2000000ull
|
||||
@ -20,6 +21,16 @@
|
||||
#define SJA1105_LINKLOCAL_FILTER_B 0x011B19000000ull
|
||||
#define SJA1105_LINKLOCAL_FILTER_B_MASK 0xFFFFFF000000ull
|
||||
|
||||
/* Source and Destination MAC of follow-up meta frames.
|
||||
* Whereas the choice of SMAC only affects the unique identification of the
|
||||
* switch as sender of meta frames, the DMAC must be an address that is present
|
||||
* in the DSA master port's multicast MAC filter.
|
||||
* 01-80-C2-00-00-0E is a good choice for this, as all profiles of IEEE 1588
|
||||
* over L2 use this address for some purpose already.
|
||||
*/
|
||||
#define SJA1105_META_SMAC 0x222222222222ull
|
||||
#define SJA1105_META_DMAC 0x0180C200000Eull
|
||||
|
||||
struct sja1105_port {
|
||||
struct dsa_port *dp;
|
||||
bool hwts_tx_en;
|
||||
|
@ -22,6 +22,21 @@ static inline bool sja1105_is_link_local(const struct sk_buff *skb)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool sja1105_is_meta_frame(const struct sk_buff *skb)
|
||||
{
|
||||
const struct ethhdr *hdr = eth_hdr(skb);
|
||||
u64 smac = ether_addr_to_u64(hdr->h_source);
|
||||
u64 dmac = ether_addr_to_u64(hdr->h_dest);
|
||||
|
||||
if (smac != SJA1105_META_SMAC)
|
||||
return false;
|
||||
if (dmac != SJA1105_META_DMAC)
|
||||
return false;
|
||||
if (ntohs(hdr->h_proto) != ETH_P_SJA1105_META)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* This is the first time the tagger sees the frame on RX.
|
||||
* Figure out if we can decode it, and if we can, annotate skb->cb with how we
|
||||
* plan to do that, so we don't need to check again in the rcv function.
|
||||
|
Loading…
Reference in New Issue
Block a user