ns-3 نیٹ ورک سمیلیٹر ٹیوٹوریل۔ باب 3

ns-3 نیٹ ورک سمیلیٹر ٹیوٹوریل۔ باب 3
باب 1,2

3 شروع کرنا
3.1 جائزہ
3.2 شرطیں
3.2.1 ns-3 ریلیز کو بطور سورس آرکائیو ڈاؤن لوڈ کرنا
3.3 گٹ کا استعمال کرتے ہوئے ns-3 ڈاؤن لوڈ کرنا
3.3.1 بیک کا استعمال کرتے ہوئے ns-3 لوڈ ہو رہا ہے۔
3.4 اسمبلی ns-3
3.4.1 build.py کے ساتھ عمارت
3.4.2 بیک کے ساتھ عمارت
3.4.3 Waf کے ساتھ تعمیر کریں۔
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++ کمپائلر، ازگر، ایک سورس کوڈ ایڈیٹر (مثال کے طور پر، طاقت, emacs یا چاند اور سورج گرہن) اور، اگر ترقی کے ذخیرے استعمال کیے جاتے ہیں، Git ورژن کنٹرول سسٹم۔ زیادہ تر پہلی بار استعمال کرنے والوں کو پریشان ہونے کی ضرورت نہیں ہوگی اگر ان کی کنفیگریشن میں کچھ ns-3 اعلی درجے کی خصوصیات غائب ہیں، لیکن ان لوگوں کے لیے جو مکمل انسٹالیشن چاہتے ہیں، پروجیکٹ ایک ویکی فراہم کرتا ہے جس میں بہت سے مفید ٹپس اور ٹرکس والے صفحات شامل ہیں۔ ایسا ہی ایک صفحہ تنصیب کا صفحہ ہے، جس میں مختلف سسٹمز کے لیے تنصیب کی ہدایات موجود ہیں، یہاں دستیاب ہیں: https://www.nsnam.org/wiki/Installation.

اس ویکی کا لازمی سیکشن یہ بتاتا ہے کہ عام ns-3 آپشنز کو سپورٹ کرنے کے لیے کن پیکجز کی ضرورت ہے اور وہ کمانڈ بھی فراہم کرتا ہے جو انہیں لینکس یا میک او ایس کے عام ذائقوں پر انسٹال کرنے کے لیے استعمال کیا جاتا ہے۔

آپ ns-3 ویکی پیج یا مرکزی ویب سائٹ کو دریافت کرنے کے لیے اس موقع سے فائدہ اٹھا سکتے ہیں: https://www.nsnam.orgکیونکہ وہاں بہت ساری معلومات موجود ہیں۔ ns-3 (ns-3.29) کے تازہ ترین ورژن سے شروع کرتے ہوئے، ns-3 کو چلانے کے لیے درج ذیل ٹولز کی ضرورت ہے۔

ٹول پیکیج/ورژن

  • C++ مرتب کرنے والا
    clang++ یا g++ (g++ ورژن 4.9 یا اس سے زیادہ)
  • ازگر
    python2 ورژن >= 2.7.10، یا python3 ورژن >=3.4
  • جاؤ
    کوئی بھی تازہ ترین ورژن (GitLab.com پر ns-3 تک رسائی کے لیے)
  • ٹار
    کوئی بھی تازہ ترین ورژن (ns-3 ریلیز پیک کھولنے کے لیے)
  • bunzip2
    کوئی بھی تازہ ترین ورژن (NS-3 ریلیز کو پیک کرنے کے لیے)

ازگر کا ڈیفالٹ ورژن چیک کرنے کے لیے ٹائپ کریں۔ python -V. g++ ورژن چیک کرنے کے لیے ٹائپ کریں۔ g++ -v. اگر کوئی ٹولز غائب ہیں یا بہت پرانے ہیں، تو براہ کرم ns-3 ویکی صفحہ پر انسٹالیشن گائیڈ سے رجوع کریں۔

اب سے، ہم فرض کرتے ہیں کہ قاری لینکس، میک او ایس، یا لینکس ایمولیٹر چلا رہا ہے، اور اس کے پاس کم از کم اوپر والے ٹولز ہیں۔

3.2.1 ns-3 ریلیز کو بطور سورس آرکائیو ڈاؤن لوڈ کرنا

