NS3 – Bài 2- Trực quan hóa mô phỏng với NetAnim
08/12/2021, bởi Thầy TiiL trong mục: NS3NetAnim là một công cụ offline network animator được gói cùng trong các bản ns-allinone-3.xx .
Nó có thể animate mô phỏng mạng ns-3 qua việc sử dụng XML trace file output được tạo trong quá trình mô phỏng.
Do vậy, các bước cần thiết cho việc tạo XML trace file và setting các attributes liên quan CẦN ĐƯỢC viết trong script code mô phỏng ns-3.
Trong ví dụ sau đây, Tôi sẽ mở rộng simulation script ở Bài 1 https://tinhoc123.edu.vn/ns3/ns3-bai-1-xay-dung-mo-phong-don-gian/
Các chủ đề chính
SimpleNS3Simulation2.cc
#include "ns3/core-module.h" #include "ns3/network-module.h" #include "ns3/point-to-point-module.h" #include "ns3/internet-module.h" #include "ns3/applications-module.h" // ---- header Them so voi Bai 1 #include "ns3/mobility-module.h" #include "ns3/netanim-module.h" // --- het phan them header using namespace ns3; int main (int argc, char *argv[]) { NodeContainer nodes; nodes.Create (2); PointToPointHelper channel; channel.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); channel.SetChannelAttribute ("Delay", StringValue ("2ms")); NetDeviceContainer netDevices; netDevices = channel.Install (nodes); InternetStackHelper ipStack; ipStack.Install (nodes); Ipv4AddressHelper ipAddresses; ipAddresses.SetBase ("192.168.1.0", "255.255.255.0"); Ipv4InterfaceContainer ipinterfaces = ipAddresses.Assign (netDevices); UdpEchoServerHelper udpEchoServer (9); ApplicationContainer serverApps = udpEchoServer.Install (nodes.Get (1)); serverApps.Start (Seconds (1.0)); UdpEchoClientHelper udpEchoClient (ipinterfaces.GetAddress (1), 9); ApplicationContainer clientApps = udpEchoClient.Install (nodes.Get (0)); clientApps.Start (Seconds (2.0)); //Mo rong them so voi Bai 1 MobilityHelper mobility; mobility.SetPositionAllocator ("ns3::GridPositionAllocator", "MinX", DoubleValue (0.0), "MinY", DoubleValue (0.0),"DeltaX", DoubleValue (5.0), "DeltaY", DoubleValue (10.0), "GridWidth", UintegerValue (5), "LayoutType", StringValue ("RowFirst")); mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); mobility.Install (nodes); AnimationInterface anim ("SimpleNS3Simulation_NetAnimationOutput.xml"); anim.SetConstantPosition (nodes.Get(0), 0, 5); anim.SetConstantPosition (nodes.Get(1), 10, 5); //--------- het phan mo rong them Simulator::Run (); }
Phần header, Tôi đã thêm 2 dòng lệnh nhằm mục tiêu khai báo sử dụng thư viện/module cần thiết
#include “ns3/mobility-module.h”
#include “ns3/netanim-module.h”
Và code khai thác các module, trong đó có việc tạo file XML file output cho việc trực quan hóa lại mô phỏng sử dụng công cụ NetAnim.
MobilityHelper mobility;
mobility.SetPositionAllocator (“ns3::GridPositionAllocator”,
“MinX”, DoubleValue (0.0), “MinY”, DoubleValue (0.0),”DeltaX”, DoubleValue (5.0), “DeltaY”, DoubleValue (10.0),
“GridWidth”, UintegerValue (5), “LayoutType”, StringValue (“RowFirst”));
mobility.SetMobilityModel (“ns3::ConstantPositionMobilityModel”);
mobility.Install (nodes);
AnimationInterface anim (“SimpleNS3Simulation_NetAnimationOutput.xml“);
anim.SetConstantPosition (nodes.Get(0), 0, 5);
anim.SetConstantPosition (nodes.Get(1), 10, 5);
Mặc dù vậy, sẽ không có bất kỳ tính di động nào trong kịch bản mạng có dây này, một mô hình di động nên được gắn vào các nút để hiển thị các nút tại các vị trí thích hợp.
Chạy mô phỏng NS3
$ ./waf –run SimpleNS3Simulation2
Kết thúc mô phỏng, ta sẽ được tệp SimpleNS3Simulation_NetAnimationOutput.xml, nằm tại thư mục gốc NS3-xx
Chạy trực quan hóa lại mô phỏng với NetAnim
— NetAnim là ứng dụng đặt tại ns-allinone-3.xx/netanim-3.yyy
— Do vậy, để chạy ứng dụng này, nếu chưa set path, ta sử dụng các bước như sau (phần màu tím)
— thomc@thomc-EliteBook:~/ns-allinone-3.35$ ./netanim-3.108/NetAnim
Màn hình trực quan hiện lên, sử dụng tính năng mở file để mở file XML đã tạo ra trước đó
Kết quả sau khi load file
đúp chuột lên nút sẽ hiện các properties của node đó
Tạm kết:
– Người học tự khám phá các tính năng của ứng dụng NetAnim
Thẻ:NS3