【NS3】ns3和ns3-gym环境、ns3-ai环境的搭建
·
- 安装ns3并编译通过
sudo apt update
sudo apt install -y gcc g++ python3 python3-pip cmake git mercurial qtbase5-dev \
gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz python3-dev \
pkg-config sqlite sqlite3 libsqlite3-dev \
libgtk-3-dev vtun lxc libxml2 libxml2-dev libboost-all-dev \
libgsl-dev libgsl27 gsl-bin \
tcpdump libpcap-dev
mkdir -p ~/emilin/ns-3-workspace
cd ~/emilin/ns-3-workspace
git clone https://gitlab.com/nsnam/ns-3-dev.git ns-3-dev
cd ns-3-dev
./ns3 configure --enable-examples --enable-tests
./ns3 build
- 下载ns3-gym并重新编译ns3
# minimal requirements for C++:
apt-get install gcc g++ python3 python3-pip cmake
#Install ZMQ, Protocol Buffers and pkg-config libs:
```
sudo apt-get update
apt-get install libzmq5 libzmq3-dev
apt-get install libprotobuf-dev
apt-get install protobuf-compiler
apt-get install pkg-config
cd ./ns-3-dev/contrib
git clone https://github.com/tkn-tub/ns3-gym.git ./opengym
cd opengym/
git checkout app-ns-3.36+
cd ../../
./ns3 configure --enable-examples
./ns3 build
注意检查opengym在可编译运行的模块列表里:

- 问题逐个解决

# 修改 emilin@EmilinAmy:~/ns-3-workspace/ns-3-dev$ vi contrib/opengym/examples/CMakeLists.txt
build_lib_example(
NAME opengym-example # 从opengym改为opengym-example
SOURCE_FILES opengym/sim.cc
LIBRARIES_TO_LINK
${libcore}
${libopengym}
)


emilin@EmilinAmy:~/ns-3-workspace/ns-3-dev/contrib/opengym/model$ protoc --cpp_out=. messages.proto
#~/ns-3-workspace/ns-3-dev/contrib/opengym/model目录下生成了
-rw-r--r-- 1 emilin emilin 159281 Jul 10 10:41 messages.pb.cc
-rw-r--r-- 1 emilin emilin 151482 Jul 10 10:41 messages.pb.h
-rw-r--r-- 1 emilin emilin 1992 Jul 10 10:00 messages.proto
emilin@EmilinAmy:~/ns-3-workspace/ns-3-dev$ vi contrib/opengym/CMakeLists.txt
#修改contrib/opengym/CMakeLists.txt的最后几行如下
set(source_files
helper/opengym-helper.cc
model/container.cc
model/opengym_env.cc
model/opengym_interface.cc
model/spaces.cc
model/messages.pb.cc ### 添加
${proto_source_files}
)
......
add_library(opengym-obj ALIAS opengym) ### 添加
# need protobuf_generate func to generate messages
check_function_exists(protobuf_generate protobuf_generate_exists)
if(${protobuf_generate_exists})
message(STATUS "protobuf_generate command found")
else()
message(STATUS "protobuf_generate command not found -> use a local copy from ${CMAKE_CURRENT_SOURCE_DIR}/protobuf-generate.cmake")
include(${CMAKE_CURRENT_SOURCE_DIR}/protobuf-generate.cmake)
endif()
file(GLOB PROTO_FILES "${CMAKE_CURRENT_SOURCE_DIR}/contrib/opengym/model/*.proto") ### 添加
if(PROTO_FILES) ### 添加
protobuf_generate(
TARGET ${libopengym-obj}
IMPORT_DIRS contrib/opengym/model/ ### 添加
LANGUAGE cpp
PROTOC_OUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/contrib/opengym/model ### 添加
)
protobuf_generate(
TARGET ${libopengym-obj}
IMPORT_DIRS contrib/opengym/model/ ### 添加
LANGUAGE python
PROTOC_OUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/contrib/opengym/model/ns3gym/ns3gym
)
else() ### 添加
message(STATUS "No .proto files found; skipping protobuf_generate") ### 添加
endif() ### 添加
cd ../../
./ns3 configure --enable-examples
./ns3 build

#注释掉这两个文件中该函数的声明和定义
emilin@EmilinAmy:~/ns-3-workspace/ns-3-dev$ vi /home/emilin/ns-3-workspace/ns-3-dev/contrib/opengym/examples/rl-tcp/tcp-rl.cc
emilin@EmilinAmy:~/ns-3-workspace/ns-3-dev$ vi /home/emilin/ns-3-workspace/ns-3-dev/contrib/opengym/examples/rl-tcp/tcp-rl.h

# 修改contrib/opengym/examples/linear-mesh/sim.cc和contrib/opengym/examples/linear-mesh-2/sim.cc的注释行为下面三行
// destAddress.SetTos (0x70); //AC_BE
Ptr<Socket> socket = Socket::CreateSocket (srcNode, TcpSocketFactory::GetTypeId ());
socket->SetIpTos (0x70); // Set ToS (DSCP + ECN)
socket->Connect (destAddress);
这里应该ns3再次编译通过啦。 ![]()

emilin@EmilinAmy:~/ns-3-workspace/ns-3-dev/contrib/opengym/model$ protoc --python_out=./ns3gym messages.proto
emilin@EmilinAmy:~/ns-3-workspace/ns-3-dev/contrib/opengym/model$ ls -all ns3gym/
total 68
drwxr-xr-x 3 emilin emilin 4096 Jul 10 11:26 .
drwxr-xr-x 3 emilin emilin 4096 Jul 10 10:41 ..
-rw-r--r-- 1 emilin emilin 1106 Jul 10 10:00 LICENSE
-rw-r--r-- 1 emilin emilin 18 Jul 10 10:00 MANIFEST.in
-rw-r--r-- 1 emilin emilin 36 Jul 10 10:00 README.md
-rw-r--r-- 1 emilin emilin 36231 Jul 10 11:26 messages_pb2.py ###生成了
drwxr-xr-x 2 emilin emilin 4096 Jul 10 10:00 ns3gym
-rw-r--r-- 1 emilin emilin 33 Jul 10 10:00 requirements.txt
-rw-r--r-- 1 emilin emilin 866 Jul 10 10:00 setup.py

现在成功啦,测试下ns3-gym的环境是不是能用了!(勉强能用啦)


![]()

![]()

- 下载ns3-ai并重新编译ns3
git clone https://github.com/hust-diangroup/ns3-ai.git
# 将 ns3-ai 复制到 ns-3 的 contrib 目录下(或作为独立模块)
./ns3 configure --enable-examples --enable-tests
./ns3 build
python setup.py install
./ns3 run a-plus-b

sudo apt-get install pybind11-dev
pip install cppyy

更多推荐
所有评论(0)