یہ ایک نئے صارف کے لیے کارروائی کا طریقہ ہے جو ns-3 کے تازہ ترین ریلیز اور پیکیج ورژن کو ڈاؤن لوڈ اور تجربہ کرنا چاہتا ہے۔ ns-3 ریلیز کو کمپریسڈ سورس آرکائیوز کے طور پر شائع کیا جاتا ہے، جسے کبھی کبھی کہا جاتا ہے۔ ٹربال. ٹربال ایک خاص سافٹ ویئر آرکائیو فارمیٹ ہے جس میں کئی فائلوں کو ایک ساتھ ملایا جاتا ہے۔ آرکائیو عام طور پر کمپریسڈ ہوتا ہے۔ 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 

اوپر استعمال ہونے والی افادیت پر توجہ دیں۔ wgetجو انٹرنیٹ سے اشیاء کو ڈاؤن لوڈ کرنے کے لیے کمانڈ لائن ٹول ہے۔ اگر آپ نے اسے انسٹال نہیں کیا ہے، تو آپ اس کے لیے اپنا براؤزر استعمال کر سکتے ہیں۔

ان اقدامات پر عمل کرنے سے آپ 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 ڈاؤن لوڈ کرنا

ns-3 کوڈ GitLab.com پر گٹ ریپوزٹریز میں دستیاب ہے۔ https://gitlab.com/nsnam/. گروپ nsnam اوپن سورس پروجیکٹ کے ذریعہ استعمال ہونے والے مختلف ذخیروں کو اکٹھا کرتا ہے۔

Git repositories کا استعمال شروع کرنے کا سب سے آسان طریقہ ماحول کو کانٹا یا کلون کرنا ہے۔ ns-3-allinone. یہ اسکرپٹ کا ایک سیٹ ہے جو سب سے زیادہ استعمال ہونے والے 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-allinone اوپر بیان کردہ ریلیز آرکائیو ڈائرکٹری سے قدرے مختلف۔ اسے کچھ اس طرح نظر آنا چاہئے:

$ 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-allinone اضافی ذخیرے ڈاؤن لوڈ کیے جائیں گے۔ ns-3, پکانا, pybindgen и نیتنیم.

نوٹ
صاف Ubuntu16.04 والی مشین پر، مجھے اس میں کمانڈ تبدیل کرنے کی ضرورت تھی: $ sudo python3 download.py -n ns-3.29 (اس کے بعد مترجم کے نوٹس)۔

3.3.1 بیک کا استعمال کرتے ہوئے ns-3 لوڈ ہو رہا ہے۔

مندرجہ بالا دو طریقے (ذریعہ آرکائیو یا ریپوزٹری ns-3-allinone گٹ کے ذریعے) ایک سے زیادہ ایڈونز کے ساتھ آسان ترین ns-3 انسٹالیشن حاصل کرنے کے لیے مفید ہیں۔pybindgen Python بائنڈنگز بنانے کے لیے اور نیتنیم نیٹ ورک حرکت پذیری کے لیے)۔ ns-3-allinone میں بطور ڈیفالٹ فراہم کردہ تیسرا ذخیرہ کہا جاتا ہے۔ پکانا.

بناو ns-3 پروجیکٹ کے لیے تیار کردہ متعدد ذخیروں سے سافٹ ویئر کی مربوط تعمیر کا ایک ٹول ہے۔ بناو ns-3 کے ترقیاتی ورژن حاصل کرنے کے ساتھ ساتھ ns-3 ڈسٹری بیوشن کے بیس ورژن کے ایکسٹینشنز کو ڈاؤن لوڈ اور بنانے کے لیے استعمال کیا جا سکتا ہے، جیسے کہ ماحولیات براہ راست کوڈ پر عمل درآمد, CradleNetwork Simulation Cradle، نئی Python بائنڈنگز اور مختلف ns-3 "ایپس" بنانے کی صلاحیت۔

نوٹ
CradleNetwork Simulation Cradle ایک ایسا فریم ورک ہے جو آپ کو نیٹ ورک سمیلیٹر کے اندر حقیقی TCP/IP نیٹ ورک اسٹیک استعمال کرنے کی اجازت دیتا ہے۔

اگر آپ توقع کرتے ہیں کہ آپ کی ns-3 انسٹالیشن میں جدید یا اضافی خصوصیات ہوں گی، تو آپ انسٹالیشن کے اس راستے پر عمل کر سکتے ہیں۔

