Loading...
Searching...
No Matches
netdev.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2015 Kaspar Schleiser <kaspar@schleiser.de>
3 * SPDX-FileCopyrightText: 2015 Ell-i open source co-operative
4 * SPDX-FileCopyrightText: 2015-2017 Freie Universität Berlin
5 * SPDX-FileCopyrightText: 2014 Martine Lenders <mlenders@inf.fu-berlin.de>
6 * SPDX-License-Identifier: LGPL-2.1-only
7 */
8
9#pragma once
10
188
189#ifdef __cplusplus
190extern "C" {
191#endif
192
193#include <stdint.h>
194#include <errno.h>
195
196#include "iolist.h"
197#include "net/netopt.h"
198#include "kernel_defines.h"
199
200#ifdef MODULE_L2FILTER
201#include "net/l2filter.h"
202#endif
203
211enum {
212 NETDEV_TYPE_UNKNOWN,
213 NETDEV_TYPE_TEST,
214 NETDEV_TYPE_RAW,
215 NETDEV_TYPE_ETHERNET,
216 NETDEV_TYPE_IEEE802154,
217 NETDEV_TYPE_BLE,
218 NETDEV_TYPE_CC110X,
219 NETDEV_TYPE_LORA,
220 NETDEV_TYPE_NRFMIN,
221 NETDEV_TYPE_NRF24L01P_NG,
222 NETDEV_TYPE_SLIP,
223 NETDEV_TYPE_ESP_NOW,
224};
226
271
278 int16_t rssi;
279 uint8_t lqi;
280};
281
285typedef struct netdev netdev_t;
286
294
303typedef enum {
305 NETDEV_AT86RF215,
306 NETDEV_AT86RF2XX,
307 NETDEV_CC2538,
308 NETDEV_DOSE,
309 NETDEV_ENC28J60,
310 NETDEV_KW41ZRF,
311 NETDEV_MRF24J40,
312 NETDEV_NRF802154,
313 NETDEV_STM32_ETH,
314 NETDEV_CC110X,
315 NETDEV_SX127X,
316 NETDEV_SAM0_ETH,
317 NETDEV_ESP_NOW,
318 NETDEV_NRF24L01P_NG,
319 NETDEV_SOCKET_ZEP,
320 NETDEV_SX126X,
321 NETDEV_SX1280,
322 NETDEV_CC2420,
323 NETDEV_ETHOS,
324 NETDEV_SLIPDEV,
325 NETDEV_TAP,
326 NETDEV_W5100,
327 NETDEV_ENCX24J600,
328 NETDEV_ATWINC15X0,
329 NETDEV_KW2XRF,
330 NETDEV_ESP_ETH,
331 NETDEV_ESP_WIFI,
332 NETDEV_CDC_ECM,
333 NETDEV_TINYUSB,
334 NETDEV_W5500,
335 NETDEV_ESP_IEEE802154,
336 NETDEV_LPC1768_ETH,
337 NETDEV_GRETH,
338 /* add more if needed */
340
341
345#define NETDEV_INDEX_ANY (0xFF)
346
347#if DOXYGEN
352#define CONFIG_NETDEV_REGISTER_SIGNAL 0
353#endif
354
364struct netdev {
365 const struct netdev_driver *driver;
367 void *context;
368#ifdef MODULE_NETDEV_LAYER
369 netdev_t *lower;
370#endif
371#ifdef MODULE_L2FILTER
373#endif
374#ifdef MODULE_NETDEV_REGISTER
375 netdev_type_t type;
376 uint8_t index;
377#endif
378};
379
393void netdev_register_signal(struct netdev *dev, netdev_type_t type, uint8_t index);
394
403static inline void netdev_register(struct netdev *dev, netdev_type_t type, uint8_t index)
404{
405#ifdef MODULE_NETDEV_REGISTER
406 dev->type = type;
407 dev->index = index;
408#else
409 (void)dev;
410 (void)type;
411 (void)index;
412#endif
413
415 netdev_register_signal(dev, type, index);
416 }
417}
418
425typedef struct netdev_driver {
461 int (*send)(netdev_t *dev, const iolist_t *iolist);
462
493 int (*confirm_send)(netdev_t *dev, void *info);
494
530 int (*recv)(netdev_t *dev, void *buf, size_t len, void *info);
531
542 int (*init)(netdev_t *dev);
543
560 void (*isr)(netdev_t *dev);
561
583 int (*get)(netdev_t *dev, netopt_t opt,
584 void *value, size_t max_len);
585
609 int (*set)(netdev_t *dev, netopt_t opt,
610 const void *value, size_t value_len);
612
623static inline int netdev_get_notsup(netdev_t *dev, netopt_t opt,
624 void *value, size_t max_len)
625{
626 (void)dev;
627 (void)opt;
628 (void)value;
629 (void)max_len;
630 return -ENOTSUP;
631}
632
643static inline int netdev_set_notsup(netdev_t *dev, netopt_t opt,
644 const void *value, size_t value_len)
645{
646 (void)dev;
647 (void)opt;
648 (void)value;
649 (void)value_len;
650 return -ENOTSUP;
651}
652
667#ifdef __cplusplus
668}
669#endif
670
#define ENOTSUP
Not supported (may be the same value as [EOPNOTSUPP]).
Definition errno.h:129
static void netdev_trigger_event_isr(netdev_t *netdev)
Informs netdev there was an interrupt request from the network device.
Definition netdev.h:661
struct netdev netdev_t
Forward declaration for netdev struct.
Definition netdev.h:285
void netdev_register_signal(struct netdev *dev, netdev_type_t type, uint8_t index)
Signal that the netdev_register function registered the device.
static int netdev_get_notsup(netdev_t *dev, netopt_t opt, void *value, size_t max_len)
Convenience function for declaring get() as not supported in general.
Definition netdev.h:623
#define CONFIG_NETDEV_REGISTER_SIGNAL
Call netdev_register_signal when the netdev device is registered.
Definition netdev.h:352
static void netdev_register(struct netdev *dev, netdev_type_t type, uint8_t index)
Register a device with netdev.
Definition netdev.h:403
netdev_type_t
Driver types for netdev.
Definition netdev.h:303
struct netdev_driver netdev_driver_t
Structure to hold driver interface -> function mapping.
void(* netdev_event_cb_t)(netdev_t *dev, netdev_event_t event)
Event callback for signaling event to upper layers.
Definition netdev.h:293
static int netdev_set_notsup(netdev_t *dev, netopt_t opt, const void *value, size_t value_len)
Convenience function for declaring set() as not supported in general.
Definition netdev.h:643
netdev_event_t
Possible event types that are send from the device driver to the upper layer.
Definition netdev.h:231
@ NETDEV_ANY
Will match any device type.
Definition netdev.h:304
@ NETDEV_EVENT_TX_STARTED
started to transfer a frame
Definition netdev.h:235
@ NETDEV_EVENT_ISR
driver needs it's ISR handled
Definition netdev.h:232
@ NETDEV_EVENT_LINK_UP
link established
Definition netdev.h:262
@ NETDEV_EVENT_TX_NOACK
ACK requested but not received.
Definition netdev.h:253
@ NETDEV_EVENT_RX_COMPLETE
finished receiving a frame
Definition netdev.h:234
@ NETDEV_EVENT_CRC_ERROR
wrong CRC
Definition netdev.h:266
@ NETDEV_EVENT_TX_MEDIUM_BUSY
couldn't transfer frame
Definition netdev.h:260
@ NETDEV_EVENT_TX_TIMEOUT
timeout when sending
Definition netdev.h:264
@ NETDEV_EVENT_FHSS_CHANGE_CHANNEL
channel changed
Definition netdev.h:267
@ NETDEV_EVENT_RX_STARTED
started to receive a frame
Definition netdev.h:233
@ NETDEV_EVENT_TX_COMPLETE_DATA_PENDING
transfer frame complete and data pending flag
Definition netdev.h:245
@ NETDEV_EVENT_TX_COMPLETE
transfer frame complete
Definition netdev.h:236
@ NETDEV_EVENT_RX_TIMEOUT
timeout when receiving
Definition netdev.h:265
@ NETDEV_EVENT_LINK_DOWN
link gone
Definition netdev.h:263
@ NETDEV_EVENT_CAD_DONE
channel activity detection done
Definition netdev.h:268
#define CONFIG_L2FILTER_LISTSIZE
Number of slots in each filter list (filter entries per device)
Definition l2filter.h:56
netopt_t
Global list of configuration options available throughout the network stack, e.g.
Definition netopt.h:41
struct iolist iolist_t
iolist forward declaration
Definition iolist.h:30
iolist scatter / gather IO
Common macros and compiler attributes/pragmas configuration.
Link layer address filter interface definition.
#define IS_ACTIVE(macro)
Allows to verify a macro definition outside the preprocessor.
Definition modules.h:56
Definition of global configuration options.
event structure
Definition event.h:142
iolist structure definition
Definition iolist.h:35
Filter list entries.
Definition l2filter.h:67
Structure to hold driver interface -> function mapping.
Definition netdev.h:425
int(* get)(netdev_t *dev, netopt_t opt, void *value, size_t max_len)
Get an option value from a given network device.
Definition netdev.h:583
int(* send)(netdev_t *dev, const iolist_t *iolist)
Start transmission of the given frame and return directly.
Definition netdev.h:461
int(* confirm_send)(netdev_t *dev, void *info)
Fetch the status of a transmission and perform any potential cleanup.
Definition netdev.h:493
int(* set)(netdev_t *dev, netopt_t opt, const void *value, size_t value_len)
Set an option value for a given network device.
Definition netdev.h:609
int(* recv)(netdev_t *dev, void *buf, size_t len, void *info)
Drop a received frame, OR get the length of a received frame, OR get a received frame.
Definition netdev.h:530
int(* init)(netdev_t *dev)
the driver's initialization function
Definition netdev.h:542
void(* isr)(netdev_t *dev)
a driver's user-space ISR handler
Definition netdev.h:560
Received frame status information for most radios.
Definition netdev.h:277
uint8_t lqi
LQI of a received frame.
Definition netdev.h:279
int16_t rssi
RSSI of a received frame in dBm.
Definition netdev.h:278
Structure to hold driver state.
Definition netdev.h:364
const struct netdev_driver * driver
ptr to that driver's interface.
Definition netdev.h:365
void * context
ptr to network stack context
Definition netdev.h:367
netdev_event_cb_t event_callback
callback for device events
Definition netdev.h:366