• 安装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

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