首页 > 解决方案 > 如何丢弃在 NS-3 网状节点中捕获的特定数据包?

问题描述

我正在使用 NS-3 v3.28.1 来模拟 WiFi Mesh 网络。网格拓扑(实际上只有一条线,每个节点安装 IEEE 802.11s 堆栈,HWMP 协议)包含 3 个 WiFi Mesh 节点Node0Node1Node2然后我在Node0中绑定一个 UDP 套接字(充当接收者),在Node2中绑定另一个(充当发送者) 。Node2每 10ms通过Node1向Node0发送一个 UDP 数据包。拓扑如下:

Node0接收者)<--- Node1 <---- Node2发送者

10.1.1.1/24              10.1.1.2/24      10.1.1.3/24

然后我在Node1上设置 MonitorSnifferRx 函数来监听从Node2发送到Node0的 udp 数据包,使用Config::ConnectWithoutContext

Config::ConnectWithoutContext ("/NodeList/1/DeviceList/*/Phy/MonitorSnifferRx", MakeCallback (&DecodeRxPktCB));

Node1回调函数 DecodeRxPktCB 中,我可以解码从Node2发送到Node0的 udp 数据包。

我的问题是:当在Node1的 MonitorSnifferRx 回调函数中捕获到特定的 UDP 数据包(内容与某些规则匹配)时,我怎样才能将其丢弃,因此它不会传输到Node0?我看到 MonitorSnifferRx 回调函数中的第一个参数是“Ptr< const Packet > packet”,只有 const 值才能读取。

标签: wifipacketns-3mesh-networkdrop

解决方案


您可以使用NS-3 Packet类来获取您需要的信息并对其进行过滤。

如果可以的话,我建议在发送者上添加一个数据包标签(或 ByteTag),让你的中间节点更容易过滤它。数据包标签详细信息也在上面的链接上。


推荐阅读