设置inet::RealTimeScheduler后AODV网络RREQ转发故障求助
问题描述
我的AODV网络中存在一台搭载ExtLowerEthernetInterface的extRouter,因此需要在ini文件中配置scheduler-class="inet::RealTimeScheduler"。但配置完成后,AODV节点无法将接收的RREQ消息向上传递,导致整个AODV网络失效,求可行的解决办法。
相关配置文件
ini配置
scheduler-class = "inet::RealTimeScheduler" *.extRouter.numEthInterfaces = 1 *.extRouter.eth[0].typename = "ExtLowerEthernetInterface" *.extRouter.eth[0].device = "veth0"
NED网络定义
package inet.examples.aodv.Drone; import inet.common.scenario.ScenarioManager; import inet.networklayer.configurator.ipv4.Ipv4NetworkConfigurator; import inet.networklayer.ipv4.RoutingTableRecorder; import inet.node.aodv.AodvRouter; import inet.physicallayer.wireless.unitdisk.UnitDiskRadioMedium; import inet.visualizer.common.IntegratedVisualizer; import inet.node.inet.Router; import ned.DatarateChannel; network Drone { parameters: int numHosts; @display("bgb=944.376,745.56"); types: channel pppline extends DatarateChannel { datarate = 100 Gbps; } submodules: radioMedium: UnitDiskRadioMedium { parameters: @display("p=100,200;is=s"); } configurator: Ipv4NetworkConfigurator { parameters: config = xml("<config><interface hosts='*' address='145.236.x.x' netmask='255.255.x.x'/></config>"); @display("p=100,100;is=s"); } routingTableRecorder: RoutingTableRecorder { parameters: @display("p=100,300;is=s"); } visualizer: IntegratedVisualizer { parameters: @display("p=100,30"); } scenarioManager: ScenarioManager { parameters: script = default(xml("<scenario/>",)); @display("p=100,400;is=s"); } host[numHosts]: AodvRouter { parameters: @display("i=device/pocketpc_s;r=,,#707070"); gates: pppg[1]; } extRouter: Router { parameters: ipv4.routingTable.routingFile = "extRouter.mrt"; @display("i=device/router_l;p=98.868,509.31998;is=s"); gates: pppg[21]; } connections allowunconnected: for i=0..numHosts-1 { host[i].pppg[0] <--> pppline { @display("ls=,0"); } <--> extRouter.pppg[i]; } }
解决办法
针对RealTimeScheduler下RREQ消息无法传递的问题,可尝试以下方案:
- 调整消息优先级
RealTimeScheduler会按优先级处理消息队列,AODV的RREQ消息可能因优先级过低被阻塞。在ini文件中为AODV相关模块设置更高优先级:
*.host[*].aodv.packetPriority = 2 # 数值越大优先级越高,默认通常为0或1 *.extRouter.ipv4.packetPriority = 2
- 修复接口时钟同步
确保ExtLowerEthernetInterface与RealTimeScheduler的时钟对齐,添加配置强制使用系统时钟同步:
*.extRouter.eth[0].useClockTime = true *.extRouter.eth[0].syncInterval = 0.01s
- 切换到混合调度器
如果无需全程使用纯实时调度,改用inet::HybridScheduler,它能同时处理实时任务和仿真消息,避免纯实时调度导致的仿真逻辑阻塞:
scheduler-class = "inet::HybridScheduler"
- 验证路由配置
检查extRouter.mrt中的静态路由条目,确保AODV子网段的路由规则正确,比如添加指向AODV节点的静态路由:
route add 145.236.0.0/16 via <AODV节点网关IP> dev eth0
- 启用消息跟踪排查
开启消息跟踪功能,定位RREQ消息的阻塞节点:
*.host[*].aodv.recordRreqRrep = true *.extRouter.ipv4.traceEnabled = true
内容的提问来源于stack exchange,提问作者zt0526
相关产品推荐
相关产品推荐

