ns-3 نيٽ ورڪ سمائيٽر ٽيوٽوريل. باب 3

ns-3 نيٽ ورڪ سمائيٽر ٽيوٽوريل. باب 3
باب 1,2

3 شروع ڪرڻ
3.1 جائزو
3.2 شرطون
3.2.1 ڊائون لوڊ ڪري رهيو آهي ns-3 رليز کي ماخذ آرڪائيو طور
3.3 ڊائون لوڊ ڪندي ns-3 Git استعمال ڪندي
3.3.1 لوڊ ڪندي ns-3 بيڪ استعمال ڪندي
3.4 اسيمبلي ns-3
3.4.1 build.py سان عمارت
3.4.2 بيڪري سان عمارت
3.4.3 واف سان ٺاهيو
3.5 ٽيسٽنگ ns-3
3.6 اسڪرپٽ هلائڻ
3.6.1 ڪمانڊ لائن دليل
3.6.2 ڊيبگنگ
3.6.3 ڪم ڪندڙ ڊاريڪٽري

باب 3

شروعات ڪرڻ

هن باب جو مقصد آهي پڙهندڙ کي تيار ڪرڻ لاءِ هڪ ڪمپيوٽر سان شروع ڪرڻ لاءِ جنهن شايد ڪڏهن به ns-3 انسٽال نه ڪيو هجي. اهو سپورٽ ٿيل پليٽ فارمن، شرطن، NS-3 کي ڪيئن حاصل ڪرڻ، ns-3 کي ڪيئن ٺاهيو، ۽ توهان جي تعمير ۽ سادي پروگرامن کي ڪيئن جانچڻ جو احاطو ڪري ٿو.

3.1 جائزو

ns-3 سميوليٽر تعاون ڪندڙ سافٽ ويئر لائبريرين جي سسٽم طور ٺهيل آهي. اسيمبليءَ دوران، يوزر پروگرامن جو ڪوڊ انهن لائبريرين سان ڳنڍيل هوندو آهي. C++ يا Python پروگرامنگ ٻوليون استعمال ڪيون وينديون آهن ڪسٽم پروگرام لکڻ لاءِ.

Ns-3 کي ماخذ ڪوڊ جي طور تي ورهايو ويو آهي، جنهن جو مطلب آهي ته ٽارگيٽ سسٽم کي لازمي طور تي سافٽ ويئر ڊولپمينٽ ماحول هجڻ گهرجي ته جيئن پهريان لائبريريون ٺاهيون ۽ پوءِ يوزر پروگرام ٺاهيو. اصول ۾، ns-3 هڪ مخصوص سسٽم لاءِ تيار ڪيل لائبريرين جي طور تي ورهائي سگهجي ٿو، ۽ مستقبل ۾ اهي هن طريقي سان ورهائي سگهجن ٿيون. پر اڄڪلهه ڪيترائي استعمال ڪندڙ اصل ۾ پنهنجو ڪم ns-3 کي ايڊٽ ڪرڻ سان ڪندا آهن، تنهنڪري لائبريرين کي ٺاهڻ لاءِ سورس ڪوڊ هجڻ مفيد آهي. جيڪڏهن ڪو ماڻهو تيار ٿيل لائبريريون ۽ آپريٽنگ سسٽم لاءِ پيڪيجز ٺاهڻ جو ڪم وٺڻ چاهي ته مهرباني ڪري ميلنگ لسٽ سان رابطو ڪري. ns-ڊولپرز.

اڳيون، اسان ns-3 ڊائون لوڊ ۽ تعمير ڪرڻ جا ٽي طريقا ڏسندا. پهريون ڊائون لوڊ ڪرڻ ۽ تعمير ڪرڻ آهي سرڪاري رليز مين سائيٽ تان. ٻيو بنيادي ns-3 تنصيب جي ڊولپمينٽ ورزن جي نقلن جي چونڊ ۽ اسيمبلي آهي. ٽيون آهي ns-3 لاءِ وڌيڪ ايڪسٽينشن لوڊ ڪرڻ لاءِ اضافي تعميراتي اوزار استعمال ڪرڻ. اسان هر هڪ ذريعي هلنداسين ڇو ته اوزار ٿورو مختلف آهن.

تجربا لينڪس استعمال ڪندڙ حيران ٿي سگهن ٿا ته ڇو ns-3 هڪ پيڪيج جي طور تي مهيا نه ڪيو ويو آهي جهڙوڪ اڪثر ٻين لائبريرين وانگر جيڪي پيڪيج مينيجر استعمال ڪندا آهن؟ جيتوڻيڪ اتي مختلف لينڪس ڊسٽريبيوشنز (مثال طور ڊيبين) لاءِ بائنري پيڪيجز موجود آهن، اڪثر صارفين لائبريرين کي ايڊٽ ڪري ختم ڪري ڇڏيندا آهن ۽ پاڻ کي ns-3 کي ٻيهر ٺاهڻو پوندو آهي، تنهن ڪري سورس ڪوڊ موجود هجڻ آسان آهي. انهي سبب لاء، اسان ذريعن کان انسٽال ڪرڻ تي ڌيان ڏينداسين.

گهڻن ايپليڪيشنن لاءِ ns-3 حق پاڙ جي ضرورت نه آهي، ان کي استعمال ڪرڻ جي صلاح ڏني آهي هڪ غير استحقاق صارف اڪائونٽ.

3.2 شرطون

موجود ns-3 لائبريرين جي مڪمل سيٽ ۾ ٽئين پارٽي جي لائبريرين تي ڪيترائي انحصار آهن، پر گهڻي ڀاڱي ns-3 ڪيترن ئي عام (اڪثر طور تي ڊفالٽ نصب ٿيل) اجزاء جي مدد سان ٺاهي ۽ استعمال ڪري سگھجن ٿيون: هڪ C++ مرتب ڪندڙ، پٿون، هڪ سورس ڪوڊ ايڊيٽر (مثال طور، vim, ايم يا Eclipse) ۽، جيڪڏهن ڊولپمينٽ ريپوزٽريز استعمال ٿين ٿيون، گيٽ ورزن ڪنٽرول سسٽم. گھڻا پھريون ڀيرو استعمال ڪندڙن کي پريشان ٿيڻ جي ضرورت نه پوندي جيڪڏھن انھن جي تشڪيل ۾ ڪجھ ns-3 جديد خصوصيتون غائب آھن، پر انھن لاءِ جيڪي مڪمل انسٽاليشن چاھين ٿا، اھو پروجيڪٽ ھڪڙو وڪي مهيا ڪري ٿو جنھن ۾ صفحا شامل آھن گھڻن مفيد مشورن ۽ چالن سان. هڪ اهڙو صفحو تنصيب وارو صفحو آهي، جنهن ۾ مختلف سسٽم لاءِ انسٽاليشن جون هدايتون موجود آهن: https://www.nsnam.org/wiki/Installation.

هن وڪي جو اڳوڻو سيڪشن وضاحت ڪري ٿو ته ڪهڙن پيڪيجز کي عام ns-3 آپشنز کي سپورٽ ڪرڻ جي ضرورت آهي ۽ انهن کي لينڪس يا macOS جي عام ذائقن تي انسٽال ڪرڻ لاءِ استعمال ڪيل حڪم پڻ مهيا ڪري ٿي.

توھان ھن موقعي جو فائدو وٺي سگھوٿا ns-3 وڪي پيج يا مکيه ويب سائيٽ کي ڳولڻ لاءِ: https://www.nsnam.org، ڇاڪاڻ ته اتي تمام گهڻو معلومات آهي. ns-3 (ns-3.29) جي جديد ورزن سان شروع ڪندي، ns-3 کي هلائڻ لاءِ ھيٺين اوزارن جي ضرورت آھي:

اوزار پيڪيج / نسخو

  • سي ++ گڏ ڪرڻ وارو
    clang++ or g++ (g++ ورجن 4.9 يا مٿي)
  • Python
    python2 ورزن >= 2.7.10، يا python3 ورزن >=3.4
  • Git
    ڪو به جديد ورزن (GitLab.com تي ns-3 تائين رسائي حاصل ڪرڻ لاءِ)
  • ٽر
    ڪو به جديد نسخو (اين ايس-3 رليز کي پيڪ ڪرڻ لاءِ)
  • bunzip2
    ڪو به جديد نسخو (ns-3 رليز کي پيڪ ڪرڻ لاءِ)

