Netanim으로 네트워크 시뮬레이션 시각화 하기
Netanim은 ns-3로 실행한 시뮬레이션을 GUI 환경에서 보기 쉽게 시각화해 주는 툴이다.
Netanim 다운로드 및 빌드
GUI 도구인 만큼 Linux 환경에서 실행하려면 GUI 환경이 필요하다. 예를 들어 Ubuntu의 경우 ubuntu-desktop
이 필요하다. 나는 개인 NAS의 docker에다가 Ubuntu Server 컨테이너를 올리고 그걸 메인 리눅스 환경으로 사용하고 있기 때문에 ubuntu-desktop
설치가 곤란해서 Windows 환경에서 사용하기로 하였다.
Prerequisites
-
mercurial: 공식 repository에서 소스코드를 다운로드하기 위해 필요하다.
-
qt5 개발 패키지: Netanim이 qt로 만들어진 도구라서 qt 빌드 환경이 필요하다. 최신 버전인 qt6는 호환되지 않는 함수들이 많으니 꼭 qt5를 설치해야 된다.
Debian 계열
apt install mercurial
apt install qt5-default
Windows
mercurial
Qt Creator: Qt 빌드 환경을 제공해주는 IDE
Microsoft Visual C++ (Visual Studio 2010 and over http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-products) or MinGw compiler
공식 문서에는 위와 같이 적혀 있다. 그런데 나의 경우 MinGw compiler를 사용했을 때 실행이 안 돼서 Microsoft Visual C++ 2019 컴파일러로 빌드하였다.
Qt Creator 설치
Qt 홈페이지에서 qt unified installer 를 다운로드 받은 후, 실행하면 다음과 같이 설치 유형을 선택하는 창이 나온다.
우리는 최신 버전이 아닌 Qt5를 설치해야 하므로, 우선 Custom Installation을 선택하고 Qt 항목에서 Qt 5.15.2를 선택한다. 하위 항목으로 여러 옵션이 나오는데, 전부 선택해도 무방하지만 용량을 줄이고 싶으면 MSVC 2019 64-bit
만 선택하면 된다. 그리고 Developer and Designer Tools
에서 Qt Creator
가 선택되어 있는지 확인한다.
Linux 환경에서 빌드
ns-3 소스코드를 다운로드 받을 때 ns-3-allinone
버전으로 다운로드했다면 해당 폴더 안에 netanim
폴더가 이미 있을 것이다.
cd netanim
make clean
qmake NetAnim.pro
make
위 명령어로 쉽게 빌드가 가능하다. 그러면 해당 폴더에 NetAnim
실행 파일이 생성되며 이걸 실행하면 NetAnim
을 이용할 수 있다.
Windows 환경에서 빌드
hg clone http://code.nsnam.org/netanim
위 명령어를 mercurial 설치 후 PowerShell 또는 cmd에 입력하면 소스코드를 다운 가능하다.
다운받은 소스 폴더 내 NetAnim.pro
파일을 더블 클릭하면 Qt Creator가 열린다. 여기서 Manage Kits
로 Qt 버전과 컴파일러가 모두 MSVC
로 선택되어 있는지 확인한 후, 빌드하면 된다. 그러면 빌드 output 폴더 아래에 NetAnim.exe
실행 파일이 생긴다. 이걸 더블 클릭하여 NetAnim을 실행할 수 있는데, Qt Creator
밖에서 NetAnim.exe
를 실행하려면 PATH에 Qt 설치 경로 아래의 qmake.exe
가 위치한 bin
폴더(예: E:\Qt5\5.15.2\msvc2019_64\bin
)를 추가해야 한다. 필자는 Release
프로필로 빌드하면 Qt Creator
밖에서 실행이 안 돼서 Debug
프로필로 빌드하였다.
사용법
NetAnim의 사용법은 크게 2단계로 나뉜다.
먼저, NetAnim에서 ns-3의 시뮬레이션 결과를 읽어오려면, ns-3에서 실행할 스크립트에 netanim에 관련된 코드를 추가하여 NetAnim에서 읽어 올 애니메이션 xml
파일을 생성하도록 해야 한다. 이는 ns3::AnimationInterface
클래스를 이용하여 구현할 수 있다.
그리고 생성된 xml파일을 NetAnim에서 로드하면 된다.
ns-3 스크립트에 NetAnim 관련 코드 추가 예시
#include "ns3/netanim-module.h"
NetAnim 관련 코드를 사용하기 위해서는 위와 같이 netanim-module.h
를 include 해야 한다.
NodeContainer nodes;
nodes.Create (2);
위와 같이 시각화할 노드를 2개 생성했다고 하면,
AnimationInterface anim ("anim1.xml");
anim.SetConstantPosition(nodes.Get(0), 1.0, 2.0);
anim.SetConstantPosition(nodes.Get(1), 2.0, 3.0);
위와같이 AnimationInterface
객체를 생성하고 인자로는 생성할 xml 파일 명을 전달한다.
그리고, SetConstantPosition
함수를 이용하여 노드의 위치를 설정한다. 이 함수의 첫 번째 인자는 노드의 포인터이고, 두 번째, 세 번째 인자는 x, y 좌표이다.
이제 ns-3
로 스크립트를 실행하면, xml파일이 생성된다. 그 xml파일을 NetAnim에서 로드하면 두 노드가 통신하는 애니메이션을 볼 수 있다.