前言
前一篇博客已经顺利完成了ndnSIM的安装过程。
还未安装的请参考:NDN之ndnSIM-NS3学习笔记(一)_zrr1221的博客-CSDN博客
一、ndnSIM仿真介绍
ndnSIM的仿真过程主要可以分为三步:
1、建立仿真场景,包括拓扑、应用(名称)的相关配置、路由策略和缓存机制等;
2、设置仿真时间,启动仿真,获取仿真数据;
3、分析数据,将数据绘图,生成实验结果。
其中,前两步是在ndnSIM中完成,最后一步可以使用python或者matlab完成画图。
前两步的完成主要依赖自己编写的代码,即自己编写的cpp文件或cc文件。具体的代码存放位置可以参考:ndnSIM 应该在哪里编写脚本 自己编写的文件放在哪运行?_producerhelper.setattribute-CSDN博客
代码中要完成的内容:
1. 构建拓扑结构,使用代码依次创建节点和链接或者直接读取拓扑文件(如果使用拓扑文件请参考)
2. 在所有节点安装NDN栈
3. 配置转发策略
4. 为各个节点安装消费者应用或者生产者应用,用于生产或请求NDN网络中的流量数据
5. 手动或者用 GlobalRoutingHelper 生成FIB表
6. 设置仿真时间
7. 使用 trace helper 等工具获取仿真结果(https://ndnsim.net/2.1/metric.html)
8. 开始仿真,仿真结束后销毁
参考链接:ndnSIM 如何进行仿真实验 仿真步骤_身价五毛的博客-CSDN博客
二、ndnSIM仿真结合IDE进行代码编写
ndnSIM安装、源代码结构与修改兴趣包生存周期-CSDN博客
在这篇博客中给出了一种开发软件IDE-CLion。可参考下载CLion以及学习其使用方法进行代码编写,但是在编译运行仿真的时候,依然需要使用命令行,CLion无法识别一些代码调用会乱标红,只能用来看看改改。
也可以下载VScode作为IDE进行代码编写。
下面详细介绍NS3结合VScode开发环境配置:
1、在Ubuntu software 中搜索VScode下载,或者从Visual Studio Code官网下载deb软件包。
并将VScode添加到收藏夹。
2、安装CMake和C++插件
打开VS Code,快捷键(Ctrl + Shift + X)打开扩展模块,或在最左侧活动栏中找到拓展模块图标点击打开拓展模块,在输入栏中输入“C/C++”,安装C++插件,如下图所示:
同理,安装CMake插件:
接下来配置NS3-VScode开发环境:
1、按Ctrl+Shift+P打开命令面板,输入查找“C/C++: Edit Configurations (JSON)“并点击,打开“c_cpp_properties.json”文件。
用如下代码替换:
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/build/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
}
],
"version": 4
}
2、点击左侧目录结构.vscode->launch.json,打开launch.json文件
用如下代码替换:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "C/C++: cpp 生成活动文件",
"type": "cppdbg",
"request": "launch",
"program": "/home/zrr/桌面/ndnSIM/ns-3/build/scratch/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
// "externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: cpp 生成活动文件",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
注意:
"launch.json"文件中的"program"字段改成自己的,可用如下代码查看路径
cd build/scratch/
pwd
3、点击左侧目录结构.vscode->tasks.json,打开tasks.json文件
用如下代码替换:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: cpp 生成活动文件",
// "command": "/usr/bin/cpp",
"command": "./waf",
"args": [
// "-fdiagnostics-color=always",
// "-g",
// "${file}",
// "-o",
// "${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: /usr/bin/cpp"
}
]
}
----------------------------------------------------------------------------------------------------------------------------
注意!!!运行examples~>tutorial~>first.cc,按F5运行,会出现如下问题:
是因为所有的编译后的文件储存在/home/zrr/桌面/ndnSIM/ns-3/build 目录下,而launch.json中的
"program": "/home/zrr/桌面/ndnSIM/ns-3/build/scratch/${fileBasenameNoExtension}",
该语句将可执行的路径限制在了/home/zrr/桌面/ndnSIM/ns-3/build/scrach下 而first.cc的目录应修改为/home/zrr/桌面/ndnSIM/ns-3/build/examples/tutorial下,因此产生该错误。
主要解决办法为:在scrach目录下新建项目,进行项目代码的编写,完成后续调试过程。
运行代码时可直接按F5进行编译执行。
要运行其他目录下的代码实例时可利用终端窗口输入./waf --run 文件名
如:运行frist.cc 输入./waf --run first.cc