پٿون جو ڊفالٽ ورزن چيڪ ڪرڻ لاءِ، ٽائپ ڪريو python -V. جي ++ ورجن چيڪ ڪرڻ لاءِ، ٽائپ ڪريو g++ -v. جيڪڏھن ڪو اوزار غائب آھي يا تمام پراڻو آھي، مھرباني ڪري NS-3 وڪي پيج تي انسٽاليشن گائيڊ ڏسو.

ھاڻي کان، اسان فرض ڪريون ٿا ته پڙهندڙ لينڪس، MacOS، يا لينڪس ايموليٽر هلائي رھيو آھي، ۽ گھٽ ۾ گھٽ مٿيون اوزار آھن.

3.2.1 ڊائون لوڊ ڪري رهيو آهي ns-3 رليز کي ماخذ آرڪائيو طور

اهو عمل جو طريقو هڪ نئين استعمال ڪندڙ لاءِ آهي جيڪو ns-3 جي جديد رليز ۽ پيڪيج ورزن سان ڊائون لوڊ ۽ تجربو ڪرڻ چاهي ٿو. ns-3 رليز شايع ٿيل آهن compressed Source archives، ڪڏهن ڪڏهن سڏيو ويندو آهي ٽربل. ٽربل هڪ خاص سافٽ ويئر آرڪائيو فارميٽ آهي جنهن ۾ ڪيتريون ئي فائلون گڏ ڪيون وينديون آهن. آرڪائيو عام طور تي دٻايو ويندو آهي. ns-3 بوٽ پروسيس ذريعي ٽربل سادو آهي، توهان کي صرف هڪ رليز چونڊڻ جي ضرورت آهي، ڊائون لوڊ ڪريو ۽ ان کي پيڪ ڪريو.

اچو ته فرض ڪريو ته توهان، هڪ صارف جي طور تي، ns-3 ٺاهڻ چاهيو ٿا هڪ مقامي ڊاريڪٽري ۾ ڪم جي جڳهه. توھان حاصل ڪري سگھو ٿا رليز جي ڪم ڪندڙ ڪاپي ھيٺ ڏنل داخل ڪندي لينڪس ڪنسول ۾ (مناسب ورزن نمبرن کي متبادل بڻايو، يقينا)

$ cd 
$ mkdir workspace 
$ cd workspace 
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2 
$ tar xjf ns-allinone-3.29.tar.bz2 

مٿي استعمال ڪيل افاديت تي ڌيان ڏيو وهن، جيڪو انٽرنيٽ تان شيون ڊائون لوڊ ڪرڻ لاءِ ڪمانڊ لائن ٽول آهي. جيڪڏهن توهان ان کي انسٽال نه ڪيو آهي، توهان ان لاءِ پنهنجو برائوزر استعمال ڪري سگهو ٿا.

انهن قدمن تي عمل ڪندي توهان کي ns-allinone-3.29 ڊاريڪٽري ڏانهن وٺي ويندي، اتي توهان کي ڪيتريون فائلون ۽ ڊائريڪٽريون ڏسڻ گهرجن.

$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.py

توھان ھاڻي تيار آھيو ns-3 بنيادي ورهائڻ لاءِ ۽ اڳتي ڪري سگھوٿا ns-3 جي تعمير تي سيڪشن ڏانھن.

3.3 ڊائون لوڊ ڪندي ns-3 Git استعمال ڪندي

ns-3 ڪوڊ موجود آهي Git repositories ۾ GitLab.com تي https://gitlab.com/nsnam/. ميڙ ناميارو هڪ اوپن سورس پروجيڪٽ پاران استعمال ڪيل مختلف مخزن کي گڏ ڪري ٿو.

Git repositories استعمال ڪرڻ شروع ڪرڻ جو آسان طريقو ماحول کي فورڪ يا ڪلون ڪرڻ آهي ns-3-ايلينون. هي اسڪرپٽ جو هڪ سيٽ آهي جيڪو عام طور تي استعمال ٿيندڙ ns-3 سب سسٽم جي لوڊشيڊنگ ۽ اسيمبلي کي منظم ڪري ٿو. جيڪڏهن توهان Git تي نوان آهيو، اصطلاح "فورڪ" ۽ "ڪلون" شايد توهان لاء اڻ واقف هوندا؛ جيڪڏهن ائين آهي، اسان سفارش ڪريون ٿا ته توهان صرف ڪلون ڪريو (پنهنجي پنهنجي ڪاپي ٺاهيو) GitLab.com تي موجود مخزن کي هن طرح:

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git 
$ cd ns-3-allinone 

هن مرحلي تي، توهان جي ڊاريڪٽري جو ڏيک ns-3-ايلينون مٿي بيان ڪيل رليز آرڪائيو ڊاريڪٽري کان ٿورو مختلف. اهو ڪجهه هن طرح ڏسڻ گهرجي:

$ ls
build.py constants.py download.py README util.py

مهرباني ڪري نوٽ ڪريو ته هڪ اسڪرپٽ آهي download.py، جيڪو اضافي طور تي ns-3 ۽ ان سان گڏ سورس ڪوڊ ڪڍندو. هتي توهان وٽ هڪ اختيار آهي: يا ته ڊائون لوڊ ڪريو جديد ns-3 ڊولپمينٽ سنيپ شاٽ:

$ python download.py

يا پرچم استعمال ڪندي ns-3 ڇڏڻ کي ترجيح ڏيو -n رليز نمبر ظاهر ڪرڻ لاءِ:

$ python download.py -n ns-3.29

هن قدم کان پوء ڊاريڪٽري ڏانهن ns-3-ايلينون اضافي repositories ڊائون لوڊ ڪيو ويندو ns-3, وٺ, pybindgen и نيتنيم.

ويچاري
صاف Ubuntu16.04 سان هڪ مشين تي، مون کي هن حڪم کي تبديل ڪرڻ جي ضرورت آهي: $ sudo python3 download.py -n ns-3.29 (هتان کان پوءِ مترجم جا نوٽس).

3.3.1 لوڊ ڪندي ns-3 بيڪ استعمال ڪندي

مٿيان ٻه طريقا (ذريعو آرڪائيو يا مخزن ns-3-ايلينون Git ذريعي) گھڻن اضافون سان آسان ترين ns-3 تنصيب حاصل ڪرڻ لاءِ ڪارائتو آھن(pybindgen Python بائنڊنگ ٺاهڻ ۽ نيتنيم نيٽ ورڪ انيميشن لاءِ). NS-3-allinone ۾ ڊفالٽ طرفان مهيا ڪيل ٽيون مخزن سڏيو ويندو آهي وٺ.

وٺ ns-3 پروجيڪٽ لاءِ تيار ڪيل ڪيترن ئي ذخيرن مان سافٽ ويئر جي هموار ٿيل تعمير لاءِ هڪ اوزار آهي. وٺ ns-3 جي ڊولپمينٽ ورزن کي حاصل ڪرڻ لاءِ استعمال ڪري سگھجي ٿو، گڏو گڏ ns-3 جي بنيادي ورزن جي ايڪسٽينشن کي ڊائون لوڊ ۽ تعمير ڪرڻ لاءِ، جيئن ماحول سڌو ڪوڊ لڳائڻ, CradleNetwork Simulation Cradle، نئين پٿون بائنڊنگ ۽ مختلف ns-3 “ايپس” ٺاهڻ جي صلاحيت.

ويچاري
CradleNetwork Simulation Cradle ھڪڙو فريم ورڪ آھي جيڪو توھان کي نيٽ ورڪ سميوليٽر اندر حقيقي TCP/IP نيٽ ورڪ اسٽيڪ استعمال ڪرڻ جي اجازت ڏئي ٿو.

جيڪڏهن توهان اميد رکو ٿا ته توهان جي ns-3 تنصيب کي ترقي يافته يا اضافي خاصيتون آهن، توهان هن انسٽاليشن جي رستي جي پيروي ڪري سگهو ٿا.

تازو ns-3 رليز ۾ وٺ تار ڇڏڻ ۾ شامل ڪيو ويو. رليز ۾ ھڪڙي ترتيب واري فائل شامل آھي جيڪا توھان کي اجازت ڏئي ٿي ته رليز جي وقت تي موجوده سافٽ ويئر ورجن کي ڊائون لوڊ ڪريو. اهو آهي، مثال طور، نسخو وٺ، جيڪو ورهايو ويو آهي NS-3.29 سان ورهايو ويو آهي، ns-3 يا اڳئين جي رليز لاءِ اجزاء کي ٻيهر حاصل ڪرڻ لاءِ استعمال ڪري سگهجي ٿو، پر بعد ۾ رليز لاءِ اجزاء کي ٻيهر حاصل ڪرڻ لاءِ استعمال نه ٿو ڪري سگهجي (جيڪڏهن پيڪيج جي وضاحت واري فائل bakeconf.xml اپڊيٽ نه ڪئي وئي).

