netdev.h

Definitions low-level network driver interface.

enum @143
NETDEV_TYPE_UNKNOWN
NETDEV_TYPE_RAW
NETDEV_TYPE_ETHERNET
NETDEV_TYPE_IEEE802154
NETDEV_TYPE_BLE
NETDEV_TYPE_CC110X
NETDEV_TYPE_LORA
NETDEV_TYPE_NRFMIN
NETDEV_TYPE_SLIP
NETDEV_TYPE_ESP_NOW
enum netdev_event_t
NETDEV_EVENT_ISR
driver needs it’s ISR handled
NETDEV_EVENT_RX_STARTED
started to receive a packet
NETDEV_EVENT_RX_COMPLETE
finished receiving a packet
NETDEV_EVENT_TX_STARTED
started to transfer a packet
NETDEV_EVENT_TX_COMPLETE
transfer packet complete
NETDEV_EVENT_TX_COMPLETE_DATA_PENDING
transfer packet complete and data pending flag
NETDEV_EVENT_TX_NOACK
ACK requested but not received.
NETDEV_EVENT_TX_MEDIUM_BUSY
couldn’t transfer packet
NETDEV_EVENT_LINK_UP
link established
NETDEV_EVENT_LINK_DOWN
link gone
NETDEV_EVENT_TX_TIMEOUT
timeout when sending
NETDEV_EVENT_RX_TIMEOUT
timeout when receiving
NETDEV_EVENT_CRC_ERROR
wrong CRC
NETDEV_EVENT_FHSS_CHANGE_CHANNEL
channel changed
NETDEV_EVENT_CAD_DONE
channel activity detection done
struct netdev netdev_t

Forward declaration for netdev struct.

void(* netdev_event_cb_t()

Event callback for signaling event to upper layers.

Parameters

type:type of the event

struct netdev_driver netdev_driver_t

Structure to hold driver interface -> function mapping.

The send/receive functions expect/return a full ethernet frame (dst mac, src mac, ethertype, payload, no checksum).

int netdev_get_notsup(netdev.h::netdev_t * dev, netopt.h::netopt_t opt, void * value, msp430_types.h::size_t max_len)

Convenience function for declaring get() as not supported in general.

Parameters

dev:ignored
opt:ignored
value:ignored
max_len:ignored

Return values

  • always returns -ENOTSUP
int netdev_set_notsup(netdev.h::netdev_t * dev, netopt.h::netopt_t opt, const void * value, msp430_types.h::size_t value_len)

Convenience function for declaring set() as not supported in general.

Parameters

dev:ignored
opt:ignored
value:ignored
value_len:ignored

Return values

  • always returns -ENOTSUP
struct netdev_radio_rx_info

Received packet status information for most radios.

May be different for certain radios.

int16_t rssi

RSSI of a received packet in dBm.

uint8_t lqi

LQI of a received packet.

struct netdev

Structure to hold driver state.

Supposed to be extended by driver implementations. The extended structure should contain all variable driver state.

Contains a field context which is not used by the drivers, but supposed to be used by upper layers to store reference information.

const struct netdev_driver * driver

ptr to that driver’s interface.

netdev.h::netdev_event_cb_t event_callback

callback for device events

void * context

ptr to network stack context

struct netdev_driver

Structure to hold driver interface -> function mapping.

The send/receive functions expect/return a full ethernet frame (dst mac, src mac, ethertype, payload, no checksum).

int(* send()

Send frame.

Parameters

dev:Network device descriptor. Must not be NULL.
iolist:io vector list to send

Return values

  • negative errno on error
  • number of bytes sent
int(* recv()

Get a received frame.

Supposed to be called from netdev.h::netdev::event_callback

If buf == NULL and len == 0, returns the packet size without dropping it. If buf == NULL and len > 0, drops the packet and returns the packet size.

Parameters

dev:network device descriptor. Must not be NULL.
buf:buffer to write into or NULL to return the packet size.
len:maximum number of bytes to read. If buf is NULL the currently buffered packet is dropped when len > 0. Must not be 0 when buf != NULL.
info:status information for the received packet. Might be of different type for different netdev devices. May be NULL if not needed or applicable.

Return values

  • -ENOBUFS if supplied buffer is too small
  • number of bytes read if buf != NULL
  • packet size if buf == NULL
int(* init()

the driver’s initialization function

Parameters

dev:network device descriptor. Must not be NULL.

Return values

  • < 0 on error
  • 0 on success
void(* isr()

a driver’s user-space ISR handler

This function will be called from a network stack’s loop when being notified by netdev_isr.

It is supposed to call netdev.h::netdev::event_callback for each occurring event.

See receive packet flow description for details.

Parameters

dev:network device descriptor. Must not be NULL.

int(* get()

Get an option value from a given network device.

Parameters

dev:network device descriptor
opt:option type
value:pointer to store the option’s value in
max_len:maximal amount of byte that fit into value

Return values

  • number of bytes written to value
  • -ENOTSUP if opt is not provided by the device
int(* set()

Set an option value for a given network device.

Parameters

dev:network device descriptor
opt:option type
value:value to set
value_len:the length of value

Return values

  • number of bytes written to value
  • -ENOTSUP if opt is not configurable for the device
  • -EINVAL if value is an invalid value with regards to opt