未知协议错误,在omnet++中使用TSN设备作为中继单元(不使用交换机或路由器)

问题描述 投票:0回答:1

我创建了一个简单的网络,用于将 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 文件中进行必要的更改吗?

c++ omnet++ inet
1个回答
0
投票

首先从NED文件中

forwarding = default(true)
的参数中删除行
tsnDevice2
。该参数表示主机转发在网络层处理的IP数据包。然而,TSN 是第 2 层技术。
此外,将
tsnDevice2
的类型更改为
TsnSwitch
- TSN 专用交换机。
所以你应该修改你的 NED 文件如下:

import inet.node.tsn.TsnSwitch;
// ...

tsnDevice2: TsnSwitch {
    @display("p=1359.792,620.256");
    //forwarding = default(true);
}
// ...
© www.soinside.com 2019 - 2024. All rights reserved.