توهان پڻ حاصل ڪري سگهو ٿا تازو ڪاپي وٺتوھان جي لينڪس ڪنسول ۾ ھيٺ ڏنل حڪم داخل ڪندي (فرض ڪيو توھان Git انسٽال ڪيو آھي):

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.git

جڏهن توهان هلائيندا آهيو git حڪم، توهان کي ڪجهه ڏسڻ گهرجي جيئن هيٺ ڏنل:

Cloning into 'bake'...
remote: Enumerating objects: 2086, done. 
remote: Counting objects: 100% (2086/2086), done. 
remote: Compressing objects: 100% (649/649), done. 
remote: Total 2086 (delta 1404), reused 2078 (delta 1399) 
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done. 
Resolving deltas: 100% (1404/1404), done.

حڪم مڪمل ٿيڻ کان پوء ڪلون توھان کي ھڪڙي ڊاريڪٽري جو نالو ڏيڻ گھرجي وٺ، جنهن جو مواد ڪجهه هن طرح ڏسڻ گهرجي:

$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODO

نوٽ ڪريو ته توھان لوڊ ڪيو آھي ڪيترائي پٿون اسڪرپٽ، ھڪڙو پٿون ماڊل نالي وٺ ۽ هڪ XML ترتيب واري فائيل. اڳيون قدم توهان جي پسند جي ns-3 تقسيم کي ڊائون لوڊ ۽ تعمير ڪرڻ لاءِ انهن اسڪرپٽس کي استعمال ڪرڻ آهي. ڪسٽمائيزيشن جا ڪيترائي مقصد موجود آهن:

  1. ns-3.29: جاري ڪرڻ سان لاڳاپيل ماڊل؛ اهو ٽاربال ۾ ڇڏڻ سان ملندڙ اجزاء کي ڊائون لوڊ ڪندو؛

  2. ns-3-dev: ساڳيو ماڊل، پر ڊولپمينٽ ٽري مان ڪوڊ استعمال ڪندي؛

  3. ns-allinone-3.29: ھڪڙو ماڊل جنھن ۾ ٻيون اضافي خاصيتون شامل آھن جھڙوڪ ڪلڪ روٽنگ ۽ نيٽ ورڪ سموليشن Cradle، Openflow for ns-3.

  4. ns-3-ايلينون: ماڊل جي ڇڏڻ واري ورزن وانگر سمورو، پر ڊولپمينٽ ڪوڊ لاءِ.

ويچاري
ڪلڪ ڪيو - راؤٽر ٺاهڻ لاءِ ماڊلر سافٽ ويئر آرڪيٽيڪچر.

اوپن فلو هڪ پروٽوڪول آهي پروسيسنگ ڊيٽا جي پروسيسنگ جي عمل کي منظم ڪرڻ لاءِ ڊيٽا نيٽ ورڪ ذريعي روٽرز ۽ سوئچز ذريعي، لاڳو ڪرڻ سافٽ ويئر جي وضاحت ڪيل نيٽ ورڪ ٽيڪنالاجي.

موجوده ڊولپمينٽ سنيپ شاٽ (غير رليز) ns-3 هتي ملي سگهي ٿو:https://gitlab.com/nsnam/ns-3-dev.git.

ڊولپرز ڪوشش ڪري رھيا آھن انھن مخزن کي مسلسل ڪم ڪندڙ آرڊر ۾، پر اھي ڊولپمينٽ ايريا ۾ آھن ۽ اڻ ڇپيل ڪوڊ تي مشتمل آھن، تنھنڪري جيڪڏھن توھان نوان فيچر استعمال ڪرڻ جي رٿابندي نٿا ڪريو، پوءِ سرڪاري رليز چونڊيو.

توهان ڪوڊ جو جديد نسخو ڳولي سگهو ٿا ذخيرو جي فهرست کي براؤز ڪندي، يا وڃڻ سان ns-3 ريليز ويب پيج:https://www.nsnam.org/releases/ ۽ تازو ورزن جي لنڪ تي ڪلڪ ڪندي. هن مثال ۾ اسين جاري ڪنداسين ns-3.29 سان.

هاڻي، اسان کي گهربل ns-3 اجزاء حاصل ڪرڻ لاء، اسان اوزار استعمال ڪنداسين وٺ. اچو ته ڪم بابت ڪجھ تعارفي لفظ چئون وٺ.

بيڪ ڊاريڪٽري ۾ پيڪيج ذريعن کي لوڊ ڪندي ڪم ڪري ٿو ذريعو ۽ عمارت ڊاريڪٽري ۾ لائبريرين کي انسٽال ڪرڻ. وٺ بائنري جي حوالي سان هلائي سگهجي ٿو، پر جيڪڏهن توهان هلائڻ چاهيو ٿا وٺ ڊاريڪٽري مان نه جنهن ۾ اهو ڊائون لوڊ ڪيو ويو آهي، اهو مشورو آهي ته رستو شامل ڪرڻ لاء وٺ توهان جي رستي ڏانهن (PATH ماحوليات متغير)، مثال طور هيٺ ڏنل (مثال طور Linux bash شيل لاء). "بيڪ" ڊاريڪٽري ڏانھن وڃو ۽ پوء ھيٺ ڏنل ماحوليات کي سيٽ ڪريو:

$ export BAKE_HOME=`pwd` 
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin 
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/lib

هي پروگرام رکي ٿو bake.py شيل جي رستي ڏانهن ۽ ٻين پروگرامن کي اجازت ڏيندو ته عملدار ۽ لائبريريون ڳولڻ لاء جيڪي هن ٺاهيا آهن وٺ. ڪجھ استعمال جي حالتن ۾ وٺمٿي بيان ڪيل PATH ۽ PYTHONPATH سيٽنگ جي ضرورت ناهي، پر ns-3-allinone جي مڪمل تعمير (اضافي پيڪيجز سان) عام طور تي ان جي ضرورت آهي.

پنھنجي ڪم ڪندڙ ڊاريڪٽري ڏانھن وڃو ۽ ھيٺ ڏنل ڪنسول ۾ داخل ڪريو:

$ ./bake.py configure -e ns-3.29

اڳتي پڇنداسين وٺ چيڪ ڪريو ته ڇا اسان وٽ ڪافي اوزار آھن مختلف حصن کي لوڊ ڪرڻ لاءِ. ڊائل:

$ ./bake.py check

توھان کي ھيٺ ڏنل ڪجھ ڏسڻ گھرجي:

> Python - OK 
> GNU C++ compiler - OK 
> Mercurial - OK 
> Git - OK 
> Tar tool - OK 
> Unzip tool - OK 
> Make - OK 
> cMake - OK 
> patch tool - OK 
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

خاص طور تي، اپلوڊ اوزار جهڙوڪ Mercurial، CVS، Git ۽ بازار هن قدم ۾ ضروري آهن جيئن اهي اسان کي ڪوڊ حاصل ڪرڻ جي اجازت ڏين ٿيون. هن نقطي تي، توهان جي سسٽم لاء معمولي طريقي سان غائب اوزار نصب ڪريو (جيڪڏهن توهان ڄاڻو ٿا ته ڪيئن) يا مدد لاء پنهنجي سسٽم جي منتظم سان رابطو ڪريو.

اڳيون، سافٽ ويئر ڊائون لوڊ ڪرڻ جي ڪوشش ڪريو:

$ ./bake.py download

نتيجو ڪجهه ٿيڻ گهرجي:

>> Searching for system dependency setuptools - OK 
>> Searching for system dependency libgoocanvas2 - OK 
>> Searching for system dependency gi-cairo - OK 
>> Searching for system dependency pygobject - OK 
>> Searching for system dependency pygraphviz - OK 
>> Searching for system dependency python-dev - OK 
>> Searching for system dependency qt - OK 
>> Searching for system dependency g++ - OK 
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK 
>> Downloading netanim-3.108 - OK 
>> Downloading ns-3.29 - OK

ان جو مطلب اهو ٿيندو ته ٽي ذريعا ڊائون لوڊ ڪيا ويا آهن. ھاڻي ماخذ ڊاريڪٽري ڏانھن وڃو ۽ ٽائپ ڪريو ls؛ توھان کي ڏسڻ گھرجي:

$ cd source 
$ ls
netanim-3.108 ns-3.29 pybindgen

ھاڻي توھان تيار آھيو ns-3 ورهائڻ لاءِ.

3.4 اسيمبلي ns-3

