Skip to content

文档:NullNet

fengjikui edited this page Jun 8, 2020 · 1 revision

Contiki-NG提供了NullNet,它的网络层什么都不做。 NullNet对于测试较低层协议或一般而言无IPv6的网络最为有用。 NullNet通过MAKE_NET变量启用,请参阅doc:configuration。

使用NullNet,网络层数据包由应用程序直接创建,并按原样发送到MAC层。 在接收方,MAC层会将数据包传递给NullNet,NullNet随后将通过回调调用应用程序。

使用NullNet发送数据

要使用NullNet发送数据包,首先将nullnet_buf(在nullnet.h中声明)指向缓冲区,然后将nullnet_len设置为有效数据长度。 然后,以目标链接层地址为参数调用NETSTACK_NETWORK.output。 使用NULLlinkaddr_null发送广播。 例如:

#include "net/nullnet/nullnet.h"
...
uint8_t payload[64] = { 0 };
nullnet_buf = payload; /* Point NullNet buffer to 'payload' */
nullnet_len = 2; /* Tell NullNet that the payload length is two bytes */
NETSTACK_NETWORK.output(NULL); /* Send as broadcast */

NullNet将按原样发送您的有效负载。 未添加新的报头,甚至连端口的概念没有。 --请注意--:这也意味着NullNet不会为您隔离多个连接。

用NullNet接收数据

若要接收数据,请将NullNet应用程序的回调设置为您自己的函数。 这是通过nullnet_set_input_callback完成的。 该函数的类型必须为nullnet_input_callback。 例如:

#include "net/nullnet/nullnet.h"
...
void input_callback(const void *data, uint16_t len,
  const linkaddr_t *src, const linkaddr_t *dest)
{
...
}
...
/* At process initialization */
nullnet_set_input_callback(input_callback);

每次接收到单播或广播的数据包时,NullNet都会调用函数input_callback。 函数参数提供指向有效负载,有效负载长度以及源和目标的链路层地址的指针。 对于广播,将dest设置为linkaddr_null即可。