You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

INET veins-5.1-i2下AODV扩展插入TLV选项报TLVoptions not found错误

无法检索到插入的TlvOption的原因
  • 头部指针未更新:你在setCBFOptionOnNetworkDatagram方法中,是将IPv4头部从数据包中取出、修改本地副本后再插回数据包,但是后续调用getCBFOptionFromNetworkDatagram时传入的还是修改前的旧networkHeader指针,该指针指向的头部没有包含新增的TlvOption,自然检索不到。
  • 自定义类未注册:INET框架的TlvOption基于反射机制实现解析,如果你自定义的CBFOption类没有注册到框架的类工厂,IPv4头部解析时会将对应类型的选项判定为未知选项直接跳过,无法实例化为CBFOption对象,查找时返回空。
  • 选项类型冲突:你复用了IPOPTION_TLV_GPSR作为CBF选项的类型值,如果GPSR协议已经注册了该类型对应的解析类,框架解析时会优先实例化GPSR的选项类,你用check_and_cast转换为CBFOption*时会失败返回空。
修复方案
  1. 修正头部指针引用逻辑:在完成选项插入操作后,重新从数据包中读取更新后的IPv4头部,用新的头部指针执行检索操作,不要复用修改前的旧指针。
    修改ensureRouteForDatagram中的对应代码段:
CBFOption *cbfOption = createCBFOption(networkHeader->getDestinationAddress());
setCBFOptionOnNetworkDatagram(datagram, networkHeader, cbfOption);
// 新增:重新从数据包获取更新后的IPv4头部
datagram->trimFront();
auto newIpv4Header = removeNetworkProtocolHeader<Ipv4Header>(datagram);
insertNetworkProtocolHeader(datagram, Protocol::ipv4, newIpv4Header);
// 用新的头部指针检索选项
auto cOption = const_cast<CBFOption *>(getCBFOptionFromNetworkDatagram(newIpv4Header));
  1. 注册自定义CBFOption类:在CBFOption.cc文件中添加类注册代码,让INET框架可以识别并实例化你的自定义选项类:
Register_Class(CBFOption);

同时确认CBFOption类的getOptionType()方法返回值和你设置的IPOPTION_TLV_GPSR一致。
3. 可选:避免选项类型冲突:如果你的项目中同时用到了GPSR协议,建议从IANA未分配的IPv4选项类型码中选择一个值替换IPOPTION_TLV_GPSR,避免不同协议的选项类型冲突。

内容的提问来源于stack exchange,提问作者Dalia Adly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:57:03