3

我正在尝试使用 Contiki OS 提供的 6LoWPAN 实现。

我的问题是 Rime 只是在没有设置标志的情况下工作UIP_CONF_IPV6。一旦我设置了标志以激活 IPv6 支持,编译器就会报告函数的“多重定义”,这些rime_sniffer_add()函数rime_sniffer_remove()位于. 有人设法解决了这个问题或一个可行的例子吗?rime.csicslowpan.c

4

2 回答 2

2

我想补充一点,虽然这是一个老问题,但它可以使用更清晰的解释。

您不能在 Contiki 中同时使用 Rime 和 6LoWPAN,因为网络堆栈支持单个网络驱动程序(如果您查看 netstack.h)。

默认驱动程序是 rime。如果您定义 UIP_CONF_IPV6 标志,它会定义 WITH_UIP6 标志,进而将网络驱动程序设置为 sicslowpan。

收到消息后,MAC 驱动程序(在本例中为 llsec)直接调用网络驱动程序定义的 input() 函数。没有对数据包头进行解复用,因此,它还是 rime 或 sicslowpan,正如在编译时定义的那样。

现在 - 您可以使用 rime 发送消息。据我从代码中可以看出,这些嗅探器用于辅助功能,例如为 rime 或 6lowpan 启用更详细的电源跟踪。这不是必需的,因此您可以注释掉嗅探器。但是,话又说回来,即使你可以同时编译 rime 和 6lowpan,并且可以发送消息,你也不会收到任何东西(经过尝试和测试......)。

如果要使用 6lowpan 进行广播,请使用多播地址进行广播,使用 icmp 或 udp。

希望这可以帮助。米塞尔

于 2016-01-14T15:36:10.300 回答
1

如果有人对使用 Contiki 的 6LoWPAN 感兴趣:

正确的方法是使用 RPL,它基本上是为 IPv6 和 6LoWPAN 设计的。
请参阅 Contiki 的udp_rpl示例以设置服务器/客户端通信。适当的标志将启用 6LoWPAN 标头压缩。

于 2014-03-04T11:13:07.940 回答