12#ifndef ZEPHYR_INCLUDE_NET_NET_L2_H_
13#define ZEPHYR_INCLUDE_NET_NET_L2_H_
85#define NET_L2_GET_NAME(_name) _net_l2_##_name
86#define NET_L2_DECLARE_PUBLIC(_name) \
87 extern const struct net_l2 NET_L2_GET_NAME(_name)
88#define NET_L2_GET_CTX_TYPE(_name) _name##_CTX_TYPE
90#define VIRTUAL_L2 VIRTUAL
91NET_L2_DECLARE_PUBLIC(VIRTUAL_L2);
94#define DUMMY_L2_CTX_TYPE void*
95NET_L2_DECLARE_PUBLIC(DUMMY_L2);
97#define OFFLOADED_NETDEV_L2 OFFLOADED_NETDEV
98NET_L2_DECLARE_PUBLIC(OFFLOADED_NETDEV_L2);
100#define ETHERNET_L2 ETHERNET
101NET_L2_DECLARE_PUBLIC(ETHERNET_L2);
104NET_L2_DECLARE_PUBLIC(PPP_L2);
106#define IEEE802154_L2 IEEE802154
107NET_L2_DECLARE_PUBLIC(IEEE802154_L2);
109#define OPENTHREAD_L2 OPENTHREAD
110NET_L2_DECLARE_PUBLIC(OPENTHREAD_L2);
112#define CANBUS_RAW_L2 CANBUS_RAW
113#define CANBUS_RAW_L2_CTX_TYPE void*
114NET_L2_DECLARE_PUBLIC(CANBUS_RAW_L2);
116#ifdef CONFIG_NET_L2_CUSTOM_IEEE802154
117#ifndef CUSTOM_IEEE802154_L2
118#define CUSTOM_IEEE802154_L2 CUSTOM_IEEE802154
120#define CUSTOM_IEEE802154_L2_CTX_TYPE void*
121NET_L2_DECLARE_PUBLIC(CUSTOM_IEEE802154_L2);
124#define NET_L2_INIT(_name, _recv_fn, _send_fn, _enable_fn, _get_flags_fn) \
125 const STRUCT_SECTION_ITERABLE(net_l2, \
126 NET_L2_GET_NAME(_name)) = { \
127 .recv = (_recv_fn), \
128 .send = (_send_fn), \
129 .enable = (_enable_fn), \
130 .get_flags = (_get_flags_fn), \
133#define NET_L2_GET_DATA(name, sfx) _net_l2_data_##name##sfx
135#define NET_L2_DATA_INIT(name, sfx, ctx_type) \
136 static ctx_type NET_L2_GET_DATA(name, sfx) __used;
138typedef int (*net_l2_send_t)(
const struct device *dev,
struct net_pkt *pkt);
140static inline int net_l2_send(net_l2_send_t send_fn,
145 net_capture_pkt(
iface, pkt);
147 return send_fn(dev, pkt);
Network packet capture definitions.
net_verdict
Net Verdict.
Definition net_core.h:102
net_l2_flags
L2 flags.
Definition net_l2.h:36
@ NET_L2_POINT_TO_POINT
Is this L2 point-to-point with tunneling so no need to have IP address etc to network interface.
Definition net_l2.h:49
@ NET_L2_MULTICAST_SKIP_JOIN_SOLICIT_NODE
Do not join solicited node multicast group.
Definition net_l2.h:41
@ NET_L2_PROMISC_MODE
Is promiscuous mode supported.
Definition net_l2.h:44
@ NET_L2_MULTICAST
IP multicast supported.
Definition net_l2.h:38
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
state
Definition parser_state.h:29
Runtime device structure (in ROM) per driver instance.
Definition device.h:412
Network Interface structure.
Definition net_if.h:680
Network L2 structure.
Definition net_l2.h:57
int(* send)(struct net_if *iface, struct net_pkt *pkt)
This function is used by net core to push a packet to lower layer (interface's L2),...
Definition net_l2.h:70
enum net_verdict(* recv)(struct net_if *iface, struct net_pkt *pkt)
This function is used by net core to get iface's L2 layer parsing what's relevant to itself.
Definition net_l2.h:62
enum net_l2_flags(* get_flags)(struct net_if *iface)
Return L2 flags for the network interface.
Definition net_l2.h:81
int(* enable)(struct net_if *iface, bool state)
This function is used to enable/disable traffic over a network interface.
Definition net_l2.h:76
Network packet.
Definition net_pkt.h:91
struct net_if * iface
Network interface.
Definition net_pkt.h:114