جيئن ns-3 ڊائون لوڊ ڪرڻ سان، ns-3 ٺاهڻ جا ڪيترائي طريقا آهن. بنيادي شيء جنهن تي اسان زور ڏيڻ چاهيون ٿا اهو آهي ns-3 تعمير ٿيل اوزار استعمال ڪندي سڏيو ويندو آهي Wafهيٺ بيان ڪيو ويو آهي. گهڻن صارفين سان گڏ ڪم ڪندو Waf, پر توھان کي شروع ڪرڻ ۾ مدد ڏيڻ يا وڌيڪ پيچيده تعميرات کي منظم ڪرڻ لاءِ ڪجھ ھٿيار لکتون آھن. تنهن ڪري، مهرباني ڪري توهان جي باري ۾ پڙهڻ کان اڳ Waf، هڪ نظر وٺو build.py ۽ اسيمبلي سان وٺ.

3.4.1 build.py سان عمارت

مهرباني ڪري ڏسو! هي تعمير قدم صرف ماخذ آرڪائيو ورزن مان دستياب آهي جيئن مٿي بيان ڪيو ويو آهي؛ ۽ گٽ يا بيڪ ذريعي ڊائون لوڊ نه ڪيو ويو.

جڏهن رليز آرڪائيو سان ڪم ڪندي ٽربل۾ ns-3-ايلينون اتي ھڪڙو آسان اسڪرپٽ آھي جيڪو اجزاء کي گڏ ڪرڻ آسان بڻائي سگھي ٿو. ان کي سڏيو ويندو آهي build.py. هي پروگرام توهان جي لاءِ پروجيڪٽ کي تمام مفيد طريقي سان ترتيب ڏيندو. بهرحال، نوٽ ڪريو ته ns-3 سان وڌيڪ جديد سيٽ اپ ۽ ڪم ۾ عام طور تي ns-3 جو پنهنجو بلڊ سسٽم، Waf استعمال ٿيندو آهي، جيڪو بعد ۾ هن سبق ۾ متعارف ڪرايو ويندو.

جيڪڏهن توهان استعمال ڪندي ڊائون لوڊ ڪيو ٽربل، پوءِ توھان جي ڊاريڪٽري ۾ ~/ ڪم اسپيس ھڪڙي نالي سان ھڪڙي ڊاريڪٽري وانگر ns-allinone-3.29. ھيٺيون داخل ڪريو:

$ ./build.py --enable-examples --enable-tests

جڏهن سڏيو ويو build.py اسان هن سبق ۾ استعمال ڪيل مثالن ۽ ٽيسٽن کي ٺاهڻ لاءِ ڪمانڊ لائن دليلن کي استعمال ڪيو، جيڪي ns-3 ۾ ڊفالٽ طور نه ٺاهيا ويا آهن. ڊفالٽ طور، پروگرام پڻ تمام دستياب ماڊل ٺاهي ٿو. پوء، جيڪڏھن توھان چاھيو، توھان ns-3 ٺاھي سگھو ٿا بغير مثالن ۽ ٽيسٽن، يا ماڊيولز کي خارج ڪري سگھو ٿا جيڪي توھان جي ڪم لاءِ گهربل ناھن.

توھان ڏسندؤ ته گھڻا مرتب ڪندڙ ٻاھرين پيغام اسڪرپٽ پاران ڏيکاريل آھن جيئن اھو ٺاھيو مختلف حصن کي ٺاھيو توھان لوڊ ڪيو آھي. پهرين اسڪرپٽ اينيميٽر ٺاهڻ جي ڪوشش ڪندو نيتنيم، پوءِ بائنڊنگ جنريٽر pybindgen ۽ آخرڪار ns-3. جڏهن عمل مڪمل ٿئي ٿي، توهان کي هيٺ ڏنل ڏسڻ گهرجي:

Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s) 

Modules built:
antenna                aodv                     applications
bridge                 buildings                config-store
core                   csma                     csma-layout
dsdv                   dsr                      energy 
fd-net-device          flow-monitor             internet
internet-apps          lr-wpan                  lte
mesh                   mobility                 mpi
netanim (no Python)    network                  nix-vector-routing 
olsr                   point-to-point           point-to-point-layout 
propagation            sixlowpan                spectrum 
stats                  tap-bridge               test (no Python) 
topology-read          traffic-control          uan 
virtual-net-device     visualizer               wave 
wifi                   wimax 

Modules not built (see ns-3 tutorial for explanation):
brite                  click                    openflow 
Leaving directory ./ns-3.29

لسٽنگ جي آخري ٽن لائينن ۾ اسان ماڊلز بابت ھڪڙو پيغام ڏسون ٿا جيڪي تعمير نه ڪيا ويا آھن:

Modules not built (see ns-3 tutorial for explanation):
brite                     click

هن جو سادو مطلب اهو آهي ته ڪجهه ns-3 ماڊلز جيڪي ٻاهرين لائبريرين تي منحصر هوندا آهن شايد تعمير نه ڪيا ويا آهن، يا انهن کي هن ترتيب جي لاء تعمير ڪرڻ جي ضرورت ناهي. هن جو مطلب اهو ناهي ته سميلٽر گڏ نه ڪيو ويو آهي يا گڏ ڪيل ماڊل صحيح طريقي سان ڪم نه ڪندا.

3.4.2 بيڪري سان عمارت

جيڪڏهن توهان مٿي استعمال ڪيو بيڪ کي پروجيڪٽ جي ذخيرن مان ماخذ ڪوڊ حاصل ڪرڻ لاءِ، توهان ان کي استعمال ڪرڻ جاري رکي سگهو ٿا ns-3 ٺاهڻ لاءِ. ڊائل:

$ ./bake.py build

۽ توهان کي ڪجهه ڏسڻ گهرجي جهڙوڪ:

>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK 
>> Building netanim-3.108 - OK 
>> Building ns-3.29 - OK

تڪڙو: توھان پڻ ڪري سگھوٿا ڊائون لوڊ ۽ ٺاھڻ جا قدم ھڪ ئي وقت "bake.py deploy" کي ڪال ڪندي.

سڀني اجزاء کي گڏ ڪرڻ ناڪام ٿي سگھي ٿو، پر اسيمبلي جاري رھندي جيڪڏھن ڪو جزو گھربل نه آھي. مثال طور، هڪ تازو پورٽبلٽي مسئلو اهو هو castxml اوزار ذريعي گڏ ڪري سگهجي ٿو وٺ سڀني پليٽ فارمن تي نه. انهي حالت ۾، هڪ پيغام هن طرح ظاهر ٿيندو:

>> Building castxml - Problem 
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.

جڏهن ته، castxml صرف ضروري آهي جيڪڏهن توهان تازه ڪاري پٿون بائنڊنگ ٺاهڻ چاهيو ٿا. اڪثر استعمال ڪندڙن لاءِ ان جي ڪا به ضرورت نه آهي (گهٽ ۾ گهٽ جيستائين اهي ns-3 تبديل نه ڪن)، تنهن ڪري اهڙيون ڊيڄاريندڙن کي محفوظ طور تي هن وقت نظرانداز ڪري سگهجي ٿو.

جيڪڏهن اهو ناڪام ٿئي ٿو، هيٺ ڏنل حڪم توهان کي غائب انحصار بابت هڪ اشارو ڏيندو:

$ ./bake.py show

پيڪيجز جا مختلف انحصار جيڪي توهان ٺاهڻ جي ڪوشش ڪري رهيا آهيو درج ڪيا ويندا.

3.4.3 واف سان ٺاهيو

هن نقطي تائين، ns-3 تعمير ڪرڻ شروع ڪرڻ لاء، اسان يا ته اسڪرپٽ استعمال ڪيو build.py، يا اوزار وٺ. اهي اوزار ns-3 جي تعمير ۽ لائبريرين کي برقرار رکڻ لاء مفيد آهن. حقيقت ۾، تعمير ڪرڻ لاء اهي ٺاهيل اوزار هلائيندا آهن Waf ڊاريڪٽري ns-3 مان. Waf ns-3 سورس ڪوڊ سان انسٽال ٿيل. گھڻا استعمال ڪندڙ ns‑3 کي ترتيب ڏيڻ ۽ گڏ ڪرڻ لاءِ سڌو سنئون استعمال ڏانھن ھلندا آھن Waf. تنهن ڪري، جاري رکڻ لاء، مهرباني ڪري وڃو ns-3 ڊاريڪٽري جيڪا توهان اصل ۾ ٺاهي هئي.

