12#ifndef ZEPHYR_INCLUDE_NET_ETHERNET_H_
13#define ZEPHYR_INCLUDE_NET_ETHERNET_H_
31#if defined(CONFIG_NVMEM)
48#define NET_ETH_ADDR_LEN 6U
57#define NET_ETH_HDR(pkt) ((struct net_eth_hdr *)net_pkt_data(pkt))
60#define NET_ETH_PTYPE_ALL 0x0003
61#define NET_ETH_PTYPE_ARP 0x0806
62#define NET_ETH_PTYPE_CAN 0x000C
63#define NET_ETH_PTYPE_CANFD 0x000D
64#define NET_ETH_PTYPE_EAPOL 0x888e
65#define NET_ETH_PTYPE_ECAT 0x88a4
66#define NET_ETH_PTYPE_HDLC 0x0019
67#define NET_ETH_PTYPE_IEEE802154 0x00F6
68#define NET_ETH_PTYPE_IP 0x0800
69#define NET_ETH_PTYPE_IPV6 0x86dd
70#define NET_ETH_PTYPE_LLDP 0x88cc
71#define NET_ETH_PTYPE_PTP 0x88f7
72#define NET_ETH_PTYPE_TSN 0x22f0
73#define NET_ETH_PTYPE_VLAN 0x8100
77#if !defined(ETH_P_8021Q)
78#define ETH_P_8021Q NET_ETH_PTYPE_VLAN
80#if !defined(ETH_P_ALL)
81#define ETH_P_ALL NET_ETH_PTYPE_ALL
83#if !defined(ETH_P_ARP)
84#define ETH_P_ARP NET_ETH_PTYPE_ARP
86#if !defined(ETH_P_CAN)
87#define ETH_P_CAN NET_ETH_PTYPE_CAN
89#if !defined(ETH_P_CANFD)
90#define ETH_P_CANFD NET_ETH_PTYPE_CANFD
92#if !defined(ETH_P_EAPOL)
93#define ETH_P_EAPOL NET_ETH_PTYPE_EAPOL
95#if !defined(ETH_P_ECAT)
96#define ETH_P_ECAT NET_ETH_PTYPE_ECAT
98#if !defined(ETH_P_HDLC)
99#define ETH_P_HDLC NET_ETH_PTYPE_HDLC
101#if !defined(ETH_P_IEEE802154)
102#define ETH_P_IEEE802154 NET_ETH_PTYPE_IEEE802154
104#if !defined(ETH_P_IP)
105#define ETH_P_IP NET_ETH_PTYPE_IP
107#if !defined(ETH_P_IPV6)
108#define ETH_P_IPV6 NET_ETH_PTYPE_IPV6
110#if !defined(ETH_P_TSN)
111#define ETH_P_TSN NET_ETH_PTYPE_TSN
117#define NET_ETH_MINIMAL_FRAME_SIZE 60
118#define NET_ETH_MTU 1500
122#if defined(CONFIG_NET_VLAN)
123#define _NET_ETH_MAX_HDR_SIZE (sizeof(struct net_eth_vlan_hdr))
125#define _NET_ETH_MAX_HDR_SIZE (sizeof(struct net_eth_hdr))
128#define _NET_ETH_MAX_FRAME_SIZE (NET_ETH_MTU + _NET_ETH_MAX_HDR_SIZE)
130#if defined(CONFIG_DSA_TAG_SIZE)
131#define DSA_TAG_SIZE CONFIG_DSA_TAG_SIZE
133#define DSA_TAG_SIZE 0
136#define NET_ETH_MAX_FRAME_SIZE (_NET_ETH_MAX_FRAME_SIZE + DSA_TAG_SIZE)
137#define NET_ETH_MAX_HDR_SIZE (_NET_ETH_MAX_HDR_SIZE + DSA_TAG_SIZE)
139#define NET_ETH_VLAN_HDR_SIZE 4
216enum ethernet_config_type {
217 ETHERNET_CONFIG_TYPE_MAC_ADDRESS,
218 ETHERNET_CONFIG_TYPE_QAV_PARAM,
219 ETHERNET_CONFIG_TYPE_QBV_PARAM,
220 ETHERNET_CONFIG_TYPE_QBU_PARAM,
221 ETHERNET_CONFIG_TYPE_TXTIME_PARAM,
222 ETHERNET_CONFIG_TYPE_PROMISC_MODE,
223 ETHERNET_CONFIG_TYPE_PRIORITY_QUEUES_NUM,
224 ETHERNET_CONFIG_TYPE_FILTER,
225 ETHERNET_CONFIG_TYPE_PORTS_NUM,
226 ETHERNET_CONFIG_TYPE_TXINJECTION_MODE,
227 ETHERNET_CONFIG_TYPE_RX_CHECKSUM_SUPPORT,
228 ETHERNET_CONFIG_TYPE_TX_CHECKSUM_SUPPORT,
229 ETHERNET_CONFIG_TYPE_EXTRA_TX_PKT_HEADROOM,
232enum ethernet_qav_param_type {
233 ETHERNET_QAV_PARAM_TYPE_DELTA_BANDWIDTH,
234 ETHERNET_QAV_PARAM_TYPE_IDLE_SLOPE,
235 ETHERNET_QAV_PARAM_TYPE_OPER_IDLE_SLOPE,
236 ETHERNET_QAV_PARAM_TYPE_TRAFFIC_CLASS,
237 ETHERNET_QAV_PARAM_TYPE_STATUS,
247 enum ethernet_qav_param_type
type;
264enum ethernet_qbv_param_type {
265 ETHERNET_QBV_PARAM_TYPE_STATUS,
266 ETHERNET_QBV_PARAM_TYPE_GATE_CONTROL_LIST,
267 ETHERNET_QBV_PARAM_TYPE_GATE_CONTROL_LIST_LEN,
268 ETHERNET_QBV_PARAM_TYPE_TIME,
271enum ethernet_qbv_state_type {
272 ETHERNET_QBV_STATE_TYPE_ADMIN,
273 ETHERNET_QBV_STATE_TYPE_OPER,
276enum ethernet_gate_state_operation {
277 ETHERNET_SET_GATE_STATE,
278 ETHERNET_SET_AND_HOLD_MAC_STATE,
279 ETHERNET_SET_AND_RELEASE_MAC_STATE,
289 enum ethernet_qbv_param_type
type;
333enum ethernet_qbu_param_type {
334 ETHERNET_QBU_PARAM_TYPE_STATUS,
335 ETHERNET_QBU_PARAM_TYPE_RELEASE_ADVANCE,
336 ETHERNET_QBU_PARAM_TYPE_HOLD_ADVANCE,
337 ETHERNET_QBU_PARAM_TYPE_PREEMPTION_STATUS_TABLE,
340 ETHERNET_QBR_PARAM_TYPE_LINK_PARTNER_STATUS,
341 ETHERNET_QBR_PARAM_TYPE_ADDITIONAL_FRAGMENT_SIZE,
344enum ethernet_qbu_preempt_status {
345 ETHERNET_QBU_STATUS_EXPRESS,
346 ETHERNET_QBU_STATUS_PREEMPTABLE
356 enum ethernet_qbu_param_type
type;
365 enum ethernet_qbu_preempt_status
384enum ethernet_filter_type {
385 ETHERNET_FILTER_TYPE_SRC_MAC_ADDRESS,
386 ETHERNET_FILTER_TYPE_DST_MAC_ADDRESS,
427 enum ethernet_filter_type
type;
440#if defined(CONFIG_NET_L2_ETHERNET) && !defined(CONFIG_NET_RAW_MODE) && \
441 (defined(CONFIG_NET_NATIVE_IP) || \
442 defined(CONFIG_NET_SOCKETS_PACKET_MCAST_MEMBERSHIP))
443#define NET_ETH_MCAST_FILTER_SUPPORTED 1
451#ifndef NET_ETH_MCAST_FILTER_COUNT
452#define NET_ETH_MCAST_FILTER_COUNT CONFIG_NET_L2_ETHERNET_MCAST_FILTER_COUNT
480enum ethernet_txtime_param_type {
481 ETHERNET_TXTIME_PARAM_TYPE_ENABLE_QUEUES,
489 enum ethernet_txtime_param_type
type;
516struct ethernet_config {
519 bool txinjection_mode;
521 struct net_eth_addr mac_address;
523 struct ethernet_qav_param qav_param;
524 struct ethernet_qbv_param qbv_param;
525 struct ethernet_qbu_param qbu_param;
526 struct ethernet_txtime_param txtime_param;
528 int priority_queues_num;
533 struct ethernet_filter filter;
563#if defined(CONFIG_NET_STATISTICS_ETHERNET)
588 enum ethernet_config_type type,
589 const struct ethernet_config *config);
594 enum ethernet_config_type type,
595 struct ethernet_config *config);
602#if defined(CONFIG_NET_VLAN)
603 int (*vlan_setup)(
const struct device *dev,
struct net_if *iface,
608#if defined(CONFIG_PTP_CLOCK)
609 const struct device *(*get_ptp_clock)(
const struct device *dev,
struct net_if *iface);
624BUILD_ASSERT(offsetof(
struct ethernet_api, iface_api) == 0);
632struct ethernet_vlan {
634 struct net_if *iface;
640#if defined(CONFIG_NET_VLAN_COUNT)
641#define NET_VLAN_MAX_COUNT CONFIG_NET_VLAN_COUNT
643#define NET_VLAN_MAX_COUNT 0
676struct ethernet_context {
682#if defined(CONFIG_NET_ETHERNET_BRIDGE)
683 struct net_if *bridge;
692 struct k_work carrier_work;
695 struct net_if *iface;
697#if defined(CONFIG_NET_LLDP)
699 struct ethernet_lldp lldp;
707#if defined(CONFIG_NET_GPTP)
715#if defined(CONFIG_NET_DSA)
717 enum dsa_port_type dsa_port;
720 void *dsa_switch_ctx;
723#if defined(NET_ETH_MCAST_FILTER_SUPPORTED)
725 struct net_eth_mcast_addr mcast_addrs[NET_ETH_MCAST_FILTER_COUNT];
729 bool is_net_carrier_up : 1;
743void ethernet_init(
struct net_if *iface);
745#define ETHERNET_L2_CTX_TYPE struct ethernet_context
750struct net_eth_vlan_hdr {
751 struct net_eth_addr dst;
752 struct net_eth_addr src;
771 if (addr->
addr[0] == 0xff &&
772 addr->
addr[1] == 0xff &&
773 addr->
addr[2] == 0xff &&
774 addr->
addr[3] == 0xff &&
775 addr->
addr[4] == 0xff &&
776 addr->
addr[5] == 0xff) {
792 if (addr->
addr[0] == 0x00 &&
793 addr->
addr[1] == 0x00 &&
794 addr->
addr[2] == 0x00 &&
795 addr->
addr[3] == 0x00 &&
796 addr->
addr[4] == 0x00 &&
797 addr->
addr[5] == 0x00) {
813 if (addr->
addr[0] == 0x00 &&
814 addr->
addr[1] == 0x00 &&
815 addr->
addr[2] == 0x00 &&
816 addr->
addr[3] == 0x00 &&
817 addr->
addr[4] == 0x00 &&
818 addr->
addr[5] == 0x00) {
834 return addr->
addr[0] & 0x01;
870 if (addr->
addr[0] == 0x01 &&
871 addr->
addr[1] == 0x80 &&
872 addr->
addr[2] == 0xc2 &&
873 addr->
addr[3] == 0x00 &&
874 addr->
addr[4] == 0x00 &&
875 addr->
addr[5] == 0x0e) {
891 if (addr->
addr[0] == 0x01 &&
892 addr->
addr[1] == 0x1b &&
893 addr->
addr[2] == 0x19 &&
894 addr->
addr[3] == 0x00 &&
895 addr->
addr[4] == 0x00 &&
896 addr->
addr[5] == 0x00) {
940#if defined(NET_ETH_MCAST_FILTER_SUPPORTED) || defined(__DOXYGEN__)
1021 ARG_UNUSED(user_data);
1039#if defined(CONFIG_NET_DSA)
1042 NET_ASSERT(eth_ctx != NULL);
1044 if (eth_ctx->dsa_port == DSA_CONDUIT_PORT) {
1046 }
else if (eth_ctx->dsa_port == DSA_USER_PORT) {
1050 NET_ASSERT(dev != NULL);
1071 struct ethernet_config *config)
1076 NET_ASSERT(dev != NULL);
1080 NET_ASSERT(eth != NULL);
1086 return eth->
get_config(dev, iface, type, config);
1098#if defined(CONFIG_NET_VLAN) && NET_VLAN_MAX_COUNT > 0
1118#if defined(CONFIG_NET_VLAN) && NET_VLAN_MAX_COUNT > 0
1141#if defined(CONFIG_NET_VLAN) && NET_VLAN_MAX_COUNT > 0
1161#if defined(CONFIG_NET_VLAN) && NET_VLAN_MAX_COUNT > 0
1204#if defined(CONFIG_NET_VLAN) && NET_VLAN_MAX_COUNT > 0
1225#if defined(CONFIG_NET_VLAN) && NET_VLAN_MAX_COUNT > 0
1243#if defined(CONFIG_NET_VLAN) && NET_VLAN_MAX_COUNT > 0
1256#if !defined(CONFIG_ETH_DRIVER_RAW_MODE)
1258#define Z_ETH_NET_DEVICE_INIT_INSTANCE(node_id, dev_id, name, instance, \
1259 init_fn, pm, data, config, prio, \
1261 Z_NET_DEVICE_INIT_INSTANCE(node_id, dev_id, name, instance, \
1262 init_fn, pm, data, config, prio, \
1264 NET_L2_GET_CTX_TYPE(ETHERNET_L2), mtu)
1268#define Z_ETH_NET_DEVICE_INIT_INSTANCE(node_id, dev_id, name, instance, \
1269 init_fn, pm, data, config, prio, \
1271 Z_DEVICE_STATE_DEFINE(dev_id); \
1272 Z_DEVICE_DEFINE(node_id, dev_id, name, init_fn, NULL, \
1273 Z_DEVICE_DT_FLAGS(node_id), pm, data, \
1274 config, POST_KERNEL, prio, api, \
1275 &Z_DEVICE_STATE_NAME(dev_id));
1279#define Z_ETH_NET_DEVICE_INIT(node_id, dev_id, name, init_fn, pm, data, \
1280 config, prio, api, mtu) \
1281 Z_ETH_NET_DEVICE_INIT_INSTANCE(node_id, dev_id, name, 0, \
1282 init_fn, pm, data, config, prio, \
1304#define ETH_NET_DEVICE_INIT(dev_id, name, init_fn, pm, data, config, \
1306 Z_ETH_NET_DEVICE_INIT(DT_INVALID_NODE, dev_id, name, init_fn, \
1307 pm, data, config, prio, api, mtu)
1331#define ETH_NET_DEVICE_INIT_INSTANCE(dev_id, name, instance, init_fn, \
1332 pm, data, config, prio, api, mtu) \
1333 Z_ETH_NET_DEVICE_INIT_INSTANCE(DT_INVALID_NODE, dev_id, name, \
1334 instance, init_fn, pm, data, \
1335 config, prio, api, mtu)
1353#define ETH_NET_DEVICE_DT_DEFINE(node_id, init_fn, pm, data, config, \
1355 Z_ETH_NET_DEVICE_INIT(node_id, Z_DEVICE_DT_DEV_ID(node_id), \
1356 DEVICE_DT_NAME(node_id), init_fn, pm, \
1357 data, config, prio, api, mtu)
1368#define ETH_NET_DEVICE_DT_INST_DEFINE(inst, ...) \
1369 ETH_NET_DEVICE_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
1378#define ETH_NET_L3_REGISTER(name, ptype, handler) \
1379 NET_L3_REGISTER(&NET_L2_GET_NAME(ETHERNET), name, ptype, handler)
1409#if defined(CONFIG_NVMEM) || defined(__DOXYGEN__)
1445 mac_addr[0] &= ~0x01;
1447 mac_addr[0] |= 0x02;
1452#if defined(CONFIG_NVMEM)
1468#if defined(CONFIG_NVMEM) || defined(__DOXYGEN__)
1475#define Z_NET_ETH_MAC_DEV_CONFIG_INIT_CELL(node_id) \
1476 .cell = NVMEM_CELL_GET_BY_NAME_OR(node_id, mac_address, {0}),
1478#define Z_NET_ETH_MAC_DEV_CONFIG_INIT_CELL(node_id)
1481#define Z_NET_ETH_MAC_DT_CONFIG_INIT_RANDOM(node_id) \
1483 .type = NET_ETH_MAC_RANDOM, \
1484 .addr = DT_PROP_OR(node_id, zephyr_mac_address_prefix, {0}), \
1485 .addr_len = DT_PROP_LEN_OR(node_id, zephyr_mac_address_prefix, 0), \
1488#define Z_NET_ETH_MAC_DT_CONFIG_INIT_NVMEM(node_id) \
1490 .type = NET_ETH_MAC_NVMEM, \
1491 .addr = DT_PROP_OR(node_id, zephyr_mac_address_prefix, {0}), \
1492 .addr_len = DT_PROP_LEN_OR(node_id, zephyr_mac_address_prefix, 0), \
1493 Z_NET_ETH_MAC_DEV_CONFIG_INIT_CELL(node_id) \
1496#define Z_NET_ETH_MAC_DT_CONFIG_INIT_STATIC(node_id) \
1498 .type = NET_ETH_MAC_STATIC, \
1499 .addr = DT_PROP(node_id, local_mac_address), \
1500 .addr_len = DT_PROP_LEN(node_id, local_mac_address), \
1503#define Z_NET_ETH_MAC_DT_CONFIG_INIT_DEFAULT(node_id) \
1505 .type = NET_ETH_MAC_DEFAULT, \
1515#define NET_ETH_MAC_DT_CONFIG_INIT(node_id) \
1516 COND_CASE_1(DT_PROP(node_id, zephyr_random_mac_address), \
1517 (Z_NET_ETH_MAC_DT_CONFIG_INIT_RANDOM(node_id)), \
1518 DT_NVMEM_CELLS_HAS_NAME(node_id, mac_address), \
1519 (Z_NET_ETH_MAC_DT_CONFIG_INIT_NVMEM(node_id)), \
1520 DT_NODE_HAS_PROP(node_id, local_mac_address), \
1521 (Z_NET_ETH_MAC_DT_CONFIG_INIT_STATIC(node_id)), \
1522 (Z_NET_ETH_MAC_DT_CONFIG_INIT_DEFAULT(node_id)))
1531#define NET_ETH_MAC_DT_INST_CONFIG_INIT(inst) \
1532 NET_ETH_MAC_DT_CONFIG_INIT(DT_DRV_INST(inst))
1606 enum ethernet_filter_type type,
bool enable);
1625#if defined(CONFIG_PTP_CLOCK)
1656 const struct ethernet_context *ctx = (
struct ethernet_context *)
1659 NET_ASSERT(ctx != NULL);
1673 const struct ethernet_context *ctx = (
struct ethernet_context *)
net_if_l2_data(iface);
1675 NET_ASSERT(ctx != NULL);
1687 struct ethernet_context *ctx = (
struct ethernet_context *)
net_if_l2_data(iface);
1689 NET_ASSERT(ctx != NULL);
1702#include <zephyr/syscalls/ethernet.h>
Header file for the Atomic operations API.
VLAN specific definitions.
long atomic_t
Atomic integer variable.
Definition atomic_types.h:31
static struct net_if * net_eth_get_vlan_main(struct net_if *iface)
Return main network interface that is attached to this VLAN tag.
Definition ethernet.h:1185
static int net_eth_get_hw_config(struct net_if *iface, enum ethernet_config_type type, struct ethernet_config *config)
Return ethernet device hardware configuration information.
Definition ethernet.h:1070
ethernet_if_types
Types of Ethernet L2.
Definition ethernet.h:392
static int net_eth_vlan_enable(struct net_if *iface, uint16_t tag)
Add VLAN tag to the interface.
Definition ethernet.h:1101
static bool net_eth_is_addr_all_zeroes(struct net_eth_addr *addr)
Check if the Ethernet MAC address is a all zeroes address.
Definition ethernet.h:790
void net_eth_ipv4_mcast_to_mac_addr(const struct net_in_addr *ipv4_addr, struct net_eth_addr *mac_addr)
Convert IPv4 multicast address to Ethernet address.
static bool net_eth_is_addr_multicast(struct net_eth_addr *addr)
Check if the Ethernet MAC address is a multicast address.
Definition ethernet.h:832
static const struct device * net_eth_get_ptp_clock(struct net_if *iface)
Return PTP clock that is tied to this ethernet network interface.
Definition ethernet.h:1628
#define NET_ETH_ADDR_LEN
Ethernet MAC address length.
Definition ethernet.h:48
int net_eth_mcast_addr_rm(struct net_if *iface, const struct net_eth_addr *addr)
Leave a L2 multicast group on a network interface.
int net_eth_mcast_addr_add(struct net_if *iface, const struct net_eth_addr *addr)
Join a L2 multicast group on a network interface.
int net_eth_promisc_mode(struct net_if *iface, bool enable)
Set promiscuous mode either ON or OFF.
static uint16_t net_eth_get_vlan_tag(struct net_if *iface)
Return VLAN tag specified to network interface.
Definition ethernet.h:1144
static void net_eth_carrier_on(struct net_if *iface)
Inform ethernet L2 driver that ethernet carrier is detected.
Definition ethernet.h:1549
static bool net_eth_type_is_wifi(struct net_if *iface)
Check if the Ethernet L2 network interface can perform Wi-Fi.
Definition ethernet.h:1654
const struct device * net_eth_get_phy(struct net_if *iface)
Return the PHY device that is tied to this ethernet network interface.
static bool net_eth_is_addr_broadcast(struct net_eth_addr *addr)
Check if the Ethernet MAC address is a broadcast address.
Definition ethernet.h:769
static bool net_eth_get_vlan_status(struct net_if *iface)
Get VLAN status for a given network interface (enabled or not).
Definition ethernet.h:1228
void net_eth_mcast_addr_foreach(struct net_if *iface, net_eth_mcast_addr_cb_t cb, void *user_data)
Go through all the L2 multicast addresses of a network interface.
const struct device * net_eth_get_ptp_clock_by_index(int index)
Return PTP clock that is tied to this ethernet network interface index.
static bool net_eth_is_addr_unspecified(struct net_eth_addr *addr)
Check if the Ethernet MAC address is unspecified.
Definition ethernet.h:811
static bool net_eth_is_vlan_interface(struct net_if *iface)
Check if the given interface is a VLAN interface.
Definition ethernet.h:1246
void(* net_eth_mcast_addr_cb_t)(struct net_if *iface, const struct net_eth_mcast_addr *addr, void *user_data)
Callback used by net_eth_mcast_addr_foreach().
Definition ethernet.h:936
ethernet_hw_caps
Ethernet hardware capabilities.
Definition ethernet.h:144
int net_eth_mac_filter(struct net_if *iface, struct net_eth_addr *mac, enum ethernet_filter_type type, bool enable)
Set or unset HW filtering for MAC address mac.
void net_eth_ipv6_mcast_to_mac_addr(const struct net_in6_addr *ipv6_addr, struct net_eth_addr *mac_addr)
Convert IPv6 multicast address to Ethernet address.
static void net_eth_carrier_off(struct net_if *iface)
Inform ethernet L2 driver that ethernet carrier was lost.
Definition ethernet.h:1560
static int net_eth_mac_load(const struct net_eth_mac_config *cfg, uint8_t *mac_addr)
Load a MAC address from a MAC address configuration structure with the specified type.
Definition ethernet.h:1432
static void net_eth_set_if_type_wifi(struct net_if *iface)
Set the Ethernet interface type to Wi-Fi.
Definition ethernet.h:1685
void net_eth_carrier_set(struct net_if *iface, bool carrier_up)
Inform ethernet L2 driver that ethernet carrier is detected or was lost.
static enum ethernet_hw_caps net_eth_get_hw_capabilities(struct net_if *iface)
Return ethernet device hardware capability information.
Definition ethernet.h:1034
static int net_eth_vlan_disable(struct net_if *iface, uint16_t tag)
Remove VLAN tag from the interface.
Definition ethernet.h:1121
ethernet_checksum_support
Protocols that are supported by checksum offloading.
Definition ethernet.h:497
ethernet_stats_type
Ethernet statistics type (bitmap).
Definition ethernet.h:542
net_eth_mac_type
MAC address configuration types.
Definition ethernet.h:1382
static bool net_eth_is_vlan_enabled(struct ethernet_context *ctx, struct net_if *iface)
Check if there are any VLAN interfaces enabled to this specific Ethernet network interface or if prio...
Definition ethernet.h:1208
static struct net_if * net_eth_get_vlan_iface(struct net_if *iface, uint16_t tag)
Return network interface related to this VLAN tag.
Definition ethernet.h:1165
static bool net_eth_type_is_ethernet(struct net_if *iface)
Check if the Ethernet L2 network interface is cabled ethernet.
Definition ethernet.h:1671
const struct net_eth_addr * net_eth_broadcast_addr(void)
Return Ethernet broadcast address.
static bool net_eth_is_addr_unicast(struct net_eth_addr *addr)
Check if the Ethernet MAC address is an unicast address.
Definition ethernet.h:844
static bool net_eth_is_addr_lldp_multicast(struct net_eth_addr *addr)
Check if the Ethernet MAC address is a LLDP multicast address.
Definition ethernet.h:868
static bool net_eth_is_addr_ptp_multicast(struct net_eth_addr *addr)
Check if the Ethernet MAC address is a PTP multicast address.
Definition ethernet.h:889
static bool net_eth_is_addr_valid(struct net_eth_addr *addr)
Check if the Ethernet MAC address is valid.
Definition ethernet.h:856
int net_eth_txinjection_mode(struct net_if *iface, bool enable)
Set TX-Injection mode either ON or OFF.
@ L2_ETH_IF_TYPE_ETHERNET
IEEE 802.3 Ethernet (default).
Definition ethernet.h:394
@ L2_ETH_IF_TYPE_WIFI
IEEE 802.11 Wi-Fi.
Definition ethernet.h:397
@ ETHERNET_HW_VLAN
VLAN supported.
Definition ethernet.h:152
@ ETHERNET_DSA_USER_PORT
DSA switch user port.
Definition ethernet.h:188
@ ETHERNET_PRIORITY_QUEUES
Priority queues available.
Definition ethernet.h:176
@ ETHERNET_HW_VLAN_TAG_STRIP
VLAN Tag stripping.
Definition ethernet.h:185
@ ETHERNET_LINK_100BASE
100 Mbits link supported
Definition ethernet.h:158
@ ETHERNET_DSA_CONDUIT_PORT
DSA switch conduit port.
Definition ethernet.h:191
@ ETHERNET_LINK_10BASE
10 Mbits link supported
Definition ethernet.h:155
@ ETHERNET_HW_FILTERING
MAC address filtering supported.
Definition ethernet.h:179
@ ETHERNET_LINK_1000BASE
1 Gbits link supported
Definition ethernet.h:161
@ ETHERNET_QBU
IEEE 802.1Qbu (frame preemption) supported.
Definition ethernet.h:197
@ ETHERNET_TXINJECTION_MODE
TX-Injection supported.
Definition ethernet.h:203
@ ETHERNET_QAV
IEEE 802.1Qav (credit-based shaping) supported.
Definition ethernet.h:170
@ ETHERNET_HW_RX_CHKSUM_OFFLOAD
RX Checksum offloading supported for all of IPv4, UDP, TCP.
Definition ethernet.h:149
@ ETHERNET_LLDP
Link Layer Discovery Protocol supported.
Definition ethernet.h:182
@ ETHERNET_LINK_5000BASE
5 Gbits link supported
Definition ethernet.h:167
@ ETHERNET_TXTIME
TXTIME supported.
Definition ethernet.h:200
@ ETHERNET_QBV
IEEE 802.1Qbv (scheduled traffic) supported.
Definition ethernet.h:194
@ ETHERNET_PROMISC_MODE
Promiscuous mode supported.
Definition ethernet.h:173
@ ETHERNET_HW_TX_CHKSUM_OFFLOAD
TX Checksum offloading supported for all of IPv4, UDP, TCP.
Definition ethernet.h:146
@ ETHERNET_LINK_2500BASE
2.5 Gbits link supported
Definition ethernet.h:164
@ ETHERNET_CHECKSUM_SUPPORT_UDP
Device supports UDP checksum offloading for all supported IP protocols.
Definition ethernet.h:511
@ ETHERNET_CHECKSUM_SUPPORT_TCP
Device supports TCP checksum offloading for all supported IP protocols.
Definition ethernet.h:509
@ ETHERNET_CHECKSUM_SUPPORT_IPV6_HEADER
Device supports checksum offloading for the IPv6 header.
Definition ethernet.h:505
@ ETHERNET_CHECKSUM_SUPPORT_IPV4_ICMP
Device supports checksum offloading for ICMPv4 payload (implies IPv4 header).
Definition ethernet.h:503
@ ETHERNET_CHECKSUM_SUPPORT_IPV4_HEADER
Device supports checksum offloading for the IPv4 header.
Definition ethernet.h:501
@ ETHERNET_CHECKSUM_SUPPORT_NONE
Device does not support any L3/L4 checksum offloading.
Definition ethernet.h:499
@ ETHERNET_CHECKSUM_SUPPORT_IPV6_ICMP
Device supports checksum offloading for ICMPv6 payload (implies IPv6 header).
Definition ethernet.h:507
@ ETHERNET_STATS_TYPE_VENDOR
Vendor statistics only.
Definition ethernet.h:546
@ ETHERNET_STATS_TYPE_ALL
All statistics.
Definition ethernet.h:548
@ ETHERNET_STATS_TYPE_COMMON
Common statistics only (excludes vendor statistics).
Definition ethernet.h:544
@ NET_ETH_MAC_RANDOM
A random MAC address is generated during initialization.
Definition ethernet.h:1386
@ NET_ETH_MAC_NVMEM
The MAC address is read from an NVMEM cell.
Definition ethernet.h:1391
@ NET_ETH_MAC_DEFAULT
MAC address is handled by the driver (backwards compatible case).
Definition ethernet.h:1384
@ NET_ETH_MAC_STATIC
A static MAC address is provided in the device tree.
Definition ethernet.h:1393
enum net_verdict(* net_lldp_recv_cb_t)(struct net_if *iface, struct net_pkt *pkt)
LLDP Receive packet callback.
Definition lldp.h:213
static void * net_if_l2_data(struct net_if *iface)
Get a pointer to the interface L2 private data.
Definition net_if.h:1096
static const struct device * net_if_get_device(struct net_if *iface)
Get an network interface's device.
Definition net_if.h:1114
net_l2_flags
L2 flags.
Definition net_l2.h:37
int nvmem_cell_read(const struct nvmem_cell *cell, void *data, off_t off, size_t len)
Read data from an NVMEM cell.
void sys_rand_get(void *dst, size_t len)
Fill the destination buffer with random data values that should pass general randomness tests.
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:44
#define IS_ENABLED(config_macro)
Check for macro definition in compiler-visible expressions.
Definition util_macro.h:154
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
#define ENODATA
Missing expected message data.
Definition errno.h:78
#define EINVAL
Invalid argument.
Definition errno.h:61
#define ENOTSUP
Unsupported value.
Definition errno.h:115
struct net_if * net_virtual_get_iface(struct net_if *iface)
Return network interface related to this virtual network interface.
#define NET_VLAN_TAG_UNSPEC
Unspecified VLAN tag value.
Definition ethernet_vlan.h:32
#define NET_VLAN_TAG_PRIORITY
VLAN ID for forwarding to the native interface (priority tagging).
Definition ethernet_vlan.h:35
LLDP definitions and handler.
Public API for network interface.
IPv6 and IPv4 definitions.
Network packet buffer descriptor API.
Public NVMEM header file.
flags
Definition parser.h:97
Public functions for the Precision Time Protocol time specification.
Random number generator header file.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
void * memcpy(void *ZRESTRICT d, const void *ZRESTRICT s, size_t n)
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Ethernet L2 API operations.
Definition ethernet.h:552
struct net_if_api iface_api
The net_if_api must be placed in first position in this struct so that we are compatible with network...
Definition ethernet.h:557
int(* start)(const struct device *dev, struct net_if *iface)
Collect optional ethernet specific statistics.
Definition ethernet.h:577
int(* stop)(const struct device *dev, struct net_if *iface)
Stop the device.
Definition ethernet.h:580
int(* send)(const struct device *dev, struct net_pkt *pkt)
Send a network packet.
Definition ethernet.h:616
int(* set_config)(const struct device *dev, struct net_if *iface, enum ethernet_config_type type, const struct ethernet_config *config)
Set specific hardware configuration.
Definition ethernet.h:586
int(* get_config)(const struct device *dev, struct net_if *iface, enum ethernet_config_type type, struct ethernet_config *config)
Get hardware specific configuration.
Definition ethernet.h:592
enum ethernet_hw_caps(* get_capabilities)(const struct device *dev, struct net_if *iface)
Get the device capabilities.
Definition ethernet.h:583
Ethernet filter description.
Definition ethernet.h:425
struct net_eth_addr mac_address
MAC address to filter.
Definition ethernet.h:429
bool set
Set (true) or unset (false) the filter.
Definition ethernet.h:431
enum ethernet_filter_type type
Type of filter.
Definition ethernet.h:427
Ethernet LLDP specific parameters.
Definition ethernet.h:649
const uint8_t * optional_du
LLDP Data Unit optional TLVs for the interface.
Definition ethernet.h:657
sys_snode_t node
Used for track timers.
Definition ethernet.h:651
net_lldp_recv_cb_t cb
LLDP RX callback function.
Definition ethernet.h:666
k_timepoint_t tx_timer_timeout
LLDP TX timer timeout.
Definition ethernet.h:663
size_t optional_len
Length of the optional Data Unit TLVs.
Definition ethernet.h:660
const struct net_lldpdu * lldpdu
LLDP Data Unit mandatory TLVs for the interface.
Definition ethernet.h:654
Ethernet Qav specific parameters.
Definition ethernet.h:243
bool enabled
True if Qav is enabled for queue.
Definition ethernet.h:250
unsigned int oper_idle_slope
Oper Idle Slope (bits per second).
Definition ethernet.h:256
enum ethernet_qav_param_type type
Type of Qav parameter.
Definition ethernet.h:247
unsigned int traffic_class
Traffic class the queue is bound to.
Definition ethernet.h:258
int queue_id
ID of the priority queue to use.
Definition ethernet.h:245
unsigned int idle_slope
Idle Slope (bits per second).
Definition ethernet.h:254
unsigned int delta_bandwidth
Delta Bandwidth (percentage of bandwidth).
Definition ethernet.h:252
Ethernet Qbu specific parameters.
Definition ethernet.h:352
enum ethernet_qbu_preempt_status frame_preempt_statuses[NET_TC_TX_COUNT]
sequence of framePreemptionAdminStatus values
Definition ethernet.h:365
uint32_t release_advance
Release advance (nanoseconds).
Definition ethernet.h:362
enum ethernet_qbu_param_type type
Type of Qbu parameter.
Definition ethernet.h:356
uint32_t hold_advance
Hold advance (nanoseconds).
Definition ethernet.h:359
bool enabled
True if Qbu is enabled or not.
Definition ethernet.h:369
bool link_partner_status
Link partner status (from Qbr).
Definition ethernet.h:372
int port_id
Port id.
Definition ethernet.h:354
uint8_t additional_fragment_size
Additional fragment size (from Qbr).
Definition ethernet.h:378
Ethernet Qbv specific parameters.
Definition ethernet.h:285
int port_id
Port id.
Definition ethernet.h:287
bool enabled
True if Qbv is enabled or not.
Definition ethernet.h:294
struct ethernet_qbv_param::@055246010323023270273151373302031315361103011354::@066201007326270006176246045126267167014036102070 gate_control
Gate control information.
enum ethernet_qbv_param_type type
Type of Qbv parameter.
Definition ethernet.h:289
uint16_t row
Gate control list row.
Definition ethernet.h:308
enum ethernet_qbv_state_type state
What state (Admin/Oper) parameters are these.
Definition ethernet.h:291
bool gate_status[NET_TC_TX_COUNT]
True = open, False = closed.
Definition ethernet.h:299
struct net_ptp_extended_time base_time
Base time.
Definition ethernet.h:320
uint32_t extension_time
Extension time (nanoseconds).
Definition ethernet.h:326
enum ethernet_gate_state_operation operation
GateState operation.
Definition ethernet.h:302
uint32_t time_interval
Time interval ticks (nanoseconds).
Definition ethernet.h:305
struct net_ptp_time cycle_time
Cycle time.
Definition ethernet.h:323
uint32_t gate_control_list_len
Number of entries in gate control list.
Definition ethernet.h:312
Ethernet TXTIME specific parameters.
Definition ethernet.h:487
bool enable_txtime
Enable or disable TXTIME per queue.
Definition ethernet.h:493
int queue_id
Queue number for configuring TXTIME.
Definition ethernet.h:491
enum ethernet_txtime_param_type type
Type of TXTIME parameter.
Definition ethernet.h:489
Kernel timepoint type.
Definition clock.h:291
Ethernet address.
Definition ethernet.h:51
uint8_t addr[6U]
Buffer storing the address.
Definition ethernet.h:52
MAC address configuration.
Definition ethernet.h:1397
enum net_eth_mac_type type
The configuration type.
Definition ethernet.h:1399
struct nvmem_cell cell
The NVMEM cell to read the MAC address from.
Definition ethernet.h:1414
uint8_t addr[6U]
The static MAC address part.
Definition ethernet.h:1406
uint8_t addr_len
The length of the statically provided part.
Definition ethernet.h:1408
L2 multicast address of a network interface.
Definition ethernet.h:463
struct net_eth_addr addr
Multicast MAC address.
Definition ethernet.h:465
uint8_t is_used
Is this address used or not.
Definition ethernet.h:473
atomic_t atomic_ref
Reference counter.
Definition ethernet.h:470
Network Interface structure.
Definition net_if.h:764
IPv6 address struct.
Definition net_ip.h:144
IPv4 address struct.
Definition net_ip.h:156
LLDP Data Unit (LLDPDU) shall contain the following ordered TLVs as stated in "8.2 LLDPDU format" fro...
Definition lldp.h:172
Network packet.
Definition net_pkt.h:119
Generalized Precision Time Protocol Extended Timestamp format.
Definition ptp_time.h:154
(Generalized) Precision Time Protocol Timestamp format.
Definition ptp_time.h:111
All Ethernet specific statistics.
Definition net_stats.h:647
Non-Volatile Memory cell representation.
Definition nvmem.h:37
Virtual Network Interface.