تازہ ترین ns-3 ریلیز میں بناو ٹار کی رہائی میں شامل کیا گیا تھا۔ ریلیز میں ایک کنفیگریشن فائل شامل ہے جو آپ کو ریلیز کے وقت موجودہ سافٹ ویئر ورژن ڈاؤن لوڈ کرنے کی اجازت دیتی ہے۔ یعنی مثال کے طور پر ورژن بناو، جو ریلیز ns-3.29 کے ساتھ تقسیم کیا جاتا ہے، ns-3 یا اس سے پہلے کی ریلیز کے اجزاء کو بازیافت کرنے کے لیے استعمال کیا جا سکتا ہے، لیکن بعد میں ریلیز کے لیے اجزاء کی بازیافت کے لیے استعمال نہیں کیا جا سکتا (اگر پیکیج کی تفصیل فائل bakeconf.xml اپ ڈیٹ نہیں کیا گیا)۔

آپ تازہ ترین کاپی بھی حاصل کر سکتے ہیں۔ پکانااپنے لینکس کنسول میں درج ذیل کمانڈ داخل کرکے (یہ فرض کرتے ہوئے کہ آپ نے گٹ انسٹال کیا ہے):

$ cd 
$ mkdir workspace 
$ cd workspace 
$ git clone https://gitlab.com/nsnam/bake.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

نوٹ کریں کہ آپ نے کئی Python اسکرپٹس کو لوڈ کیا ہے، جس کا نام Python ماڈیول ہے۔ پکانا اور ایک XML کنفیگریشن فائل۔ اگلا مرحلہ ان اسکرپٹس کو اپنی پسند کی ns-3 ڈسٹری بیوشن کو ڈاؤن لوڈ اور بنانے کے لیے استعمال کرنا ہے۔ حسب ضرورت کے متعدد اہداف دستیاب ہیں:

  1. ns-3.29: ریلیز کے مطابق ماڈیول؛ یہ ٹربال میں ریلیز کی طرح کے اجزاء کو ڈاؤن لوڈ کرے گا۔

  2. ns-3-dev: اسی طرح کا ماڈیول، لیکن ترقی کے درخت سے کوڈ کا استعمال کرتے ہوئے؛

  3. ns-allinone-3.29: ایک ماڈیول جس میں دیگر اضافی خصوصیات شامل ہیں جیسے کلک روٹنگ اور نیٹ ورک سمولیشن کریڈل، اوپن فلو برائے ns-3۔

  4. ns-3-allinone: ماڈیول کے ریلیز ورژن کی طرح ایک میں تمام، لیکن ترقیاتی کوڈ کے لیے۔

نوٹ
کلک کریں - راؤٹرز بنانے کے لیے ماڈیولر سافٹ ویئر فن تعمیر۔

اوپن فلو روٹرز اور سوئچز کے ذریعے ڈیٹا نیٹ ورک پر منتقل ہونے والے ڈیٹا کی پروسیسنگ کے عمل کو منظم کرنے کے لیے ایک پروٹوکول ہے، جو سافٹ ویئر کی وضاحت کردہ نیٹ ورک ٹیکنالوجی کو نافذ کرتا ہے۔

موجودہ ڈیولپمنٹ اسنیپ شاٹ (نان ریلیز) ns-3 پر پایا جا سکتا ہے:https://gitlab.com/nsnam/ns-3-dev.git.

ڈویلپرز کوشش کرتے ہیں کہ ان ریپوزٹریوں کو کام کے تسلسل میں رکھیں، لیکن وہ ترقی کے علاقے میں ہیں اور ان میں غیر ریلیز شدہ کوڈ ہے، لہذا اگر آپ نئی خصوصیات استعمال کرنے کا ارادہ نہیں رکھتے ہیں، تو آفیشل ریلیز کو منتخب کریں۔

آپ ذخیروں کی فہرست کو براؤز کر کے، یا ns-3 ریلیز ویب صفحہ پر جا کر کوڈ کا تازہ ترین ورژن تلاش کر سکتے ہیں:https://www.nsnam.org/releases/ اور تازہ ترین ورژن کے لنک پر کلک کریں۔ اس مثال میں ہم ns-3.29 کے ساتھ جاری رکھیں گے۔

اب، ہمیں مطلوبہ ns-3 اجزاء حاصل کرنے کے لیے، ہم ٹول استعمال کریں گے۔ بناو. آئیے کام کے بارے میں چند تعارفی الفاظ کہتے ہیں۔ بناو.

