NetAnim路由打印方法
2015-06-16 10:18
651 查看
ns3中NetAnim的路由表可以打印出来。打印的代码是
AnimationInterface anim ("ospfd-anim.xml");
anim.EnablePacketMetadata(true);
anim.AddSourceDestination(0,"10.3.1.2");
anim.EnableIpv4RouteTracking ("ospfd-tracking.xml", Seconds(0.0), Seconds(300.0), nodes, Seconds(0.1));
所有节点路由表显示的代码如下,
void
AnimationInterface::TrackIpv4Route ()
{
if (Simulator::Now () > m_routingStopTime)
{
NS_LOG_INFO ("TrackIpv4Route completed");
return;
}
if (m_routingNc.GetN ()) 所有的节点都要打印
{
for (NodeContainer::Iterator i = m_routingNc.Begin (); i != m_routingNc.End (); ++i)
{
Ptr <Node> n = *i;
WriteXmlRouting (n->GetId (), GetIpv4RoutingTable (n));每个节点的路由表
}
}
else
{
for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
{
Ptr <Node> n = *i;
WriteXmlRouting (n->GetId (), GetIpv4RoutingTable (n));
}
}
TrackIpv4RoutePaths ();
Simulator::Schedule (m_routingPollInterval, &AnimationInterface::TrackIpv4Route, this);
}
每个节点的路由表信息,
std::string
AnimationInterface::GetIpv4RoutingTable (Ptr <Node> n)
{
NS_ASSERT (n);
Ptr <ns3::Ipv4> ipv4 = n->GetObject <ns3::Ipv4> ();
if (!ipv4)
{
NS_LOG_WARN ("Node " << n->GetId () << " Does not have an Ipv4 object");
return "";
}
std::stringstream stream;
Ptr<OutputStreamWrapper> routingstream = Create<OutputStreamWrapper> (&stream);
ipv4->GetRoutingProtocol ()->PrintRoutingTable (routingstream);打印出路由表
return stream.str ();
}
那么路由协议是怎么设定的?
ipv4->SetRoutingProtocol (ipv4Routing);
通常情况下,其被调用的方式是,
void
InternetStackHelper::Install (Ptr<Node> node) const
{
// Set routing
Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
Ptr<Ipv4RoutingProtocol> ipv4Routing = m_routing->Create (node);
ipv4->SetRoutingProtocol (ipv4Routing);
}
其中 m_routing来自于
void
InternetStackHelper::SetRoutingHelper (const Ipv4RoutingHelper &routing)
{
delete m_routing;
m_routing = routing.Copy ();
}
串起来的路由表打印的例子代码,
设置
// Internet stack install
InternetStackHelper stack; // IPv4 is required for GlobalRouteMan
Ipv4DceRoutingHelper ipv4RoutingHelper;
stack.SetRoutingHelper (ipv4RoutingHelper);
stack.Install (nodes);
然后就是开头打印的代码了。
AnimationInterface anim ("ospfd-anim.xml");
anim.EnablePacketMetadata(true);
anim.AddSourceDestination(0,"10.3.1.2");
anim.EnableIpv4RouteTracking ("ospfd-tracking.xml", Seconds(0.0), Seconds(300.0), nodes, Seconds(0.1));
所有节点路由表显示的代码如下,
void
AnimationInterface::TrackIpv4Route ()
{
if (Simulator::Now () > m_routingStopTime)
{
NS_LOG_INFO ("TrackIpv4Route completed");
return;
}
if (m_routingNc.GetN ()) 所有的节点都要打印
{
for (NodeContainer::Iterator i = m_routingNc.Begin (); i != m_routingNc.End (); ++i)
{
Ptr <Node> n = *i;
WriteXmlRouting (n->GetId (), GetIpv4RoutingTable (n));每个节点的路由表
}
}
else
{
for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
{
Ptr <Node> n = *i;
WriteXmlRouting (n->GetId (), GetIpv4RoutingTable (n));
}
}
TrackIpv4RoutePaths ();
Simulator::Schedule (m_routingPollInterval, &AnimationInterface::TrackIpv4Route, this);
}
每个节点的路由表信息,
std::string
AnimationInterface::GetIpv4RoutingTable (Ptr <Node> n)
{
NS_ASSERT (n);
Ptr <ns3::Ipv4> ipv4 = n->GetObject <ns3::Ipv4> ();
if (!ipv4)
{
NS_LOG_WARN ("Node " << n->GetId () << " Does not have an Ipv4 object");
return "";
}
std::stringstream stream;
Ptr<OutputStreamWrapper> routingstream = Create<OutputStreamWrapper> (&stream);
ipv4->GetRoutingProtocol ()->PrintRoutingTable (routingstream);打印出路由表
return stream.str ();
}
那么路由协议是怎么设定的?
ipv4->SetRoutingProtocol (ipv4Routing);
通常情况下,其被调用的方式是,
void
InternetStackHelper::Install (Ptr<Node> node) const
{
// Set routing
Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
Ptr<Ipv4RoutingProtocol> ipv4Routing = m_routing->Create (node);
ipv4->SetRoutingProtocol (ipv4Routing);
}
其中 m_routing来自于
void
InternetStackHelper::SetRoutingHelper (const Ipv4RoutingHelper &routing)
{
delete m_routing;
m_routing = routing.Copy ();
}
串起来的路由表打印的例子代码,
设置
// Internet stack install
InternetStackHelper stack; // IPv4 is required for GlobalRouteMan
Ipv4DceRoutingHelper ipv4RoutingHelper;
stack.SetRoutingHelper (ipv4RoutingHelper);
stack.Install (nodes);
然后就是开头打印的代码了。
相关文章推荐
- 实现医技工作站的B超功能的代码(十八)
- Codeforces Round #307 (Div. 2)
- ifndef/define/endif的作用
- 【SSO单点系列】(6):CAS4.0 单点流程序列图(中文版)以及相关术语解释(TGT、ST、PGT、PT、PGTIOU)
- (二)盒子模型
- vim 查看函数列表
- Java 环境配置
- git概念篇(remote,base,local)的含义
- 我也谈javascript正则匹配
- CDNPlus的节点和管理中心
- Mysql bash: mysql: command not found
- BLE 安卓APP控制LED灯的实现(转)
- iOS-如何联机调试和发布程序(99$)
- activemq设置Timestamp和jms简介
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
- Javascript之typeof与instanceof
- 【SSO单点系列】(5):CAS4.0 单点流程序列图
- python3 与 python2的 区别比较
- Longest Substring Without Repeating Characters
- golang: 常用数据类型底层结构分析