考虑如下所示的RPL网络。在这个网络中,节点1是DODAG的根。节点2是发送者,并向接收节点发送单播UDP数据包(节点3-18)。DODAG是在非存储模式下工作的,我正在使用Contiki-NG的Cooja mote来执行这个模拟。
问题是,数据包只能到达放置在12跳之外的节点(本例中的节点13 )。例如,当发送者想要为节点16发送数据包时,我们收到了6lowpan的警告,数据包被丢弃在根目录下:“没有足够的packetbuf空间来压缩报头(112字节,左92 )。中止。”(第706行sicslpan.c)我调查了这个问题,发现根目录正确地创建了源路由头,并且没有任何问题地将报头添加到数据包中。然而,问题来自MAC层和无线接口。该包大于无线电驱动程序的MAX_PAYLOAD_LEN。所以无线电驱动程序无法处理数据包。Contiki-ng有自己的空无线电驱动程序,但我认为无线电驱动程序及其参数是由平台定义的。我需要减轻这个限制。可以修改Cooja mote源代码中的参数吗?如果是的话,我怎么能做到呢?

发布于 2021-12-16 08:18:15
至少有两个,潜在的三个缓冲区大小瓶颈,这些瓶颈决定了可以用Contiki-NG网络堆栈发送和处理的数据包的最大大小;
NETSTACK_RADIO驱动程序的NETSTACK_RADIO参数来读取。。
PACKETBUF_CONF_SIZE.的不同值来更改packetbuf大小
如果使用
UIP_CONF_BUFFER_SIZE,默认情况下与相关IPv6定义的IPv6 MTU兼容相当大(1280字节)。但是,一些平台将其设置为更小的值以节省内存。如果您使用模拟的Cooja节点,那么通过在COOJA_RADIO_CONF_BUFSIZE或Makefile中定义不同的project-conf.h值,可以在软件中更改无线数据包的缓冲区。默认值为125字节(因此,当添加2字节FCS时,大小是IEEE 802.15.4无线电的最大PHY层有效负载)。
要解决Cooja上的问题,可以尝试添加project-conf.h
#define COOJA_RADIO_CONF_BUFSIZE 1000
#define PACKETBUF_CONF_SIZE 1000https://stackoverflow.com/questions/70314260
复制相似问题