0

cooja中的错误

我正在使用 Contiki-ng 以及示例 udp-server 和 udp-client。我想做几件事: 1-我希望客户端节点嗅探数据包,然后在它完成后将数据包发送到服务器。我设法做到了,但有些东西我不明白:a-当我在 udp-client 中开始嗅探时,通过将这一位添加到代码中:

radio_value_t radio_rx_mode;
NETSTACK_RADIO.get_value(RADIO_PARAM_RX_MODE, &radio_rx_mode);
NETSTACK_RADIO.set_value(RADIO_PARAM_RX_MODE, radio_rx_mode & (~RADIO_RX_MODE_ADDRESS_FILTER));

这似乎只在 udp-client 应用程序级别捕获数据包,当我增加 QUEUEBUF_CONF_NUM 以允许服务器接收这些数据包时,它只捕获节点自己的数据包。知道为什么会这样吗?

b-当我在 input_packet 函数中的 csma.c 文件中执行相同操作时,它可以工作并且确实捕获了所有数据包,但是,我不确定如何设置以便一旦在 csma 级别捕获数据包 a节点可以从应用程序级别发送数据包吗?

2- 只是一个简单的问题,以确认我所做的是否正确,我想在此示例中启用 ReTx,因此我将其添加到项目配置文件中:

  #define CSMA_MAX_FRAME_RETRIES 7

这会启用数据包的重传吗?还是在做其他事情?

感谢您在这方面的任何帮助。谢谢你。

4

1 回答 1

0
  1. 从 CSMA 代码中,您可以尝试显式调用应用程序代码中定义的函数,或向应用程序进程发送事件。如果这看起来太难看,也许最干净(但效率不高)的方法是调用process_post()withPROCESS_BROADCAST作为第一个参数。这会将事件广播到所有活动进程,包括应用程序的进程。

  2. 默认情况下,CSMA 最多进行 7 次重传。禁用或更改重传次数,#define CSMA_CONF_MAX_FRAME_RETRIES为文件中的某个非默认值project-conf.h。请注意CONF此预处理器指令名称中的 。

于 2020-12-28T18:10:13.083 回答