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

OMNeT++中AODV网络拓扑实现启动报错问题求助

OMNeT++ AODV无人机网络拓扑仿真报错排查

问题描述

我要实现的网络拓扑是:4个AodvRouter节点分别连接到extRouter,extRouter仅负责转发外部程序传入的消息到对应AodvRouter,不参与AODV路由仿真。但仿真启动时触发报错:

Error in module (cModule) Drone.extRouter (id=10) during network setup: Interface 'ethg[0]' not found in module 'Drone.extRouter'.

原拓扑代码

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.unitdisk.UnitDiskRadioMedium;
import inet.visualizer.integrated.IntegratedVisualizer;
import inet.node.inet.Router;
import ned.DatarateChannel;
import inet.linklayer.contract.IPppInterface;

network Drone
{
    parameters:
        int numHosts;
        @display("bgb=944.376,745.56");

    types:
          channel ethline 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.0.0'/></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");
        }
        uav1: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                //ipv4.routingTable.routingFile = "cli1.mrt";
            gates:
                ethg[1];

        }
        uav2: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                ipv4.routingTable.routingFile = "cli2.mrt";
            gates:
                ethg[1];
        }
        uav3: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                ipv4.routingTable.routingFile = "cli3.mrt";
            gates:
                ethg[1];

        }
        uav4: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                ipv4.routingTable.routingFile = "cli4.mrt";
            gates:
                ethg[1];

        }
        extRouter: Router {
            parameters:

                @display("i=device/router_l;p=497.336,352.03");
            gates:
                ethg[4];

        }

    connections allowunconnected:

        extRouter.ethg[0] <--> ethline <-->uav1.ethg[0];
        extRouter.ethg[1] <--> ethline <--> uav2.ethg[0];
        extRouter.ethg[2] <--> ethline <--> uav3.ethg[0];
        extRouter.ethg[3] <--> ethline <--> uav4.ethg[0];
}

报错原因

inet框架中的inet.node.inet.Router模块默认的以太网接口门名称为eth[],而非自定义的ethg。手动声明ethg[4]门后,模块内部没有对应的接口实例绑定,导致启动时找不到指定接口。

修复方案

直接使用Router模块默认的接口门名称eth[],同时修改AodvRouter的门名称保持一致,修改后代码如下:

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.unitdisk.UnitDiskRadioMedium;
import inet.visualizer.integrated.IntegratedVisualizer;
import inet.node.inet.Router;
import ned.DatarateChannel;
import inet.linklayer.contract.IPppInterface;

network Drone
{
    parameters:
        int numHosts;
        @display("bgb=944.376,745.56");

    types:
          channel ethline 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.0.0'/></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");
        }
        uav1: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                //ipv4.routingTable.routingFile = "cli1.mrt";
            gates:
                eth[1];
        }
        uav2: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                ipv4.routingTable.routingFile = "cli2.mrt";
            gates:
                eth[1];
        }
        uav3: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                ipv4.routingTable.routingFile = "cli3.mrt";
            gates:
                eth[1];
        }
        uav4: AodvRouter {
            parameters:
                @display("i=device/pocketpc_s;r=,,#707070");
                ipv4.routingTable.routingFile = "cli4.mrt";
            gates:
                eth[1];
        }
        extRouter: Router {
            parameters:
                @display("i=device/router_l;p=497.336,352.03");
            gates:
                eth[4];
        }

    connections allowunconnected:
        extRouter.eth[0] <--> ethline <-->uav1.eth[0];
        extRouter.eth[1] <--> ethline <--> uav2.eth[0];
        extRouter.eth[2] <--> ethline <--> uav3.eth[0];
        extRouter.eth[3] <--> ethline <--> uav4.eth[0];
}

额外说明

若需自定义门名称,需为extRouter的每个门显式绑定对应的以太网接口模块(如EthernetInterface),但使用默认门名称是最简洁可靠的方式,符合inet框架规范。

内容的提问来源于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 07:57:01