بیک ایک ڈائرکٹری میں پیکیج کے ذرائع کو لوڈ کرکے کام کرتا ہے۔ ذرائع اور لائبریریوں کو بلڈ ڈائرکٹری میں انسٹال کرنا۔ بناو بائنری کا حوالہ دے کر چلایا جا سکتا ہے، لیکن اگر آپ چلانا چاہتے ہیں۔ بناو اس ڈائرکٹری سے نہیں جس میں اسے ڈاؤن لوڈ کیا گیا تھا، اس میں راستہ شامل کرنے کا مشورہ دیا جاتا ہے۔ پکانا اپنے راستے پر (PATH ماحولیاتی متغیر)، مثال کے طور پر مندرجہ ذیل (مثال کے طور پر لینکس باش شیل)۔ "بیک" ڈائرکٹری پر جائیں اور پھر درج ذیل ماحولیاتی متغیرات کو سیٹ کریں:

$ 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 ...

خاص طور پر، اپ لوڈ ٹولز جیسے مرکیوریل، سی وی ایس، گٹ اور بازار اس مرحلے میں ضروری ہیں کیونکہ وہ ہمیں کوڈ حاصل کرنے کی اجازت دیتے ہیں۔ اس مقام پر، اپنے سسٹم کے لیے معمول کے مطابق گمشدہ ٹولز انسٹال کریں (اگر آپ جانتے ہیں کہ کیسے) یا مدد کے لیے اپنے سسٹم ایڈمنسٹریٹر سے رابطہ کریں۔

اگلا، سافٹ ویئر ڈاؤن لوڈ کرنے کی کوشش کریں:

$ ./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 ایک بلڈ ٹول کا استعمال کرتے ہوئے بنایا گیا ہے۔ واہذیل میں بیان کیا گیا ہے۔ زیادہ تر صارفین کے ساتھ کام کریں گے۔ واہ، لیکن آپ کو شروع کرنے یا مزید پیچیدہ تعمیرات کو منظم کرنے میں مدد کے لیے چند آسان اسکرپٹس موجود ہیں۔ تو براہ کرم، اس سے پہلے کہ آپ اس کے بارے میں پڑھیں واہ، ذرا دیکھنا اسے build.py اور اس کے ساتھ اسمبلی پکانا.

3.4.1 build.py کے ساتھ عمارت

ہوشیار! یہ تعمیراتی مرحلہ صرف ماخذ آرکائیو ورژن سے دستیاب ہے جیسا کہ اوپر بیان کیا گیا ہے۔ اور گٹ یا بیک کے ذریعے ڈاؤن لوڈ نہیں کیا گیا۔

ریلیز آرکائیو کے ساتھ کام کرتے وقت ٹربالمیں ns-3-allinone ایک آسان اسکرپٹ ہے جو اجزاء کو جمع کرنا آسان بنا سکتا ہے۔ اسے 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 Waf کے ساتھ تعمیر کریں۔

اس وقت تک، ns-3 کی تعمیر شروع کرنے کے لیے، ہم نے یا تو اسکرپٹ استعمال کیا۔ build.py، یا ٹول پکانا. یہ ٹولز ns-3 بنانے اور لائبریریوں کو برقرار رکھنے کے لیے کارآمد ہیں۔ درحقیقت، تعمیر کرنے کے لیے وہ بلڈ ٹول چلاتے ہیں۔ واہ ns-3 ڈائریکٹری سے۔ واہ ns-3 سورس کوڈ کے ساتھ انسٹال کیا گیا ہے۔ زیادہ تر صارفین ns‑3 کو ترتیب دینے اور جمع کرنے کے لیے براہ راست استعمال کی طرف تیزی سے آگے بڑھتے ہیں۔ واہ. لہذا، جاری رکھنے کے لیے، براہ کرم ns-3 ڈائریکٹری پر جائیں جو آپ نے اصل میں بنائی تھی۔

اس وقت اس کی سختی سے ضرورت نہیں ہے، لیکن تھوڑا سا پیچھے ہٹنا اور پراجیکٹ کی ترتیب میں تبدیلیاں کرنے کا طریقہ کار دیکھنا مفید ہوگا۔ شاید سب سے مفید کنفیگریشن تبدیلی جو آپ کر سکتے ہیں وہ ہے کوڈ کا ایک بہتر ورژن بنانا۔ پہلے سے طے شدہ طور پر، آپ نے اپنے پروجیکٹ کو ڈیبگ ورژن بنانے کے لیے ترتیب دیا ہے۔ آئیے آپٹمائزڈ اسمبلی بنانے کے لیے ایک پروجیکٹ کو دیکھتے ہیں۔ Waf کو یہ سمجھانے کے لیے کہ اسے آپٹمائزڈ بلڈز بنانا چاہیے جس میں مثالیں اور ٹیسٹ شامل ہوں، آپ کو درج ذیل کمانڈز چلانے کی ضرورت ہوگی۔

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

