Zephyr API Documentation  3.6.0
A Scalable Open Source RTOS
3.6.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
net_mgmt.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016 Intel Corporation.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_NET_NET_MGMT_H_
13#define ZEPHYR_INCLUDE_NET_NET_MGMT_H_
14
15#include <zephyr/sys/__assert.h>
16#include <zephyr/net/net_core.h>
19
20#ifdef __cplusplus
21extern "C" {
22#endif
23
31struct net_if;
32
37#define NET_MGMT_EVENT_MASK 0x80000000
38#define NET_MGMT_ON_IFACE_MASK 0x40000000
39#define NET_MGMT_LAYER_MASK 0x30000000
40#define NET_MGMT_SYNC_EVENT_MASK 0x08000000
41#define NET_MGMT_LAYER_CODE_MASK 0x07FF0000
42#define NET_MGMT_COMMAND_MASK 0x0000FFFF
43
44#define NET_MGMT_EVENT_BIT BIT(31)
45#define NET_MGMT_IFACE_BIT BIT(30)
46#define NET_MGMT_SYNC_EVENT_BIT BIT(27)
47
48#define NET_MGMT_LAYER(_layer) (_layer << 28)
49#define NET_MGMT_LAYER_CODE(_code) (_code << 16)
50
51#define NET_MGMT_EVENT(mgmt_request) \
52 (mgmt_request & NET_MGMT_EVENT_MASK)
53
54#define NET_MGMT_ON_IFACE(mgmt_request) \
55 (mgmt_request & NET_MGMT_ON_IFACE_MASK)
56
57#define NET_MGMT_EVENT_SYNCHRONOUS(mgmt_request) \
58 (mgmt_request & NET_MGMT_SYNC_EVENT_MASK)
59
60#define NET_MGMT_GET_LAYER(mgmt_request) \
61 ((mgmt_request & NET_MGMT_LAYER_MASK) >> 28)
62
63#define NET_MGMT_GET_LAYER_CODE(mgmt_request) \
64 ((mgmt_request & NET_MGMT_LAYER_CODE_MASK) >> 16)
65
66#define NET_MGMT_GET_COMMAND(mgmt_request) \
67 (mgmt_request & NET_MGMT_COMMAND_MASK)
68
69
70/* Useful generic definitions */
71#define NET_MGMT_LAYER_L2 1
72#define NET_MGMT_LAYER_L3 2
73#define NET_MGMT_LAYER_L4 3
74
89typedef int (*net_mgmt_request_handler_t)(uint32_t mgmt_request,
90 struct net_if *iface,
91 void *data, size_t len);
92
93#define net_mgmt(_mgmt_request, _iface, _data, _len) \
94 net_mgmt_##_mgmt_request(_mgmt_request, _iface, _data, _len)
95
96#define NET_MGMT_DEFINE_REQUEST_HANDLER(_mgmt_request) \
97 extern int net_mgmt_##_mgmt_request(uint32_t mgmt_request, \
98 struct net_if *iface, \
99 void *data, size_t len)
100
101#define NET_MGMT_REGISTER_REQUEST_HANDLER(_mgmt_request, _func) \
102 FUNC_ALIAS(_func, net_mgmt_##_mgmt_request, int)
103
105
115 uint32_t mgmt_event,
116 struct net_if *iface);
117
129
130 union {
137 struct k_sem *sync_call;
138 };
139
140#ifdef CONFIG_NET_MGMT_EVENT_INFO
141 const void *info;
142 size_t info_length;
143#endif
144
150 union {
164 };
165};
166
178typedef void (*net_mgmt_event_static_handler_t)(uint32_t mgmt_event,
179 struct net_if *iface,
180 void *info, size_t info_length,
181 void *user_data);
182
185/* Structure for event handler registered at compile time */
186struct net_mgmt_event_static_handler {
187 uint32_t event_mask;
189 void *user_data;
190};
191
207#define NET_MGMT_REGISTER_EVENT_HANDLER(_name, _event_mask, _func, _user_data) \
208 const STRUCT_SECTION_ITERABLE(net_mgmt_event_static_handler, _name) = { \
209 .event_mask = _event_mask, \
210 .handler = _func, \
211 .user_data = (void *)_user_data, \
212 }
213
220#ifdef CONFIG_NET_MGMT_EVENT
221static inline
224 uint32_t mgmt_event_mask)
225{
226 __ASSERT(cb, "Callback pointer should not be NULL");
227 __ASSERT(handler, "Handler pointer should not be NULL");
228
229 cb->handler = handler;
230 cb->event_mask = mgmt_event_mask;
231};
232#else
233#define net_mgmt_init_event_callback(...)
234#endif
235
240#ifdef CONFIG_NET_MGMT_EVENT
242#else
243#define net_mgmt_add_event_callback(...)
244#endif
245
250#ifdef CONFIG_NET_MGMT_EVENT
252#else
253#define net_mgmt_del_event_callback(...)
254#endif
255
269#ifdef CONFIG_NET_MGMT_EVENT
270void net_mgmt_event_notify_with_info(uint32_t mgmt_event, struct net_if *iface,
271 const void *info, size_t length);
272
273static inline void net_mgmt_event_notify(uint32_t mgmt_event,
274 struct net_if *iface)
275{
276 net_mgmt_event_notify_with_info(mgmt_event, iface, NULL, 0);
277}
278#else
279#define net_mgmt_event_notify(...)
280#define net_mgmt_event_notify_with_info(...)
281#endif
282
303#ifdef CONFIG_NET_MGMT_EVENT
304int net_mgmt_event_wait(uint32_t mgmt_event_mask,
305 uint32_t *raised_event,
306 struct net_if **iface,
307 const void **info,
308 size_t *info_length,
309 k_timeout_t timeout);
310#else
311static inline int net_mgmt_event_wait(uint32_t mgmt_event_mask,
312 uint32_t *raised_event,
313 struct net_if **iface,
314 const void **info,
315 size_t *info_length,
316 k_timeout_t timeout)
317{
318 return 0;
319}
320#endif
321
341#ifdef CONFIG_NET_MGMT_EVENT
343 uint32_t mgmt_event_mask,
344 uint32_t *raised_event,
345 const void **info,
346 size_t *info_length,
347 k_timeout_t timeout);
348#else
349static inline int net_mgmt_event_wait_on_iface(struct net_if *iface,
350 uint32_t mgmt_event_mask,
351 uint32_t *raised_event,
352 const void **info,
353 size_t *info_length,
354 k_timeout_t timeout)
355{
356 return 0;
357}
358#endif
359
364#ifdef CONFIG_NET_MGMT_EVENT
366#else
367#define net_mgmt_event_init(...)
368#endif /* CONFIG_NET_MGMT_EVENT */
369
374#ifdef __cplusplus
375}
376#endif
377
378#endif /* ZEPHYR_INCLUDE_NET_NET_MGMT_H_ */
void(* net_mgmt_event_handler_t)(struct net_mgmt_event_callback *cb, uint32_t mgmt_event, struct net_if *iface)
Define the user's callback handler function signature.
Definition: net_mgmt.h:114
int net_mgmt_event_wait_on_iface(struct net_if *iface, uint32_t mgmt_event_mask, uint32_t *raised_event, const void **info, size_t *info_length, k_timeout_t timeout)
Used to wait synchronously on an event mask for a specific iface.
static void net_mgmt_event_notify(uint32_t mgmt_event, struct net_if *iface)
Definition: net_mgmt.h:273
void net_mgmt_event_notify_with_info(uint32_t mgmt_event, struct net_if *iface, const void *info, size_t length)
Used by the system to notify an event.
void net_mgmt_del_event_callback(struct net_mgmt_event_callback *cb)
Delete a user callback.
static void net_mgmt_init_event_callback(struct net_mgmt_event_callback *cb, net_mgmt_event_handler_t handler, uint32_t mgmt_event_mask)
Helper to initialize a struct net_mgmt_event_callback properly.
Definition: net_mgmt.h:222
void net_mgmt_event_init(void)
Used by the core of the network stack to initialize the network event processing.
int(* net_mgmt_request_handler_t)(uint32_t mgmt_request, struct net_if *iface, void *data, size_t len)
Signature which all Net MGMT request handler need to follow.
Definition: net_mgmt.h:89
int net_mgmt_event_wait(uint32_t mgmt_event_mask, uint32_t *raised_event, struct net_if **iface, const void **info, size_t *info_length, k_timeout_t timeout)
Used to wait synchronously on an event mask.
void(* net_mgmt_event_static_handler_t)(uint32_t mgmt_event, struct net_if *iface, void *info, size_t info_length, void *user_data)
Define the user's callback handler function signature.
Definition: net_mgmt.h:178
void net_mgmt_add_event_callback(struct net_mgmt_event_callback *cb)
Add a user callback.
struct _snode sys_snode_t
Single-linked list node structure.
Definition: slist.h:39
Network core definitions.
Network Events code public header.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Kernel timeout type.
Definition: sys_clock.h:65
Network Interface structure.
Definition: net_if.h:615
Network Management event callback structure Used to register a callback into the network management e...
Definition: net_mgmt.h:124
sys_snode_t node
Meant to be used internally, to insert the callback into a list.
Definition: net_mgmt.h:128
struct k_sem * sync_call
Semaphore meant to be used internally for the synchronous net_mgmt_event_wait() function.
Definition: net_mgmt.h:137
uint32_t raised_event
Internal place holder when a synchronous event wait is successfully unlocked on a event.
Definition: net_mgmt.h:163
uint32_t event_mask
A mask of network events on which the above handler should be called in case those events come.
Definition: net_mgmt.h:159
net_mgmt_event_handler_t handler
Actual callback function being used to notify the owner.
Definition: net_mgmt.h:133