假期三天,尽折腾ns3了。准备入坑ns3,感觉它比ns2强大很多。但是资料较少。网上的一些博客,大部分都是对ns3 manual的翻译。
在example文件下创建一个新的文件夹,ns3_test。这个文件下放下面两个文件。
ns3_test.cc
#include"ns3/network-module.h"
#include"ns3/core-module.h"
#include "ns3/internet-stack-helper.h"
#include<iostream>
using namespace std;
using namespace ns3;
int main()
{
NodeContainer n;
n.Create (2);
InternetStackHelper internet;
internet.Install (n);
Ptr<Node> node=n.Get(1);
/**
* 以下代码用于输出一个Node节点经过install()方法的安装后,
* 已经聚合的所有对象
*/
Node::AggregateIterator iterator = node->GetAggregateIterator();
while(iterator.HasNext()){
Ptr<const Object> obj = iterator.Next();
std::cout<<"InternetStackHelper::Install name="<<obj->GetInstanceTypeId().GetName()<<std::endl;
}
}
wscript
def build(bld):
obj = bld.create_ns3_program('ns3_test', ['csma', 'internet', 'applications'])
obj.source = 'ns3_test.cc'
执行命令./waf。之后执行命令./waf –run ns3_test,运行程序。
程序输出结果:
InternetStackHelper::Install name=ns3::Ipv4L3Protocol
InternetStackHelper::Install name=ns3::Ipv6L3Protocol
InternetStackHelper::Install name=ns3::Node
InternetStackHelper::Install name=ns3::ArpL3Protocol
InternetStackHelper::Install name=ns3::Icmpv4L4Protocol
InternetStackHelper::Install name=ns3::Ipv4RawSocketFactory
InternetStackHelper::Install name=ns3::GlobalRouter
InternetStackHelper::Install name=ns3::Icmpv6L4Protocol
InternetStackHelper::Install name=ns3::Ipv6RawSocketFactory
InternetStackHelper::Install name=ns3::Ipv6ExtensionRoutingDemux
InternetStackHelper::Install name=ns3::Ipv6ExtensionDemux
InternetStackHelper::Install name=ns3::Ipv6OptionDemux
InternetStackHelper::Install name=ns3::TrafficControlLayer
InternetStackHelper::Install name=ns3::UdpL4Protocol
InternetStackHelper::Install name=ns3::UdpSocketFactory
InternetStackHelper::Install name=ns3::TcpL4Protocol
InternetStackHelper::Install name=ns3::TcpSocketFactory
InternetStackHelper::Install name=ns3::PacketSocketFactory
我主要参考了[1]。这个程序打印出InternetStackHelper中自动安装的对象类。通过这几天阅读源代码,我知道,Node对象中,会放置协议栈对象, 并和对应的类共享Object中的m_aggregates指针。这个打印程序,我主要是为了连接,到底Node对象中,什么时候安装了name=ns3::UdpSocketFactory对象。
[1]NS3 Node聚合对象说明