ھن وقت اھو سختي سان گھربل نه آھي، پر اھو ڪارائتو ھوندو ته ٿورو پوئتي هٽڻ ۽ ڏسو ته پروجيڪٽ جي ترتيب ۾ تبديلي ڪيئن ڪجي. شايد سڀ کان وڌيڪ ڪارائتو ترتيب واري تبديلي جيڪا توهان ڪري سگهو ٿا ڪوڊ جو هڪ بهتر ورزن ٺاهڻ آهي. ڊفالٽ طور، توهان پنهنجي پروجيڪٽ کي ڊيبگ ورزن ٺاهڻ لاءِ ترتيب ڏنو آهي. اچو ته هڪ پروجيڪٽ تي هڪ نظر وٺو هڪ بهتر تعمير ٺاهڻ لاء. Waf کي وضاحت ڪرڻ لاءِ ته ان کي بهتر بڻائڻ گهرجي جنهن ۾ مثال ۽ ٽيسٽ شامل آهن، توهان کي هيٺين حڪمن کي هلائڻو پوندو:

$ ./waf clean 
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests

هي لانچ ڪندو Waf مقامي ڊاريڪٽري کان ٻاهر (توهان جي سهولت لاءِ). پهريون حڪم پوئين تعمير کان صاف ڪري ٿو، اهو عام طور تي سختي سان ضروري ناهي، پر اهو سٺو عمل آهي (هيٺ ٺاهيل پروفائلز پڻ ڏسو)؛ اهو ڊاريڪٽري ۾ موجود اڳ ۾ ٺهيل لائبريريون ۽ اعتراض فائلن کي حذف ڪندو تعمير/. جڏهن پروجيڪٽ کي ٻيهر ترتيب ڏنو ويو آهي ۽ تعميراتي نظام مختلف انحصار کي چيڪ ڪري ٿو، توهان کي هيٺين سان ملندڙ پيداوار ڏسڻ گهرجي:

Setting top to      : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to      : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler)        : /usr/bin/gcc 
Checking for cc version                : 7.3.0 
Checking for 'g++' (C++ compiler)      : /usr/bin/g++ 
Checking for compilation flag -march=native support : ok 
Checking for compilation flag -Wl,--soname=foo support : ok 
Checking for compilation flag -std=c++11 support       : ok 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking boost includes   : headers not found, please ,!provide a --boost-includes argument (see help) 
Checking for program 'python'            : /usr/bin/python 
Checking for python version >= 2.3       : 2.7.15 python-config                                                                     : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration                                      : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags   : yes
Testing pyext configuration                                        : yes

Checking for compilation flag -fvisibility=hidden support          : ok 
Checking for compilation flag -Wno-array-bounds support            : ok 
Checking for pybindgen location          : ../pybindgen ,!(guessed) 
Checking for python module 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
Checking for pybindgen version           : 0.19.0. ,!post4+g823d8b2 
Checking for code snippet                : yes 
Checking for types uint64_t and unsigned long equivalence : no 
Checking for code snippet                                 : no 
Checking for types uint64_t and unsigned long long equivalence     : yes 
Checking for the apidefs that can be used for Python bindings                       : gcc-LP64 
Checking for internal GCC cxxabi         : complete 
Checking for python module 'pygccxml'    : not found 
Checking for click location              : not found 
Checking for program 'pkg-config'        : /usr/bin/pkg- ,!config 
Checking for 'gtk+-3.0'                  : not found 
Checking for 'libxml-2.0'                : yes 
checking for uint128_t                   : not found 
checking for __uint128_t                 : yes 
Checking high precision implementation   : 128-bit integer ,!(default) 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found 
Checking for header sys/types.h          : yes 
Checking for header sys/stat.h           : yes 
Checking for header dirent.h             : yes 
Checking for header stdlib.h             : yes 
Checking for header signal.h             : yes 
Checking for header pthread.h            : yes 
Checking for header stdint.h             : yes 
Checking for header inttypes.h           : yes 
Checking for header sys/inttypes.h       : not found
Checking for library rt                  : yes 
Checking for header sys/ioctl.h          : yes 
Checking for header net/if.h             : yes 
Checking for header net/ethernet.h       : yes 
Checking for header linux/if_tun.h       : yes 
Checking for header netpacket/packet.h   : yes 
Checking for NSC location                : not found 
Checking for 'sqlite3'                   : not found 
Checking for header linux/if_tun.h       : yes 
Checking for python module 'gi'          : 3.26.1 
Checking for python module 'gi.repository.GObject'      : ok 
Checking for python module 'cairo'                      : ok 
Checking for python module 'pygraphviz'                 : 1.4rc1 
Checking for python module 'gi.repository.Gtk'          : ok 
Checking for python module 'gi.repository.Gdk'          : ok 
Checking for python module 'gi.repository.Pango'        : ok 
Checking for python module 'gi.repository.GooCanvas'    : ok 
Checking for program 'sudo'                             : /usr/bin/sudo 
Checking for program 'valgrind'                         : not found 
Checking for 'gsl' : not found python-config            : not found 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -fstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for compilation flag -Wstrict-aliasing support : ok 
Checking for program 'doxygen'                          : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory : 
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite)) 
DES Metrics event collection : not enabled (defaults to disabled) 
Emulation FdNetDevice        : enabled 
Examples                     : enabled 
File descriptor NetDevice    : enabled 
GNU Scientific Library (GSL) : not enabled (GSL not found) 
Gcrypt library               : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore               : not enabled (library 'gtk+-3.0 >= 3.0' not fou   nd)
MPI Support                  : not enabled (option --enable-mpi not selected)
ns-3 Click Integration       : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration   : not enabled (Required boost libraries not found) 
Network Simulation Cradle    : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled 
Python API Scanning Support   : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled 
Real Time Simulator           : enabled 
SQlite stats data output      : not enabled (library 'sqlite3' not found)
Tap Bridge                    : enabled 
Tap FdNetDevice               : enabled
Tests                         : enabled 
Threading Primitives          : enabled 
Use sudo to set suid bit   : not enabled (option --enable-sudo not selected)
XmlIo                         : enabled
'configure' finished successfully (6.387s)

مهرباني ڪري مٿي ڏنل فهرستن جو آخري حصو نوٽ ڪريو. ڪجھ ns-3 آپشنز ڊفالٽ طور فعال نه آھن يا صحيح ڪم ڪرڻ لاءِ سسٽم سپورٽ جي ضرورت آھي. مثال طور، XmlTo کي فعال ڪرڻ لاء، لائبريري سسٽم تي موجود هجڻ گهرجي libxml-2.0. جيڪڏهن هي لائبريري نه ملي هئي ۽ لاڳاپيل ns-3 فنڪشن فعال نه هئي، هڪ پيغام ڏيکاريو ويندو. اهو پڻ نوٽ ڪريو ته اهو حڪم استعمال ڪرڻ ممڪن آهي sudo ڪجهه پروگرامن لاءِ سوڊ بٽ کي سيٽ ڪرڻ لاءِ “رن ٽائم تي گروپ ID سيٽ ڪريو”. اهو ڊفالٽ طور تي چالو نه ڪيو ويو آهي ۽ تنهن ڪري هي مضمون ظاهر ٿئي ٿو "فعال نه آهي". آخرڪار، فعال اختيارن جي فهرست حاصل ڪرڻ لاء، استعمال ڪريو Waf پيٽرولر سان --check-config.

ھاڻي اچو ته واپس وڃو ۽ ڊيبگ بلڊ ڏانھن واپس وڃو مثالن ۽ ٽيسٽن تي مشتمل آھي.

$ ./waf clean 
$ ./waf configure --build-profile=debug --enable-examples --enable-tests

بلڊ سسٽم ھاڻي ٺھيل آھي ۽ توھان ٺاھي سگھوٿا ns-3 پروگرامن جا ڊيبگ ورجن صرف ٽائپ ڪندي:

$ ./waf

مٿي ڏنل قدمن شايد توهان کي مجبور ڪيو آهي ته توهان ns-3 سسٽم جو حصو ٻه ڀيرا تعمير ڪيو، پر هاڻي توهان ڄاڻو ٿا ته ترتيب ڪيئن تبديل ڪجي ۽ بهتر ڪوڊ ٺاهيو.

چيڪ ڪرڻ لاءِ ڪهڙو پروفائل فعال آهي ڏنل پروجيڪٽ جي تشڪيل لاءِ، اتي هڪ حڪم آهي:

$ ./waf --check-profile 
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build' 
Build profile: debug

