NS3在WSL上的安装
WSL为windows下的linux子系统,与虚拟机相比,WSL占用资源更小,且与Windows下的文件交互更方便,避免通过网口进行交换。
一、安装Ubuntu子系统
安装WSL需要Win10版本大于1903,内部版本 大于18362。 若不符合条件请先更新Win10.
(1)启用适用于 Linux 的 Windows 子系统
需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。
首先打开开发者选项,打开windows10开发人员模式,打开步骤为:设置-->更新和安全-->针对开发人员,点击开发人员模式打开即可,具体如图:

然后打开win10自带虚拟机:控制面板-->程序-->启用或关闭windows功能 ,勾选"适用于linux的windows子系统(Beta)"

完成后,重启电脑。
(2)从应用商店安装Ubuntu18.04
打开微软应用商店,搜索Ubuntu18.04并进行安装


注意:此处一定要安装18.04版本,不可安装20.04版本或者Ubuntu,否则安装图形界面时会报错。
(3)设置用户名和密码
根据喜好设置用户名和密码
(4)安装Windows Terminal
为了方便命令行指令的复制粘贴,我推荐使用微软商店中的Windows Terminal,它可以同时开启Ubuntu,PowerShell,CMD,同时支持了ctrl+c的复制和ctrl+v的粘贴。在你安装好Ubuntu后,Windows Terminal中会出现对应的标签

(5)Ubuntu换源
由于国外的下载速度过慢,因此采用阿里源进行下载。
's#archive.ubuntu.com#mirrors.aliyun.com#g' /etc/apt/sources.list
sudo apt update
sudo apt upgrade
完成后便完成了对WSL的初步安装。
二、安装图形化界面(必须)
(1)WSL中安装xfce desktop
sudo apt-get install --assume-yes xfce4
(2)Windows中安装VcXsrv
下载地址为https://sourceforge.net/projects/vcxsrv/

打开桌面的Xlaunch并进行设置:选择:“one large window”,Display number设置成0,其它默认即可,一路下一步

存储一下设置,不然每次都要重新设置。

之后会出现一个黑色的窗口,不用管他,不要关闭
(3)安装Ubuntu桌面环境
# 这里需要下载1.5GB,并进行安装,所以时间会很久
(4)启动XLuanch
# 在Ubuntu中运行

按照上图设置完毕后点击Colse
sudo compiz
然后就可以看到图形化界面了。
三、安装NS3的依赖环境
这一步的耗时将很长,因为下载的东西太多了
(1)安装C++和Python3
sudo apt-get install g++ python3
(2)安装g++,这是tarball中的Python绑定需要的最小包集合
sudo apt-get install g++ python3 python3-dev pkg-config sqlite3
(3)Python开发相关包
sudo apt-get install python3-setuptools git
(4)安装动画组件
sudo apt-get install qt5-default mercurial
sudo apt-get install gir1.2-goocanvas-2.0 python-gi python-gi-cairo python-pygraphviz python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython ipython3
(5)支持基于MPI的分布式仿真
sudo apt-get install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev
(6)支持烘焙生成工具
sudo apt-get install autoconf cvs bzr unrar
(7)调试工具
sudo apt-get install gdb valgrind
(8)安装检查代码格式的程序
sudo apt-get install uncrustify
(9)关联内置文档
sudo apt-get install doxygen graphviz imagemagick
sudo apt-get install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk
(10)安装用户手册
sudo apt-get install python3-sphinx dia
(11)GNU科学计算库,更精确的支持802.11b模型
sudo apt-get install gsl-bin libgsl-dev libgsl23 libgslcblas0
(12)读取pcap数据包并进行追踪
sudo apt-get install tcpdump
(13)统计框架的数据库支持
sudo apt-get install sqlite sqlite3 libsqlite3-dev
(14)Xml配置
sudo apt-get install libxml2 libxml2-dev
(15)支持生成修改后的Python绑定
sudo apt-get install cmake libc6-dev libc6-dev-i386 libclang-6.0-dev llvm-6.0-dev automake pip
python3 -m pip install --user cxxfilt
此处可能还需要安装castxml 和 pygccxml,使用pip或者apt进行安装即可
(16)基于GTK的配置系统
sudo apt-get install libgtk-3-dev
(17)安装虚拟服务
sudo apt-get install vtun lxc uml-utilities
(18)支持开放流模块
sudo apt-get install libboost-signals-dev libboost-filesystem-dev
安装依赖的过程中可能会出现安装缺失或者其他情况,一定要安装好依赖,使用之前提到的--fix-missing即可,如果还有未知bug请自行google。
四、安装NS3
(1)下载和安装
首先回到home
cd
git clone https://gitlab.com/nsnam/bake

如果依赖均以正常安装则会显示如上图。路径较多,是因为此路径会显示win10中的路径。
# 指定下载NS3的版本号
./bake.py show
./bake.py download -vvv
在这一步中你可能面临很多的报错,https://my.oschina.net/ztguang/blog/3194577这个网址中列举了几种常见的报错和解决方案。
在下载的过程中还需要下载pybindgen,以绑定python与ns3.此时你的source文件夹中应该存在三个文件夹:netanim-3.108 ns-3.32 pybindgen。
(2)测试安装成功与否
进入刚才下载并build成功的ns3文件夹中,
for
你应该可以看到这样的一个报告,这个报告中会有一些not enabled的项目,我们只需要关注
Python API Scanning Support : enabled Python Bindings : enabled
这两项为enabled状态即可。注意此时的python版本为2.7.
完成上一步以后再执行
./test.py
便会进入一个更长的测试,这个测试的时间很长,他会测试每个可能用到的文件和功能是否正常,若正常则返回PASS。我安装后只有一个测试失败,In64*64的测试失败后并不影响最终的结果。

五、NS3在Windows下Pycharm上的使用
(1)Ubuntu下运行ns3程序-Python
所有的操作均要在waf环境下进行,所以我们需要先进入ns3的安装文件夹,如果你和我的安装步骤一样应该会有如下的文件

进入该目录以后有两种方式可以运行python文件:
(1)运用waf shell
#推荐
python3 examples/tutorial/first.py
(2)
./waf --pyrun examples/tutorial/first.py
正常情况下你可以看到输出,那就证明你已经安装成功了。
(2)在Pycharm上使用waf
首先我们需要找到WSL子系统的位置:
我的位置为:C:Users***(用户名)AppDataLocalPackagesCanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgscLocalStaterootfshomezsqbakesourcens-3.29
找到该文件夹后

将其作为Pycharm Project打开,
然后设置Python解释器(设置为WSL中的Python3.6,地址为/usr/bin/python3.6),

配置好解释器后打开下面的Terminal

你会发现自己的位置为该文件夹在计算机中的绝对位置。
输入bash即可进入WSL命令行界面:

进入后的初始位置为根目录,你需要将当前文件夹调到ns3的位置,我的位置为上图所示。

进入waf shell以便跑python程序。
我们以examples/tutorial/first.py为例:
由于ns3默认的python解释器为python2.7,但是python2.7有许多语法上的弊病,因此我们选择python3.6作为写代码的解释器。在跑程序的时候仅需要将python换成python3即可。

看到如下结果说明你已经成功的运行了ns3.