Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ethernet.h
Go to the documentation of this file.
1
7/*
8 * Copyright (c) 2016 Intel Corporation
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12
13#ifndef ZEPHYR_INCLUDE_NET_ETHERNET_H_
14#define ZEPHYR_INCLUDE_NET_ETHERNET_H_
15
16#include <zephyr/kernel.h>
17#include <zephyr/types.h>
18#include <stdbool.h>
19#include <zephyr/sys/atomic.h>
20
21#include <zephyr/net/net_ip.h>
22#include <zephyr/net/net_pkt.h>
23
24#if defined(CONFIG_NET_LLDP)
25#include <zephyr/net/lldp.h>
26#endif
27
28#include <zephyr/sys/util.h>
29#include <zephyr/net/net_if.h>
31#include <zephyr/net/ptp_time.h>
32
33#if defined(CONFIG_NET_DSA)
34#include <zephyr/net/dsa.h>
35#endif
36
37#if defined(CONFIG_NET_ETHERNET_BRIDGE)
39#endif
40
41#ifdef __cplusplus
42extern "C" {
43#endif
44
54struct net_eth_addr {
55 uint8_t addr[6];
56};
57
58#define NET_ETH_HDR(pkt) ((struct net_eth_hdr *)net_pkt_data(pkt))
59
60#define NET_ETH_PTYPE_ARP 0x0806
61#define NET_ETH_PTYPE_IP 0x0800
62#define NET_ETH_PTYPE_TSN 0x22f0 /* TSN (IEEE 1722) packet */
63#define NET_ETH_PTYPE_IPV6 0x86dd
64#define NET_ETH_PTYPE_VLAN 0x8100
65#define NET_ETH_PTYPE_PTP 0x88f7
66#define NET_ETH_PTYPE_LLDP 0x88cc
67#define NET_ETH_PTYPE_ALL 0x0003 /* from linux/if_ether.h */
68#define NET_ETH_PTYPE_ECAT 0x88a4
69#define NET_ETH_PTYPE_EAPOL 0x888e
70#define NET_ETH_PTYPE_IEEE802154 0x00F6 /* from linux/if_ether.h: IEEE802.15.4 frame */
71
72#if !defined(ETH_P_ALL)
73#define ETH_P_ALL NET_ETH_PTYPE_ALL
74#endif
75#if !defined(ETH_P_IP)
76#define ETH_P_IP NET_ETH_PTYPE_IP
77#endif
78#if !defined(ETH_P_ARP)
79#define ETH_P_ARP NET_ETH_PTYPE_ARP
80#endif
81#if !defined(ETH_P_IPV6)
82#define ETH_P_IPV6 NET_ETH_PTYPE_IPV6
83#endif
84#if !defined(ETH_P_8021Q)
85#define ETH_P_8021Q NET_ETH_PTYPE_VLAN
86#endif
87#if !defined(ETH_P_TSN)
88#define ETH_P_TSN NET_ETH_PTYPE_TSN
89#endif
90#if !defined(ETH_P_ECAT)
91#define ETH_P_ECAT NET_ETH_PTYPE_ECAT
92#endif
93#if !defined(ETH_P_IEEE802154)
94#define ETH_P_IEEE802154 NET_ETH_PTYPE_IEEE802154
95#endif
96
97#define NET_ETH_MINIMAL_FRAME_SIZE 60
98#define NET_ETH_MTU 1500
99
100#if defined(CONFIG_NET_VLAN)
101#define _NET_ETH_MAX_HDR_SIZE (sizeof(struct net_eth_vlan_hdr))
102#else
103#define _NET_ETH_MAX_HDR_SIZE (sizeof(struct net_eth_hdr))
104#endif
105
106#define _NET_ETH_MAX_FRAME_SIZE (NET_ETH_MTU + _NET_ETH_MAX_HDR_SIZE)
107/*
108 * Extend the max frame size for DSA (KSZ8794) by one byte (to 1519) to
109 * store tail tag.
110 */
111#if defined(CONFIG_NET_DSA)
112#define NET_ETH_MAX_FRAME_SIZE (_NET_ETH_MAX_FRAME_SIZE + DSA_TAG_SIZE)
113#define NET_ETH_MAX_HDR_SIZE (_NET_ETH_MAX_HDR_SIZE + DSA_TAG_SIZE)
114#else
115#define NET_ETH_MAX_FRAME_SIZE (_NET_ETH_MAX_FRAME_SIZE)
116#define NET_ETH_MAX_HDR_SIZE (_NET_ETH_MAX_HDR_SIZE)
117#endif
118
119#define NET_ETH_VLAN_HDR_SIZE 4
120
127
130
133
136
139
142
145
148
151
154
157
160
163
166
169
173
176
179
182};
183
186enum ethernet_config_type {
187 ETHERNET_CONFIG_TYPE_AUTO_NEG,
188 ETHERNET_CONFIG_TYPE_LINK,
189 ETHERNET_CONFIG_TYPE_DUPLEX,
190 ETHERNET_CONFIG_TYPE_MAC_ADDRESS,
191 ETHERNET_CONFIG_TYPE_QAV_PARAM,
192 ETHERNET_CONFIG_TYPE_QBV_PARAM,
193 ETHERNET_CONFIG_TYPE_QBU_PARAM,
194 ETHERNET_CONFIG_TYPE_TXTIME_PARAM,
195 ETHERNET_CONFIG_TYPE_PROMISC_MODE,
196 ETHERNET_CONFIG_TYPE_PRIORITY_QUEUES_NUM,
197 ETHERNET_CONFIG_TYPE_FILTER,
198 ETHERNET_CONFIG_TYPE_PORTS_NUM,
199};
200
201enum ethernet_qav_param_type {
202 ETHERNET_QAV_PARAM_TYPE_DELTA_BANDWIDTH,
203 ETHERNET_QAV_PARAM_TYPE_IDLE_SLOPE,
204 ETHERNET_QAV_PARAM_TYPE_OPER_IDLE_SLOPE,
205 ETHERNET_QAV_PARAM_TYPE_TRAFFIC_CLASS,
206 ETHERNET_QAV_PARAM_TYPE_STATUS,
207};
208
215 enum ethernet_qav_param_type type;
216 union {
220 unsigned int delta_bandwidth;
222 unsigned int idle_slope;
224 unsigned int oper_idle_slope;
226 unsigned int traffic_class;
227 };
228};
229
232enum ethernet_qbv_param_type {
233 ETHERNET_QBV_PARAM_TYPE_STATUS,
234 ETHERNET_QBV_PARAM_TYPE_GATE_CONTROL_LIST,
235 ETHERNET_QBV_PARAM_TYPE_GATE_CONTROL_LIST_LEN,
236 ETHERNET_QBV_PARAM_TYPE_TIME,
237};
238
239enum ethernet_qbv_state_type {
240 ETHERNET_QBV_STATE_TYPE_ADMIN,
241 ETHERNET_QBV_STATE_TYPE_OPER,
242};
243
244enum ethernet_gate_state_operation {
245 ETHERNET_SET_GATE_STATE,
246 ETHERNET_SET_AND_HOLD_MAC_STATE,
247 ETHERNET_SET_AND_RELEASE_MAC_STATE,
248};
249
256 enum ethernet_qbv_param_type type;
258 enum ethernet_qbv_state_type state;
259 union {
262
263 struct {
265 bool gate_status[NET_TC_TX_COUNT];
266
268 enum ethernet_gate_state_operation operation;
269
272
276
279
280 /* The time values are set in one go when type is set to
281 * ETHERNET_QBV_PARAM_TYPE_TIME
282 */
283 struct {
286
289
292 };
293 };
294};
295
298enum ethernet_qbu_param_type {
299 ETHERNET_QBU_PARAM_TYPE_STATUS,
300 ETHERNET_QBU_PARAM_TYPE_RELEASE_ADVANCE,
301 ETHERNET_QBU_PARAM_TYPE_HOLD_ADVANCE,
302 ETHERNET_QBU_PARAM_TYPE_PREEMPTION_STATUS_TABLE,
303
304 /* Some preemption settings are from Qbr spec. */
305 ETHERNET_QBR_PARAM_TYPE_LINK_PARTNER_STATUS,
306 ETHERNET_QBR_PARAM_TYPE_ADDITIONAL_FRAGMENT_SIZE,
307};
308
309enum ethernet_qbu_preempt_status {
310 ETHERNET_QBU_STATUS_EXPRESS,
311 ETHERNET_QBU_STATUS_PREEMPTABLE
312} __packed;
313
320 enum ethernet_qbu_param_type type;
321 union {
324
327
330 enum ethernet_qbu_preempt_status
331 frame_preempt_statuses[NET_TC_TX_COUNT];
332
335
338
343 };
344};
345
346
349enum ethernet_filter_type {
350 ETHERNET_FILTER_TYPE_SRC_MAC_ADDRESS,
351 ETHERNET_FILTER_TYPE_DST_MAC_ADDRESS,
352};
353
360
363} __packed;
364
365
368 enum ethernet_filter_type type;
370 struct net_eth_addr mac_address;
372 bool set;
373};
374
377enum ethernet_txtime_param_type {
378 ETHERNET_TXTIME_PARAM_TYPE_ENABLE_QUEUES,
379};
380
385 enum ethernet_txtime_param_type type;
390};
391
393struct ethernet_config {
394 union {
395 bool auto_negotiation;
396 bool full_duplex;
397 bool promisc_mode;
398
399 struct {
400 bool link_10bt;
401 bool link_100bt;
402 bool link_1000bt;
403 } l;
404
405 struct net_eth_addr mac_address;
406
407 struct ethernet_qav_param qav_param;
408 struct ethernet_qbv_param qbv_param;
409 struct ethernet_qbu_param qbu_param;
410 struct ethernet_txtime_param txtime_param;
411
412 int priority_queues_num;
413 int ports_num;
414
415 struct ethernet_filter filter;
416 };
417};
425 struct net_if_api iface_api;
426
427#if defined(CONFIG_NET_STATISTICS_ETHERNET)
432 struct net_stats_eth *(*get_stats)(const struct device *dev);
433#endif
434
436 int (*start)(const struct device *dev);
437
439 int (*stop)(const struct device *dev);
440
442 enum ethernet_hw_caps (*get_capabilities)(const struct device *dev);
443
445 int (*set_config)(const struct device *dev,
446 enum ethernet_config_type type,
447 const struct ethernet_config *config);
448
450 int (*get_config)(const struct device *dev,
451 enum ethernet_config_type type,
452 struct ethernet_config *config);
453
454#if defined(CONFIG_NET_VLAN)
460 int (*vlan_setup)(const struct device *dev, struct net_if *iface,
461 uint16_t tag, bool enable);
462#endif /* CONFIG_NET_VLAN */
463
464#if defined(CONFIG_PTP_CLOCK)
466 const struct device *(*get_ptp_clock)(const struct device *dev);
467#endif /* CONFIG_PTP_CLOCK */
468
470 int (*send)(const struct device *dev, struct net_pkt *pkt);
471};
472
473/* Make sure that the network interface API is properly setup inside
474 * Ethernet API struct (it is the first one).
475 */
476BUILD_ASSERT(offsetof(struct ethernet_api, iface_api) == 0);
477
479struct net_eth_hdr {
480 struct net_eth_addr dst;
481 struct net_eth_addr src;
482 uint16_t type;
483} __packed;
484
485struct ethernet_vlan {
487 struct net_if *iface;
488
490 uint16_t tag;
491};
492
493#if defined(CONFIG_NET_VLAN_COUNT)
494#define NET_VLAN_MAX_COUNT CONFIG_NET_VLAN_COUNT
495#else
496/* Even thou there are no VLAN support, the minimum count must be set to 1.
497 */
498#define NET_VLAN_MAX_COUNT 1
499#endif
500
503#if defined(CONFIG_NET_LLDP)
504struct ethernet_lldp {
506 sys_snode_t node;
507
509 const struct net_lldpdu *lldpdu;
510
512 const uint8_t *optional_du;
513
515 size_t optional_len;
516
518 struct net_if *iface;
519
521 int64_t tx_timer_start;
522
524 uint32_t tx_timer_timeout;
525
528};
529#endif /* CONFIG_NET_LLDP */
530
533};
534
541
542#if defined(CONFIG_NET_VLAN)
543 struct ethernet_vlan vlan[NET_VLAN_MAX_COUNT];
544
550 ATOMIC_DEFINE(interfaces, NET_VLAN_MAX_COUNT);
551#endif
552
553#if defined(CONFIG_NET_ETHERNET_BRIDGE)
554 struct eth_bridge_iface_context bridge;
555#endif
556
564
566 struct net_if *iface;
567
568#if defined(CONFIG_NET_LLDP)
569 struct ethernet_lldp lldp[NET_VLAN_MAX_COUNT];
570#endif
571
576
577#if defined(CONFIG_NET_L2_PTP)
582 int port;
583#endif
584
585#if defined(CONFIG_NET_DSA)
589 dsa_net_recv_cb_t dsa_recv_cb;
590
592 uint8_t dsa_port_idx;
593
595 struct dsa_context *dsa_ctx;
596
598 dsa_send_t dsa_send;
599#endif
600
601#if defined(CONFIG_NET_VLAN)
606 int8_t vlan_enabled;
607#endif
608
611
613 bool is_init : 1;
614
617};
618
624void ethernet_init(struct net_if *iface);
625
628#define ETHERNET_L2_CTX_TYPE struct ethernet_context
629
630/* Separate header for VLAN as some of device interfaces might not
631 * support VLAN.
632 */
633struct net_eth_vlan_hdr {
634 struct net_eth_addr dst;
635 struct net_eth_addr src;
636 struct {
637 uint16_t tpid; /* tag protocol id */
638 uint16_t tci; /* tag control info */
639 } vlan;
640 uint16_t type;
641} __packed;
642
643
644static inline bool net_eth_is_addr_broadcast(struct net_eth_addr *addr)
645{
646 if (addr->addr[0] == 0xff &&
647 addr->addr[1] == 0xff &&
648 addr->addr[2] == 0xff &&
649 addr->addr[3] == 0xff &&
650 addr->addr[4] == 0xff &&
651 addr->addr[5] == 0xff) {
652 return true;
653 }
654
655 return false;
656}
657
658static inline bool net_eth_is_addr_unspecified(struct net_eth_addr *addr)
659{
660 if (addr->addr[0] == 0x00 &&
661 addr->addr[1] == 0x00 &&
662 addr->addr[2] == 0x00 &&
663 addr->addr[3] == 0x00 &&
664 addr->addr[4] == 0x00 &&
665 addr->addr[5] == 0x00) {
666 return true;
667 }
668
669 return false;
670}
671
672static inline bool net_eth_is_addr_multicast(struct net_eth_addr *addr)
673{
674#if defined(CONFIG_NET_IPV6)
675 if (addr->addr[0] == 0x33 &&
676 addr->addr[1] == 0x33) {
677 return true;
678 }
679#endif
680
681#if defined(CONFIG_NET_IPV4)
682 if (addr->addr[0] == 0x01 &&
683 addr->addr[1] == 0x00 &&
684 addr->addr[2] == 0x5e) {
685 return true;
686 }
687#endif
688
689 return false;
690}
691
692static inline bool net_eth_is_addr_group(struct net_eth_addr *addr)
693{
694 return addr->addr[0] & 0x01;
695}
696
697static inline bool net_eth_is_addr_valid(struct net_eth_addr *addr)
698{
699 return !net_eth_is_addr_unspecified(addr) && !net_eth_is_addr_group(addr);
700}
701
702static inline bool net_eth_is_addr_lldp_multicast(struct net_eth_addr *addr)
703{
704#if defined(CONFIG_NET_GPTP) || defined(CONFIG_NET_LLDP)
705 if (addr->addr[0] == 0x01 &&
706 addr->addr[1] == 0x80 &&
707 addr->addr[2] == 0xc2 &&
708 addr->addr[3] == 0x00 &&
709 addr->addr[4] == 0x00 &&
710 addr->addr[5] == 0x0e) {
711 return true;
712 }
713#endif
714
715 return false;
716}
717
718static inline bool net_eth_is_addr_ptp_multicast(struct net_eth_addr *addr)
719{
720#if defined(CONFIG_NET_GPTP)
721 if (addr->addr[0] == 0x01 &&
722 addr->addr[1] == 0x1b &&
723 addr->addr[2] == 0x19 &&
724 addr->addr[3] == 0x00 &&
725 addr->addr[4] == 0x00 &&
726 addr->addr[5] == 0x00) {
727 return true;
728 }
729#endif
730
731 return false;
732}
733
734const struct net_eth_addr *net_eth_broadcast_addr(void);
735
744void net_eth_ipv4_mcast_to_mac_addr(const struct in_addr *ipv4_addr,
745 struct net_eth_addr *mac_addr);
746
753void net_eth_ipv6_mcast_to_mac_addr(const struct in6_addr *ipv6_addr,
754 struct net_eth_addr *mac_addr);
755
763static inline
765{
766 const struct ethernet_api *eth =
767 (struct ethernet_api *)net_if_get_device(iface)->api;
768
769 if (!eth->get_capabilities) {
770 return (enum ethernet_hw_caps)0;
771 }
772
773 return eth->get_capabilities(net_if_get_device(iface));
774}
775
784#if defined(CONFIG_NET_VLAN)
785int net_eth_vlan_enable(struct net_if *iface, uint16_t tag);
786#else
787static inline int net_eth_vlan_enable(struct net_if *iface, uint16_t tag)
788{
789 return -EINVAL;
790}
791#endif
792
801#if defined(CONFIG_NET_VLAN)
802int net_eth_vlan_disable(struct net_if *iface, uint16_t tag);
803#else
804static inline int net_eth_vlan_disable(struct net_if *iface, uint16_t tag)
805{
806 return -EINVAL;
807}
808#endif
809
818#if defined(CONFIG_NET_VLAN)
820#else
821static inline uint16_t net_eth_get_vlan_tag(struct net_if *iface)
822{
823 return NET_VLAN_TAG_UNSPEC;
824}
825#endif
826
837#if defined(CONFIG_NET_VLAN)
838struct net_if *net_eth_get_vlan_iface(struct net_if *iface, uint16_t tag);
839#else
840static inline
841struct net_if *net_eth_get_vlan_iface(struct net_if *iface, uint16_t tag)
842{
843 return NULL;
844}
845#endif
846
855#if defined(CONFIG_NET_VLAN)
857 struct net_if *iface);
858#else
859static inline bool net_eth_is_vlan_enabled(struct ethernet_context *ctx,
860 struct net_if *iface)
861{
862 return false;
863}
864#endif
865
873#if defined(CONFIG_NET_VLAN)
874bool net_eth_get_vlan_status(struct net_if *iface);
875#else
876static inline bool net_eth_get_vlan_status(struct net_if *iface)
877{
878 return false;
879}
880#endif
881
882#if defined(CONFIG_NET_VLAN)
883#define Z_ETH_NET_DEVICE_INIT(node_id, dev_id, name, init_fn, pm, data, \
884 config, prio, api, mtu) \
885 Z_DEVICE_STATE_DEFINE(dev_id); \
886 Z_DEVICE_DEFINE(node_id, dev_id, name, init_fn, pm, data, \
887 config, POST_KERNEL, prio, api, \
888 &Z_DEVICE_STATE_NAME(dev_id)); \
889 NET_L2_DATA_INIT(dev_id, 0, NET_L2_GET_CTX_TYPE(ETHERNET_L2)); \
890 NET_IF_INIT(dev_id, 0, ETHERNET_L2, mtu, NET_VLAN_MAX_COUNT)
891
892#else /* CONFIG_NET_VLAN */
893
894#define Z_ETH_NET_DEVICE_INIT(node_id, dev_id, name, init_fn, pm, data, \
895 config, prio, api, mtu) \
896 Z_NET_DEVICE_INIT(node_id, dev_id, name, init_fn, pm, data, \
897 config, prio, api, ETHERNET_L2, \
898 NET_L2_GET_CTX_TYPE(ETHERNET_L2), mtu)
899#endif /* CONFIG_NET_VLAN */
900
918#define ETH_NET_DEVICE_INIT(dev_id, name, init_fn, pm, data, config, \
919 prio, api, mtu) \
920 Z_ETH_NET_DEVICE_INIT(DT_INVALID_NODE, dev_id, name, init_fn, \
921 pm, data, config, prio, api, mtu)
922
939#define ETH_NET_DEVICE_DT_DEFINE(node_id, init_fn, pm, data, config, \
940 prio, api, mtu) \
941 Z_ETH_NET_DEVICE_INIT(node_id, Z_DEVICE_DT_DEV_ID(node_id), \
942 DEVICE_DT_NAME(node_id), init_fn, pm, \
943 data, config, prio, api, mtu)
944
954#define ETH_NET_DEVICE_DT_INST_DEFINE(inst, ...) \
955 ETH_NET_DEVICE_DT_DEFINE(DT_DRV_INST(inst), __VA_ARGS__)
956
963void net_eth_carrier_on(struct net_if *iface);
964
971void net_eth_carrier_off(struct net_if *iface);
972
982int net_eth_promisc_mode(struct net_if *iface, bool enable);
983
992#if defined(CONFIG_PTP_CLOCK)
993const struct device *net_eth_get_ptp_clock(struct net_if *iface);
994#else
995static inline const struct device *net_eth_get_ptp_clock(struct net_if *iface)
996{
997 ARG_UNUSED(iface);
998
999 return NULL;
1000}
1001#endif
1002
1012__syscall const struct device *net_eth_get_ptp_clock_by_index(int index);
1013
1021#if defined(CONFIG_NET_L2_PTP)
1022int net_eth_get_ptp_port(struct net_if *iface);
1023#else
1024static inline int net_eth_get_ptp_port(struct net_if *iface)
1025{
1026 ARG_UNUSED(iface);
1027
1028 return -ENODEV;
1029}
1030#endif /* CONFIG_NET_L2_PTP */
1031
1038#if defined(CONFIG_NET_L2_PTP)
1039void net_eth_set_ptp_port(struct net_if *iface, int port);
1040#else
1041static inline void net_eth_set_ptp_port(struct net_if *iface, int port)
1042{
1043 ARG_UNUSED(iface);
1044 ARG_UNUSED(port);
1045}
1046#endif /* CONFIG_NET_L2_PTP */
1047
1055static inline bool net_eth_type_is_wifi(struct net_if *iface)
1056{
1057 const struct ethernet_context *ctx = (struct ethernet_context *)
1059
1060 return ctx->eth_if_type == L2_ETH_IF_TYPE_WIFI;
1061}
1062
1067#ifdef __cplusplus
1068}
1069#endif
1070
1071#include <syscalls/ethernet.h>
1072
1073#endif /* ZEPHYR_INCLUDE_NET_ETHERNET_H_ */
long atomic_t
Definition: atomic.h:22
DSA definitions and handlers.
Ethernet Bridge public header file.
VLAN specific definitions.
enum net_verdict(* dsa_net_recv_cb_t)(struct net_if *iface, struct net_pkt *pkt)
DSA (MGMT) Receive packet callback.
Definition: dsa.h:68
int(* dsa_send_t)(const struct device *dev, struct net_pkt *pkt)
Pointer to master interface send function.
Definition: dsa.h:94
#define ATOMIC_DEFINE(name, num_bits)
Define an array of atomic variables.
Definition: atomic.h:114
ethernet_if_types
Types of Ethernet L2.
Definition: ethernet.h:357
static void net_eth_set_ptp_port(struct net_if *iface, int port)
Set PTP port number attached to this interface.
Definition: ethernet.h:1041
static int net_eth_vlan_enable(struct net_if *iface, uint16_t tag)
Add VLAN tag to the interface.
Definition: ethernet.h:787
static int net_eth_get_ptp_port(struct net_if *iface)
Return PTP port number attached to this interface.
Definition: ethernet.h:1024
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:995
int net_eth_promisc_mode(struct net_if *iface, bool enable)
Set promiscuous mode either ON or OFF.
void net_eth_carrier_off(struct net_if *iface)
Inform ethernet L2 driver that ethernet carrier was lost.
static uint16_t net_eth_get_vlan_tag(struct net_if *iface)
Return VLAN tag specified to network interface.
Definition: ethernet.h:821
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:1055
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:876
const struct device * net_eth_get_ptp_clock_by_index(int index)
Return PTP clock that is tied to this ethernet network interface index.
ethernet_hw_caps
Ethernet hardware capabilities.
Definition: ethernet.h:124
ethernet_flags
Definition: ethernet.h:531
void net_eth_ipv6_mcast_to_mac_addr(const struct in6_addr *ipv6_addr, struct net_eth_addr *mac_addr)
Convert IPv6 multicast address to Ethernet address.
static enum ethernet_hw_caps net_eth_get_hw_capabilities(struct net_if *iface)
Return ethernet device hardware capability information.
Definition: ethernet.h:764
static int net_eth_vlan_disable(struct net_if *iface, uint16_t tag)
Remove VLAN tag from the interface.
Definition: ethernet.h:804
void net_eth_carrier_on(struct net_if *iface)
Inform ethernet L2 driver that ethernet carrier is detected.
static bool net_eth_is_vlan_enabled(struct ethernet_context *ctx, struct net_if *iface)
Check if VLAN is enabled for a specific network interface.
Definition: ethernet.h:859
void ethernet_init(struct net_if *iface)
Initialize Ethernet L2 stack for a given interface.
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:841
void net_eth_ipv4_mcast_to_mac_addr(const struct in_addr *ipv4_addr, struct net_eth_addr *mac_addr)
Convert IPv4 multicast address to Ethernet address.
@ L2_ETH_IF_TYPE_ETHERNET
IEEE 802.3 Ethernet (default)
Definition: ethernet.h:359
@ L2_ETH_IF_TYPE_WIFI
IEEE 802.11 Wi-Fi.
Definition: ethernet.h:362
@ ETHERNET_HW_VLAN
VLAN supported.
Definition: ethernet.h:132
@ ETHERNET_PRIORITY_QUEUES
Priority queues available.
Definition: ethernet.h:159
@ ETHERNET_DUPLEX_SET
Changing duplex (half/full) supported.
Definition: ethernet.h:147
@ ETHERNET_HW_VLAN_TAG_STRIP
VLAN Tag stripping.
Definition: ethernet.h:168
@ ETHERNET_LINK_10BASE_T
10 Mbits link supported
Definition: ethernet.h:138
@ ETHERNET_HW_FILTERING
MAC address filtering supported.
Definition: ethernet.h:162
@ ETHERNET_PTP
IEEE 802.1AS (gPTP) clock supported.
Definition: ethernet.h:150
@ ETHERNET_QBU
IEEE 802.1Qbu (frame preemption) supported.
Definition: ethernet.h:178
@ ETHERNET_LINK_100BASE_T
100 Mbits link supported
Definition: ethernet.h:141
@ ETHERNET_DSA_MASTER_PORT
Definition: ethernet.h:172
@ ETHERNET_DSA_SLAVE_PORT
DSA switch.
Definition: ethernet.h:171
@ ETHERNET_QAV
IEEE 802.1Qav (credit-based shaping) supported.
Definition: ethernet.h:153
@ ETHERNET_HW_RX_CHKSUM_OFFLOAD
RX Checksum offloading supported for all of IPv4, UDP, TCP.
Definition: ethernet.h:129
@ ETHERNET_LINK_1000BASE_T
1 Gbits link supported
Definition: ethernet.h:144
@ ETHERNET_LLDP
Link Layer Discovery Protocol supported.
Definition: ethernet.h:165
@ ETHERNET_AUTO_NEGOTIATION_SET
Enabling/disabling auto negotiation supported.
Definition: ethernet.h:135
@ ETHERNET_TXTIME
TXTIME supported.
Definition: ethernet.h:181
@ ETHERNET_QBV
IEEE 802.1Qbv (scheduled traffic) supported.
Definition: ethernet.h:175
@ ETHERNET_PROMISC_MODE
Promiscuous mode supported.
Definition: ethernet.h:156
@ ETHERNET_HW_TX_CHKSUM_OFFLOAD
TX Checksum offloading supported for all of IPv4, UDP, TCP.
Definition: ethernet.h:126
@ ETH_CARRIER_UP
Definition: ethernet.h:532
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:796
static const struct device * net_if_get_device(struct net_if *iface)
Get an network interface's device.
Definition: net_if.h:811
net_l2_flags
L2 flags.
Definition: net_l2.h:34
struct _snode sys_snode_t
Single-linked list node structure.
Definition: slist.h:39
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition: util_macro.h:44
#define EINVAL
Invalid argument.
Definition: errno.h:61
#define ENODEV
No such device.
Definition: errno.h:58
#define NET_VLAN_TAG_UNSPEC
Unspecified VLAN tag value.
Definition: ethernet_vlan.h:30
Public kernel APIs.
LLDP definitions and handler.
Public API for network interface.
IPv6 and IPv4 definitions.
Network packet buffer descriptor API.
Public functions for the Precision Time Protocol time specification.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT64_TYPE__ int64_t
Definition: stdint.h:75
__INT8_TYPE__ int8_t
Definition: stdint.h:72
Runtime device structure (in ROM) per driver instance.
Definition: device.h:381
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:387
Definition: ethernet_bridge.h:59
Definition: ethernet.h:420
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:425
int(* start)(const struct device *dev)
Start the device.
Definition: ethernet.h:436
int(* get_config)(const struct device *dev, enum ethernet_config_type type, struct ethernet_config *config)
Get hardware specific configuration.
Definition: ethernet.h:450
int(* stop)(const struct device *dev)
Stop the device.
Definition: ethernet.h:439
enum ethernet_hw_caps(* get_capabilities)(const struct device *dev)
Get the device capabilities.
Definition: ethernet.h:442
int(* send)(const struct device *dev, struct net_pkt *pkt)
Send a network packet.
Definition: ethernet.h:470
int(* set_config)(const struct device *dev, enum ethernet_config_type type, const struct ethernet_config *config)
Set specific hardware configuration.
Definition: ethernet.h:445
Ethernet L2 context that is needed for VLAN.
Definition: ethernet.h:536
struct net_if * iface
Network interface.
Definition: ethernet.h:566
bool is_net_carrier_up
Is network carrier up.
Definition: ethernet.h:610
enum net_l2_flags ethernet_l2_flags
This tells what L2 features does ethernet support.
Definition: ethernet.h:575
struct k_work carrier_work
Carrier ON/OFF handler worker.
Definition: ethernet.h:563
atomic_t flags
Flags representing ethernet state, which are accessed from multiple threads.
Definition: ethernet.h:540
enum ethernet_if_types eth_if_type
Types of Ethernet network interfaces.
Definition: ethernet.h:616
bool is_init
Is this context already initialized.
Definition: ethernet.h:613
Definition: ethernet.h:366
struct net_eth_addr mac_address
MAC address to filter.
Definition: ethernet.h:370
bool set
Set (true) or unset (false) the filter.
Definition: ethernet.h:372
enum ethernet_filter_type type
Type of filter.
Definition: ethernet.h:368
Definition: ethernet.h:211
bool enabled
True if Qav is enabled for queue.
Definition: ethernet.h:218
unsigned int oper_idle_slope
Oper Idle Slope (bits per second)
Definition: ethernet.h:224
enum ethernet_qav_param_type type
Type of Qav parameter.
Definition: ethernet.h:215
unsigned int traffic_class
Traffic class the queue is bound to.
Definition: ethernet.h:226
int queue_id
ID of the priority queue to use.
Definition: ethernet.h:213
unsigned int idle_slope
Idle Slope (bits per second)
Definition: ethernet.h:222
unsigned int delta_bandwidth
Delta Bandwidth (percentage of bandwidth)
Definition: ethernet.h:220
Definition: ethernet.h:316
enum ethernet_qbu_preempt_status frame_preempt_statuses[NET_TC_TX_COUNT]
sequence of framePreemptionAdminStatus values.
Definition: ethernet.h:330
uint32_t release_advance
Release advance (nanoseconds)
Definition: ethernet.h:326
enum ethernet_qbu_param_type type
Type of Qbu parameter.
Definition: ethernet.h:320
uint32_t hold_advance
Hold advance (nanoseconds)
Definition: ethernet.h:323
bool enabled
True if Qbu is enabled or not.
Definition: ethernet.h:334
bool link_partner_status
Link partner status (from Qbr)
Definition: ethernet.h:337
int port_id
Port id.
Definition: ethernet.h:318
uint8_t additional_fragment_size
Additional fragment size (from Qbr).
Definition: ethernet.h:342
Definition: ethernet.h:252
int port_id
Port id.
Definition: ethernet.h:254
bool enabled
True if Qbv is enabled or not.
Definition: ethernet.h:261
enum ethernet_qbv_param_type type
Type of Qbv parameter.
Definition: ethernet.h:256
uint16_t row
Gate control list row.
Definition: ethernet.h:274
enum ethernet_qbv_state_type state
What state (Admin/Oper) parameters are these.
Definition: ethernet.h:258
bool gate_status[NET_TC_TX_COUNT]
True = open, False = closed.
Definition: ethernet.h:265
struct net_ptp_extended_time base_time
Base time.
Definition: ethernet.h:285
uint32_t extension_time
Extension time (nanoseconds)
Definition: ethernet.h:291
enum ethernet_gate_state_operation operation
GateState operation.
Definition: ethernet.h:268
uint32_t time_interval
Time interval ticks (nanoseconds)
Definition: ethernet.h:271
struct ethernet_qbv_param::@262::@264 gate_control
struct net_ptp_time cycle_time
Cycle time.
Definition: ethernet.h:288
uint32_t gate_control_list_len
Number of entries in gate control list.
Definition: ethernet.h:278
Definition: ethernet.h:383
bool enable_txtime
Enable or disable TXTIME per queue.
Definition: ethernet.h:389
int queue_id
Queue number for configuring TXTIME.
Definition: ethernet.h:387
enum ethernet_txtime_param_type type
Type of TXTIME parameter.
Definition: ethernet.h:385
IPv6 address struct.
Definition: net_ip.h:139
IPv4 address struct.
Definition: net_ip.h:151
A structure used to submit work.
Definition: kernel.h:3865
Network Interface structure.
Definition: net_if.h:595
LLDP Data Unit (LLDPDU) shall contain the following ordered TLVs as stated in "8.2 LLDPDU format" fro...
Definition: lldp.h:167
Network packet.
Definition: net_pkt.h:63
Generalized Precision Time Protocol Extended Timestamp format.
Definition: ptp_time.h:147
(Generalized) Precision Time Protocol Timestamp format.
Definition: ptp_time.h:109
All Ethernet specific statistics.
Definition: net_stats.h:441
Misc utilities.