Zephyr Project API 4.1.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
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
33struct net_if;
34
39#define NET_MGMT_EVENT_MASK 0x80000000
40#define NET_MGMT_ON_IFACE_MASK 0x40000000
41#define NET_MGMT_LAYER_MASK 0x30000000
42#define NET_MGMT_SYNC_EVENT_MASK 0x08000000
43#define NET_MGMT_LAYER_CODE_MASK 0x07FF0000
44#define NET_MGMT_COMMAND_MASK 0x0000FFFF
45
46#define NET_MGMT_EVENT_BIT BIT(31)
47#define NET_MGMT_IFACE_BIT BIT(30)
48#define NET_MGMT_SYNC_EVENT_BIT BIT(27)
49
50#define NET_MGMT_LAYER(_layer) (_layer << 28)
51#define NET_MGMT_LAYER_CODE(_code) (_code << 16)
52
53#define NET_MGMT_EVENT(mgmt_request) \
54 (mgmt_request & NET_MGMT_EVENT_MASK)
55
56#define NET_MGMT_ON_IFACE(mgmt_request) \
57 (mgmt_request & NET_MGMT_ON_IFACE_MASK)
58
59#define NET_MGMT_EVENT_SYNCHRONOUS(mgmt_request) \
60 (mgmt_request & NET_MGMT_SYNC_EVENT_MASK)
61
62#define NET_MGMT_GET_LAYER(mgmt_request) \
63 ((mgmt_request & NET_MGMT_LAYER_MASK) >> 28)
64
65#define NET_MGMT_GET_LAYER_CODE(mgmt_request) \
66 ((mgmt_request & NET_MGMT_LAYER_CODE_MASK) >> 16)
67
68#define NET_MGMT_GET_COMMAND(mgmt_request) \
69 (mgmt_request & NET_MGMT_COMMAND_MASK)
70
71
72/* Useful generic definitions */
73#define NET_MGMT_LAYER_L2 1
74#define NET_MGMT_LAYER_L3 2
75#define NET_MGMT_LAYER_L4 3
76
104
116typedef int (*net_mgmt_request_handler_t)(uint32_t mgmt_request,
117 struct net_if *iface,
118 void *data, size_t len);
119
128#define net_mgmt(_mgmt_request, _iface, _data, _len) \
129 net_mgmt_##_mgmt_request(_mgmt_request, _iface, _data, _len)
130
136#define NET_MGMT_DEFINE_REQUEST_HANDLER(_mgmt_request) \
137 extern int net_mgmt_##_mgmt_request(uint32_t mgmt_request, \
138 struct net_if *iface, \
139 void *data, size_t len)
140
147#define NET_MGMT_REGISTER_REQUEST_HANDLER(_mgmt_request, _func) \
148 FUNC_ALIAS(_func, net_mgmt_##_mgmt_request, int)
149
151
161 uint32_t mgmt_event,
162 struct net_if *iface);
163
175
176 union {
183 struct k_sem *sync_call;
184 };
185
186#ifdef CONFIG_NET_MGMT_EVENT_INFO
187 const void *info;
188 size_t info_length;
189#endif
190
196 union {
210 };
211};
212
224typedef void (*net_mgmt_event_static_handler_t)(uint32_t mgmt_event,
225 struct net_if *iface,
226 void *info, size_t info_length,
227 void *user_data);
228
231/* Structure for event handler registered at compile time */
232struct net_mgmt_event_static_handler {
233 uint32_t event_mask;
235 void *user_data;
236};
237
253#define NET_MGMT_REGISTER_EVENT_HANDLER(_name, _event_mask, _func, _user_data) \
254 const STRUCT_SECTION_ITERABLE(net_mgmt_event_static_handler, _name) = { \
255 .event_mask = _event_mask, \
256 .handler = _func, \
257 .user_data = (void *)_user_data, \
258 }
259
266#ifdef CONFIG_NET_MGMT_EVENT
267static inline
270 uint32_t mgmt_event_mask)
271{
272 __ASSERT(cb, "Callback pointer should not be NULL");
273 __ASSERT(handler, "Handler pointer should not be NULL");
274
275 cb->handler = handler;
276 cb->event_mask = mgmt_event_mask;
277};
278#else
279#define net_mgmt_init_event_callback(...)
280#endif
281
286#ifdef CONFIG_NET_MGMT_EVENT
288#else
289#define net_mgmt_add_event_callback(...)
290#endif
291
296#ifdef CONFIG_NET_MGMT_EVENT
298#else
299#define net_mgmt_del_event_callback(...)
300#endif
301
315#if defined(CONFIG_NET_MGMT_EVENT)
316void net_mgmt_event_notify_with_info(uint32_t mgmt_event, struct net_if *iface,
317 const void *info, size_t length);
318#else
319#define net_mgmt_event_notify_with_info(...)
320#endif
321
328#if defined(CONFIG_NET_MGMT_EVENT)
329static inline void net_mgmt_event_notify(uint32_t mgmt_event,
330 struct net_if *iface)
331{
332 net_mgmt_event_notify_with_info(mgmt_event, iface, NULL, 0);
333}
334#else
335#define net_mgmt_event_notify(...)
336#endif
337
358#ifdef CONFIG_NET_MGMT_EVENT
359int net_mgmt_event_wait(uint32_t mgmt_event_mask,
360 uint32_t *raised_event,
361 struct net_if **iface,
362 const void **info,
363 size_t *info_length,
364 k_timeout_t timeout);
365#else
366static inline int net_mgmt_event_wait(uint32_t mgmt_event_mask,
367 uint32_t *raised_event,
368 struct net_if **iface,
369 const void **info,
370 size_t *info_length,
371 k_timeout_t timeout)
372{
373 ARG_UNUSED(mgmt_event_mask);
374 ARG_UNUSED(raised_event);
375 ARG_UNUSED(iface);
376 ARG_UNUSED(info);
377 ARG_UNUSED(info_length);
378 ARG_UNUSED(timeout);
379 return 0;
380}
381#endif
382
402#ifdef CONFIG_NET_MGMT_EVENT
404 uint32_t mgmt_event_mask,
405 uint32_t *raised_event,
406 const void **info,
407 size_t *info_length,
408 k_timeout_t timeout);
409#else
410static inline int net_mgmt_event_wait_on_iface(struct net_if *iface,
411 uint32_t mgmt_event_mask,
412 uint32_t *raised_event,
413 const void **info,
414 size_t *info_length,
415 k_timeout_t timeout)
416{
417 ARG_UNUSED(iface);
418 ARG_UNUSED(mgmt_event_mask);
419 ARG_UNUSED(raised_event);
420 ARG_UNUSED(info);
421 ARG_UNUSED(info_length);
422 ARG_UNUSED(timeout);
423 return 0;
424}
425#endif
426
431#ifdef CONFIG_NET_MGMT_EVENT
433#else
434#define net_mgmt_event_init(...)
435#endif /* CONFIG_NET_MGMT_EVENT */
436
441#ifdef __cplusplus
442}
443#endif
444
445#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:160
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)
Used by the system to notify an event without any additional information.
Definition net_mgmt.h:329
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.
net_mgmt_layer_code
Central place the definition of the layer codes (7 bit value)
Definition net_mgmt.h:80
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:268
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:116
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:224
void net_mgmt_add_event_callback(struct net_mgmt_event_callback *cb)
Add a user callback.
@ NET_MGMT_LAYER_CODE_HOSTAP
Hostap (wpa_supplicant) layer code.
Definition net_mgmt.h:89
@ NET_MGMT_LAYER_CODE_USER1
User layer code 1.
Definition net_mgmt.h:99
@ NET_MGMT_LAYER_CODE_IPV4
IPv4 layer code.
Definition net_mgmt.h:84
@ NET_MGMT_LAYER_CODE_IFACE
Network interface layer code.
Definition net_mgmt.h:82
@ NET_MGMT_LAYER_CODE_UNKNOWN
Unknown layer code, do not use.
Definition net_mgmt.h:81
@ NET_MGMT_LAYER_CODE_STATS
Statistics layer code.
Definition net_mgmt.h:88
@ NET_MGMT_LAYER_CODE_IEEE802514
IEEE 802.15.4 layer code.
Definition net_mgmt.h:91
@ NET_MGMT_LAYER_CODE_USER3
User layer code 3.
Definition net_mgmt.h:97
@ NET_MGMT_LAYER_CODE_PPP
PPP layer code.
Definition net_mgmt.h:92
@ NET_MGMT_LAYER_CODE_COAP
CoAP layer code.
Definition net_mgmt.h:87
@ NET_MGMT_LAYER_CODE_WIFI
Wi-Fi layer code.
Definition net_mgmt.h:94
@ NET_MGMT_LAYER_CODE_IPV6
IPv6 layer code.
Definition net_mgmt.h:85
@ NET_MGMT_LAYER_CODE_USER2
User layer code 2.
Definition net_mgmt.h:98
@ NET_MGMT_LAYER_CODE_L4
L4 layer code.
Definition net_mgmt.h:86
@ NET_MGMT_LAYER_CODE_CONN
Connectivity layer code.
Definition net_mgmt.h:83
@ NET_MGMT_LAYER_CODE_VIRTUAL
Virtual network interface layer code.
Definition net_mgmt.h:93
@ NET_MGMT_LAYER_CODE_RESERVED
Reserved layer code for future use.
Definition net_mgmt.h:102
@ NET_MGMT_LAYER_CODE_ETHERNET
Ethernet layer code.
Definition net_mgmt.h:90
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:39
#define NULL
Definition iar_missing_defs.h:20
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:714
Network Management event callback structure Used to register a callback into the network management e...
Definition net_mgmt.h:170
sys_snode_t node
Meant to be used internally, to insert the callback into a list.
Definition net_mgmt.h:174
struct k_sem * sync_call
Semaphore meant to be used internally for the synchronous net_mgmt_event_wait() function.
Definition net_mgmt.h:183
uint32_t raised_event
Internal place holder when a synchronous event wait is successfully unlocked on a event.
Definition net_mgmt.h:209
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:205
net_mgmt_event_handler_t handler
Actual callback function being used to notify the owner.
Definition net_mgmt.h:179