مٿيون منظر build.py پڻ دليلن جي حمايت ڪري ٿو --enable-examples и --enable-tests، پر ٻيا اختيار Waf اهو سڌو سنئون سپورٽ نٿو ڪري. مثال طور، هي ڪم نه ڪندو:

$ ./build.py --disable-python

ردعمل هن طرح ٿيندو:

build.py: error: no such option: --disable-python

بهرحال، خاص آپريٽر - - استعمال ڪري سگھجي ٿو اضافي پيٽرولن کي پاس ڪرڻ لاءِ wafتنهنڪري مٿي ڏنل حڪم جي بدران ڪم ڪندو:

$ ./build.py -- --disable-python

ڇاڪاڻ ته اهو مکيه حڪم ٺاهي ٿو ./waf configure --disable-python. هتي آهن ڪجهه وڌيڪ تعارفي ٽوٽڪا بابت Waf.

تعميراتي غلطين کي سنڀالڻ

ns-3 رليز عام لينڪس ۽ MacOS ڊسٽريبيوشن تي ڇڏڻ جي وقت تي دستياب جديد C ++ ڪمپلرز تي آزمائيا ويا آهن. بهرحال، وقت سان گڏ، نئين تقسيم نون مرتب ڪندڙن سان جاري ڪيا ويا آهن، ۽ اهي نوان مرتب ڪندڙ ڊيڄاريندڙن بابت وڌيڪ پيچيدگي وارا هوندا آهن. ns-3 ان جي تعمير کي ترتيب ڏئي ٿو سڀني ڊيڄاريندڙن کي غلطين جي طور تي علاج ڪرڻ لاءِ، تنهن ڪري ڪڏهن ڪڏهن جيڪڏهن توهان نئين سسٽم تي پراڻو ورزن هلائي رهيا آهيو، هڪ مرتب ڪندڙ ڊيڄاريندڙ تعمير کي روڪي سگھي ٿو.

مثال طور، فيڊورا 3.28 لاءِ اڳ ۾ ns‑28 جو رليز ڪيو ويو، جنهن ۾ هڪ نئون وڏو ورزن شامل آهي gcc (جي سي سي-8). Fedora 3.28 جي تحت رليز ns-28 يا اڳوڻن ورزن کي تعمير ڪرڻ، Gtk2+ سان انسٽال ٿيل، ھيٺ ڏنل غلطي ٿيندي:

/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of ‘__gtk_reserved1’ [-Werror=parentheses] void (*__gtk_reserved1);

ns-3.28.1 کان شروع ٿيندڙ رليز ۾، ۾ Waf انهن مسئلن کي حل ڪرڻ لاء هڪ اختيار موجود آهي. اهو سيٽنگ کي غير فعال ڪري ٿو "-Werror" پرچم کي g ++ ۽ clang ++ ۾. ھي آھي "--disable-werror" اختيار ۽ ٺاھڻ دوران لاڳو ٿيڻ گھرجي:

$ ./waf configure --disable-werror --enable-examples --enable-tests

ترتيب ڏيڻ يا گڏ ڪرڻ

ڪجھ حڪم Waf معنيٰ رڳو ٺاھ جوڙ واري مرحلي ۾، ۽ ڪجھ صرف ٺاھڻ واري مرحلي ۾ صحيح آھن. مثال طور، جيڪڏهن توهان ns-3 ايموليشن خاصيتون استعمال ڪرڻ چاهيو ٿا، ته توهان بٽ سيٽنگ کي فعال ڪري سگهو ٿا سود استعمال ڪندي sudo، جيئن مٿي بيان ڪيو ويو آهي. اهو ترتيب ڏيڻ واري قدم جي حڪمن کي ختم ڪري ڇڏيندو، ۽ اهڙيء طرح توهان هيٺ ڏنل حڪم استعمال ڪندي ترتيب تبديل ڪري سگهو ٿا، جنهن ۾ مثال ۽ ٽيسٽ پڻ شامل آهن.

$ ./waf configure --enable-sudo --enable-examples --enable-tests

جيڪڏھن توھان ھي ڪريو Waf شروع ڪندو sudoاجازتن سان هلائڻ لاءِ ايموليشن ڪوڊ ساکٽ ٺاهڻ واري پروگرام کي تبديل ڪرڻ لاءِ پاڙ. جي Waf اتي ڪيترائي ٻيا اختيار موجود آھن ٺاھ جوڙ ۽ تعمير جي مرحلن لاءِ. توھان جي اختيارن کي ڳولڻ لاء، داخل ڪريو:

$ ./waf --help

ايندڙ سيڪشن ۾ اسين ڪجھ جانچ سان لاڳاپيل اختيارن کي استعمال ڪنداسين.

اسيمبلي پروفائلز

اسان اڳ ۾ ئي ڏٺو آهي ته توهان ڪيئن ٺاهي سگهو ٿا Waf اسيمبلين لاء debug и اصلاح ڪيو ويو:

$ ./waf --build-profile=debug

اتي پڻ هڪ وچولي اسيمبلي پروفائل آهي، جاري ڪيو. اختيار -d سان مترادف آهي --build-profile. تعمير پروفائل لاگنگ، دعوي، ۽ مرتب ڪندڙ اصلاح جي سوئچز جي استعمال کي ڪنٽرول ڪري ٿو:

ns-3 نيٽ ورڪ سمائيٽر ٽيوٽوريل. باب 3

جئين توهان ڏسي سگهو ٿا، لاگنگ ۽ دعوي صرف ڊيبگ تعميرات ۾ موجود آهن. تجويز ڪيل مشق آھي پنھنجي اسڪرپٽ کي ڊيبگ موڊ ۾ ٺاھيو، پوءِ بار بار رنسون انجام ڏيو (شماري يا پيٽرولر تبديلين لاءِ) ھڪ اصلاحي بلڊ پروفائل ۾.

جيڪڏهن توهان وٽ ڪوڊ آهي جيڪو صرف ڪجهه تعميراتي پروفائلز ۾ هلائڻ گهرجي، ڪوڊ ريپر ميڪرو استعمال ڪريو:

NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)

ڊفالٽ، Waf جڳھون تعميراتي ڊاريڪٽري ۾ آرٽيڪل ٺاھيو. توهان اختيار استعمال ڪندي هڪ مختلف آئوٽ ڊاريڪٽري بيان ڪري سگهو ٿا - -outمثال طور

$ ./waf configure --out=my-build-dir

ھن کي ٺاھڻ واري پروفائل سان گڏ ڪرڻ سان، توھان آساني سان مختلف تاليف جي اختيارن جي وچ ۾ تبديل ڪري سگھو ٿا:

$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
... 
$ ./waf configure --build-profile=optimized --out=build/optimized 
$ ./waf build
...

جيڪو توهان کي اجازت ڏئي ٿو ڪيترن ئي اسيمبلين سان ڪم ڪرڻ جي بغير هر دفعي جديد اسيمبلي کي ٻيهر لکڻ جي. جڏهن توهان ٻئي پروفائل ڏانهن سوئچ ڪريو، Waf صرف ان کي گڏ ڪندو، مڪمل طور تي هر شي کي ٻيهر گڏ ڪرڻ کان سواء.

جڏهن توهان هن طريقي سان ٺاهيل پروفائلز کي تبديل ڪريو ٿا، توهان کي هر وقت ساڳيو ترتيب ڏيڻ جا اختيار ڏيڻ لاء محتاط ٿيڻ جي ضرورت آهي. ڪيترن ئي ماحولياتي متغيرن جي وضاحت ڪندي توهان کي غلطين کان بچڻ ۾ مدد ڪندي:

$ export NS3CONFIG="--enable-examples --enable-tests" 
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized" 

$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build 
... 
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build

مرتب ڪندڙ ۽ پرچم

مٿين مثالن ۾ Waf ns-3 ٺاھڻ لاءِ استعمال ڪري ٿو C++ ڪمپيلر GCC کان ( g ++). تنهن هوندي، توهان تبديل ڪري سگهو ٿا جيڪو توهان استعمال ڪندا آهيو Waf C++ مرتب ڪندڙ، CXX ماحوليات جي متغير جي وضاحت ڪندي. مثال طور، C++ ڪمپائلر استعمال ڪرڻ لاءِ Clang، clang++،

$ CXX="clang++" ./waf configure 
$ ./waf build 

ساڳيء طرح توهان ترتيب ڏئي سگهو ٿا Waf استعمال ڪرڻ لاء distributed compilation استعمال ڪرڻ distcc:

$ CXX="distcc g++" ./waf configure 
$ ./waf build

