diff --git a/include/zephyr/net/ethernet.h b/include/zephyr/net/ethernet.h index 7e4a28bcb10b11..a47ec767a608f7 100644 --- a/include/zephyr/net/ethernet.h +++ b/include/zephyr/net/ethernet.h @@ -715,6 +715,22 @@ static inline bool net_eth_is_addr_lldp_multicast(struct net_eth_addr *addr) return false; } +static inline bool net_eth_is_addr_ptp_multicast(struct net_eth_addr *addr) +{ +#if defined(CONFIG_NET_GPTP) + if (addr->addr[0] == 0x01 && + addr->addr[1] == 0x1b && + addr->addr[2] == 0x19 && + addr->addr[3] == 0x00 && + addr->addr[4] == 0x00 && + addr->addr[5] == 0x00) { + return true; + } +#endif + + return false; +} + const struct net_eth_addr *net_eth_broadcast_addr(void); /** @endcond */ diff --git a/subsys/net/l2/ethernet/ethernet.c b/subsys/net/l2/ethernet/ethernet.c index b727f5e4507ef2..4671f20aec1d73 100644 --- a/subsys/net/l2/ethernet/ethernet.c +++ b/subsys/net/l2/ethernet/ethernet.c @@ -302,6 +302,7 @@ static enum net_verdict ethernet_recv(struct net_if *iface, !net_eth_is_addr_multicast((struct net_eth_addr *)lladdr->addr) && !net_eth_is_addr_lldp_multicast( (struct net_eth_addr *)lladdr->addr) && + !net_eth_is_addr_ptp_multicast((struct net_eth_addr *)lladdr->addr) && !net_linkaddr_cmp(net_if_get_link_addr(iface), lladdr)) { /* The ethernet frame is not for me as the link addresses * are different.