Omnetpp - 在 List/Vector 中显示模拟拓扑(节点、链接等)
Omnetpp - Show Simulation Topology(Nodes, Links etc) in List/Vector
我想在日志中显示模拟拓扑。特别是交换机和来自交换机的连接。
我添加了 inet/common/Topology.cc 头文件,我认为有多个函数可以满足我的要求。
但我不明白如何为我的 ned 文件、ini 文件或我的模块提供这些函数的完整路径?
我已经搜索了实现,但是没有关于 that.All 的信息,我可以找到的是 omnetpp manuel 并且该站点没有提供任何关于如何使用这些方法的信息。
您要查找的内容已记录在 Topology.h
文件中。您不必向拓扑对象添加任何内容。模块和链接将自己注册到模拟运行时。您只需创建一个 Topology 对象并对其调用 extractBy...()
函数之一,该函数将遍历模块层次结构并在该 Topology 对象内构建拓扑图。例如。要提取网络中的所有节点,您将使用 extractByPropery("networkNode")
,因为所有网络节点在 INET 中都由 @networkNode
属性 标记。显然,如果你只需要开关,你可以使用不同的提取方法,例如接受 ned 类型作为过滤器。
提取拓扑后,您可以遍历所有节点并转储信息。此代码部分来自网络配置器,正是这样做的:
void Ipv4FlatNetworkConfigurator::extractTopology(cTopology& topo, NodeInfoVector& nodeInfo)
{
// extract topology
topo.extractByProperty("networkNode");
EV_DEBUG << "cTopology found " << topo.getNumNodes() << " nodes\n";
// fill in isIPNode, ift and rt members in nodeInfo[]
nodeInfo.resize(topo.getNumNodes());
for (int i = 0; i < topo.getNumNodes(); i++) {
cModule *mod = topo.getNode(i)->getModule();
nodeInfo[i].isIPNode = L3AddressResolver().findIpv4RoutingTableOf(mod) != nullptr && L3AddressResolver().findInterfaceTableOf(mod
if (nodeInfo[i].isIPNode) {
nodeInfo[i].ift = L3AddressResolver().interfaceTableOf(mod);
nodeInfo[i].rt = L3AddressResolver().getIpv4RoutingTableOf(mod);
nodeInfo[i].ipForwardEnabled = mod->hasPar("forwarding") ? mod->par("forwarding") : false;
topo.getNode(i)->setWeight(nodeInfo[i].ipForwardEnabled ? 0.0 : INFINITY);
}
}
}
我想在日志中显示模拟拓扑。特别是交换机和来自交换机的连接。
我添加了 inet/common/Topology.cc 头文件,我认为有多个函数可以满足我的要求。
但我不明白如何为我的 ned 文件、ini 文件或我的模块提供这些函数的完整路径?
我已经搜索了实现,但是没有关于 that.All 的信息,我可以找到的是 omnetpp manuel 并且该站点没有提供任何关于如何使用这些方法的信息。
您要查找的内容已记录在 Topology.h
文件中。您不必向拓扑对象添加任何内容。模块和链接将自己注册到模拟运行时。您只需创建一个 Topology 对象并对其调用 extractBy...()
函数之一,该函数将遍历模块层次结构并在该 Topology 对象内构建拓扑图。例如。要提取网络中的所有节点,您将使用 extractByPropery("networkNode")
,因为所有网络节点在 INET 中都由 @networkNode
属性 标记。显然,如果你只需要开关,你可以使用不同的提取方法,例如接受 ned 类型作为过滤器。
提取拓扑后,您可以遍历所有节点并转储信息。此代码部分来自网络配置器,正是这样做的:
void Ipv4FlatNetworkConfigurator::extractTopology(cTopology& topo, NodeInfoVector& nodeInfo)
{
// extract topology
topo.extractByProperty("networkNode");
EV_DEBUG << "cTopology found " << topo.getNumNodes() << " nodes\n";
// fill in isIPNode, ift and rt members in nodeInfo[]
nodeInfo.resize(topo.getNumNodes());
for (int i = 0; i < topo.getNumNodes(); i++) {
cModule *mod = topo.getNode(i)->getModule();
nodeInfo[i].isIPNode = L3AddressResolver().findIpv4RoutingTableOf(mod) != nullptr && L3AddressResolver().findInterfaceTableOf(mod
if (nodeInfo[i].isIPNode) {
nodeInfo[i].ift = L3AddressResolver().interfaceTableOf(mod);
nodeInfo[i].rt = L3AddressResolver().getIpv4RoutingTableOf(mod);
nodeInfo[i].ipForwardEnabled = mod->hasPar("forwarding") ? mod->par("forwarding") : false;
topo.getNode(i)->setWeight(nodeInfo[i].ipForwardEnabled ? 0.0 : INFINITY);
}
}
}