distcc ۽ distributed compilation بابت وڌيڪ معلومات پروجيڪٽ جي صفحي تي دستاويزي سيڪشن ۾ ملي سگهي ٿي. ns-3 ترتيب ڏيڻ وقت گڏ ڪرڻ وارو جھنڊو شامل ڪرڻ لاءِ، CXXFLAGS_EXTRA ماحوليات جو استعمال ڪريو.

تنصيب

Waf سسٽم تي مختلف هنڌن تي لائبريرين کي نصب ڪرڻ لاء استعمال ڪري سگهجي ٿو. ڊفالٽ طور، مرتب ٿيل لائبريريون ۽ عملدار ڊاريڪٽري ۾ واقع آهن کپن, ۽ جيئن ته Waf انهن لائبريرين ۽ ايگزيڪيوٽيبلز جي جڳھ کي ڄاڻي ٿو، ان ڪري ڪٿي به لائبريرين کي انسٽال ڪرڻ جي ضرورت ناهي.

جيڪڏهن صارفين کي ڊاريڪٽري کان ٻاهر انسٽال ڪرڻ چاهيندا، اهي حڪم هلائي سگهن ٿا ./waf انسٽال ڪريو. تنصيب لاءِ ڊفالٽ اڳياڙي آهي / مقامي / مقاميتنهن ڪري ./waf انسٽال ڪريو ۾ پروگرام انسٽال ڪندو / ملڪ / مقامي / بن۾ لائبريريون / ملڪ / مقامي / آزاد ۽ هيڊر فائلن ۾ /usr/local/شامل. Superuser جي حقن کي عام طور تي ڊفالٽ پريفڪس سان سيٽ ڪرڻ جي ضرورت آهي، تنهنڪري هڪ عام حڪم هوندو sudo ./waf انسٽال ڪريو. جڏهن لانچ ڪيو ويندو، Waf سڀ کان پهريان شيئر ٿيل لائبريرين کي استعمال ڪرڻ جو انتخاب ڪندو بلڊ ڊاريڪٽري ۾، پوءِ مقامي ماحول ۾ ترتيب ڏنل لائبريرين جي رستي ۾ لائبريرين کي ڳوليو. تنهن ڪري جڏهن هڪ سسٽم تي لائبريرين کي نصب ڪرڻ، اهو هڪ سٺو عمل آهي ته چيڪ ڪرڻ لاء ته صحيح لائبريريون استعمال ٿي رهيون آهن. صارفين کي ترتيب ڏيڻ دوران اختيار کي پاس ڪندي مختلف اڳفڪس سان انسٽال ڪرڻ جو انتخاب ڪري سگھن ٿا --prefixمثال طور

./waf configure --prefix=/opt/local

جيڪڏهن بعد ۾، تعمير کان پوء، صارف انسٽاليشن حڪم داخل ڪري ٿو ./waf, prefix استعمال ڪيو ويندو /opt/local.

ٽيم ./waf clean منصوبي کي ٻيهر ترتيب ڏيڻ کان پهريان استعمال ڪيو وڃي جيڪڏهن انسٽاليشن استعمال ڪندي Waf هڪ مختلف اڳڪٿي هيٺ.

ان ڪري، ns-3 استعمال ڪرڻ لاءِ ڪال ڪرڻ جي ڪا ضرورت ناهي ./waf install. گهڻن صارفين کي هن حڪم جي ضرورت نه هوندي ڇاڪاڻ ته Waf موجوده لائبريرين کي بلڊ ڊاريڪٽري مان چونڊيندا، پر ڪجھ استعمال ڪندڙ شايد اھو مفيد ڳولي سگھن ٿا جيڪڏھن انھن جون سرگرميون ns-3 ڊاريڪٽري کان ٻاھر پروگرامن سان ڪم ڪرڻ ۾ شامل آھن.

اڪيلو واف

ns-3 ماخذ جي وڻ جي مٿين سطح تي، صرف هڪ Waf اسڪرپٽ آهي. هڪ دفعو توهان ڪم ڪرڻ شروع ڪيو، توهان ڊاريڪٽري ۾ گهڻو وقت گذاريندا scratch/ يا وڌيڪ اندرsrc/... ۽ ساڳئي وقت هلڻو پوندو Waf. توهان صرف ياد ڪري سگهو ٿا جتي توهان آهيو ۽ هلائي سگهو ٿا Waf جيئن ته:

$ ../../../waf ...

پر اهو مشڪل ۽ غلطي جو شڪار هوندو، تنهنڪري بهتر حل آهن. ھڪڙو عام طريقو آھي ھڪڙو ٽيڪسٽ ايڊيٽر استعمال ڪرڻ جھڙوڪ ايم يا vim، جنهن ۾ ٻه ٽرمينل سيشن کوليا ويندا آهن، هڪ ns-3 ٺاهڻ لاءِ استعمال ٿيندو آهي، ۽ ٻيو استعمال ڪيو ويندو آهي سورس ڪوڊ کي ايڊٽ ڪرڻ لاءِ. جيڪڏهن توهان وٽ صرف آهي ٽربل، پوء هڪ ماحولياتي متغير مدد ڪري سگھي ٿو:

$ export NS3DIR="$PWD" 
$ function waff { cd $NS3DIR && ./waf $* ; } 

$ cd scratch 
$ waff build

ماڊل ڊاريڪٽري ۾ اهو ٿي سگھي ٿو ته هڪ ننڍڙي waf اسڪرپٽ شامل ڪرڻ جي ڪوشش ڪئي وڃي exec ../../waf. مهرباني ڪري، ائين نه ڪريو. اهو نئين سکندڙن لاءِ مونجهارو آهي ۽، جڏهن خراب طريقي سان ڪيو وڃي ٿو، تعميراتي غلطين کي ڳولڻ ۾ مشڪل ٿي وڃي ٿو. مٿي ڏيکاريل حل آهن رستو جيڪو استعمال ڪيو وڃي.

3.5 ٽيسٽنگ ns-3

توهان اسڪرپٽ هلائڻ سان ns-3 تقسيم جي يونٽ جا امتحان هلائي سگهو ٿا ./test.py:

$ ./test.py

اهي ٽيسٽ سان گڏ متوازي طور تي هلندا آهن Waf. آخرڪار توهان کي هڪ پيغام ڏسڻ گهرجي جنهن چيو:

92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

هي هڪ اهم پيغام آهي سڃاڻپ ڪرڻ لاءِ valgrind حادثن، حادثن يا غلطين، اشارو ڪندي ڪوڊ سان مسئلا يا اوزار ۽ ڪوڊ جي وچ ۾ غير مطابقت.

توھان پڻ ڏسندا فائنل آئوٽ مان Waf ۽ هر ٽيسٽ هلائيندڙ هڪ ٽيسٽر، جيڪو ڪجهه هن طرح نظر ايندو:

Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build' 
'build' finished successfully (1.799s) 

Modules built:
aodv           applications          bridge
click          config-store          core
csma           csma-layout           dsdv
emu            energy                flow-monitor
internet       lte                   mesh
mobility       mpi                   netanim
network        nix-vector-routing    ns3tcp
ns3wifi        olsr                  openflow
point-to-point point-to-point-layout propagation
spectrum       stats                 tap-bridge
template       test                  tools
topology-read  uan                   virtual-net-device
visualizer     wifi                  wimax

PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram 

...

PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

اهو حڪم عام طور تي استعمال ڪندڙن طرفان هلندو آهي جلدي تصديق ڪرڻ لاءِ ته ns-3 ورڇ صحيح طرح سان ٺهيل آهي. (ياد رهي ته "PASS: ..." لائينن جو ترتيب مختلف ٿي سگهي ٿو، اهو عام آهي. ڇا ضروري آهي ته رپورٽ جي آخر ۾ خلاصو لائن ڏيکاري ٿي ته سڀئي ٽيسٽ پاس ڪيا ويا آهن؛ ڪوبه ٽيسٽ ناڪام يا خراب نه ٿيو.) ۽ Waf۽ test.py مشين جي دستياب پروسيسر ڪور تي ڪم کي متوازي ڪندو.

3.6 اسڪرپٽ هلائڻ

اسان عام طور تي ڪنٽرول هيٺ اسڪرپٽ هلائيندا آهيون Waf. هي تعميراتي نظام کي يقيني بڻائي ٿو ته گڏيل لائبريري رستا صحيح طور تي مقرر ڪيا ويا آهن ۽ لائبريريون رن ٽائم تي دستياب آهن. پروگرام کي هلائڻ لاء، صرف استعمال ڪريو Waf پيٽرولر سان - -run. اچو ته هلائيون ns-3 برابري واري پروگرام جي برابر هيلو دنياهيٺ ڏنل ٽائپ ڪندي:

