Loading...
Searching...
No Matches
netapi.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Freie Universität Berlin
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
57
58#include "compiler_hints.h"
60#include "net/gnrc/nettype.h"
61#include "net/gnrc/pkt.h"
62#include "net/netopt.h"
63#include "thread.h"
64
65#ifdef __cplusplus
66extern "C" {
67#endif
68
72#define GNRC_NETAPI_MSG_TYPE_RCV (0x0201)
73
77#define GNRC_NETAPI_MSG_TYPE_SND (0x0202)
78
82#define GNRC_NETAPI_MSG_TYPE_SET (0x0203)
83
87#define GNRC_NETAPI_MSG_TYPE_GET (0x0204)
88
92#define GNRC_NETAPI_MSG_TYPE_ACK (0x0205)
93
99#define GNRC_NETAPI_MSG_TYPE_NOTIFY (0x0207)
100
105typedef struct {
107 uint16_t context;
108 void *data;
109 uint16_t data_len;
111
126
146int _gnrc_netapi_get_set(kernel_pid_t pid, netopt_t opt, uint16_t context,
147 void *data, size_t data_len, uint16_t type);
148
158static inline int gnrc_netapi_send(kernel_pid_t pid, gnrc_pktsnip_t *pkt)
159{
161}
162
173int gnrc_netapi_dispatch(gnrc_nettype_t type, uint32_t demux_ctx, uint16_t cmd,
174 gnrc_pktsnip_t *pkt);
175
186static inline int gnrc_netapi_dispatch_send(gnrc_nettype_t type, uint32_t demux_ctx,
187 gnrc_pktsnip_t *pkt)
188{
189 return gnrc_netapi_dispatch(type, demux_ctx, GNRC_NETAPI_MSG_TYPE_SND, pkt);
190}
191
207ACCESS(read_write, 4, 5)
209 void *data, size_t data_len);
210
221{
223}
224
235static inline int gnrc_netapi_dispatch_receive(gnrc_nettype_t type, uint32_t demux_ctx,
236 gnrc_pktsnip_t *pkt)
237{
238 return gnrc_netapi_dispatch(type, demux_ctx, GNRC_NETAPI_MSG_TYPE_RCV, pkt);
239}
240
256ACCESS(write_only, 4, 5)
257static inline int gnrc_netapi_get(kernel_pid_t pid, netopt_t opt,
258 uint16_t context, void *data, size_t max_len)
259{
260 return _gnrc_netapi_get_set(pid, opt, context, data, max_len,
262}
263
279ACCESS(read_only, 4, 5)
280static inline int gnrc_netapi_set(kernel_pid_t pid, netopt_t opt,
281 uint16_t context, const void *data,
282 size_t data_len)
283{
284 /* disregard const pointer. This *should* be safe and any modification
285 * to `data` should be considered a bug */
286 return _gnrc_netapi_get_set(pid, opt, context, (void *)data, data_len,
288}
289
290#ifdef __cplusplus
291}
292#endif
293
Common macros and compiler attributes/pragmas configuration.
#define ACCESS(mode, ptr_idx, size_idx)
Emit an attribute (if supported by the compiler) that declares how a function will access its paramet...
int16_t kernel_pid_t
Unique process identifier.
Definition sched.h:134
netapi_notify_t
Definition of notification event types in the network stack.
Definition notify.h:49
static int gnrc_netapi_dispatch_receive(gnrc_nettype_t type, uint32_t demux_ctx, gnrc_pktsnip_t *pkt)
Sends a GNRC_NETAPI_MSG_TYPE_RCV command to all subscribers to (type, demux_ctx).
Definition netapi.h:235
static int gnrc_netapi_dispatch_send(gnrc_nettype_t type, uint32_t demux_ctx, gnrc_pktsnip_t *pkt)
Sends a GNRC_NETAPI_MSG_TYPE_SND command to all subscribers to (type, demux_ctx).
Definition netapi.h:186
#define GNRC_NETAPI_MSG_TYPE_RCV
Messaging / IPC type for passing a Packet up the network stack
Definition netapi.h:72
#define GNRC_NETAPI_MSG_TYPE_SET
Messaging / IPC type for setting options of network modules
Definition netapi.h:82
static int gnrc_netapi_set(kernel_pid_t pid, netopt_t opt, uint16_t context, const void *data, size_t data_len)
Shortcut function for sending GNRC_NETAPI_MSG_TYPE_SET messages and parsing the returned GNRC_NETAPI_...
Definition netapi.h:280
static int gnrc_netapi_get(kernel_pid_t pid, netopt_t opt, uint16_t context, void *data, size_t max_len)
Shortcut function for sending GNRC_NETAPI_MSG_TYPE_GET messages and parsing the returned GNRC_NETAPI_...
Definition netapi.h:257
int gnrc_netapi_dispatch(gnrc_nettype_t type, uint32_t demux_ctx, uint16_t cmd, gnrc_pktsnip_t *pkt)
Sends cmd to all subscribers to (type, demux_ctx).
int gnrc_netapi_notify(gnrc_nettype_t type, uint32_t demux_ctx, netapi_notify_t event, void *data, size_t data_len)
Sends a GNRC_NETAPI_MSG_TYPE_NOTIFY command to all subscribers to (type, demux_ctx).
int _gnrc_netapi_get_set(kernel_pid_t pid, netopt_t opt, uint16_t context, void *data, size_t data_len, uint16_t type)
Shortcut function for sending GNRC_NETAPI_MSG_TYPE_GET or GNRC_NETAPI_MSG_TYPE_SET messages and parsi...
#define GNRC_NETAPI_MSG_TYPE_GET
Messaging / IPC type for getting options from network modules
Definition netapi.h:87
#define GNRC_NETAPI_MSG_TYPE_SND
Messaging / IPC type for passing a Packet down the network stack
Definition netapi.h:77
int _gnrc_netapi_send_recv(kernel_pid_t pid, gnrc_pktsnip_t *pkt, uint16_t type)
Shortcut function for sending GNRC_NETAPI_MSG_TYPE_SND or GNRC_NETAPI_MSG_TYPE_RCV messages.
static int gnrc_netapi_receive(kernel_pid_t pid, gnrc_pktsnip_t *pkt)
Shortcut function for sending GNRC_NETAPI_MSG_TYPE_RCV messages.
Definition netapi.h:220
static int gnrc_netapi_send(kernel_pid_t pid, gnrc_pktsnip_t *pkt)
Shortcut function for sending GNRC_NETAPI_MSG_TYPE_SND messages.
Definition netapi.h:158
gnrc_nettype_t
Definition of protocol types in the network stack.
Definition nettype.h:48
struct gnrc_pktsnip gnrc_pktsnip_t
Type to represent parts (either headers or payload) of a packet, called snips.
netopt_t
Global list of configuration options available throughout the network stack, e.g.
Definition netopt.h:41
General definitions for network packets and their helper functions.
Definition of global configuration options.
Protocol type definitions.
Network event notification type definitions.
event structure
Definition event.h:142
Data structure to be send for setting (GNRC_NETAPI_MSG_TYPE_SET) and getting (GNRC_NETAPI_MSG_TYPE_GE...
Definition netapi.h:105
uint16_t data_len
size of the data / the buffer
Definition netapi.h:109
void * data
data to set or buffer to read into
Definition netapi.h:108
uint16_t context
(optional) context for that option
Definition netapi.h:107
netopt_t opt
the option to get/set
Definition netapi.h:106