Contiki-ng中的CSMA级嗅探和App嗅探

CSMA level sniff and App sniff in Contiki-ng

The error in 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 级别捕获数据包,节点就可以从应用程序级别发送数据包?

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

  #define CSMA_MAX_FRAME_RETRIES 7

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

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

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

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