Line data Source code
1 1 : /** @file
2 : * @brief Network core definitions
3 : *
4 : * Definitions for networking support.
5 : */
6 :
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 :
23 : #include <zephyr/net/net_timeout.h>
24 :
25 : #ifdef __cplusplus
26 : extern "C" {
27 : #endif
28 :
29 : /**
30 : * @brief Networking
31 : * @defgroup networking Networking
32 : * @since 1.0
33 : * @version 1.0.0
34 : * @ingroup connectivity
35 : * @{
36 : * @}
37 : */
38 :
39 : /**
40 : * @brief Network core library
41 : * @defgroup net_core Network Core Library
42 : * @since 1.0
43 : * @version 1.0.0
44 : * @ingroup networking
45 : * @{
46 : */
47 :
48 : /** @cond INTERNAL_HIDDEN */
49 :
50 : /* Network subsystem logging helpers */
51 : #ifdef CONFIG_THREAD_NAME
52 : #define NET_DBG(fmt, ...) LOG_DBG("(%s): " fmt, \
53 : k_thread_name_get(k_current_get()), \
54 : ##__VA_ARGS__)
55 : #else
56 : #define NET_DBG(fmt, ...) LOG_DBG("(%p): " fmt, k_current_get(), \
57 : ##__VA_ARGS__)
58 : #endif /* CONFIG_THREAD_NAME */
59 : #define NET_ERR(fmt, ...) LOG_ERR(fmt, ##__VA_ARGS__)
60 : #define NET_WARN(fmt, ...) LOG_WRN(fmt, ##__VA_ARGS__)
61 : #define NET_INFO(fmt, ...) LOG_INF(fmt, ##__VA_ARGS__)
62 :
63 : #define NET_HEXDUMP_DBG(_data, _length, _str) LOG_HEXDUMP_DBG(_data, _length, _str)
64 : #define NET_HEXDUMP_ERR(_data, _length, _str) LOG_HEXDUMP_ERR(_data, _length, _str)
65 : #define NET_HEXDUMP_WARN(_data, _length, _str) LOG_HEXDUMP_WRN(_data, _length, _str)
66 : #define NET_HEXDUMP_INFO(_data, _length, _str) LOG_HEXDUMP_INF(_data, _length, _str)
67 :
68 : #define NET_ASSERT(cond, ...) __ASSERT(cond, "" __VA_ARGS__)
69 :
70 : /* This needs to be here in order to avoid circular include dependency between
71 : * net_pkt.h and net_if.h
72 : */
73 : #if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL) || \
74 : defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
75 : #if !defined(NET_PKT_DETAIL_STATS_COUNT)
76 : #if defined(CONFIG_NET_PKT_TXTIME_STATS_DETAIL)
77 :
78 : #if defined(CONFIG_NET_PKT_RXTIME_STATS_DETAIL)
79 : #define NET_PKT_DETAIL_STATS_COUNT 4
80 : #else
81 : #define NET_PKT_DETAIL_STATS_COUNT 3
82 : #endif /* CONFIG_NET_PKT_RXTIME_STATS_DETAIL */
83 :
84 : #else
85 : #define NET_PKT_DETAIL_STATS_COUNT 4
86 : #endif /* CONFIG_NET_PKT_TXTIME_STATS_DETAIL */
87 :
88 : #endif /* !NET_PKT_DETAIL_STATS_COUNT */
89 : #endif /* CONFIG_NET_PKT_TXTIME_STATS_DETAIL ||
90 : CONFIG_NET_PKT_RXTIME_STATS_DETAIL */
91 :
92 : /** @endcond */
93 :
94 : struct net_buf;
95 : struct net_pkt;
96 : struct net_context;
97 : struct net_if;
98 :
99 : /**
100 : * @brief Net Verdict
101 : */
102 1 : enum net_verdict {
103 : /** Packet has been taken care of. */
104 : NET_OK,
105 : /** Packet has not been touched, other part should decide about its
106 : * fate.
107 : */
108 : NET_CONTINUE,
109 : /** Packet must be dropped. */
110 : NET_DROP,
111 : };
112 :
113 : /**
114 : * @brief Called by lower network stack or network device driver when
115 : * a network packet has been received. The function will push the packet up in
116 : * the network stack for further processing.
117 : *
118 : * @param iface Network interface where the packet was received.
119 : * @param pkt Network packet data.
120 : *
121 : * @return 0 if ok, <0 if error.
122 : */
123 1 : int net_recv_data(struct net_if *iface, struct net_pkt *pkt);
124 :
125 : /**
126 : * @brief Send data to network.
127 : *
128 : * @details Send data to network. This should not be used normally by
129 : * applications as it requires that the network packet is properly
130 : * constructed.
131 : *
132 : * @param pkt Network packet.
133 : *
134 : * @return 0 if ok, <0 if error. If <0 is returned, then the caller needs
135 : * to unref the pkt in order to avoid memory leak.
136 : */
137 1 : int net_send_data(struct net_pkt *pkt);
138 :
139 : /** @cond INTERNAL_HIDDEN */
140 :
141 : /* Some helper defines for traffic class support */
142 : #if defined(CONFIG_NET_TC_TX_COUNT) && defined(CONFIG_NET_TC_RX_COUNT)
143 : #define NET_TC_TX_COUNT CONFIG_NET_TC_TX_COUNT
144 : #define NET_TC_RX_COUNT CONFIG_NET_TC_RX_COUNT
145 :
146 : #if NET_TC_TX_COUNT > NET_TC_RX_COUNT
147 : #define NET_TC_COUNT NET_TC_TX_COUNT
148 : #else
149 : #define NET_TC_COUNT NET_TC_RX_COUNT
150 : #endif
151 : #else /* CONFIG_NET_TC_TX_COUNT && CONFIG_NET_TC_RX_COUNT */
152 : #define NET_TC_TX_COUNT 0
153 : #define NET_TC_RX_COUNT 0
154 : #define NET_TC_COUNT 0
155 : #endif /* CONFIG_NET_TC_TX_COUNT && CONFIG_NET_TC_RX_COUNT */
156 :
157 : /* @endcond */
158 :
159 : /**
160 : * @}
161 : */
162 :
163 : #ifdef __cplusplus
164 : }
165 : #endif
166 :
167 : #endif /* ZEPHYR_INCLUDE_NET_NET_CORE_H_ */
|