یہ لانچ کرے گا۔ واہ مقامی ڈائریکٹری سے باہر (آپ کی سہولت کے لیے)۔ پہلی کمانڈ پچھلی تعمیر سے صاف ہوجاتی ہے، یہ عام طور پر سختی سے ضروری نہیں ہوتا ہے، لیکن یہ اچھی مشق ہے (نیچے بلڈ پروفائلز بھی دیکھیں)؛ یہ ڈائرکٹری میں موجود پہلے سے بنائی گئی لائبریریوں اور آبجیکٹ فائلوں کو حذف کر دے گا۔ تعمیر/. جب پروجیکٹ کو دوبارہ ترتیب دیا جاتا ہے اور بلڈ سسٹم مختلف انحصار کو چیک کرتا ہے، تو آپ کو مندرجہ ذیل سے ملتا جلتا آؤٹ پٹ دیکھنا چاہیے۔

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 فنکشن فعال نہیں تھا، تو ایک پیغام دکھایا جائے گا۔ یہ بھی نوٹ کریں کہ کمانڈ استعمال کرنا ممکن ہے۔ سودو کچھ پروگراموں کے لیے سوڈ بٹ کو سیٹ کرنے کے لیے "رن ٹائم پر گروپ آئی ڈی سیٹ کریں"۔ یہ ڈیفالٹ کے طور پر فعال نہیں ہے اور اس وجہ سے یہ خصوصیت "غیر فعال" کے طور پر ظاہر ہوتا ہے. آخر میں، فعال اختیارات کی فہرست حاصل کرنے کے لیے، استعمال کریں۔ واہ پیرامیٹر کے ساتھ --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، لیکن دوسرے اختیارات واہ یہ براہ راست حمایت نہیں کرتا. مثال کے طور پر، یہ کام نہیں کرے گا:

$ ./build.py --disable-python

ردعمل اس طرح ہو گا:

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

تاہم، سپیشل آپریٹر - - کو اضافی پیرامیٹرز کے ذریعے منتقل کرنے کے لیے استعمال کیا جا سکتا ہے۔ وافتو اوپر کی بجائے درج ذیل کمانڈ کام کرے گی:

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

کیونکہ یہ مین کمانڈ تیار کرتا ہے۔ ./waf configure --disable-python. کے بارے میں کچھ اور تعارفی نکات یہ ہیں۔ واہ.

تعمیراتی غلطیوں کو ہینڈل کرنا

ns-3 ریلیز کا تجربہ عام Linux اور MacOS ڈسٹری بیوشنز پر ریلیز کے وقت دستیاب تازہ ترین C++ کمپائلرز پر کیا جاتا ہے۔ تاہم، وقت گزرنے کے ساتھ، نئی تقسیمیں نئے مرتب کرنے والوں کے ساتھ جاری کی جاتی ہیں، اور یہ نئے مرتب کرنے والے انتباہات کے بارے میں زیادہ پیڈینٹک ہوتے ہیں۔ ns-3 تمام انتباہات کو غلطیوں کے طور پر علاج کرنے کے لئے اس کی تعمیر کو تشکیل دیتا ہے، لہذا بعض اوقات اگر آپ نئے سسٹم پر پرانا ورژن چلا رہے ہیں، تو ایک کمپائلر وارننگ تعمیر کو روک سکتی ہے۔

مثال کے طور پر، پہلے Fedora 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 سے شروع ہونے والی ریلیز میں، میں واہ ان مسائل کو حل کرنے کے لیے ایک آپشن دستیاب ہے۔ یہ g++ اور clang++ میں "-Werror" جھنڈا ترتیب دینے کو غیر فعال کرتا ہے۔ یہ "--disable-werror" آپشن ہے اور کنفیگریشن کے دوران لاگو ہونا ضروری ہے:

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

ترتیب دیں یا جمع کریں۔

کچھ احکام واہ صرف ترتیب کے مرحلے میں معنی رکھتے ہیں، اور کچھ صرف تعمیر کے مرحلے میں درست ہیں۔ مثال کے طور پر، اگر آپ ns-3 ایمولیشن فیچر استعمال کرنا چاہتے ہیں، تو آپ بٹ سیٹنگ کو فعال کر سکتے ہیں۔ جنوب استعمال کرتے ہوئے سودوجیسا کہ اوپر بیان کیا گیا ہے۔ یہ کنفیگریشن سٹیپ کمانڈز کو اوور رائیڈ کر دے گا، اور اس طرح آپ مندرجہ ذیل کمانڈ کا استعمال کرتے ہوئے کنفیگریشن کو تبدیل کر سکتے ہیں، جس میں مثالیں اور ٹیسٹ بھی شامل ہیں۔

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

