Zephyr API Documentation 4.4.0-rc1
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
socket_service.h
Go to the documentation of this file.
1
8
9/*
10 * Copyright (c) 2023 Nordic Semiconductor ASA
11 *
12 * SPDX-License-Identifier: Apache-2.0
13 */
14
15#ifndef ZEPHYR_INCLUDE_NET_SOCKET_SERVICE_H_
16#define ZEPHYR_INCLUDE_NET_SOCKET_SERVICE_H_
17
26
27#include <sys/types.h>
28#include <zephyr/types.h>
29#include <zephyr/net/socket.h>
30#include <zephyr/logging/log.h>
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
37
45
60
72#if CONFIG_NET_SOCKETS_LOG_LEVEL >= LOG_LEVEL_DBG
77 const char *owner;
78#endif
84 int *idx;
85};
86
88
89#define __z_net_socket_svc_get_name(_svc_id) __z_net_socket_service_##_svc_id
90#define __z_net_socket_svc_get_idx(_svc_id) __z_net_socket_service_idx_##_svc_id
91#define __z_net_socket_svc_get_owner __FILE__ ":" STRINGIFY(__LINE__)
92
93#if CONFIG_NET_SOCKETS_LOG_LEVEL >= LOG_LEVEL_DBG
94#define NET_SOCKET_SERVICE_OWNER .owner = __z_net_socket_svc_get_owner,
95#else
96#define NET_SOCKET_SERVICE_OWNER
97#endif
98
99#define __z_net_socket_service_define(_name, _cb, _count, ...) \
100 static int __z_net_socket_svc_get_idx(_name); \
101 static struct net_socket_service_event \
102 __z_net_socket_svc_get_name(_name)[_count] = { \
103 [0 ... ((_count) - 1)] = { \
104 .event.fd = -1, /* Invalid socket */ \
105 .callback = _cb, \
106 } \
107 }; \
108 COND_CODE_0(NUM_VA_ARGS_LESS_1(__VA_ARGS__), (), __VA_ARGS__) \
109 const STRUCT_SECTION_ITERABLE(net_socket_service_desc, _name) = { \
110 NET_SOCKET_SERVICE_OWNER \
111 .pev = __z_net_socket_svc_get_name(_name), \
112 .pev_len = (_count), \
113 .idx = &__z_net_socket_svc_get_idx(_name), \
114 }
115
117
136#define NET_SOCKET_SERVICE_SYNC_DEFINE(name, cb, count) \
137 __z_net_socket_service_define(name, cb, count)
138
149#define NET_SOCKET_SERVICE_SYNC_DEFINE_STATIC(name, cb, count) \
150 __z_net_socket_service_define(name, cb, count, static)
151
164__syscall int net_socket_service_register(const struct net_socket_service_desc *service,
165 struct zsock_pollfd *fds, int len, void *user_data);
166
176static inline int net_socket_service_unregister(const struct net_socket_service_desc *service)
177{
178 return net_socket_service_register(service, NULL, 0, NULL);
179}
180
188typedef void (*net_socket_service_cb_t)(const struct net_socket_service_desc *svc,
189 void *user_data);
190
198
199#ifdef __cplusplus
200}
201#endif
202
203#include <zephyr/syscalls/socket_service.h>
204
208
209#endif /* ZEPHYR_INCLUDE_NET_SOCKET_SERVICE_H_ */
void(* net_socket_service_cb_t)(const struct net_socket_service_desc *svc, void *user_data)
Callback used while iterating over socket services.
Definition socket_service.h:188
void(* net_socket_service_handler_t)(struct net_socket_service_event *pev)
The signature for a net socket service handler function.
Definition socket_service.h:44
int net_socket_service_register(const struct net_socket_service_desc *service, struct zsock_pollfd *fds, int len, void *user_data)
Register pollable sockets.
void net_socket_service_foreach(net_socket_service_cb_t cb, void *user_data)
Go through all the socket services and call callback for each service.
static int net_socket_service_unregister(const struct net_socket_service_desc *service)
Unregister pollable sockets.
Definition socket_service.h:176
#define NULL
Definition iar_missing_defs.h:20
BSD Sockets compatible API definitions.
Main structure holding socket service configuration information.
Definition socket_service.h:71
const char * owner
Owner name.
Definition socket_service.h:77
int * idx
Where are my pollfd entries in the global list.
Definition socket_service.h:84
int pev_len
Length of the pollable socket array for this service.
Definition socket_service.h:82
struct net_socket_service_event * pev
Pointer to the list of services that we are listening.
Definition socket_service.h:80
This struct contains information which socket triggered calls to the callback function.
Definition socket_service.h:50
struct net_socket_service_desc * svc
Service back pointer.
Definition socket_service.h:58
struct zsock_pollfd event
Socket information that triggered this event.
Definition socket_service.h:54
net_socket_service_handler_t callback
Callback to be called for desired socket activity.
Definition socket_service.h:52
void * user_data
User data.
Definition socket_service.h:56
Definition of the monitored socket/file descriptor.
Definition socket_poll.h:31