ndn挖坑记(二)
如何使用ndnSIM运行自己的仿真实验
基本要点
仿真场景可以在NS-3目录下的scratch/ or src/ndnSIM/examples两个文件夹中编写,或者选择一个独立的库来编写仿真仿真场景。
如果直接在上面编写,有个不好的地方就是编译速度慢和代码可能难以区分是自己写的还是模拟器自带的,所以官网上推荐是使用独立的库来编写自己的仿真场景。
话虽如此,当我使用独立库调用可视化模块的时候既不报错也不显示就有点懵逼了,所以最后我还是将代码放在ndnSIM/ns-3/scratch下了。
具体而言,将自己的文件保存为.cc放入其中即可。
从 https://ndnsim.net/current/examples.html 官网例子中可以看到如果需要建立一个仿真场景,需要做的事情有主要下面几个:
- 设置链路状态(包括链路之间的连接)
- 定义拓扑结构
- 设置CS
- 在节点上安装ndnSIM的网络堆栈
- 安装consumer和producer
- 设置FIB
- 设置前向转发策略
- 运行仿真场景
开始动手
设置一个和 教程中ndn-grid.cpp一样的例子
10Mbps links/10ms delays
3x3拓扑结构
一个consumer,一个producer
FIB使用GlobalRoutingHelper进行设置
前向转发策略使用bestRoute
运行
./waf configure -d optimized
./waf

BUG记录
记录一下使用第三方库时出现的错误,出现在运行阶段
File "/ndnSIM/scenario/.waf-2.0.14-a8a9afc5d151494252697f8fa4ba3fbc/waflib/Scripting.py", line 119, in waf_entry_point
run_commands()
File "/ndnSIM/scenario/.waf-2.0.14-a8a9afc5d151494252697f8fa4ba3fbc/waflib/Scripting.py", line 181, in run_commands
run_command('shutdown')
File "/ndnSIM/scenario/.waf-2.0.14-a8a9afc5d151494252697f8fa4ba3fbc/waflib/Scripting.py", line 170, in run_command
ctx.execute()
File "/ndnSIM/scenario/.waf-2.0.14-a8a9afc5d151494252697f8fa4ba3fbc/waflib/Context.py", line 85, in execute
self.recurse([os.path.dirname(g_module.root_path)])
File "/ndnSIM/scenario/.waf-2.0.14-a8a9afc5d151494252697f8fa4ba3fbc/waflib/Context.py", line 126, in recurse
user_function(self)
File "/ndnSIM/scenario/wscript", line 114, in shutdown
return subprocess.call (argv)
File "/usr/lib/python2.7/subprocess.py", line 172, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 394, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child
raise child_exception
解决方法,修改目录下的wscript下的subprocess.cal中的参数,改为subprocess.call (argv,shell=True)因为默认模式下的subprocess.call不支持使用shell运行命令行。
ndn挖坑记(二)的更多相关文章
- ndn挖坑记(一)
目录 NDN是什么(简单记录) ndnSIM的安装 编译运行的错误记录 NDN是什么(简单记录) NDN是命名数据网络的缩写,简单来是说以数据命名取代IP 的主体地位,数据名称取代了IP 作为网络中的 ...
- Saku实力挖坑记!!(十八)
Saiku实力挖坑记!!!!!!! 我可真真真的是个挖坑小能手呀!不知道你们有没有遇到过这个异常: Enclosure class mondrian.olap.MondrianDef not foun ...
- h5 录音 自动生成proto Js语句 UglifyJS-- 对你的js做了什么 【原码笔记】-- protobuf.js 与 Long.js 【微信开发】-- 发送模板消息 能编程与会编程 vue2入坑随记(二) -- 自定义动态组件 微信上传图片
得益于前辈的分享,做了一个h5录音的demo.效果图如下: 点击开始录音会先弹出确认框: 首次确认允许后,再次录音不需要再确认,但如果用户点击禁止,则无法录音: 点击发送 将录音内容发送到对话框中.点 ...
- Java入门记(二):向上转型与向下转型
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...
- vue2入坑随记(二) -- 自定义动态组件
学习了Vue全家桶和一些UI基本够用了,但是用元素的方式使用组件还是不够灵活,比如我们需要通过js代码直接调用组件,而不是每次在页面上通过属性去控制组件的表现.下面讲一下如何定义动态组件. Vue.e ...
- epclise设置tomcat方法(步骤)(菜鸟巧记二)
epclise设置tomcat 1.打开epclise→window→preferences 2.输入server,打开server→runtime environments→选择add新建 3.打开 ...
- 【React踩坑记二】react项目实现JS路由跳转
这里使用的是4.31版本的react-router-dom "react-router-dom": "^4.3.1", 直接使用以下代码即可实现路由跳转 thi ...
- 菜鸟类库诞生记二:通过反射转换DataRow为对象
虽然大数据量的环境下,通过反射转换DataRow为对象性能会很低,但是在数据量适中的时候,这样能够减少很多的代码量,性能也确实不错. 所以在数据量不是很大的情况下,推荐使用. 如果数据量很大,可以使用 ...
- ORACLE DATAGURARD 折腾记二
前文再续,书接上一回,这次折腾Data Guard的一个重要目的是利用switchover实现机器的升级,怎么switchover呢?按照我的理解,Data Guard的角色切换是这样一个过程: (1 ...
随机推荐
- 【MM系列】SAP MM模块-查看移动平均价的历史记录
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP MM模块-查看移动平均价的历 ...
- big data env setup
install Spark on CentOS: https://aodba.com/how-to-install-apache-spark-in-centos-standalone/ https:/ ...
- Golang中的error类型
Golang中的error类型 error类型本身就是一个预定义好的接口,里面定义了一个method type error interface { Error() string } 生成一个新的err ...
- 第九周课程总结&实验报告七
实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. package ...
- Springboot2.x集成单节点Redis
Springboot2.x集成单节点Redis 说明 在Springboot 1.x版本中,默认使用Jedis客户端来操作Redis,而在Springboot 2.x 版本中,默认使用Lettuce客 ...
- Android View的Adapter
1 Adapter适配的对象是View Adapter通过为View提供指定格式的数据来适配View,让View可以以事先约定好的方式将内容展示给用户. 所以,进行UI设计的关键是搞清楚各个View组 ...
- 关于Java多线程的一些面试问题
1.ArrayList和Vecoter区别? Array和ArrayList的异同点一.Array和ArrayList的区别#1. Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大 ...
- Spark-Core RDD中函数(变量)传递
我们进行 Spark 进行编程的时候,初始化工作是在driver端完成的,而实际的运行程序是在executor端进行,所以就涉及到了进程间的通讯,数据是需要序列化的 1.传递函数 import org ...
- Linux0.11之初识Makefile/build.c
前言 Makefile对于从来没有接触过的人来说是相当别扭的(比如我),但它确实又是非常重要的,它描述了一个Image是如何形成的,理解它也许并不能帮我解决实际问题,而且编写Makefile的工作也许 ...
- C++中的深拷贝和浅拷贝构造函数
1,对象的构造在实际工程开发当中是相当重要的,C++ 中使用类就要创建对象,这 就涉及了对象的构造,本节课讲解对象的构造和内存操作方面的问题: 2,实际工程开发中,bug 产生的根源,必然的会有内存操 ...