如何解决Contiki-ng 中的 CSMA 级别嗅探和应用嗅探
我正在使用 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
这会启用数据包的重传吗?还是在做别的事情?
在这方面的任何帮助表示赞赏。 谢谢。
解决方法
-
从 CSMA 代码中,您可以尝试显式调用应用程序代码中定义的函数,或将事件发送到应用程序的进程。如果这看起来太难看,也许最简洁(但效率不高)的方法是使用
process_post()
作为第一个参数调用PROCESS_BROADCAST
。这会将事件广播到所有活动进程,包括应用程序的进程。 -
默认情况下,CSMA 最多进行 7 次重传。要禁用重传或更改重传次数,请将
#define CSMA_CONF_MAX_FRAME_RETRIES
设置为project-conf.h
文件中的某个非默认值。请注意此预处理器指令名称中的CONF
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。