netdev dummy test driver¶
Provides a test dummy for the netdev interface.
See the following simple packet traversal timer for an example. Note that this example assumes that the stack doesn’t require any option values from the device and that the stack doesn’t create packets on its own or looses packets (neither of those can be assumed for in-production stacks).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <stdint.h>
#include "mutex.h"
#include "net/af.h"
#include "net/conn/udp.h"
#include "net/ipv6/addr.h"
#include "net/netdev_test.h"
#include "xtimer.h"
#define PKT_NUMBER (1000)
static netdev_test_t dev;
static uint32_t last_start;
static uint32_t sum = 0;
static mutex_t wait = MUTEX_INIT;
int _send_timer(netdev_t *dev, const iolist_t *iolist)
{
(void)dev;
(void)iolist;
sum += (xtimer_now_usec() - last_start);
mutex_unlock(&wait);
}
int main(void) {
ipv6_addr_t dst = IPV6_ADDR_UNSPECIFIED;
netdev_test_setup(&dev, NULL);
dev->driver->init((netdev_t *)&dev)
// initialize stack and connect `dev` to it
// ...
mutex_lock(&wait);
for (int i = 0; i < PKT_NUMBER; i++) {
last_start = xtimer_now_usec();
conn_udp_sendto("abcd", sizeof("abcd"), NULL, 0, &dst, sizeof(dst),
AF_INET6, 0xcafe, 0xcafe);
mutex_lock(&wait);
}
printf("Average send packet traversal time: %u\n", sum / PKT_NUMBER);
mutex_unlock(&wait);
return 0;
}
|
To provide options to the stack, the netdev_test.h::netdev_test_t::get_cbs
for the specific options need to be set. To catch lost packets and additional sent by the stack the send handler needs to be adapted accordingly.
-
int(*
netdev_test_send_cb_t
()¶ Callback type to handle send command.
Parameters
dev: network device descriptor iolist: io vector list to send Return values
- number of bytes sent
- <= 0 on error
-
int(*
netdev_test_recv_cb_t
()¶ Callback type to handle receive command.
Parameters
dev: network device descriptor buf: buffer to write into or NULL
len: maximum number of bytes to read 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
- <=0 on error
- number of bytes read if buf != NULL
- currently received packet size if buf == NULL
-
int(*
netdev_test_init_cb_t
()¶ Callback type to handle device initialization.
Parameters
dev: network device descriptor Return values
- <= on error
- 0 on success
-
void(*
netdev_test_isr_cb_t
()¶ Callback type to handle user-space ISR events.
Parameters
dev: network device descriptor
-
int(*
netdev_test_get_cb_t
()¶ Callback type to handle get commands.
Parameters
dev: network device descriptor value: pointer to store the option’s value in max_len: maximal amount of bytes that fit into value
Return values
- number of bytes written to
value
- <0 on error
- number of bytes written to
-
int(*
netdev_test_set_cb_t
()¶ Callback type to handle set commands.
Parameters
dev: network device descriptor value: value to set value_len: the length of value
Return values
- number of bytes used from
value
- <0 on error
- number of bytes used from
-
void
netdev_test_set_send_cb
(netdev_test_t * dev,netdev_test.h::netdev_test_send_cb_t
send_cb)¶ override send callback
Parameters
dev: a netdev dummy test driver device send_cb: a send callback
-
void
netdev_test_set_recv_cb
(netdev_test_t * dev,netdev_test.h::netdev_test_recv_cb_t
recv_cb)¶ override receive callback
Parameters
dev: a netdev dummy test driver device recv_cb: a receive callback
-
void
netdev_test_set_init_cb
(netdev_test_t * dev,netdev_test.h::netdev_test_init_cb_t
init_cb)¶ override initialization callback
Parameters
dev: a netdev dummy test driver device init_cb: an initialization callback
-
void
netdev_test_set_isr_cb
(netdev_test_t * dev,netdev_test.h::netdev_test_isr_cb_t
isr_cb)¶ override ISR event handler callback
Parameters
dev: a netdev dummy test driver device isr_cb: an ISR event handler callback
-
void
netdev_test_set_get_cb
(netdev_test_t * dev,netopt.h::netopt_t
opt,netdev_test.h::netdev_test_get_cb_t
get_cb)¶ override get callback for a certain option type
Parameters
dev: a netdev dummy test driver device opt: an option type get_cb: a get callback for opt
-
void
netdev_test_set_set_cb
(netdev_test_t * dev,netopt.h::netopt_t
opt,netdev_test.h::netdev_test_set_cb_t
set_cb)¶ override get callback for a certain option type
Parameters
dev: a netdev dummy test driver device opt: an option type set_cb: a set callback for opt
-
void
netdev_test_setup
(netdev_test_t * dev, void * state)¶ Setup a given netdev dummy test driver device.
Parameters
dev: a netdev dummy test driver device to initialize state: external state for the device
-
void
netdev_test_reset
(netdev_test_t * dev)¶ Resets all callbacks for the device to NULL.
Parameters
dev: a netdev dummy test driver device to initialize
-
struct
netdev_test_t
¶ Device descriptor for netdev dummy test driver devices.
-
netdev.h::netdev_t
netdev
¶ netdev fields
superclass
-
netdev_test.h::netdev_test_send_cb_t
send_cb
¶ device specific fields
callback to handle send command
-
netdev_test.h::netdev_test_recv_cb_t
recv_cb
¶ callback to handle receive command
-
netdev_test.h::netdev_test_init_cb_t
init_cb
¶ callback to handle initialization events
-
netdev_test.h::netdev_test_isr_cb_t
isr_cb
¶ callback to handle ISR events
-
netdev_test.h::netdev_test_get_cb_t
get_cbs
()¶ callback to handle get command
-
netdev_test.h::netdev_test_set_cb_t
set_cbs
()¶ callback to handle set command
-
void *
state
¶ external state for the device
-