Zephyr Project API 4.2.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
net_core.h
Go to the documentation of this file.
1
7/*
8 * Copyright (c) 2015 Intel Corporation
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12
13#ifndef ZEPHYR_INCLUDE_NET_NET_CORE_H_
14#define ZEPHYR_INCLUDE_NET_NET_CORE_H_
15
16#include <stdbool.h>
17#include <string.h>
18
19#include <zephyr/logging/log.h>
20#include <zephyr/sys/__assert.h>
21#include <zephyr/kernel.h>
22
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
51/* Network subsystem logging helpers */
52#ifdef CONFIG_THREAD_NAME
53#define NET_DBG(fmt, ...) LOG_DBG("(%s): " fmt, \
54 k_thread_name_get(k_current_get()), \
55 ##__VA_ARGS__)
56#else
57#define NET_DBG(fmt, ...) LOG_DBG("(%p): " fmt, k_current_get(), \
58 ##__VA_ARGS__)
59#endif /* CONFIG_THREAD_NAME */
60#define NET_ERR(fmt, ...) LOG_ERR(fmt, ##__VA_ARGS__)
61#define NET_WARN(fmt, ...) LOG_WRN(fmt, ##__VA_ARGS__)
62#define NET_INFO(fmt, ...) LOG_INF(fmt, ##__VA_ARGS__)
63
64/* Rate-limited network logging macros */
65#define NET_ERR_RATELIMIT(fmt, ...) LOG_ERR_RATELIMIT(fmt, ##__VA_ARGS__)
66#define NET_WARN_RATELIMIT(fmt, ...) LOG_WRN_RATELIMIT(fmt, ##__VA_ARGS__)
67#define NET_INFO_RATELIMIT(fmt, ...) LOG_INF_RATELIMIT(fmt, ##__VA_ARGS__)
68#define NET_DBG_RATELIMIT(fmt, ...) LOG_DBG_RATELIMIT(fmt, ##__VA_ARGS__)
69
70#define NET_HEXDUMP_DBG(_data, _length, _str) LOG_HEXDUMP_DBG(_data, _length, _str)
71#define NET_HEXDUMP_ERR(_data, _length, _str) LOG_HEXDUMP_ERR(_data, _length, _str)
72#define NET_HEXDUMP_WARN(_data, _length, _str) LOG_HEXDUMP_WRN(_data, _length, _str)
73#define NET_HEXDUMP_INFO(_data, _length, _str) LOG_HEXDUMP_INF(_data, _length, _str)
74
75#define NET_ASSERT(cond, ...) __ASSERT(cond, "" __VA_ARGS__)
76
77/* This needs to be here in order to avoid circular include dependency between
78 * net_pkt.h and net_if.h
79 */
80#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
81 defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
82#if !defined(NET_PKT_DETAIL_STATS_COUNT)
83#if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL)
84
85#if defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
86#define NET_PKT_DETAIL_STATS_COUNT 4
87#else
88#define NET_PKT_DETAIL_STATS_COUNT 3
89#endif /* CONFIG_NET_PKT_RXTIME_STATS_DETAIL */
90
91#else
92#define NET_PKT_DETAIL_STATS_COUNT 4
93#endif /* CONFIG_NET_PKT_TXTIME_STATS_DETAIL */
94
95#endif /* !NET_PKT_DETAIL_STATS_COUNT */
96#endif /* CONFIG_NET_PKT_TXTIME_STATS_DETAIL ||
97 CONFIG_NET_PKT_RXTIME_STATS_DETAIL */
98
101struct net_buf;
102struct net_pkt;
103struct net_context;
104struct net_if;
105
119
130int net_recv_data(struct net_if *iface, struct net_pkt *pkt);
131
145int net_try_send_data(struct net_pkt *pkt, k_timeout_t timeout);
146
159static inline int net_send_data(struct net_pkt *pkt)
160{
162
163 return net_try_send_data(pkt, timeout);
164}
165
168/* Some helper defines for traffic class support */
169#if defined(CONFIG_NET_TC_TX_COUNT) && defined(CONFIG_NET_TC_RX_COUNT)
170#define NET_TC_TX_COUNT CONFIG_NET_TC_TX_COUNT
171#define NET_TC_RX_COUNT CONFIG_NET_TC_RX_COUNT
172
173#if NET_TC_TX_COUNT > NET_TC_RX_COUNT
174#define NET_TC_COUNT NET_TC_TX_COUNT
175#else
176#define NET_TC_COUNT NET_TC_RX_COUNT
177#endif
178#else /* CONFIG_NET_TC_TX_COUNT && CONFIG_NET_TC_RX_COUNT */
179#define NET_TC_TX_COUNT 0
180#define NET_TC_RX_COUNT 0
181#define NET_TC_COUNT 0
182#endif /* CONFIG_NET_TC_TX_COUNT && CONFIG_NET_TC_RX_COUNT */
183
184#if CONFIG_NET_TC_TX_SKIP_FOR_HIGH_PRIO
185#define NET_TC_TX_EFFECTIVE_COUNT (NET_TC_TX_COUNT + 1)
186#else
187#define NET_TC_TX_EFFECTIVE_COUNT NET_TC_TX_COUNT
188#endif
189
190#if CONFIG_NET_TC_RX_SKIP_FOR_HIGH_PRIO
191#define NET_TC_RX_EFFECTIVE_COUNT (NET_TC_RX_COUNT + 1)
192#else
193#define NET_TC_RX_EFFECTIVE_COUNT NET_TC_RX_COUNT
194#endif
195
203struct net_l3_register {
207 const char * const name;
209 const struct net_l2 * const l2;
218 enum net_verdict (*handler)(struct net_if *iface,
219 uint16_t ptype,
220 struct net_pkt *pkt);
222 uint16_t ptype;
223};
224
225#define NET_L3_GET_NAME(l3_name, ptype) __net_l3_register_##l3_name##_##ptype
226
227#define NET_L3_REGISTER(_l2_type, _name, _ptype, _handler) \
228 static const STRUCT_SECTION_ITERABLE(net_l3_register, \
229 NET_L3_GET_NAME(_name, _ptype)) = { \
230 .ptype = _ptype, \
231 .handler = _handler, \
232 .name = STRINGIFY(_name), \
233 .l2 = _l2_type, \
234 };
235
236/* @endcond */
237
242#ifdef __cplusplus
243}
244#endif
245
246#endif /* ZEPHYR_INCLUDE_NET_NET_CORE_H_ */
#define K_FOREVER
Generate infinite timeout delay.
Definition kernel.h:1543
#define K_NO_WAIT
Generate null timeout delay.
Definition kernel.h:1433
bool k_is_in_isr(void)
Determine if code is running at interrupt level.
int net_recv_data(struct net_if *iface, struct net_pkt *pkt)
Called by lower network stack or network device driver when a network packet has been received.
static int net_send_data(struct net_pkt *pkt)
Send data to network.
Definition net_core.h:159
net_verdict
Net Verdict.
Definition net_core.h:109
int net_try_send_data(struct net_pkt *pkt, k_timeout_t timeout)
Try sending data to network.
@ NET_OK
Packet has been taken care of.
Definition net_core.h:111
@ NET_DROP
Packet must be dropped.
Definition net_core.h:117
@ NET_CONTINUE
Packet has not been touched, other part should decide about its fate.
Definition net_core.h:115
Public kernel APIs.
Public API for network link address.
Network timer with wrap around.
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Kernel timeout type.
Definition clock.h:65
Network buffer representation.
Definition net_buf.h:1006
Note that we do not store the actual source IP address in the context because the address is already ...
Definition net_context.h:209
Network Interface structure.
Definition net_if.h:726
Network L2 structure.
Definition net_l2.h:58
Network packet.
Definition net_pkt.h:91