INET Packet跨协议层通信时接收端无法获取发送端L3地址问题
问题根因
- 标签类型使用错误:OMNeT++中带
*Req后缀的标签是上行/发送方向的控制标签,仅用于发送端上层向下层传递地址、接口等配置参数,不会随数据包传递到接收端。接收端的地址信息会被协议栈填充到带*Ind后缀的标签中,你需要获取的源L3地址存储在L3AddressInd标签中。 - 接收端调用方法错误:你在接收端使用
addTagIfAbsent方法,当数据包中不存在对应L3AddressReq标签时,会直接新建一个空的标签实例,返回的空地址自然就是<none>,接收端应该用查找标签的方法而非新增标签的方法。
修复方案
1. 接收端代码修改
将原获取地址的代码替换为如下实现:
// 先查找数据包中已存在的L3AddressInd标签 auto l3AddrInd = packet->findTag<L3AddressInd>(); if (l3AddrInd != nullptr) { auto srcL3Addr = l3AddrInd->getSrcAddress(); EV_DEBUG << "THE SOURCE NETWORK ADDRESS IS : " << srcL3Addr << endl; } else { EV_DEBUG << "No L3AddressInd found in packet" << endl; }
2. 可选校验发送端配置
额外校验你发送端的源地址赋值逻辑:确认代码中的myNetwAddr变量是当前发送节点本身的网络地址,而非误赋值为接收端sink的地址,避免源地址本身设置错误导致接收端拿到的地址不符合预期。
内容的提问来源于stack exchange,提问作者Gérard KPONHINTO
相关产品推荐
相关产品推荐