اگر آپ ایسا کرتے ہیں۔ واہ لانچ کریں گے سودواجازت کے ساتھ چلانے کے لیے ایمولیشن کوڈ ساکٹ تخلیق پروگراموں کو تبدیل کرنے کے لیے جڑ. میں واہ ترتیب اور تعمیر کے مراحل کے لیے بہت سے دوسرے اختیارات دستیاب ہیں۔ اپنے اختیارات کو دریافت کرنے کے لیے درج کریں:

$ ./waf --help

اگلے حصے میں ہم جانچ سے متعلق کچھ اختیارات استعمال کریں گے۔

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

ہم پہلے ہی دیکھ چکے ہیں کہ آپ کس طرح ترتیب دے سکتے ہیں۔ واہ اسمبلیوں کے لیے ڈیبگ и اصلاح:

$ ./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;)

طے شدہ، واہ جگہیں بلڈ ڈائرکٹری میں نمونے بناتی ہیں۔ آپ اختیار کا استعمال کرتے ہوئے ایک مختلف آؤٹ پٹ ڈائریکٹری کی وضاحت کر سکتے ہیں۔ - -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
...

جو آپ کو ہر بار تازہ ترین اسمبلی کو دوبارہ لکھے بغیر متعدد اسمبلیوں کے ساتھ کام کرنے کی اجازت دیتا ہے۔ جب آپ کسی دوسرے پروفائل پر سوئچ کرتے ہیں، واہ ہر چیز کو مکمل طور پر دوبارہ مرتب کیے بغیر صرف اسے مرتب کرے گا۔

جب آپ اس طریقے سے بلڈ پروفائلز کو تبدیل کرتے ہیں، تو آپ کو ہر بار ایک ہی ترتیب کے اختیارات دینے میں محتاط رہنے کی ضرورت ہے۔ متعدد ماحولیاتی متغیرات کی وضاحت کرنے سے آپ کو غلطیوں سے بچنے میں مدد ملے گی:

$ 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

مرتب کرنے والے اور جھنڈے

مندرجہ بالا مثالوں میں واہ ns-3 بنانے کے لیے GCC سے C++ کمپائلر استعمال کرتا ہے ( جی ++)۔ تاہم، آپ اسے تبدیل کر سکتے ہیں جسے آپ استعمال کرتے ہیں۔ واہ C++ کمپائلر، CXX ماحولیاتی متغیر کی وضاحت کر کے۔ مثال کے طور پر، C++ کمپائلر Clang استعمال کرنے کے لیے، clang++،

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

اسی طرح آپ ترتیب دے سکتے ہیں۔ واہ کا استعمال کرتے ہوئے تقسیم شدہ تالیف کا استعمال کرنے کے لئے distcc:

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

distcc اور تقسیم شدہ تالیف کے بارے میں مزید معلومات دستاویزی سیکشن میں پروجیکٹ کے صفحے پر مل سکتی ہیں۔ ns-3 کی تشکیل کرتے وقت کمپائلر جھنڈوں کو شامل کرنے کے لیے، CXXFLAGS_EXTRA ماحولیاتی متغیر استعمال کریں۔

تنصیب

واہ سسٹم پر مختلف جگہوں پر لائبریریوں کو انسٹال کرنے کے لیے استعمال کیا جا سکتا ہے۔ پہلے سے طے شدہ طور پر، مرتب شدہ لائبریریاں اور ایگزیکیوٹیبل ڈائرکٹری میں موجود ہوتے ہیں۔ تعمیر، اور چونکہ Waf کو ان لائبریریوں اور ایگزیکیوٹیبل کی جگہ معلوم ہے، اس لیے لائبریریوں کو کہیں اور انسٹال کرنے کی ضرورت نہیں ہے۔

