该仿真脚本的网络场景非常简单,只是在2个节点间创造一个简单的点到点通信。
源代码
- GPL开源协议,一般会在上方看到一个相关机构的版权声明,而在GPL内容的下方会有相应的作者信息。
* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation;
* * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* * You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
- 头文件:为了帮助高层用户处理大量系统中的include文件,会把所有的文件根据模块功能进行大致的分类,提供按大致功能分类的一组include文件,在使用时只需要包含几个头文件即可。在编译过程中,每个ns-3的include文件被放在build目录下一个叫做ns3的目录中,这样可以避免include文件名的冲突。ns3/core-module.h与src/core目录下的ns-3模块相对应。当你编译时,waf会根据配置把在ns3目录下的公共的头文件放到build/debug或者build/optimized目录下。waf也会自动产生一个模块include文件来加载所有的公共头文件。
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
- ns-3命名空间:c++用using来把ns-3命名空间引入到当前的(全局的)声明中,这个声明就是说,你不用为了使用ns3的代码而必须在所有的ns-3代码前打上ns3::作用域操作符。
using namespace ns3;
- 日志:
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
查阅API文档,可以看到 NS_LOG_COMPONENT_DEFINE原来是如下宏定义,该语句的定义语句出现在log.h头文件中,功能是用特殊的名字定义一个日志组件。语句实际是生成一个LogComponent类型的对象g_log,并且通过构造函数LogComponent(name)初始化,变量name通过宏定义传递参数。
#define NS_LOG_COMPONENT_DEFINE(name) \
static ns3::LogComponent g_log = ns3::LogComponen