通过特定路径发送消息
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,我会动态地找到要从 A 到 B。一旦在 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
另请注意,您必须实施源路由,即您必须在创建数据包时将所需的数据包路径存储在数据包本身中,并且在每一跳上,节点必须从此列表中删除一跳,并根据下一个所需节点进行路由决策。这样数据包就会通过指定的路径到达最终目的地。
我是 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,我会动态地找到要从 A 到 B。一旦在 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
另请注意,您必须实施源路由,即您必须在创建数据包时将所需的数据包路径存储在数据包本身中,并且在每一跳上,节点必须从此列表中删除一跳,并根据下一个所需节点进行路由决策。这样数据包就会通过指定的路径到达最终目的地。