اگر صارف بلڈ ڈائرکٹری سے باہر انسٹال کرنا پسند کرتے ہیں تو وہ کمانڈ چلا سکتے ہیں۔ ./Waf انسٹال کریں. تنصیب کے لیے پہلے سے طے شدہ سابقہ ​​ہے۔ / مقامی / مقامیلہذا ./Waf انسٹال کریں میں پروگرام انسٹال کریں گے۔ / usr / local / binمیں لائبریریاں / مقامی / مقامی / lib اور ہیڈر فائلوں میں /usr/local/include. سپر صارف کے حقوق کو عام طور پر پہلے سے طے شدہ سابقہ ​​​​کے ساتھ سیٹ کرنے کی ضرورت ہوتی ہے، لہذا ایک عام کمانڈ ہوگی۔ sudo ./waf انسٹال کریں۔. لانچ ہونے پر، Waf پہلے مشترکہ لائبریریوں کو بلڈ ڈائرکٹری میں استعمال کرنے کا انتخاب کرے گا، پھر مقامی ماحول میں ترتیب دی گئی لائبریریوں کے راستے میں لائبریریوں کو تلاش کرے گا۔ لہذا جب کسی سسٹم پر لائبریریاں انسٹال کرتے ہیں، تو یہ چیک کرنا ایک اچھا عمل ہے کہ صحیح لائبریریاں استعمال ہو رہی ہیں۔ کنفیگریشن کے دوران آپشن پاس کر کے صارف مختلف سابقہ ​​کے ساتھ انسٹال کرنے کا انتخاب کر سکتے ہیں۔ --prefixمثال کے طور پر:

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

اگر بعد میں، تعمیر کے بعد، صارف انسٹالیشن کمانڈ میں داخل ہوتا ہے۔ ./waf، سابقہ ​​استعمال کیا جائے گا۔ /opt/local.

ٹیم ./waf clean اگر انسٹالیشن استعمال کرے گی تو پروجیکٹ کو دوبارہ ترتیب دینے سے پہلے استعمال کرنا ضروری ہے۔ واہ ایک مختلف سابقہ ​​کے تحت۔

اس طرح، ns-3 استعمال کرنے کے لیے کال کرنے کی ضرورت نہیں ہے۔ ./waf install. زیادہ تر صارفین کو اس کمانڈ کی ضرورت نہیں ہوگی کیونکہ واہ موجودہ لائبریریوں کو بلڈ ڈائرکٹری سے اٹھائیں گے، لیکن کچھ صارفین کو یہ مفید معلوم ہو سکتا ہے اگر ان کی سرگرمیوں میں ns-3 ڈائریکٹری سے باہر کے پروگراموں کے ساتھ کام کرنا شامل ہو۔

واف سنگل

ns-3 سورس ٹری کے اوپری سطح پر، صرف ایک Waf اسکرپٹ ہے۔ ایک بار جب آپ کام کرنا شروع کر دیں گے تو آپ ڈائرکٹری میں کافی وقت گزاریں گے۔ scratch/ یا مزید گہرائی میںsrc/... اور ایک ہی وقت میں چلانے کے لئے ہے واہ. آپ صرف یاد رکھ سکتے ہیں کہ آپ کہاں ہیں اور بھاگ سکتے ہیں۔ واہ مندرجہ ذیل

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

لیکن یہ تکلیف دہ اور غلطی کا شکار ہوگا، اس لیے بہتر حل موجود ہیں۔ ایک عام طریقہ یہ ہے کہ ٹیکسٹ ایڈیٹر استعمال کریں جیسے emacs یا طاقت، جس میں دو ٹرمینل سیشن کھولے جاتے ہیں، ایک 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

یہ ٹیسٹ متوازی طور پر چلائے جاتے ہیں۔ واہ. آخر کار آپ کو ایک پیغام دیکھنا چاہئے جس میں کہا گیا ہے:

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

یہ ویلگرائنڈ کریشز، کریشز یا غلطیوں کی شناخت کے لیے ایک اہم پیغام ہے، جو کوڈ کے ساتھ مسائل یا ٹولز اور کوڈ کے درمیان عدم مطابقت کی نشاندہی کرتا ہے۔

آپ فائنل آؤٹ پٹ سے بھی دیکھیں گے۔ واہ اور ہر ٹیسٹ کو چلانے والا ایک ٹیسٹر، جو کچھ اس طرح نظر آئے گا:

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: ..." لائنوں کی ترتیب مختلف ہو سکتی ہے، یہ معمول کی بات ہے۔ اہم بات یہ ہے کہ رپورٹ کے آخر میں سمری لائن ظاہر کرتی ہے کہ تمام ٹیسٹ پاس ہوئے؛ کوئی ٹیسٹ ناکام یا کریش نہیں ہوا۔) اور واہاور test.py مشین کے دستیاب پروسیسر کور میں کام کو متوازی بنائے گا۔

3.6 سکرپٹ چلانا

