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

Omnet++/INET中PeriodicGate关闭时仍转发数据包的问题排查

关于INET中PeriodicGate关闭时数据包仍转发的问题

我是OMNeT++和INET的新手,正在修改INET库中的TsnLinearNetwork拓扑(Client <------> Switch <------> Server)。客户端持续发送UDP数据包流,经交换机转发到服务器。我配置了PeriodicGate,期望它按周期切换状态:第1秒关闭,第2秒打开,关闭时丢弃数据包。

目前已在omnetpp.ini中完成配置,能观察到网关状态变化,但关闭状态下数据包依然被转发。反复调整参数无效,按文档描述PeriodicGate应该根据状态允许或阻止数据包通过。

我的问题:

  1. 为何PeriodicGate关闭时数据包仍被转发?
  2. 如何实现关闭时丢弃数据包的预期行为?

问题原因分析

你的配置中,仅启用了入口流量过滤(*.switch.hasIngressTrafficFiltering = true),但未将PeriodicGate的动作设置为丢弃。默认情况下,PeriodicGate在关闭时只是暂停转发,而非直接丢弃——数据包会被暂存在队列中,等到Gate打开后继续转发,这就是你看到关闭状态下后续仍有数据包到达服务器的原因。

另外,配置中重复设置了*.switch.bridging.streamFilter.ingress.gate[*].initiallyOpen = false,虽然不影响功能,但建议清理冗余配置。

解决方案

要实现关闭时丢弃数据包,需修改以下配置:

  1. 为PeriodicGate添加丢弃动作
    在*.switch.bridging.streamFilter.ingress.gate[0]的配置中,添加closingAction = "drop"参数,指定Gate关闭时直接丢弃匹配的数据包。

  2. 优化冗余配置
    删除重复的*.switch.bridging.streamFilter.ingress.gate[*].initiallyOpen = false,保留单个实例的设置即可。

修改后的关键配置片段:

*.switch.bridging.streamFilter.ingress.gate[*].typename = "PeriodicGate"
*.switch.bridging.streamFilter.ingress.gate[0].display-name = "random traffic"
*.switch.bridging.streamFilter.ingress.gate[0].initiallyOpen = false
*.switch.bridging.streamFilter.ingress.gate[0].durations = [1s,1s]
*.switch.bridging.streamFilter.ingress.gate[0].closingAction = "drop"  # 添加此行
  1. 验证配置逻辑
    确保流分类、PCP映射正确:客户端已将"random traffic"流标记为PCP=0,交换机也能通过PCP正确识别该流并关联到对应的Gate,这部分你的现有配置是正确的。

附原始配置信息

omnetpp.ini

[General]

[simpleStart03]
network = simpleStart
sim-time-limit = 2s

*.client.numApps = 1
*.client.app[*].typename = "UdpSourceApp"
*.client.app[0].display-name = "random traffic"
*.client.app[*].io.destAddress = "server"
*.client.app[0].io.destPort = 1000
*.client.app[0].source.packetLength = 1000B
*.client.app[0].source.productionInterval = 500us
*.client.hasOutgoingStreams = true
*.client.bridging.streamIdentifier.identifier.mapping = [{stream: "random traffic"}] 
*.client.bridging.streamCoder.encoder.mapping = [{stream: "random traffic", pcp: 0}]

*.server.numApps = 1
*.server.app[*].typename = "UdpSinkApp"
*.server.app[0].io.localPort = 1000

*.switch.bridging.streamCoder.decoder.mapping = [{pcp: 0, stream: "random traffic"}]
*.switch.hasIngressTrafficFiltering = true
*.switch.bridging.streamFilter.ingress.numGates = 1
*.switch.bridging.streamFilter.ingress.numMeters = 1
*.switch.bridging.streamFilter.ingress.numStreams = 1
*.switch.bridging.streamFilter.ingress.classifier.mapping = {"random traffic": 0}
*.switch.bridging.streamFilter.ingress.meter[0].display-name = "random traffic"
*.switch.bridging.streamFilter.ingress.meter[*].typename = "SingleRateTwoColorMeter"
*.switch.bridging.streamFilter.ingress.meter[0].committedInformationRate = 40Mbps
*.switch.bridging.streamFilter.ingress.meter[0].committedBurstSize = 10kB

*.switch.bridging.streamFilter.ingress.gate[*].typename = "PeriodicGate"
*.switch.bridging.streamFilter.ingress.gate[0].display-name = "random traffic"
*.switch.bridging.streamFilter.ingress.gate[0].initiallyOpen = false
*.switch.bridging.streamFilter.ingress.gate[0].durations = [1s,1s]
*.switch.bridging.streamFilter.ingress.gate[*].initiallyOpen = false

omnetpp.ned

import inet.networks.tsn.TsnLinearNetwork;

network simpleStart extends TsnLinearNetwork
{

}

版本信息:OMNeT++ 6.0.1;INET 4.4


内容的提问来源于stack exchange,提问作者olfline

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:31:32