我创建了一个简单的网络,用于将 UDP 数据包从一台设备中继或转发到另一台设备。 我的网络的 .ned 如下所述:
import inet.node.ethernet.EthernetLink;
import inet.node.ethernet.Eth100M;
import inet.networklayer.configurator.ipv4.Ipv4NetworkConfigurator;
import inet.node.inet.StandardHost;
network UdpExample
{
@display("bgb=655,369");
submodules:
configurator: Ipv4NetworkConfigurator {
parameters:
@display("p=100,100;is=s");
}
client: StandardHost {
parameters:
@display("p=250,100");
}
server: StandardHost {
parameters:
@display("p=544,100;i=device/pc2");
}
relay: StandardHost {
@display("p=402,100");
forwarding = default(true);
}
connections:
client.ethg++ <--> EthernetLink { datarate = 100Mbps; } <--> relay.ethg++;
relay.ethg++ <--> EthernetLink { datarate = 100Mbps; } <--> server.ethg++;
}
import inet.common.scenario.ScenarioManager;
import inet.node.tsn.TsnDevice;
import inet.networks.base.TsnNetworkBase;
import inet.node.ethernet.Eth100M;
network UdpExample1 extends TsnNetworkBase
{
parameters:
@display("bgb=2230.5361,1700.952");
submodules:
tsnDevice1: TsnDevice {
@display("p=991.728,620.256");
}
tsnDevice2: TsnDevice {
@display("p=1359.792,620.256");
forwarding = default(true);
}
tsnDevice3: TsnDevice {
@display("p=1751.712,620.256");
}
scenarioManager: ScenarioManager {
@display("p=98.736,839.25604");
}
connections:
tsnDevice1.ethg++ <--> Eth100M <--> tsnDevice2.ethg++;
tsnDevice2.ethg++ <--> Eth100M <--> tsnDevice3.ethg++;
}
第一个网络使用“StandardHost”,而第二个网络使用“TsnDevice”。对于网络,“relay”和“tsnDevice2”的转发 = true,如 .ned 文件中所示。
该网络的 .ini 文件是:
[Config exp1]
sim-time-limit = 3s
network = UdpExample
*.*.eth[*].bitrate = 100Mbps
*.client.numApps = 1
*.client.app[0].typename = "UdpSourceApp"
*.client.app[0].display-name = "video-Device1"
*.client.app[0].io.destAddress = "server"
*.client.app[0].io.destPort = 1000
*.client.app[0].source.packetLength = 1000B
*.client.app[0].source.productionInterval = 1ms
# server applications
*.server.numApps = 1
*.server.app[0].typename = "UdpSinkApp"
*.server.app[0].io.localPort = 1000
[Config exp2]
network = UdpExample1
sim-time-limit = 2s
*.tsnDevice2.hasIncomingStreams = true
*.tsnDevice2.hasOutgoingStreams = true
#Ethernet links are 100Mbps
*.*.eth[*].bitrate = 100Mbps
#source
*.tsnDevice1.numApps = 1
*.tsnDevice1.app[0].typename = "UdpSourceApp"
*.tsnDevice1.app[0].source.packetNameFormat = "%M->tsnDevice1:-%c"
*.tsnDevice1.app[0].source.packetLength = 175B
*.tsnDevice1.app[0].source.productionInterval = 1ms
*.tsnDevice1.app[0].io.destAddress = "tsnDevice3"
*.tsnDevice1.app[0].io.destPort = 1004
*.tsnDevice1.app[0].source.initialProductionOffset = 1ms
#client
*.tsnDevice3.numApps = 1
*.tsnDevice3.app[0].typename = "UdpSinkApp"
*.tsnDevice3.app[0].display-name = "tsnDevice1"
*.tsnDevice3.app[0].io.localPort = 1004
第一个网络工作没有任何问题,但第二个网络(使用 tsn 设备)出现此问题:
<!> handlePacket(): Unknown protocol: protocolId = 24, protocolName = ethernetmac, servicePrimitive = INDICATION, pathStartGate = combNetwork.tsnDevice2.ipv4.ip.queueOut, pathEndGate = combNetwork.tsnDevice2.ipv4.lp.in[1] -- in module (inet::MessageDispatcher) combNetwork.tsnDevice2.ipv4.lp (id=258), at t=0.00101837s, event #16
我刚开始使用 omnet++ 模拟器,问题可能已经解决了。有人可以帮助我解决错误或指导我在 .ini 文件中进行必要的更改吗?
首先从NED文件中
forwarding = default(true)
的参数中删除行tsnDevice2
。该参数表示主机转发在网络层处理的IP数据包。然而,TSN 是第 2 层技术。tsnDevice2
的类型更改为 TsnSwitch
- TSN 专用交换机。import inet.node.tsn.TsnSwitch;
// ...
tsnDevice2: TsnSwitch {
@display("p=1359.792,620.256");
//forwarding = default(true);
}
// ...