我正在尝试使用Contiki OS提供的6LoWPAN实现。
我的问题是Rime正在工作而没有设置标志UIP_CONF_IPV6
。一旦我设置标志以激活IPv6支持,编译器就会报告位于rime_sniffer_add()
以及{{1}中的函数rime_sniffer_remove()
和rime.c
的“多重定义” }}。
有人设法解决了这个问题还是一个有效的例子?
答案 0 :(得分:1)
我想补充一点,虽然这是一个老问题,但它可以使用更明确的解释。
你不能在Contiki中同时使用Rime和6LoWPAN,因为网络堆栈支持单个网络驱动程序(如果你查看netstack.h)。
默认驱动程序是rime。如果定义UIP_CONF_IPV6标志,它将定义WITH_UIP6标志,该标志又将网络驱动程序设置为sicslowpan。
收到消息后,MAC驱动程序(在本例中为llsec)直接调用网络驱动程序定义的input()函数。没有分组报头的解复用,因此,再次,它是rime或sicslowpan,如在编译时定义的 。
现在 - 您可以使用rime发送消息。据我所知,从代码中可以看出,这些嗅探器用于辅助功能,例如为雾霾或6lowpan启用更详细的powertrace。这不是必需的,所以你可以注释掉嗅探器。但是,再说一遍,即使你可以同时编译rime和6lowpan,并且可以发送消息,你也不会收到任何东西(经过试验和测试......)。
如果你想用6lowpan进行广播,请使用多播地址进行广播,使用icmp或udp。
希望这会有所帮助。 Misel
答案 1 :(得分:0)
如果有人对使用Contiki的6LoWPAN感兴趣:
正确的方法是使用基本上为IPv6和6LoWPAN设计的RPL
请参阅Contiki的udp_rpl
示例以设置服务器/客户端通信。适当的标志将启用6LoWPAN标头压缩。