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
相关产品推荐
相关产品推荐

