微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Contiki-ng 中的 CSMA 级别嗅探和应用嗅探

如何解决Contiki-ng 中的 CSMA 级别嗅探和应用嗅探

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_RETRIES 设置为 project-conf.h 文件中的某个非默认值。请注意此预处理器指令名称中的 CONF

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。