通过特定路径发送消息

Send messages through a specific path

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

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

我的问题出现在处理门时。我的第一直觉是创建一个特定于每个模块之间连接的 inout 门。所以 A->B 会有自己的 inout 门,B->E 会有自己的 inout 门,等等。然而,随着网络的增长,这会导致大量的门管理。

我的第二次尝试是创建 inout 门阵列。我的连接如下:

    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,我会动态地找到要从 AB。一旦在 B,我会找到 indexId 去 E 等等。

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

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

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

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

另请注意,您必须实施源路由,即您必须在创建数据包时将所需的数据包路径存储在数据包本身中,并且在每一跳上,节点必须从此列表中删除一跳,并根据下一个所需节点进行路由决策。这样数据包就会通过指定的路径到达最终目的地。