【问题标题】:Send messages through a specific path通过特定路径发送消息
【发布时间】:2021-03-11 20:28:38
【问题描述】:

我是 Omnet++ 的新手,我正在构建我的第一个网络,其中消息必须通过特定路由。这是我正在使用的示例网络的简化版本。

当接收到一个请求时,它必须经过一个特定的路由。例如; A->B->E->D->E->C

我的问题是在处理门时出现的。我的第一直觉是创建一个特定于每个模块之间连接的inout 门。因此 A->B 将拥有自己的 inout 门,B->E 将拥有自己的 inout 门,等等。但是,随着网络的增长,这导致需要管理的门数量非常多。

我的第二次尝试是创建 inout gates 数组。我的连接如下:

    A.nodeGates++ <--> B.nodeGates++;
    A.nodeGates++ <--> C.nodeGates++;
    A.nodeGates++ <--> D.nodeGates++;
    C.nodeGates++ <--> E.nodeGates++;
    B.nodeGates++ <--> E.nodeGates++;
    D.nodeGates++ <--> E.nodeGates++;

在 cpp 文件中,我会在 handleMessage 函数中调用 send(msg, "nodeGates$o", indexId);。有没有办法根据模块名称映射 indexId ?例如,当我在模块 A 中时,对于路线 A->B->E->D->E->C,我会动态找到要从 A 出发的 indexId B。一旦在 B,我会找到 indexId 去 E 等等。

有没有办法动态找到两个节点之间的 indexId 以遵循精确的路线?

【问题讨论】:

    标签: omnet++


    【解决方案1】:

    在给定的输出 gate 上,您可以调用getPathEndGate(),这将为您提供连接远端的门。在那个门上调用getOwnerModule() 会给你远端的模块,然后在那个模块上调用getFullName() 会给你那个模块的名称。通过这种方式,您可以获得连接到给定输出门的模块的名称。您可以根据该信息做出路由决策。

    gate("nodeGates$o", indexId)->getPathEndGate()->getOwnerModule()->getFullName()
    

    见:https://doc.omnetpp.org/omnetpp/api/classomnetpp_1_1cGate.html

    还要注意,你必须实现源路由,即你必须在创建数据包时将数据包的所需路径存储在数据包本身中,并且在每一跳上,节点必须丢弃一跳从这个列表中,并根据下一个需要的节点进行路由决策。这样数据包将通过指定的路径并在最终目的地结束。

    【讨论】:

    • 谢谢,正是我想要的!
    猜你喜欢
    • 2016-11-30
    • 2013-01-08
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2014-07-27
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多