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

设置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:00:36