Wednesday, October 22, 2014

Network simulator (ns3) ইন্সটল এবং কনফিগার করুন উবুন্টু ১৪.০৪ ভার্সনে

cse স্টুডেন্টদের শেষবর্ষের দিকে থিসিস নিতে হয়। সেখানে অনেকে নেটওয়ার্কিং এর বিভিন্ন বিষয়ের উপর থিসিস করে। এই কাজটি করার জন্য NS3 ইনস্টল এবং কনফিগার করতে হয়। ns3 এর সোর্স ডাউনলোড করে কম্পাইল করতে হয়। ফলে যারা লিনাক্সে নতুন তাদের জন্য বিষয়টি একটু ঝামেলার। আমি চেষ্টা করব বিস্তারিত ব্যাখ্যা করে লিখতে। কোন কমান্ড যদি না কাজ করে আমাকে কমেন্টে জানাবেন।

ডেভেলাপমেন্ট মেশিনে উবুন্টু ১৪.০৪ ভার্সন ইন্সটল দিয়ে নেন। প্রথমে আমরা প্যাকেজগুলো ইন্সটল করব।

$ sudo apt-get update
$ sudo apt-get install gcc g++ python python-dev mercurial bzr gdb valgrind gsl-bin libgsl0-dev libgsl0ldbl flex bison tcpdump sqlite sqlite3 libsqlite3-dev libxml2 libxml2-dev libgtk2.0-0 libgtk2.0-dev uncrustify doxygen graphviz imagemagick python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev python-pygccxml 

এই প্যাকেজটি প্রায় ২২৭ মেগার মত জায়গা নিয়ে নিবে। এই ক্ষেত্রে  আমি texlive প্যাকেজটি বাদ দিয়েছি। পরে আপনাদের কাজ করতে দরকার হলে ইন্সটল দিয়ে নিবেন।

ns3 ডাউনলোড করুন এই লিঙ্ক থেকে। এক্সট্রাক্ট করুন। কমান্ড লিখুন =>

$ cd ns-allinone-3.21
$ chmod +x build.py
$ ./build.py --enable-examples --enable-tests
এই কমান্ডটি রান হতে অনেক সময় লাগবে। ধৈর্য ধরে অপেক্ষা করুন। সব কিছু ঠিকমত হবে এই মেসেজটি পাবেন।
"Build finished successfully".(clap for yourself)

কমান্ড লিখুন =>
$ cd ns-3.21
$ ./waf -d debug --enable-examples --enable-tests configure
$ ./waf

সব কিছু ঠিকভাবে ইন্সটল হয়েছে কিনা তা চেক করার জন্য এই কমান্ডটি দিন =>
$ ./test.py

আমাদের ইন্সটলেশন প্রক্রিয়া শেষ। 

কিভাবে ns-allinone-3.21/ns-3.21/example এ থাকা প্রোগ্রামগুলো রান করবেন?

example এর ভেতরে থাকা যেকোন একটা ফাইল first.cc কপি করুন। এবং ns-allinone-3.21/ns-3.21/scratch ফোল্ডারে রাখুন। 
কমান্ড লিখুন => 
$ ./waf --run first

এরকম আউটপুট দেখতে পাবেন -
At time 3s client sent 1024 bytes to 10.1.1.2 port 9
At time 3.00469s server received 1024 bytes from 10.1.1.1 port 49153
At time 3.00469s server sent 1024 bytes to 10.1.1.1 port 49153
At time 3.00837s client received 1024 bytes from 10.1.1.2 port 9

আমাদের অনেক সময় গ্রাফিক্যাল মুডে দেখানো দরকার লাগতে পারে। সেইক্ষেত্রে আমরা কম্পাইল করে একটা xml ফাইল এক্সট্রাক্ট করি। সেটা NetAnim এ ইমপোর্ট করে এনালাইসিস করি।

আমাদের প্রথমে NetAnim ইন্সটল দেয়া দরকার। 

$ sudo apt-get install NetAnim

যদি সুন্দরমত ইন্সটল হয়ে যায় তাহলে ভাল আর যদি না হয় তাহলে Qt এর প্যাকেজ ইন্সটল দিতে হবে। software manager এ গিয়ে qt creator লিখুন এবং ইন্সটল করুন। তারপর আবার sudo apt-get install NetAnim কমান্ডটি লিখুন।

ns-allinone-3.21/ns-3.21/scratch/first.cc ফাইলটি ওপেন করুন। এবং সতর্কতার সাথে এডিট করুন =>
এখান থেকে বুঝতে সমস্যা হলে এই লিঙ্কটি দেখতে পারেন।  
#include "ns3/netanim-module.h" // এই লাইনটি যোগ করুন
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
using namespace ns3;
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
int
main (int argc, char *argv[])
{
Time::SetResolution (Time::NS);
LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
InternetStackHelper stack;
stack.Install (nodes);
Ipv4AddressHelper address;
address.SetBase ("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign (devices);
UdpEchoServerHelper echoServer (9);
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));
UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));
ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));
// এই লাইনগুলো যোগ করুন
AnimationInterface anim ("animation.xml");
anim.SetConstantPosition (nodes.Get(0), 1.0, 2.0);
anim.SetConstantPosition (nodes.Get(1), 2.0, 3.0);
// এই লাইনগুলো যোগ করুন
Simulator::Run ();
Simulator::Destroy ();
return 0;
}
এবার কমান্ড লিখুন =>
$ ./waf --run first

দেখবেন  ns-allinone-3.21/ns-3.21/ ফোল্ডারে animation.xml ফাইলটি আউটপুট আকারে দেখাবে। এখন NetAmin ওপেন করুন। তারপর এই সফটওয়্যার থেকে animation.xml ফাইলটা ওপেন করুন। তারপর আপনি গ্রাফিক্যাল আউটপুট দেখতে পারবেন। 


আশা করি টিউটরিয়ালটি বুঝতে পেরেছেন। কোন সমস্যা হলে কমেন্টে জানাবেন।




No comments:

Post a Comment

এখানে আপনি আপনার মূল্যবান মতামতটি প্রকাশ করতে পারেন।