ہم عام طور پر اسکرپٹ کو کنٹرول میں چلاتے ہیں۔ واہ. یہ بلڈ سسٹم کو یہ یقینی بنانے کی اجازت دیتا ہے کہ مشترکہ لائبریری کے راستے درست طریقے سے سیٹ کیے گئے ہیں اور لائبریریاں رن ٹائم پر دستیاب ہیں۔ پروگرام کو چلانے کے لیے، بس استعمال کریں۔ واہ پیرامیٹر کے ساتھ - -run. آئیے ہر جگہ پروگرام کے برابر ns-3 چلاتے ہیں۔ ہیلو دنیادرج ذیل کو ٹائپ کرکے:

$ ./waf --run hello-simulator

Waf پہلے چیک کرے گا کہ پروگرام صحیح طریقے سے بنایا گیا ہے اور اگر ضروری ہو تو اسے بنایا جائے۔ پھر واہ ایک پروگرام پر عمل کرے گا جو درج ذیل آؤٹ پٹ تیار کرتا ہے۔

Hello Simulator

مبارک ہو! اب آپ ns-3 صارف ہیں!

اگر مجھے نتائج نظر نہیں آتے تو مجھے کیا کرنا چاہیے؟

اگر آپ کو پیغامات نظر آتے ہیں۔ واہاشارہ کرتا ہے کہ تعمیر کامیابی کے ساتھ مکمل ہوئی ہے، لیکن آپ کو آؤٹ پٹ نظر نہیں آرہا ہے۔ "ہیلو سمیلیٹر"، پھر اس بات کا امکان ہے کہ [Build-with-Waf] سیکشن میں آپ نے اپنے بلڈ موڈ کو تبدیل کر دیا ہے اصلاح، لیکن موڈ پر واپس سوئچ کرنا چھوڑ دیا۔ ڈیبگ. اس ٹیوٹوریل میں استعمال ہونے والے تمام کنسول آؤٹ پٹ ایک خاص ns-3 جزو کا استعمال کرتے ہیں جو لاگنگ کرتا ہے اور کنسول میں حسب ضرورت پیغامات پرنٹ کرنے کے لیے استعمال ہوتا ہے۔ جب آپٹمائزڈ کوڈ مرتب کیا جاتا ہے تو اس جزو سے آؤٹ پٹ خود بخود غیر فعال ہوجاتا ہے - یہ "آپٹمائزڈ" ہوتا ہے۔ اگر آپ کو "ہیلو سمیلیٹر" آؤٹ پٹ نظر نہیں آتا ہے تو درج ذیل درج کریں:

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

ترتیب دینے کے لیے واہ ns-3 پروگراموں کے ڈیبگ ورژن بنانے کے لیے، جس میں مثالیں اور ٹیسٹ شامل ہیں۔ پھر آپ کو ٹائپ کرکے کوڈ کے موجودہ ڈیبگ ورژن کو دوبارہ بنانا چاہیے۔

$ ./waf

اب اگر آپ پروگرام چلاتے ہیں۔ ہیلو سمیلیٹر، آپ کو متوقع نتیجہ دیکھنا چاہئے۔

3.6.1 کمانڈ لائن دلائل

ns-3 پروگرام میں کمانڈ لائن آرگومنٹس کو منتقل کرنے کے لیے، درج ذیل پیٹرن کا استعمال کریں:

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

بدل دیں۔ آپ کے پروگرام کے نام اور دلائل کے لیے۔ دلیل - -command-template لیے واہ بنیادی طور پر اصل کمانڈ لائن بنانے کا ایک نسخہ ہے۔ واہ پروگرام کو چلانے کے لیے استعمال کیا جاتا ہے۔ 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 = "…". مثال کے طور پر، ڈیبگر میں چلانے کے لیے جی ڈی بی آپ کا ہیلو سمیلیٹر NS-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 
}

کمانڈ کے پچھلے ورژن کی یہ سجاوٹ موجودہ ورکنگ ڈائرکٹری کو محفوظ رکھتی ہے، ڈائریکٹری میں جاتی ہے۔ واہاور پھر ہدایت کرتا ہے واہ ورکنگ ڈائرکٹری کو پروگرام شروع کرنے سے پہلے محفوظ شدہ موجودہ ورکنگ ڈائرکٹری میں تبدیل کرنے کے لیے۔ ہم ٹیم کا ذکر کرتے ہیں۔ - -cwd مکمل ہونے کے لیے، زیادہ تر صارفین صرف Waf کو ٹاپ لیول ڈائرکٹری سے چلاتے ہیں اور وہاں آؤٹ پٹ فائلیں تیار کرتے ہیں۔

جاری: باب 4

ماخذ: www.habr.com

نیا تبصرہ شامل کریں