NS3使用笔记——代码之外的各种奇奇怪怪的问题

最近需要用NS3进行一些网络仿真,便在win10系统上安装了VMware,并建立了一个ubuntu的64位虚拟机,版本为18.04.3。

由于NS3是初次接触,虚拟机使用也很不熟练,因此将使用过程中遇到的一些问题及应对方式记录在这里,便于之后再遇到相似问题时能很好的应对。

下面大多数都是遇到的问题与解决办法,有些地方还惨杂着一些我没来得及验证的推测,希望对这些推测有想法的人可以在评论区和我交流,接受你的指导,或者大家共同提高,不胜感激!

1、ubuntu下NS3的安装

NS3的安装参考了如下链接
https://www.jianshu.com/p/7aa7f3955233

Q1 安装依赖库强行中断

NS3有一些依赖库的安装需要大量的时间,若是此时需要中断安装状态,只需要 “Ctrl+C” 即可强行中断安装。
如果强行中断安装之后需要恢复安装,或者安装中途遇到种种原因导致安装中断,需要继续安装,直接输入安装命令会报错:

$ sudo apt-get install [packagename]
E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

此时参考如下链接,使用方法三确实有效:

sudo rm /var/lib/dpkg/lock-frontend

https://blog.csdn.net/qq_45089570/article/details/104137501
然后再次输入安装命令即可。

Q2 可视化及动画工具(PyViz和NetAnim)

安装参考链接:
https://www.cnblogs.com/Xylona/p/10658767.html
PyViz的使用:

  1. 在xxxx.cc文件中加入:
    CommandLine cmd;
    cmd.Parse (argc, argv);

  2. 将xxxx.cc文件放在ns-3.28/scratch目录下

  3. 运行程序时在终端ns-3.28目录下输入:

     sudo ./waf --run scratch/xxxx --vis
    

NetAnim的使用:

  1. 打开xxxx.cc文件,在头文件中加入#include "ns3/netanim-module.h",在Simulation::Run();前面加入代码:AnimationInterface anim ("xxxx.xml");,双引号中是生成的xml文件的名字,可以任意取。

  2. 将xxxx.cc文件放在ns-3.28/scratch目录下,在终端ns-3.28目录下运行xxxx.cc:

     ./waf --run scratch/xxxx 
    
  3. 进入netanim-3.107目录,运行NetAnim:

     ./NetAnim
    
  4. 在NetAnim界面中Open->xxxx.xml->Play,其中xxxx.xml文件在目录ns-3.28下。

Q3 重装NS3

出于种种原因,有些时候不得不重装NS3,此时只需要简单粗暴的将NS3所在的文件夹整个删除,之后再按照正常的安装方式,从“解压安装包”这一步开始即可。
在这里插入图片描述
还有一种避免重装NS3的思路,在进行操作之前如果无法确定后果,建议先使用VMware的快照功能,将此时虚拟机的状态拍摄快照,之后随意操作,一旦出现问题直接恢复到快照时刻的系统状态即可。这种做法也有一些弊端,拍摄快照后虚拟机在正常开关机、挂起时会花更多的时间,所以只要在需要的时候拍摄快照,不需要快照后及时删除。

Q4 NS3与ubuntu的版本兼容问题

因为之前在网上找到的一个模块在ns-3.28下编译不通过,但是有人说在ns-3.24.1下可以,故尝试再安装一个ns-3.24.1,之后直接使用ns-3.24.1进行模拟,发现ns-3.24.1在18.04.3的ubuntu下无法成功编译,网上找了一下发现可能是之前安装的依赖库版本过新,或者ubuntu版本过新,导致与ns-3.24.1不兼容。

解决办法是重新安装一个虚拟机,降低ubuntu的版本或是添加低版本的NS3依赖库,我重新安装了一个ubuntu16.04的虚拟机,紧接着成功安装ns-3.24.1。

2、在NS3中添加自己写好的模块

模块的添加思路参考了如下链接
https://blog.csdn.net/barcodegun/article/details/6898193

如果是直接使用别人编写好的模块,即wscript文件都已经不再需要自己修改,那么只要将模块复制到src目录下,直接开始编译即可。

cd tarballs/ns-allinone-3.28/ns-3.26
./waf configure --enable-examples --enable-tests
./waf build

编译结果中出现了这个模块,即成功添加。
在这里插入图片描述
下面这个链接是另外一个博主对上面方法在ns-3.26下的改进
https://blog.csdn.net/meditation19/article/details/73608896
在编译那一步多了一句

./waf clean

个人使用下来感觉不太需要这一句,加上这一句后会多花大量时间全部重新编译,而我们只需要编译新加入的模块就可以,不加这一句也能成功编译。

Q1 模块编译失败了怎么办

在使用过程中可能会出现种种原因导致模块编译失败,比如自己写的模块依赖关系不对、旧版本下写好的模块在新版本下不兼容等等,此时就会出现模块编译不通过。

亲身试验发现,单独编译模块A可以通过,单独编译模块B不可以通过,模块A和B同名。当编译了模块B不通过后,先直接删除模块B的文件,再重新编译,会编译失败,推测是直接删除文件并没有删除wscript文件中的一些依赖。此时再将模块A复制到src目录下面,模块A的编译也会失败,因为两个模块同名,所以不确定失败原因具体在哪里。也尝试过在编译新模块之前./waf clean,但是模块A仍然无法编译成功。

因为在自己编写模块时哪怕出现问题也不会频繁改动模块的名字,所以上面这种情况不太好避免,一种做法是重装NS3,这样非常的浪费时间;另一种做法是提前拍摄快照,遇到问题恢复到快照时的系统状态即可,这样也有一些弊端。

后来找到了一种删除模块的方法:

./waf distclean //这里需要加上dist,不然还是清除不掉 
./waf configure //重新配置,后面可以跟上具体的参数 
./waf

这种方法我还没有进行验证,但是不加dist直接./waf clean确实不管用。

因此如果看到这篇博客的人知道更好的应对方式,或者我这里说的有什么问题,希望可以留言告诉我,不胜感激!

3、VMware的不正常关闭

因为我的代码编写实在win10中完成的,在将文件拷贝到虚拟机时偶尔会出现拷贝到一半进度条不动了,此时点取消没有反应,虚拟机也无法正常关机,只能在任务管理器强制关闭。

这时再次打开虚拟机就会报错:VMware Workstation 无法连接到虚拟机。请确保您有权限运行该程序、访问改程序使用的所有目录以及访问所有临时文件目录。

这种情况下的处理方式在我的另一篇博客里面有写到,使用里面的方法五即可。
【六种解决思路尝试】VMware Workstation 无法连接到虚拟机。

另外,好的习惯是虚拟机不用时直接挂起就可以,这样能有效避免在关闭虚拟机时出现的各种导致VMware不正常关闭的情况。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值