$ ./waf --run hello-simulator

Waf پهرين چيڪ ڪندو ته پروگرام صحيح طرح ٺهيل آهي ۽ جيڪڏهن ضروري هجي ته ٺاهيو. پوءِ Waf ھڪڙي پروگرام تي عمل ڪندو جيڪو ھيٺ ڏنل ٻاھر پيدا ڪري ٿو.

Hello Simulator

مبارڪون! توهان هاڻي هڪ ns-3 استعمال ڪندڙ آهيو!

مون کي ڇا ڪرڻ گهرجي جيڪڏهن مان نتيجا نه ڏسان؟

جيڪڏهن توهان پيغام ڏسو Wafظاهر ڪري ٿو ته تعمير ڪاميابي سان مڪمل ٿي، پر توهان ان کي نه ڏسندا "هيلو سميلٽر"، پوءِ اهو امڪان آهي ته [تعمير سان-واف] سيڪشن ۾ توهان پنهنجي بلڊ موڊ کي تبديل ڪيو اصلاح ڪيو ويو, پر موڊ ڏانھن واپس سوئچ ڪرڻ کان محروم ٿي ويو debug. هن سبق ۾ استعمال ٿيل سڀئي ڪنسول آئوٽ هڪ خاص ns-3 جزو استعمال ڪري ٿو جيڪو لاگنگ انجام ڏئي ٿو ۽ ڪنسول ڏانهن ڪسٽم پيغامن کي پرنٽ ڪرڻ لاءِ استعمال ڪيو ويندو آهي. هن جزو مان آئوٽ پُٽ خود بخود غير فعال ٿي ويندو آهي جڏهن اصلاحي ڪوڊ مرتب ڪيو ويندو آهي - اهو "بهتر ڪيو ويو" آهي. جيڪڏهن توهان "هيلو سموليٽر" آئوٽ نه ڏسي سگهو ٿا، هيٺ ڏنل داخل ڪريو:

$ ./waf configure --build-profile=debug --enable-examples --enable-tests

ترتيب ڏيڻ Waf ns-3 پروگرامن جا ڊيبگ ورجن ٺاهڻ، جن ۾ مثال ۽ ٽيسٽ شامل آهن. توھان کي پوءِ ڪوڊ جي موجوده ڊيبگ ورزن کي ٽائيپ ڪندي ٺاھيو

$ ./waf

هاڻي جيڪڏهن توهان پروگرام هلائيندا آهيو هيلو سمائيٽر، توهان کي متوقع نتيجو ڏسڻ گهرجي.

3.6.1 ڪمانڊ لائن دليل

ns-3 پروگرام ڏانهن ڪمانڊ لائن دليلن کي پاس ڪرڻ لاء، هيٺ ڏنل نمونو استعمال ڪريو:

$ ./waf --run <ns3-program> --command-template="%s <args>"

بدلائڻ توهان جي پروگرام جي نالي ۽ دليلن ڏانهن. دليل - -command-template لاء Waf بنيادي طور تي حقيقي ڪمانڊ لائن جي تعمير لاء ھڪڙو طريقو آھي Waf پروگرام کي هلائڻ لاءِ استعمال ڪيو ويو. Waf چيڪ ڪري ٿو ته تعمير مڪمل ٿي چڪي آهي، شيئر ٿيل لائبريري جا رستا سيٽ ڪري ٿو، پوءِ مهيا ڪيل ڪمانڊ لائن ٽيمپليٽ استعمال ڪري ٿو ۽ %s پليس هولڊر لاءِ پروگرام جو نالو بدلائي ٿو ته جيئن ايگزيڪيوٽوبل کي ڪال ڪري سگهجي. جيڪڏهن توهان هن نحو کي پيچيده ڳوليندا آهيو، اتي هڪ آسان نسخو آهي جنهن ۾ شامل آهي ns-3 پروگرام ۽ ان جا دليل هڪ واحد حوالن ۾ بند ٿيل آهن:

$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'

ٻيو خاص طور تي ڪارائتو مثال چونڊيل ٽيسٽ سوٽ هلائڻ آهي. اچو ته فرض ڪريون اتي ھڪڙو ٽيسٽ سوٽ آھي جنھن کي mytest سڏيو ويندو آھي (حقيقت ۾ اتي ڪونھي). مٿي اسان ./test.py اسڪرپٽ استعمال ڪيو متوازي ۾ ڪيترائي ٽيسٽ هلائڻ لاءِ، جيڪو بار بار ٽيسٽ پروگرام کي سڏي ٿو ٽيسٽ هلائيندڙ. سڏ ٽيسٽ هلائيندڙ سڌو سنئون هڪ امتحان هلائڻ لاء:

$ ./waf --run test-runner --command-template="%s --suite=mytest --verbose"

پروگرام ۾ دليلن کي منظور ڪيو ويندو ٽيسٽ هلائيندڙ. جيئن ته mytest موجود نه آهي، هڪ غلطي پيغام ٺاهي ويندي. دستياب ٽيسٽ-رنر اختيارن کي پرنٽ ڪرڻ لاء، داخل ڪريو:

$ ./waf --run test-runner --command-template="%s --help"

3.6.2 ڊيبگنگ

ns-3 پروگرامن کي هلائڻ لاءِ ٻي يوٽيلٽي تحت، جهڙوڪ ڊيبگر (مثال طور، جي ڊي بي) يا ميموري ٽيسٽ ٽول (مثال طور، valgrind)، ساڳيو فارم استعمال ڪريو - -command-template = "…". مثال طور، ڊيبگر ۾ هلائڻ لاء جي ڊي بي توهان جو هيلو-سموليٽر اين ايس-3 پروگرام دليلن سان:

$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"

نوٽ ڪريو ته ns-3 پروگرام جو نالو اچي ٿو دليل سان - -run، ۽ انتظام جي افاديت (هتي جي ڊي بي) دليل ۾ پهريون نشان آهي - -command-template. اختيار - -args ڄاڻ جي ڊي بيباقي ڪمانڊ لائن جو تعلق ”لوئر“ پروگرام سان آهي. (ڪجهه نسخو جي ڊي بي اختيار نه سمجهي - -args. انهي حالت ۾، پروگرام جي دليلن کي هٽايو - -command-template ۽ ڪمانڊ سيٽ استعمال ڪريو جي ڊي بي دليل.) اسان هن نسخي کي گڏ ڪري سگهون ٿا ۽ اڳئين هڪ کي ڊيبگر جي تحت ٽيسٽ هلائڻ لاءِ:

$ ./waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"

3.6.3 ڪم ڪندڙ ڊاريڪٽري

Waf ان جي جڳھ کان شروع ڪيو وڃي ns-3 وڻ جي چوٽي تي. ھي فولڊر ڪم ڪندڙ ڊاريڪٽري بڻجي ويندو آھي جتي ٻاھرين فائلون لکيون وينديون آھن. پر جيڪڏهن توهان انهن فائلن کي ns-3 ماخذ وڻ کان ٻاهر رکڻ چاهيو ٿا؟ استدلال استعمال ڪريو - -cwd:

$ ./waf --cwd=...

توھان کي توھان جي ڪم ڪندڙ ڊاريڪٽري ۾ ٻاھرين فائلون حاصل ڪرڻ لاء وڌيڪ آسان ٿي سگھي ٿو. هن معاملي ۾، هيٺين اڻ سڌي عمل مدد ڪري سگهي ٿو:

$ function waff {
CWD="$PWD" 
cd $NS3DIR >/dev/null 
./waf --cwd="$CWD" $*
cd - >/dev/null 
}

حڪم جي پوئين ورزن جي هي سجاڳي موجوده ڪم ڪندڙ ڊاريڪٽري کي محفوظ ڪري ٿي، ڊاريڪٽري ڏانهن وڃي ٿي Waf۽ پوءِ هدايت ڪري ٿو Waf ڪم ڪرڻ واري ڊاريڪٽري کي تبديل ڪرڻ لاءِ واپس موجوده ڪم ڪندڙ ڊاريڪٽري ۾ محفوظ ڪيل پروگرام شروع ڪرڻ کان اڳ. اسان ٽيم جو ذڪر ڪيو - -cwd مڪمل ٿيڻ لاءِ، اڪثر استعمال ڪندڙ صرف Waf کي مٿين سطح جي ڊاريڪٽري مان هلائيندا آهن ۽ اُتي آئوٽ پُٽ فائلون ٺاهيندا آهن.

جاري: باب 4

جو ذريعو: www.habr.com

تبصرو شامل ڪريو