我正在尝试使用 Contiki OS 提供的 6LoWPAN 实现。我的问题是 Rime 只是在没有设置标志 UIP_CONF_IPV6
的情况下工作。一旦我设置标志以激活 IPv6 支持,编译器就会报告位于 rime_sniffer_add()
和 rime_sniffer_remove()
中的函数 rime.c
和 sicslowpan.c
的“多重定义”。
有人设法解决了这个问题或一个有效的例子吗?
最佳答案
我想补充一点,虽然这是一个老问题,但它可以使用更清晰的解释。
您不能在 Contiki 中同时使用 Rime 和 6LoWPAN,因为网络堆栈支持单个网络驱动程序(如果您查看 netstack.h)。
默认驱动程序是 rime。如果您定义了 UIP_CONF_IPV6 标志,则它定义了 WITH_UIP6 标志,进而将网络驱动程序设置为 sicslowpan。
收到消息后,MAC 驱动程序(在本例中为 llsec)直接调用由网络驱动程序定义的 input() 函数。没有对数据包头进行多路分解,因此,再次重申,它是编译时定义的 rime 或 sicslowpan。
现在 - 您可以使用 rime 发送消息。据我从代码中可以看出,这些嗅探器用于辅助功能,例如为 rime 或 6lowpan 启用更详细的 powertrace。这不是必需的,因此您可以注释掉嗅探器。但是,话又说回来,即使您可以同时编译 rime 和 6lowpan,并且可以发送消息,您也不会收到任何消息(经过尝试和测试...)。
如果你想用 6lowpan 做广播,使用多播地址进行广播,使用 icmp 或 udp。
希望这可以帮助。
米塞尔
关于ipv6 - 在 Contiki OS 中使用 Rime 和 6LoWPAN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21912607/