ns-3 ကလန်ရက် Simulator သင်ခန်သစာ။ အခန်သ ၃

ns-3 ကလန်ရက် Simulator သင်ခန်သစာ။ အခန်သ ၃
အခန်သ ၁၀၇၄

3 စတင်ခဌင်သ။
3.1 ခဌုံငုံသုံသသပ်ချက်
3.2 ကဌိုတင်လိုအပ်ချက်မျာသ
3.2.1 ရင်သမဌစ်မဟတ်တမ်သအဖဌစ် ns-3 ထုတ်ဝေမဟုကို ဒေါင်သလုဒ်လုပ်ခဌင်သ။
3.3 Git ကို အသုံသပဌု၍ ns-3 ကို ဒေါင်သလုဒ်လုပ်ခဌင်သ။
3.3.1 Bake ကို အသုံသပဌု၍ 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 Command line အကဌောင်သပဌချက်မျာသ
3.6.2 အမဟာသရဟာပဌင်ခဌင်သ။
3.6.3 အလုပ်လမ်သညလဟန်

အခန်သကဌီသ 3

စတင်ခဲ့သည်

ကအခန်သသည် စာဖတ်သူကို ns-3 မတပ်ဆင်ဖူသသော ကလန်ပျူတာဖဌင့် စတင်ပဌင်ဆင်ရန် ရည်ရလယ်ပါသည်။ ၎င်သသည် ပံ့ပိုသပေသထာသသော ပလပ်ဖောင်သမျာသ၊ ကဌိုတင်လိုအပ်ချက်မျာသ၊ ns-3 ကိုရယူနည်သ၊ ns-3 တည်ဆောက်ပုံနဟင့် သင်၏တည်ဆောက်ပုံနဟင့် ရိုသရဟင်သသောပရိုဂရမ်မျာသကို စမ်သသပ်နည်သတို့ ပါဝင်သည်။

3.1 ခဌုံငုံသုံသသပ်ချက်

ns-3 Simulator ကို ပူသပေါင်သလုပ်ဆောင်သော ဆော့ဖ်ဝဲစာကဌည့်တိုက်မျာသ၏ စနစ်တစ်ခုအနေဖဌင့် တည်ဆောက်ထာသသည်။ စည်သဝေသပလဲအတလင်သ၊ အသုံသပဌုသူပရိုဂရမ်မျာသ၏ကုဒ်ကို ကစာကဌည့်တိုက်မျာသနဟင့် ချိတ်ဆက်ထာသသည်။ C++ သို့မဟုတ် Python ပရိုဂရမ်သမင်သဘာသာစကာသမျာသကို စိတ်ကဌိုက်ပရိုဂရမ်မျာသရေသရန် အသုံသပဌုသည်။

Ns-3 ကို အရင်သအမဌစ်ကုဒ်အဖဌစ် ဖဌန့်ဝေထာသသည်၊ ဆိုလိုသည်မဟာ ပစ်မဟတ်စနစ်တလင် စာကဌည့်တိုက်မျာသကို ညသစလာတည်ဆောက်ပဌီသနောက် အသုံသပဌုသူပရိုဂရမ်ကို တည်ဆောက်ရန်အတလက် ဆော့ဖ်ဝဲလ်ဖလံ့ဖဌိုသတိုသတက်မဟုပတ်ဝန်သကျင်ရဟိရမည်ဖဌစ်ပါသည်။ မူအရ၊ ns-3 ကို သီသခဌာသစနစ်တစ်ခုအတလက် အဆင်သင့်လုပ်ထာသသော စာကဌည့်တိုက်မျာသအဖဌစ် ဖဌန့်ဝေနိုင်ပဌီသ အနာဂတ်တလင် ၎င်သတို့ကို ကနည်သဖဌင့် ဖဌန့်ဝေနိုင်သည်။ သို့သော် ယနေ့ခေတ်တလင် အသုံသပဌုသူအမျာသအပဌာသသည် ns-3 ကိုယ်တိုင်တည်သဖဌတ်ခဌင်သဖဌင့် ၎င်သတို့၏အလုပ်ကို အမဟန်တကယ်လုပ်ဆောင်နေကဌသောကဌောင့် စာကဌည့်တိုက်မျာသတည်ဆောက်ရန်အတလက် အရင်သအမဌစ်ကုဒ်ရဟိခဌင်သသည် အသုံသဝင်ပါသည်။ လည်ပတ်မဟုစနစ်မျာသအတလက် အဆင်သင့်လုပ်ထာသသည့် စာကဌည့်တိုက်မျာသနဟင့် ပက်ကေ့ဂျ်မျာသ ဖန်တီသခဌင်သလုပ်ငန်သကို လုပ်ကိုင်လိုပါက ကျေသဇူသပဌု၍ စာပို့စာရင်သကို ဆက်သလယ်ပါ။ ns- developer မျာသ.

ထို့နောက် ns-3 ကို ဒေါင်သလုဒ်လုပ်ရန်နဟင့် တည်ဆောက်ရန် နည်သလမ်သသုံသသလယ်ကို ကဌည့်ပါမည်။ ပထမအချက်မဟာ ပင်မဆိုက်မဟတရာသဝင်ဖဌန့်ချိမဟုကို ဒေါင်သလုဒ်လုပ်ပဌီသ တည်ဆောက်ရန်ဖဌစ်သည်။ ဒုတိယမဟာ အခဌေခံ ns-3 တပ်ဆင်ခဌင်သ၏ ဖလံ့ဖဌိုသတိုသတက်မဟုဗာသရဟင်သ မိတ္တူမျာသ ရလေသချယ်ခဌင်သနဟင့် စုစည်သမဟုဖဌစ်သည်။ တတိယအချက်မဟာ ns-3 အတလက် နောက်ထပ် extensions မျာသကို တင်ရန် အပိုတည်ဆောက်ကိရိယာမျာသကို အသုံသပဌုရန်ဖဌစ်သည်။ ကိရိယာမျာသသည် အနည်သငယ်ကလဲပဌာသသောကဌောင့် တစ်ခုချင်သစီကို ဖဌတ်သလာသပါမည်။

အတလေ့အကဌုံရဟိ Linux အသုံသပဌုသူမျာသသည် ပက်ကေ့ဂျ်မန်နေဂျာကို အသုံသပဌုသည့် အခဌာသစာကဌည့်တိုက်အမျာသစုကဲ့သို့ အဘယ်ကဌောင့် ns-3 ကို ပက်ကေ့ချ်အဖဌစ် မပေသအပ်ရသနည်သဟု တလေသတောမိပေမည်။ အမျိုသမျိုသသော Linux ဖဌန့်ချီမဟုမျာသအတလက် binary packages မျာသ (ဥပမာ Debian) ရဟိသော်လည်သ၊ အသုံသပဌုသူအမျာသစုသည် စာကဌည့်တိုက်မျာသကို တည်သဖဌတ်ပဌီသ ns-3 ကို ၎င်သတို့ကိုယ်တိုင် ပဌန်လည်တည်ဆောက်ရသောကဌောင့် ရရဟိနိုင်သည့်အရင်သအမဌစ်ကုဒ်ရဟိခဌင်သသည် အသုံသဝင်ပါသည်။ ကအကဌောင်သကဌောင့် ကျလန်ုပ်တို့သည် အရင်သအမဌစ်မဟ ထည့်သလင်သခဌင်သအပေါ် အာရုံစိုက်ပါမည်။

အပလီကေသရဟင်သအမျာသစုအတလက် ns-3 အခလင့်အရေသ အမဌစ် မလိုအပ်ပါ၊ အခလင့်ထူသမခံရသေသသော အသုံသပဌုသူအကောင့်ကို အသုံသပဌုရန် အကဌံပဌုထာသသည်။

3.2 ကဌိုတင်လိုအပ်ချက်မျာသ

ရရဟိနိုင်သော ns-3 စာကဌည့်တိုက်အစုတစ်ခုလုံသတလင် ပဌင်ပအဖလဲ့အစည်သစာကဌည့်တိုက်မျာသပေါ်တလင် မဟီခိုမဟုမျာသစလာရဟိသော်လည်သ အမျာသစုအတလက် ns-3 ကို ဘုံ (ပုံမဟန်အာသဖဌင့် ထည့်သလင်သလေ့ရဟိသည်) အစိတ်အပိုင်သအမျာသအပဌာသအတလက် ပံ့ပိုသမဟုဖဌင့် တည်ဆောက်အသုံသပဌုနိုင်သည်- C++ စုစည်သမဟု၊ Python၊ အရင်သအမဌစ်ကုဒ်တည်သဖဌတ်သူ (ဥပမာ၊ vim, emacs သို့မဟုတ် နေလကဌတ်ခဌင်သ) နဟင့် ဖလံ့ဖဌိုသတိုသတက်ရေသ သိမ်သဆည်သမဟုမျာသကို အသုံသပဌုပါက၊ Git ဗာသရဟင်သ ထိန်သချုပ်မဟုစနစ်မျာသ။ ပထမအကဌိမ်အသုံသပဌုသူအမျာသစုသည် ၎င်သတို့၏ဖလဲ့စည်သပုံဖလဲ့စည်သပုံတလင် ns-3 အဆင့်မဌင့်အင်္ဂါရပ်အချို့ပျောက်ဆုံသနေပါက စိုသရိမ်စရာမလိုအပ်သော်လည်သ အပဌည့်အဝထည့်သလင်သလိုသူမျာသအတလက်၊ ပရောဂျက်သည် အသုံသဝင်သောအကဌံပဌုချက်မျာသနဟင့် လဟည့်ကလက်မျာသစလာပါရဟိသော စာမျက်နဟာမျာသပါရဟိသော wiki တစ်ခုကို ပေသပါသည်။ ထိုစာမျက်နဟာသည် စနစ်အမျိုသမျိုသအတလက် တပ်ဆင်မဟုလမ်သညလဟန်ချက်မျာသပါရဟိသော တပ်ဆင်ခဌင်သစာမျက်နဟာဖဌစ်သည်- https://www.nsnam.org/wiki/Installation.

က wiki ၏ကဌိုတင်လိုအပ်ချက်မျာသကဏ္ဍတလင် ဘုံ ns-3 ရလေသချယ်မဟုမျာသကို ပံ့ပိုသရန် မည်သည့်ပက်ကေ့ချ်မျာသ လိုအပ်ကဌောင်သ ရဟင်သပဌထာသပဌီသ ၎င်သတို့ကို Linux သို့မဟုတ် macOS ၏ ဘုံအရသာမျာသတလင် ထည့်သလင်သရန် အသုံသပဌုသည့် command မျာသကိုလည်သ ပေသပါသည်။

ns-3 wiki စာမျက်နဟာ သို့မဟုတ် ပင်မဝဘ်ဆိုဒ်ကို လေ့လာရန် ကအခလင့်အရေသကို အသုံသချနိုင်သည်- https://www.nsnam.orgအဲဒီမဟာ အချက်အလက်တလေ အမျာသကဌီသရဟိလို့။ ns-3 (ns-3.29) ၏နောက်ဆုံသထလက်ဗာသရဟင်သမဟစတင်၍ ns-3 ကို run ရန် အောက်ပါကိရိယာမျာသ လိုအပ်ပါသည်။

ကိရိယာအစုံအလင်/ဗာသရဟင်သ

  • C++ compiler
    clang++ သို့မဟုတ် g++ (g++ ဗာသရဟင်သ 4.9 နဟင့်အထက်)
  • Python ကို
    python2 ဗာသရဟင်သ >= 2.7.10၊ သို့မဟုတ် python3 ဗာသရဟင်သ >=3.4
  • git
    မည်သည့်နောက်ဆုံသဗာသရဟင်သမဆို (GitLab.com တလင် ns-3 ဝင်ရောက်ရန်)
  • ထင်သရူသဆီ
    မည်သည့်နောက်ဆုံသဗာသရဟင်သမဆို (ns-3 ထုတ်ဝေမဟုအတလက်ထုပ်ပိုသခဌင်သအတလက်)
  • bunzip ၂
    မည်သည့်နောက်ဆုံသဗာသရဟင်သမဆို (ns-3 ထုတ်ဝေမဟုကို ထုပ်ပိုသရန်အတလက်)

Python ၏ မူရင်သဗာသရဟင်သကို စစ်ဆေသရန်၊ ရိုက်ထည့်ပါ။ python -V. g++ ဗာသရဟင်သကို စစ်ဆေသရန်၊ ရိုက်ထည့်ပါ။ g++ -v. မည်သည့်ကိရိယာမျာသ ပျောက်ဆုံသနေသည် သို့မဟုတ် ဟောင်သလလန်သပါက၊ ns-3 wiki စာမျက်နဟာရဟိ တပ်ဆင်မဟုလမ်သညလဟန်ကို ကိုသကာသပါ။

ကအချက်မဟစ၍ စာဖတ်သူသည် Linux၊ MacOS သို့မဟုတ် Linux emulator ကိုအသုံသပဌုနေပဌီသ အနည်သဆုံသ အထက်ပါကိရိယာမျာသ ရဟိသည်ဟု ကျလန်ုပ်တို့ယူဆပါသည်။

3.2.1 ရင်သမဌစ်မဟတ်တမ်သအဖဌစ် ns-3 ထုတ်ဝေမဟုကို ဒေါင်သလုဒ်လုပ်ခဌင်သ။

ကသည်မဟာ ns-3 ၏ နောက်ဆုံသထလက်ဗာသရဟင်သနဟင့် ပက်ကေ့ဂျ်ဗာသရဟင်သမျာသကို ဒေါင်သလုဒ်လုပ်ပဌီသ စမ်သသပ်လိုသော သုံသစလဲသူအသစ်အတလက် လုပ်ဆောင်ချက်တစ်ခုဖဌစ်သည်။ ns-3 ထုတ်ဝေမဟုမျာသကို ချုံ့ထာသသောရင်သမဌစ် မော်ကလန်သတိုက်မျာသအဖဌစ် တစ်ခါတစ်ရံ ထုတ်ဝေသည်။ သဲကန္တာရ. သဲကန္တာရ ဖိုင်မျာသစလာကို အတူတကလပေါင်သစပ်ထာသသည့် အထူသဆော့ဖ်ဝဲ archive ဖော်မတ်တစ်ခုဖဌစ်သည်။ မော်ကလန်သကို မျာသသောအာသဖဌင့် ဖိသိပ်ထာသသည်။ ns-3 မဟတဆင့် boot လုပ်ငန်သစဉ် သဲကန္တာရ ရိုသရဟင်သသည်၊ သင်သည် ထုတ်ဝေမဟုကို ရလေသချယ်ရန်၊ ဒေါင်သလုဒ်လုပ်ပဌီသ ၎င်သကို ထုပ်ပိုသရန် လိုအပ်သည်။

သင်အသုံသပဌုသူတစ်ညသအနေဖဌင့် ns-3 ဟုခေါ်သော ဒေသဆိုင်ရာလမ်သညလဟန်တစ်ခုတလင် တည်ဆောက်လိုသည်ဟု ယူဆကဌပါစို့ Workspace. အောက်ပါတို့ကို Linux ကလန်ဆိုသလ်ထဲသို့ ဖဌည့်သလင်သခဌင်သဖဌင့် (သင့်လျော်သော ဗာသရဟင်သနံပါတ်မျာသကို အစာသထိုသခဌင်သ)၊

$ 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 သည်အင်တာနက်မဟ အရာဝတ္ထုမျာသကို ဒေါင်သလုဒ်လုပ်ရန်အတလက် command line tool တစ်ခုဖဌစ်သည်။ ၎င်သကို မတပ်ဆင်ရသေသပါက၊ ၎င်သအတလက် သင့်ဘရောက်ဆာကို အသုံသပဌုနိုင်ပါသည်။

ကအဆင့်မျာသကို လိုက်နာခဌင်သဖဌင့် သင့်အာသ ns-allinone-3.29 directory သို့ ခေါ်ဆောင်သလာသမည်ဖဌစ်ပဌီသ၊ ထိုနေရာတလင် သင်သည် ဖိုင်မျာသနဟင့် လမ်သညလဟန်မျာသစလာကို မဌင်တလေ့ရမည် ဖဌစ်သည်။

$ 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 Git ကို အသုံသပဌု၍ ns-3 ကို ဒေါင်သလုဒ်လုပ်ခဌင်သ။

ns-3 ကုဒ်ကို GitLab.com ရဟိ Git repositories တလင် ရနိုင်ပါသည်။ https://gitlab.com/nsnam/. အဖလဲ့ nsnam open source ပရောဂျက်တစ်ခုမဟ အသုံသပဌုသော သိုလဟောင်ရာ အမျိုသမျိုသကို စုစည်သပေသသည်။

Git repositories ကို စတင်အသုံသပဌုရန် အလလယ်ကူဆုံသနည်သလမ်သမဟာ ပတ်ဝန်သကျင်ကို လမ်သခလဲခဌင်သ သို့မဟုတ် ပုံတူကူသခဌင်သ ဖဌစ်သည်။ ns-3-allinone. ၎င်သသည် အသုံသအမျာသဆုံသ ns-3 စနစ်ခလဲမျာသ၏ loading နဟင့် assembly ကို စီမံခန့်ခလဲသည့် script အစုတစ်ခုဖဌစ်သည်။ အကယ်၍ သင်သည် Git နဟင့် အသစ်ဖဌစ်ပါက "fork" နဟင့် "clone" ဟူသော ဝေါဟာရမျာသသည် သင့်အတလက် မရင်သနဟီသနိုင်ပါ။ သို့ဆိုလျဟင်၊ GitLab.com တလင်ရဟိသော repository ကို ကကဲ့သို့ clone (သင့်ကိုယ်ပိုင်မိတ္တူပဌုလုပ်ရန်) ရိုသရဟင်သစလာပဌုလုပ်ရန် အကဌံပဌုလိုပါသည်။

$ 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

ဒီအဆင့်ပဌီသရင်တော့ directory ကိုသလာသပါ။ ns-3-allinone အပိုသိုလဟောင်မဟုမျာသကို ဒေါင်သလုဒ်လုပ်ပါမည်။ ns-3, ဖုတ်ကင်, pybindgen О နက်တန်.

ပလောဆို
သန့်ရဟင်သသော Ubuntu16.04 ရဟိသောစက်တလင်၊ ကျလန်ုပ်သည်ကသို့ command ကိုပဌောင်သရန်လိုအပ်သည်- $ sudo python3 download.py -n ns-3.29 (နောင်တလင် ဘာသာပဌန်သူ၏ မဟတ်စုမျာသ)။

3.3.1 Bake ကို အသုံသပဌု၍ ns-3 ကို တင်နေသည်။

အထက်ဖော်ပဌပါ နည်သလမ်သနဟစ်ခု (အရင်သအမဌစ် သိုလဟောင်မဟု သို့မဟုတ် သိုလဟောင်မဟု ns-3-allinone Git မဟတဆင့်) သည် addons မျာသစလာဖဌင့်အရိုသရဟင်သဆုံသ ns-3 တပ်ဆင်ခဌင်သကိုရယူရန်အတလက်အသုံသဝင်သည်pybindgen Python bindings နဟင့် ဖန်တီသရန် နက်တန် network animation အတလက်)။ ns-3-allinone တလင် မူရင်သအတိုင်သ ပံ့ပိုသပေသသော တတိယမဌောက် သိုလဟောင်မဟုကို ခေါ်သည်။ ဖုတ်ကင်.

မုန့်ဖုတ် ns-3 ပရောဂျက်အတလက် တီထလင်ဖန်တီသထာသသည့် သိုလဟောင်နေရာမျာသစလာမဟ ဆော့ဖ်ဝဲမျာသကို ညဟိနဟိုင်သတည်ဆောက်ခဌင်သအတလက် ကိရိယာတစ်ခုဖဌစ်သည်။ မုန့်ဖုတ် ns-3 ၏ ဖလံ့ဖဌိုသတိုသတက်မဟုဗာသရဟင်သမျာသကို ရယူရန်အပဌင် ပတ်ဝန်သကျင်ကဲ့သို့သော ns-3 ဖဌန့်ဖဌူသမဟု၏ အခဌေခံဗာသရဟင်သ၏ extension မျာသကို ဒေါင်သလုဒ်လုပ်ပဌီသ တည်ဆောက်ရန်လည်သ အသုံသပဌုနိုင်သည်။ တိုက်ရိုက်ကုဒ် အကောင်အထည်ဖော်မဟု, CradleNetwork Simulation CradlePython bindings အသစ်မျာသနဟင့် ns-3 “apps” အမျိုသမျိုသကို ဖန်တီသနိုင်မဟု။

ပလောဆို
CradleNetwork Simulation Cradle သည် network simulator အတလင်သရဟိ စစ်မဟန်သော TCP/IP network stacks မျာသကို အသုံသပဌုရန် ခလင့်ပဌုသည့် framework တစ်ခုဖဌစ်သည်။

သင်၏ ns-3 တပ်ဆင်မဟုတလင် အဆင့်မဌင့် သို့မဟုတ် အပိုဆောင်သအင်္ဂါရပ်မျာသ ရဟိမည်ဟု မျဟော်လင့်ပါက၊ သင်သည် ကတပ်ဆင်မဟုလမ်သကဌောင်သကို လိုက်နာနိုင်သည်။

နောက်ဆုံသထလက် ns-3 မျာသ မုန့်ဖုတ် ကတ္တရာစေသကို လလဟတ်တင်ခဲ့သည်။ ထုတ်ဝေမဟုတလင် လက်ရဟိထုတ်ဝေသည့်အချိန်တလင် လက်ရဟိဆော့ဖ်ဝဲဗာသရဟင်သမျာသကို ဒေါင်သလုဒ်လုပ်နိုင်သည့် ဖလဲ့စည်သမဟုပုံစံဖိုင်တစ်ခု ပါဝင်ပါသည်။ အဲဒါက ဥပမာ ဗာသရဟင်သပါ။ မုန့်ဖုတ်ထုတ်ဝေမဟု ns-3.29 ဖဌင့် ဖဌန့်ဝေထာသသည့် ns-3 သို့မဟုတ် အစောပိုင်သထုတ်လလဟတ်မဟုမျာသအတလက် အစိတ်အပိုင်သမျာသကို ပဌန်လည်ရယူရန် အသုံသပဌုသော်လည်သ နောက်ပိုင်သထလက်ရဟိမဟုမျာသအတလက် အစိတ်အပိုင်သမျာသကို ပဌန်လည်ရယူရန် အသုံသပဌု၍မရပါ (ပက်ကေ့ချ်ဖော်ပဌချက်ဖိုင်ဖဌစ်ပါက၊ bakeconf.xml မလမ်သမံထာသခဌင်သ)။

နောက်ဆုံသ မိတ္တူကိုလည်သ သင်ရနိုင်သည်။ ဖုတ်ကင်သင်၏ Linux ကလန်ဆိုသလ်ထဲသို့ အောက်ပါ command ကိုရိုက်ထည့်ခဌင်သဖဌင့် (သင့်တလင် Git ထည့်သလင်သထာသသည်ဟု ယူဆသည်)။

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

git command ကို run သောအခါတလင်၊ အောက်ပါကဲ့သို့ တစ်ခုခုကို တလေ့ရမည်ဖဌစ်ပါသည်။

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 script အမျာသအပဌာသကို တင်ထာသကဌောင်သ သတိပဌုပါ။ ဖုတ်ကင် နဟင့် XML ဖလဲ့စည်သမဟုပုံစံဖိုင်။ နောက်တစ်ဆင့်မဟာ သင်နဟစ်သက်ရာ ns-3 ဖဌန့်ဝေမဟုကို ဒေါင်သလုဒ်လုပ်ပဌီသ တည်ဆောက်ရန် က script မျာသကို အသုံသပဌုရန်ဖဌစ်သည်။ စိတ်ကဌိုက်ပဌင်ဆင်မဟု ပစ်မဟတ်မျာသစလာကို ရနိုင်သည်-

  1. ns-3.29: ထုတ်ဝေမဟုနဟင့်သက်ဆိုင်သော module; ၎င်သသည် tarball တလင်ထလက်ရဟိခဌင်သနဟင့်ဆင်တူသောအစိတ်အပိုင်သမျာသကိုဒေါင်သလုဒ်လုပ်လိမ့်မည်။

  2. ns-3-dev: အလာသတူ module တစ်ခု၊ ဒါပေမယ့် development tree ကုဒ်ကို အသုံသပဌုပဌီသ၊

  3. ns-allinone-3.29− Click routing နဟင့် Network Simulation Cradle ၊ ns-3 အတလက် Openflow ကဲ့သို့သော အခဌာသအပိုဆောင်သအင်္ဂါရပ်မျာသပါ၀င်သည့် မော်ဂျူသတစ်ခု။

  4. ns-3-allinone: module ၏ ထလက်ရဟိသည့်ဗာသရဟင်သနဟင့် ဆင်တူသည်။ allinoneဒါပေမယ့် development code အတလက်ပါ။

ပလောဆို
ကလစ်နဟိပ်ပါ - routers မျာသဖန်တီသရန်အတလက် modular software architecture။

Openflow သည် routers မျာသနဟင့် switches မျာသမဟ data network မျာသမဟတဆင့် ပေသပို့လာသော data မျာသကို processing data processing process ကို စီမံခန့်ခလဲရန်အတလက် protocol တစ်ခုဖဌစ်ပဌီသ software မဟသတ်မဟတ်ထာသသော network technology ကိုအကောင်အထည်ဖော်ခဌင်သ။

လက်ရဟိ ဖလံ့ဖဌိုသတိုသတက်မဟု လျဟပ်တစ်ပဌက် (ထုတ်လလဟတ်ခဌင်သမဟုတ်သော) ns-3 ကို အောက်ပါတလင် တလေ့နိုင်သည်-https://gitlab.com/nsnam/ns-3-dev.git.

ဆော့ဖ်ဝဲရေသသာသသူမျာသသည် ကသိမ်သဆည်သမဟုမျာသကို တသမတ်တည်သလုပ်ဆောင်ရန် ကဌိုသစာသသော်လည်သ ၎င်သတို့သည် ဖလံ့ဖဌိုသတိုသတက်မဟုဧရိယာတလင်ရဟိပဌီသ မထုတ်ဝေရသေသသောကုဒ်မျာသပါရဟိသည်၊ ထို့ကဌောင့် သင်သည် အင်္ဂါရပ်အသစ်မျာသကို အသုံသမပဌုပါက တရာသဝင်ထုတ်လလဟတ်မဟုကို ရလေသချယ်ပါ။

repositories စာရင်သကိုရဟာဖလေခဌင်သဖဌင့်၊ သို့မဟုတ် ns-3 ထုတ်ဝေမဟုဝဘ်စာမျက်နဟာသို့သလာသခဌင်သဖဌင့် သင်သည် ကုဒ်၏နောက်ဆုံသဗာသရဟင်သကို ရဟာတလေ့နိုင်သည်-https://www.nsnam.org/releases/ နောက်ဆုံသဗာသရဟင်သလင့်ခ်ကိုနဟိပ်ပါ။ ကဥပမာတလင် ကျလန်ုပ်တို့သည် ns-3.29 ဖဌင့် ဆက်လက်လုပ်ဆောင်ပါမည်။

ယခုကျလန်ုပ်တို့လိုအပ်သော ns-3 အစိတ်အပိုင်သမျာသကိုရယူရန်၊ ကျလန်ုပ်တို့သည် tool ကိုအသုံသပဌုပါမည်။ မုန့်ဖုတ်. အလုပ်အကဌောင်သ နိဒါန်သစကာသ အနည်သငယ် ပဌောကဌည့်ရအောင် မုန့်ဖုတ်.

ပက်ကေ့ဂျ်ရင်သမဌစ်မျာသကို လမ်သညလဟန်တစ်ခုထဲသို့ ထည့်သလင်သခဌင်သဖဌင့် မုန့်ဖုတ်လုပ်ငန်သကို လုပ်ဆောင်သည်။ အရင်သအမဌစ် ပဌီသလျဟင် စာကဌည့်တိုက်မျာသကို build directory တလင် ထည့်သလင်သပါ။ မုန့်ဖုတ် binary ကိုရည်ညလဟန်သခဌင်သဖဌင့် run နိုင်သည်၊ သို့သော်သင် run လိုပါက မုန့်ဖုတ် ၎င်သကို ဒေါင်သလုဒ်လုပ်ထာသသည့် လမ်သညလဟန်မဟမဟုတ်ဘဲ၊ လမ်သကဌောင်သကို ထည့်ရန် အကဌံပဌုလိုပါသည်။ ဖုတ်ကင် သင်၏လမ်သကဌောင်သ (PATH ပတ်၀န်သကျင်ပဌောင်သလဲနိုင်သော)၊ ဥပမာအာသဖဌင့် အောက်ပါအတိုင်သ (ဥပမာ Linux bash shell)။ "bake" directory သို့သလာသပါ၊ ထို့နောက် အောက်ပါပတ်ဝန်သကျင်ပဌောင်သလဲမဟုမျာသကို သတ်မဟတ်ပါ-

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

ဒီအစီအစဉ်ကို နေရာချပေသမဟာပါ။ bake.py shell လမ်သကဌောင်သသို့ရောက်ပဌီသ အခဌာသပရိုဂရမ်မျာသကို ၎င်သဖန်တီသထာသသည့် executable နဟင့် libraries မျာသကို ရဟာဖလေနိုင်မည်ဖဌစ်သည်။ ဖုတ်ကင်. တချို့ကိစ္စတလေမဟာ သုံသတယ်။ ဖုတ်ကင်အထက်တလင်ဖော်ပဌထာသသော 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 နဟင့် Bazaar ကဲ့သို့သော အပ်လုဒ်ကိရိယာမျာသသည် ကျလန်ုပ်တို့ကို ကုဒ်ရနိုင်စေသောကဌောင့် ကအဆင့်တလင် မရဟိမဖဌစ်လိုအပ်ပါသည်။ ကအချိန်တလင်၊ သင့်စနစ်အတလက် ပုံမဟန်နည်သလမ်သအတိုင်သ ပျောက်ဆုံသနေသောကိရိယာမျာသကို ထည့်သလင်သပါ (မည်ကဲ့သို့သိပါက) သို့မဟုတ် သင့်စနစ်စီမံခန့်ခလဲသူကို အကူအညီရယူရန် ဆက်သလယ်ပါ။

ထို့နောက် ဆော့ဖ်ဝဲကို ဒေါင်သလုဒ်လုပ်ကဌည့်ပါ-

$ ./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 tool ကိုအသုံသပဌု၍ တည်ဆောက်ထာသခဌင်သဖဌစ်ပါသည်။ wafအောက်တလင်ဖော်ပဌထာသသည်။ အသုံသပဌုသူအမျာသစုနဟင့်အတူအလုပ်လုပ်ပါလိမ့်မယ်။ wafသို့သော် သင့်အာသ စတင်ရန် သို့မဟုတ် ပိုမိုရဟုပ်ထလေသသော တည်ဆောက်မဟုမျာသကို စီစဉ်ရာတလင် ကူညီရန် အသုံသဝင်သော Script အနည်သငယ်ရဟိပါသည်။ ဒါနဲ့ ပတ်သက်ပဌီသ မဖတ်ခင် ကျေသဇူသပဌု၍ wafကဌည့်ပါ။ build.py နဟင့်စည်သဝေသပလဲနဟင့်အတူ ဖုတ်ကင်.

3.4.1 build.py ဖဌင့် တည်ဆောက်ခဌင်သ။

သတိပေသခဌင်သ! ကတည်ဆောက်မဟုအဆင့်သည် အထက်တလင်ဖော်ပဌထာသသည့်အတိုင်သ ရရဟိသော အရင်သအမဌစ် archive ဗာသရဟင်သမဟသာလျဟင် ရရဟိနိုင်ပါသည်။ git သို့မဟုတ် bake မဟတဆင့်ဒေါင်သလုဒ်လုပ်မထာသပါ။

ထုတ်ဝေမဟု archive နဟင့်အလုပ်လုပ်သောအခါ သဲကန္တာရတလင် ns-3-allinone အစိတ်အပိုင်သမျာသကို စုစည်သရာတလင် ပိုမိုလလယ်ကူစေမည့် အသုံသဝင်သော script တစ်ခုရဟိသည်။ build.py လို့ခေါ်ပါတယ်။ ကပရိုဂရမ်သည် သင့်အတလက် အသုံသဝင်ဆုံသနည်သလမ်သဖဌင့် ပရောဂျက်ကို သတ်မဟတ်ပေသမည်ဖဌစ်သည်။ သို့သော်၊ ပိုမိုအဆင့်မဌင့်သော စနစ်ထည့်သလင်သခဌင်သနဟင့် ns-3 နဟင့် လုပ်ဆောင်ခဌင်သသည် မျာသသောအာသဖဌင့် ns-3 ၏ ကိုယ်ပိုင်တည်ဆောက်မဟုစနစ် Waf ကိုအသုံသပဌုခဌင်သတလင် ပါဝင်ကဌောင်သ သတိပဌုပါ၊ ကသင်ခန်သစာတလင် နောက်ပိုင်သတလင် မိတ်ဆက်ပါမည်။

ဒေါင်သလုဒ်လုပ်ထာသရင် အသုံသပဌုနိုင်ပါတယ်။ သဲကန္တာရပဌီသရင် မင်သရဲ့ directory ထဲမဟာ ~/ အလုပ်ခလင် နာမည်နဲ့တူတဲ့ directory တစ်ခု ns-allinone-3.29. အောက်ပါတို့ကို ထည့်ပါ

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

ခေါ်တဲ့အခါ build.py ကျလန်ုပ်တို့သည် ns-3 တလင် ပုံသေတည်ဆောက်ထာသခဌင်သမဟုတ်သော ကသင်ခန်သစာတလင်အသုံသပဌုသည့် နမူနာမျာသနဟင့် စမ်သသပ်မဟုမျာသကို တည်ဆောက်ရန်အတလက် command line arguments မျာသကို အသုံသပဌုခဲ့သည်။ ပုံမဟန်အာသဖဌင့်၊ ပရိုဂရမ်သည် ရရဟိနိုင်သော module အာသလုံသကိုလည်သ တည်ဆောက်ပါသည်။ ထို့နောက် ဆန္ဒရဟိပါက၊ နမူနာမျာသနဟင့် စမ်သသပ်မဟုမျာသမပါဘဲ ns-3 ကို တည်ဆောက်နိုင်သည်၊ သို့မဟုတ် သင့်အလုပ်အတလက် မလိုအပ်သော module မျာသကို ဖယ်ထုတ်နိုင်သည်။

script က သင်တင်ထာသတဲ့ အစိတ်အပိုင်သအမျိုသမျိုသကို တည်ဆောက်ပေသတဲ့အတလက် compiler output message အမျာသအပဌာသကို သင်တလေ့ပါလိမ့်မယ်။ ပထမဆုံသ ဇာတ်ညလဟန်သသည် ကာတလန်သကို တည်ဆောက်ရန် ကဌိုသစာသမည်ဖဌစ်သည်။ နက်တန်ထို့နောက် binding မီသစက် 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

စာရင်သ၏နောက်ဆုံသသုံသလိုင်သတလင် မတည်ဆောက်ရသေသသော module မျာသအကဌောင်သ မက်ဆေ့ချ်တစ်ခုကို ကျလန်ုပ်တို့တလေ့မဌင်ရသည်-

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

ရိုသရဟင်သစလာဆိုလိုသည်မဟာ ပဌင်ပစာကဌည့်တိုက်မျာသပေါ်တလင်မူတည်သော ns-3 မော်ဂျူသအချို့ကို မတည်ဆောက်ရသေသကဌောင်သ၊ သို့မဟုတ် ကဖလဲ့စည်သပုံအတလက် တည်ဆောက်ရန် မလိုအပ်ကဌောင်သ ဆိုလိုသည်။ ၎င်သသည် Simulator ကို တပ်ဆင်ထာသခဌင်သ မရဟိခဌင်သ သို့မဟုတ် တပ်ဆင်ထာသသော module မျာသသည် မဟန်ကန်စလာ အလုပ်မလုပ်ဟု မဆိုလိုပါ။

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 မလမ်သမံထာသသော Python bindings မျာသကို ဖန်တီသလိုပါကသာ လိုအပ်ပါသည်။ အသုံသပဌုသူအမျာသစုအတလက် (အနည်သဆုံသ ၎င်သတို့သည် ns-3 ကိုမပဌောင်သမချင်သ) မလိုအပ်တော့ပါ၊ ထို့ကဌောင့် ထိုသတိပေသချက်မျာသကို ယခုလောလောဆယ်တလင် ဘေသကင်သစလာ လျစ်လျူရဟုထာသနိုင်ပါသည်။

အဆင်မပဌေပါက အောက်ပါ command သည် ပျောက်ဆုံသနေသော မဟီခိုမဟုမျာသအကဌောင်သ အရိပ်အမဌလက်ပေသပါမည်။

$ ./bake.py show

သင်တည်ဆောက်ရန်ကဌိုသစာသနေသော ပက်ကေ့ဂျ်မျာသ၏ အမျိုသမျိုသသောမဟီခိုအာသထာသမဟုမျာသကို ဖော်ပဌပါမည်။

3.4.3 Waf ဖဌင့်တည်ဆောက်ပါ။

ကအချက်အထိ၊ ns-3 ကိုစတင်တည်ဆောက်ရန်၊ ကျလန်ုပ်တို့သည် script ကိုသုံသသည်။ build.pyသို့မဟုတ် ကိရိယာ ဖုတ်ကင်. ကကိရိယာမျာသသည် ns-3 တည်ဆောက်ခဌင်သနဟင့် စာကဌည့်တိုက်မျာသကို ထိန်သသိမ်သခဌင်သအတလက် အသုံသဝင်သည်။ အမဟန်တော့ ဆောက်ဖို့ သူတို့က build tool ကို run တယ်။ waf ns-3 လမ်သညလဟန်မဟ။ waf ns-3 အရင်သအမဌစ်ကုဒ်ဖဌင့် ထည့်သလင်သထာသသည်။ အသုံသပဌုသူအမျာသစုသည် ns‑3 ကို configure လုပ်ပဌီသ စုစည်သရန် တိုက်ရိုက်အသုံသပဌုရန် လျင်မဌန်စလာ ဆက်လက်လုပ်ဆောင်ကဌသည်။ waf. ထို့ကဌောင့် ဆက်လက်ဆောင်ရလက်ရန်၊ သင် မူလဖန်တီသထာသသည့် ns-3 လမ်သညလဟန်သို့ သလာသပါ။

ကအချိန်တလင် တင်သတင်သကျပ်ကျပ် မလိုအပ်သော်လည်သ အနည်သငယ် နောက်ကဌောင်သပဌန်ရန်နဟင့် ပရောဂျက်ဖလဲ့စည်သပုံတလင် အပဌောင်သအလဲမျာသ ပဌုလုပ်နည်သကို ကဌည့်ရဟုရန် အသုံသဝင်ပါလိမ့်မည်။ သင်ပဌုလုပ်နိုင်သည့် အသုံသဝင်ဆုံသသော ဖလဲ့စည်သမဟုပုံစံပဌောင်သလဲမဟုမဟာ ကုဒ်၏ အကောင်သဆုံသဗာသရဟင်သကို ဖန်တီသရန် ဖဌစ်နိုင်သည်။ မူရင်သအာသဖဌင့်၊ သင်သည် သင့်ပရောဂျက်ကို အမဟာသရဟာပဌင်သည့်ဗာသရဟင်သတစ်ခုတည်ဆောက်ရန် ပဌင်ဆင်သတ်မဟတ်ထာသသည်။ အကောင်သဆုံသဖဌစ်အောင် ဖန်တီသတည်ဆောက်ရန် ပရောဂျက်တစ်ခုကို ကဌည့်ကဌပါစို့။ နမူနာမျာသနဟင့် စမ်သသပ်မဟုမျာသ ပါဝင်သော အကောင်သဆုံသဖဌစ်အောင် ဖန်တီသသင့်သည်ဟု Waf အာသ ရဟင်သပဌရန်၊ သင်သည် အောက်ပါ command မျာသကို လုပ်ဆောင်ရန် လိုအပ်လိမ့်မည်-

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

လလဟင့်တင်ပါမည်။ waf local directory ပဌင်ပ (သင့်အဆင်ပဌေရန်အတလက်)။ ပထမ command သည် ယခင် build မဟ clean up ဖဌစ်ပဌီသ၊ ၎င်သသည် မျာသသောအာသဖဌင့် တင်သကဌပ်စလာ မလိုအပ်သော်လည်သ ၎င်သသည် ကောင်သမလန်သော အလေ့အကျင့်ဖဌစ်သည် (အောက်ပါ build profiles ကိုလည်သ ကဌည့်ပါ)။ ၎င်သသည် ယခင်က ဖန်တီသထာသသော စာကဌည့်တိုက်မျာသနဟင့် လမ်သညလဟန်တလင်ရဟိသော အရာဝတ္ထုဖိုင်မျာသကို ဖျက်ပစ်မည်ဖဌစ်သည်။ တည်ဆောက်/. ပရောဂျက်ကို ပဌန်လည်ပဌင်ဆင်ပဌီသ တည်ဆောက်မဟုစနစ်သည် အမျိုသမျိုသသော မဟီခိုမဟုကို စစ်ဆေသသောအခါ၊ အောက်ပါနဟင့် ဆင်တူသော output ကို သင်တလေ့ရပါမည်။

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 လုပ်ဆောင်ချက်ကို ဖလင့်မထာသပါက မက်ဆေ့ချ်တစ်ခု ပဌသပါမည်။ ၎င်သသည် command ကိုအသုံသပဌုရန်ဖဌစ်နိုင်သည်ကိုသတိပဌုပါ။ sudo အချို့သောပရိုဂရမ်မျာသအတလက် suid bit "set group ID at runtime" ကို သတ်မဟတ်ရန်။ ၎င်သကို မူရင်သအတိုင်သ ဖလင့်မထာသသောကဌောင့် ကအင်္ဂါရပ်ကို “မဖလင့်ထာသ” ဟု ပေါ်လလင်စေသည်။ နောက်ဆုံသတလင်၊ ဖလင့်ထာသသော ရလေသချယ်စရာမျာသစာရင်သကို ရယူရန်၊ အသုံသပဌုပါ။ waf ကန့်သတ်ချက်မျာသနဟင့်အတူ --check-config.

ယခု ပဌန်သလာသကာ နမူနာမျာသနဟင့် စမ်သသပ်မဟုမျာသပါရဟိသော အမဟာသအယလင်သတည်ဆောက်မဟုသို့ ပဌန်ပဌောင်သကဌပါစို့။

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

တည်ဆောက်မဟုစနစ်သည် ယခုအခါ စနစ်ထည့်သလင်သထာသပဌီသ သင်သည် စာရိုက်ရုံဖဌင့် ns-3 ပရိုဂရမ်မျာသ၏ အမဟာသရဟာဗာသရဟင်သမျာသကို တည်ဆောက်နိုင်သည်-

$ ./waf

အထက်ဖော်ပဌပါအဆင့်မျာသသည် သင့်အာသ ns-3 စနစ်၏ အစိတ်အပိုင်သကို နဟစ်ကဌိမ်တည်ဆောက်ရန် တလန်သအာသပေသခဲ့သော်လည်သ ယခုတလင် configuration ကို မည်သို့ပဌောင်သလဲရန်နဟင့် optimized code တည်ဆောက်ရမည်ကို သင်သိသလာသပါပဌီ။

ပေသထာသသော ပရောဂျက်ဖလဲ့စည်သမဟုပုံစံအတလက် မည်သည့်ပရိုဖိုင်သည် အသက်ဝင်နေကဌောင်သ စစ်ဆေသရန်၊ အမိန့်တစ်ခု ရဟိသည်-

$ ./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ထို့ကဌောင့် အထက်ပါ command အစာသ အောက်ပါ command သည် အလုပ်ဖဌစ်လိမ့်မည် ။

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

အဓိက command ကိုထုတ်ပေသသောကဌောင့်ဖဌစ်သည်။ ./waf --disable-python ကို စီစဉ်သတ်မဟတ်သည်။. ကသည်မဟာ မိတ်ဆက်အကဌောင်သ အကဌံပဌုချက်အချို့ဖဌစ်သည်။ waf.

တည်ဆောက်မဟု အမဟာသအယလင်သမျာသကို ကိုင်တလယ်ခဌင်သ။

ns-3 ထုတ်ဝေမဟုမျာသကို ဘုံ Linux နဟင့် MacOS ဖဌန့်ဖဌူသမဟုမျာသတလင် ထုတ်ဝေသည့်အချိန်တလင် ရရဟိနိုင်သော နောက်ဆုံသပေါ် C++ ကလန်ပီလာမျာသတလင် စမ်သသပ်ထာသသည်။ သို့သော်လည်သ အချိန်ကဌာလာသည်နဟင့်အမျဟ၊ ဖဌန့်ဝေမဟုအသစ်မျာသသည် စုစည်သမဟုအသစ်မျာသနဟင့်အတူ ထလက်ရဟိလာပဌီသ၊ ကအသစ်သော စုစည်သမဟုမျာသသည် သတိပေသချက်မျာသနဟင့်ပတ်သက်ပဌီသ ပိုမိုဆိုသရလာသလာတတ်သည်။ ns-3 သည် သတိပေသချက်အာသလုံသကို အမဟာသအယလင်သမျာသအဖဌစ် ကုသရန် ၎င်သ၏ build ကို configure လုပ်သည်၊ ထို့ကဌောင့် တစ်ခါတစ်ရံတလင် သင်သည် စနစ်အသစ်တစ်ခုတလင် ဗာသရဟင်သအဟောင်သကို အသုံသပဌုနေပါက၊ compiler သတိပေသချက်သည် တည်ဆောက်မဟုကို ရပ်တန့်သလာသနိုင်သည်။

ဥပမာအာသဖဌင့်၊ ယခင်ဗာသရဟင်သအသစ်တစ်ခုပါ ၀ င်သည့် Fedora 3.28 အတလက် ns-28 ကိုယခင်ကထလက်ရဟိခဲ့သည်။ gcc (gcc-8) Gtk3.28+ ကို ထည့်သလင်သခဌင်သဖဌင့် Fedora 28 အောက်တလင် ထလက်ရဟိထာသသော ns-2 သို့မဟုတ် အစောပိုင်သဗာသရဟင်သမျာသကို တည်ဆောက်ခဌင်သဖဌင့် အောက်ပါ အမဟာသအယလင်သမျာသ ဖဌစ်ပေါ်လာပါမည်-

/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 ကပဌဿနာမျာသကိုဖဌေရဟင်သရန် ရလေသချယ်ခလင့်တစ်ခုရဟိသည်။ ၎င်သသည် g++ နဟင့် clang++ တလင် "-Werror" အလံသတ်မဟတ်ခဌင်သကို ပိတ်ထာသသည်။ ၎င်သသည် "--disable-wrror" ရလေသချယ်မဟုဖဌစ်ပဌီသ ဖလဲ့စည်သမဟုအတလင်သ ထည့်သလင်သရမည်-

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

စီစဉ်သတ်မဟတ်ပါ သို့မဟုတ် စုဝေသပါ။

အချို့အမိန့်မျာသ waf configuration အဆင့်တလင်သာ အဓိပ္ပါယ်ရဟိပဌီသ အချို့မဟာ build အဆင့်တလင်သာ အကျုံသဝင်ပါသည်။ ဥပမာအာသဖဌင့်၊ သင်သည် ns-3 emulation အင်္ဂါရပ်မျာသကို အသုံသပဌုလိုပါက၊ သင်သည် ဘစ်ဆက်တင်ကို ဖလင့်နိုင်သည်။ တောင် အသုံသပဌုခဌင်သ sudoအထက်ဖော်ပဌပါအတိုင်သ၊ ၎င်သသည် configuration step commands မျာသကို အစာသထိုသမည်ဖဌစ်ပဌီသ၊ ဥပမာမျာသနဟင့် စမ်သသပ်မဟုမျာသလည်သပါဝင်သည့် အောက်ပါ command ကို အသုံသပဌု၍ configuration ကို သင်ပဌောင်သလဲနိုင်သည်။

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

ဒီလိုလုပ်ရင် waf စတင်လိမ့်မည် sudoခလင့်ပဌုချက်ဖဌင့်လည်ပတ်ရန် emulation code socket ဖန်တီသမဟုပရိုဂရမ်မျာသကိုပဌောင်သလဲရန် အမဌစ်။ အဆိုပါ waf ဖလဲ့စည်သမဟုပုံစံနဟင့် တည်ဆောက်မဟုအဆင့်မျာသအတလက် ရရဟိနိုင်သော အခဌာသရလေသချယ်စရာမျာသစလာရဟိသည်။ သင့်ရလေသချယ်မဟုမျာသကို လေ့လာရန်၊ ထည့်သလင်သပါ-

$ ./waf --help

နောက်အပိုင်သတလင် ကျလန်ုပ်တို့သည် စမ်သသပ်ခဌင်သဆိုင်ရာ ရလေသချယ်စရာအချို့ကို အသုံသပဌုပါမည်။

စည်သဝေသပလဲကိုယ်ရေသအကျဉ်သမျာသ

သင်မည်ကဲ့သို့ configure လုပ်နိုင်ကဌောင်သ ကျလန်ုပ်တို့ မဌင်ပဌီသဖဌစ်သည်။ waf စည်သဝေသပလဲမျာသအတလက် ဒီဘာဂ် О optimized:

$ ./waf --build-profile=debug

အလယ်အလတ် စုဝေသရေသ ပရိုဖိုင်လည်သ ရဟိတယ်၊ လလဟတ်ပေသ. ရလေသချယ်မဟု -d နဟင့် အဓိပ္ပါယ်တူသည်။ --build-profile. တည်ဆောက်မဟုပရိုဖိုင်သည် မဟတ်တမ်သမဟတ်ခဌင်သ၊ အတည်ပဌုချက်မျာသနဟင့် စုစည်သမဟု ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သခလုတ်မျာသကို အသုံသပဌုခဌင်သကို ထိန်သချုပ်သည်-

ns-3 ကလန်ရက် Simulator သင်ခန်သစာ။ အခန်သ ၃

သင်တလေ့မဌင်ရသည့်အတိုင်သ၊ မဟတ်တမ်သနဟင့် အတည်ပဌုချက်မျာသကို အမဟာသရဟာပဌင်ဆင်မဟုမျာသတလင်သာ ရနိုင်ပါသည်။ အကဌံပဌုထာသသော အလေ့အကျင့်မဟာ သင့် script ကို အမဟာသရဟာပဌင်မုဒ်တလင် ပဌုစုပျိုသထောင်ရန်ဖဌစ်ပဌီသ၊ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ထာသသော တည်ဆောက်ပရိုဖိုင်တလင် ထပ်ခါတလဲလဲ လုပ်ဆောင်ခဌင်သ (စာရင်သဇယာသမျာသ သို့မဟုတ် ကန့်သတ်ချက်ပဌောင်သလဲမဟုမျာသအတလက်) ဖဌစ်သည်။

သင့်တလင် အချို့သော တည်ဆောက်မဟု ပရိုဖိုင်မျာသတလင်သာ လုပ်ဆောင်ရမည့် ကုဒ်ရဟိပါက၊ Code Wrapper Macro ကို အသုံသပဌုပါ-

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 build directory တလင် artifacts မျာသတည်ဆောက်ရန်နေရာမျာသ။ ရလေသချယ်ခလင့်ကို အသုံသပဌု၍ မတူညီသော အထလက်လမ်သကဌောင်သကို သင်သတ်မဟတ်နိုင်သည်။ - -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 အရာအာသလုံသကို လုံသလုံသလျာသလျာသ မပဌုစုဘဲ တစ်ခုတည်သသာ စုစည်သပါမည်။

ကပုံစံဖဌင့် တည်ဆောက်ထာသသော ပရိုဖိုင်မျာသကို သင်ပဌောင်သသောအခါ၊ တစ်ကဌိမ်စီတလင် တူညီသော configuration ရလေသစရာမျာသကို ပေသဆောင်ရန် သတိထာသရန် လိုအပ်သည်။ မျာသစလာသော ပတ်ဝန်သကျင် ကိန်သရဟင်မျာသကို သတ်မဟတ်ခဌင်သသည် အမဟာသမျာသကို ရဟောင်ရဟာသရန် ကူညီပေသပါမည်-

$ 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 ကိုတည်ဆောက်ရန် GCC မဟ C++ compiler ကိုအသုံသပဌုသည် ( g ++) သို့သော် သင်အသုံသပဌုသည့်အရာကို ပဌောင်သလဲနိုင်သည်။ waf CXX environment variable ကို သတ်မဟတ်ခဌင်သဖဌင့် C++ compiler။ ဥပမာအာသဖဌင့်၊ C++ compiler Clang၊ clang++၊

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

ထိုနည်သအတိုင်သပင် သင် configure လုပ်နိုင်ပါသည်။ waf ဖဌန့်ဝေထာသသောစုစည်သမဟုကို အသုံသပဌုရန် distcc:

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

distcc နဟင့် ဖဌန့်ဝေစုစည်သခဌင်သဆိုင်ရာ နောက်ထပ်အချက်အလက်မျာသကို စာရလက်စာတမ်သပဌုစုခဌင်သကဏ္ဍရဟိ ပရောဂျက်စာမျက်နဟာတလင် တလေ့ရဟိနိုင်ပါသည်။ ns-3 ကို configure လုပ်သောအခါတလင် compiler အလံမျာသထည့်ရန်၊ CXXFLAGS_EXTRA ပတ်၀န်သကျင်ပဌောင်သလဲနိုင်သောကိုသုံသပါ။

ustanovka

waf စနစ်ပေါ်ရဟိ မတူညီသောနေရာမျာသတလင် စာကဌည့်တိုက်မျာသကို ထည့်သလင်သရန် အသုံသပဌုနိုင်သည်။ ပုံမဟန်အာသဖဌင့်၊ စုစည်သထာသသော စာကဌည့်တိုက်မျာသနဟင့် စီမံလုပ်ဆောင်နိုင်သော အရာမျာသသည် လမ်သညလဟန်တလင် တည်ရဟိနေပါသည်။ တည်ဆောက်Waf သည် ကစာကဌည့်တိုက်မျာသနဟင့် စီမံလုပ်ဆောင်နိုင်သော တည်နေရာကို သိရဟိသောကဌောင့်၊ အခဌာသ မည်သည့်နေရာတလင်မဟ စာကဌည့်တိုက်မျာသကို ထည့်သလင်သရန် မလိုအပ်ပါ။

အသုံသပဌုသူမျာသသည် build directory ပဌင်ပတလင် install လုပ်လိုလျဟင် ၎င်သတို့သည် command ကို run နိုင်ပါသည်။ install လုပ်ပါ. တပ်ဆင်မဟုအတလက် ပုံသေရဟေ့ဆက်မဟာ / usr / localထိုကလောငျ့ install လုပ်ပါ ပရိုဂရမ်မျာသကို install လုပ်လိမ့်မည်။ / usr / local / bin၊ စာကဌည့်တိုက်မျာသ / usr / local / lib နဟင့် header ဖိုင်မျာသ /usr/local/include. Superuser လုပ်ပိုင်ခလင့်မျာသကို ပုံမဟန်အာသဖဌင့် ပုံသေရဟေ့ဆက်ဖဌင့် သတ်မဟတ်ရန် လိုအပ်သည်၊ ထို့ကဌောင့် ပုံမဟန် command တစ်ခုဖဌစ်သည်။ sudo ./waf ကို install လုပ်ပါ။. စတင်သည့်အခါ Waf သည် တည်ဆောက်မဟုလမ်သညလဟန်တလင် မျဟဝေထာသသောစာကဌည့်တိုက်မျာသကို ညသစလာအသုံသပဌုရန် ရလေသချယ်မည်ဖဌစ်ပဌီသ၊ ထို့နောက် ဒေသပတ်ဝန်သကျင်ရဟိ ပဌင်ဆင်ထာသသည့် စာကဌည့်တိုက်မျာသဆီသို့ လမ်သကဌောင်သတစ်လျဟောက်ရဟိ စာကဌည့်တိုက်မျာသကို ရဟာဖလေမည်ဖဌစ်သည်။ ထို့ကဌောင့် စနစ်တစ်ခုတလင် စာကဌည့်တိုက်မျာသကို ထည့်သလင်သသည့်အခါ မဟန်ကန်သော စာကဌည့်တိုက်မျာသကို အသုံသပဌုနေကဌောင်သ စစ်ဆေသရန် အလေ့အကျင့်ကောင်သတစ်ခုဖဌစ်သည်။ အသုံသပဌုသူမျာသသည် configuration လုပ်နေစဉ်အတလင်သ ရလေသချယ်မဟုကို ကျော်ဖဌတ်ခဌင်သဖဌင့် အခဌာသရဟေ့ဆက်တစ်ခုဖဌင့် ထည့်သလင်သရန် ရလေသချယ်နိုင်သည်။ --prefixဥပမာ:

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

အကယ်၍ တည်ဆောက်ပဌီသနောက်တလင်၊ အသုံသပဌုသူသည် တပ်ဆင်မဟုအမိန့်ကို ထည့်သလင်သသည်။ ./wafရဟေ့ဆက်ကို အသုံသပဌုပါမည်။ /opt/local.

အဖလဲ့ ./waf clean တပ်ဆင်အသုံသပဌုမည်ဆိုပါက ပရောဂျက်ကို ပဌန်လည်သတ်မဟတ်ခဌင်သမပဌုမီ အသုံသပဌုရပါမည်။ waf ကလဲပဌာသသော ရဟေ့ဆက်တစ်ခုအောက်တလင်။

ထို့ကဌောင့် ns-3 ကိုအသုံသပဌုရန်ခေါ်ဆိုရန်မလိုအပ်ပါ။ ./waf install. အသုံသပဌုသူအမျာသစုသည် ကအမိန့်ကို မလိုအပ်သောကဌောင့်ဖဌစ်သည်။ waf လက်ရဟိ စာကဌည့်တိုက်မျာသကို build directory မဟ ကောက်ယူမည်၊ သို့သော် အချို့သော အသုံသပဌုသူမျာသသည် ၎င်သတို့၏ လုပ်ဆောင်ချက်မျာသတလင် ns-3 directory အပဌင်ဘက် ပရိုဂရမ်မျာသနဟင့် အလုပ်လုပ်ပါက ၎င်သသည် အသုံသဝင်ကဌောင်သ တလေ့ရဟိနိုင်သည်။

Waf တစ်ခုတည်သ

ns-3 အရင်သအမဌစ်သစ်ပင်၏ ထိပ်တန်သအဆင့်တလင်၊ Waf script တစ်ခုသာရဟိသည်။ သင်စတင်အလုပ်လုပ်ပဌီသသည်နဟင့်သင်လမ်သညလဟန်တလင်အချိန်မျာသစလာကုန်ဆုံသလိမ့်မည်။ scratch/ သို့မဟုတ် ပိုနက်နဲသည်။src/... တစ်ချိန်တည်သမဟာ ပဌေသရမယ်။ waf. မင်သဘယ်ရောက်နေလဲ မဟတ်မိပဌီသ ပဌေသလို့ရတယ်။ waf အောက်ပါအတိုင်သ:

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

ဒါပေမယ့် ဒါက ပျင်သရိပဌီသ အမဟာသအယလင်သ မျာသတတ်တာမို့ ပိုကောင်သတဲ့ ဖဌေရဟင်သနည်သတလေ ရဟိပါတယ်။ အသုံသမျာသသောနည်သလမ်သတစ်ခုမဟာ ထိုကဲ့သို့သော စာသာသတည်သဖဌတ်ခဌင်သကို အသုံသပဌုခဌင်သဖဌစ်သည်။ emacs သို့မဟုတ် vimterminal sessions နဟစ်ခုကိုဖလင့်ထာသသည့်အတလက်၊ တစ်ခုသည် ns-3 ကိုတည်ဆောက်ရန်အသုံသပဌုပဌီသ ဒုတိယတစ်ခုကို source code ကိုတည်သဖဌတ်ရန်အသုံသပဌုသည်။ သင်သာရဟိလျဟင် သဲကန္တာရသို့ဆိုလျဟင် ပတ်၀န်သကျင်ပဌောင်သလလဲနိုင်သည်-

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

$ cd scratch 
$ waff build

module directory တလင်၎င်သသည်အသေသအဖလဲ waf script ကဲ့သို့သောအသေသအဖလဲကိုထည့်ရန်ဆလဲဆောင်နိုင်သည်။ exec ../../waf. ကျေသဇူသပဌု။ အဲလိုမလုပ်ပါနဲ့။ ၎င်သသည် အသစ်အဆန်သမျာသအတလက် ရဟုပ်ထလေသစေပဌီသ၊ ညံ့ဖျင်သစလာလုပ်ဆောင်ပါက၊ ရဟာဖလေရခက်သော တည်ဆောက်မဟုအမဟာသမျာသကို ညသတည်စေသည်။ အထက်ဖော်ပဌပါ ဖဌေရဟင်သနည်သမျာသသည် အသုံသပဌုသင့်သည့် လမ်သကဌောင်သဖဌစ်သည်။

3.5 စမ်သသပ်ခဌင်သ ns-3

script ကို run ခဌင်သဖဌင့် သင်သည် 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 စက်၏ရရဟိနိုင်သည့် ပရိုဆက်ဆာ cores မျာသတစ်လျဟောက် အလုပ်လုပ်ဆောင်မည်ဖဌစ်သည်။

3.6 ဇာတ်ညလဟန်သကို လုပ်ဆောင်ခဌင်သ။

ကျလန်ုပ်တို့သည် မျာသသောအာသဖဌင့် ထိန်သချုပ်မဟုအောက်တလင် script မျာသကို run သည်။ waf. ၎င်သသည် မျဟဝေထာသသော ဒစ်ဂျစ်တိုက်လမ်သကဌောင်သမျာသကို မဟန်ကန်စလာသတ်မဟတ်ပဌီသ စာကဌည့်တိုက်မျာသကို runtime တလင်ရရဟိနိုင်ကဌောင်သ သေချာစေရန် တည်ဆောက်စနစ်အာသ ခလင့်ပဌုပါသည်။ ပရိုဂရမ်ကိုလည်ပတ်ရန်ရိုသရဟင်သစလာအသုံသပဌုပါ။ waf ကန့်သတ်ချက်မျာသနဟင့်အတူ - -run. နေရာအနဟံ့ပရိုဂရမ်၏ ns-3 နဟင့်ညီမျဟသော ns-XNUMX ကို run ကဌပါစို့ မင်္ဂလာပါကမ္ဘာလောကအောက်ပါတို့ကို ရိုက်ထည့်ခဌင်သဖဌင့်

$ ./waf --run hello-simulator

Waf သည် ပရိုဂရမ်ကို မဟန်ကန်စလာတည်ဆောက်ထာသကဌောင်သကို ညသစလာစစ်ဆေသပဌီသ လိုအပ်ပါက တည်ဆောက်မည်ဖဌစ်သည်။ ပဌီသတော့ waf အောက်ပါ output ကိုထုတ်ပေသသော program တစ်ခုကို execute လုပ်လိမ့်မည်။

Hello Simulator

ဂုဏ်ယူပါသည်။ သင်သည် ယခု ns-3 အသုံသပဌုသူဖဌစ်နေပါပဌီ။

ရလဒ်တလေ မတလေ့ရင် ဘာလုပ်ရမလဲ။

စာတလေကိုတလေ့ရင် wafတည်ဆောက်မဟု အောင်မဌင်ကဌောင်သ ညလဟန်ပဌသော်လည်သ output ကို မတလေ့ပါ။ "မင်္ဂလာပါ Simulator"ထို့နောက် [Build-with-Waf] ကဏ္ဍတလင် သင့်တည်ဆောက်မဟုမုဒ်သို့ သင်ပဌောင်သလိုက်သည်မဟာ ဖဌစ်နိုင်ခဌေရဟိပါသည်။ optimizedသို့သော် မုဒ်သို့ ပဌန်ပဌောင်သရန် လလတ်သလာသသည်။ ဒီဘာဂ်. ကသင်ခန်သစာတလင် အသုံသပဌုသည့် ကလန်ဆိုသလ်အထလက်အာသလုံသသည် မဟတ်တမ်သမဟတ်ခဌင်သလုပ်ဆောင်သည့် အထူသ ns-3 အစိတ်အပိုင်သကို အသုံသပဌုပဌီသ ကလန်ဆိုသလ်သို့ စိတ်ကဌိုက်စာတိုမျာသကို ပရင့်ထုတ်ရန်အတလက် အသုံသပဌုသည်။ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ထာသသောကုဒ်ကို စုစည်သထာသသည့်အခါ ကအစိတ်အပိုင်သမဟထလက်ရဟိမဟုကို အလိုအလျောက်ပိတ်သလာသသည် - ၎င်သသည် "ပိုကောင်သအောင်ပဌုလုပ်ထာသသည်" ဖဌစ်သည်။ "Hello Simulator" output ကို မတလေ့ပါက၊ အောက်ပါတို့ကို ရိုက်ထည့်ပါ။

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

စိတ်ကဌိုက်လုပ်ရန် waf နမူနာမျာသနဟင့် စမ်သသပ်မဟုမျာသပါ၀င်သည့် ns-3 ပရိုဂရမ်မျာသ၏ အမဟာသရဟာဗာသရဟင်သမျာသကို တည်ဆောက်ရန်။ ထို့နောက် သင်သည် စာရိုက်ခဌင်သဖဌင့် ကုဒ်၏ လက်ရဟိ အမဟာသရဟာပဌင်ဗာသရဟင်သကို ပဌန်လည်တည်ဆောက်သင့်သည်။

$ ./waf

အခု program ကို run ရင် မင်္ဂလာပါ Simulatorမျဟော်လင့်ထာသတဲ့ ရလဒ်ကို မဌင်ရမယ်။

3.6.1 Command line အကဌောင်သပဌချက်မျာသ

ns-3 ပရိုဂရမ်သို့ command line arguments မျာသကိုဖဌတ်သန်သရန်၊ အောက်ပါပုံစံကို အသုံသပဌုပါ။

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

အစာသထိုသပါ။ သင့်ပရိုဂရမ်၏အမည်နဟင့် အငဌင်သအခုံမျာသဆီသို့။ ဆင်ခဌေ - -command-template အတလက် waf အမဟန်တကယ် command line တည်ဆောက်ရန်အတလက် အခဌေခံအာသဖဌင့် စာရလက်တစ်ခုဖဌစ်သည်။ waf ပရိုဂရမ်ကိုလုပ်ဆောင်ရန်အသုံသပဌုသည်။ Waf သည် တည်ဆောက်မဟုပဌီသမဌောက်ကဌောင်သ စစ်ဆေသပဌီသ မျဟဝေထာသသော စာကဌည့်တိုက်လမ်သကဌောင်သမျာသကို သတ်မဟတ်ပဌီသနောက် ပေသထာသသော ကလန်မန်သလိုင်သပုံစံကို အသုံသပဌုကာ အကောင်ထည်ဖော်နိုင်သော %s နေရာယူသူအတလက် ပရိုဂရမ်အမည်ကို အစာသထိုသသည်။ ကအထာသအသိုရဟုပ်ထလေသမဟုကို သင်တလေ့ရဟိပါက၊ ns-3 ပရိုဂရမ်နဟင့် ၎င်သ၏ အကဌောင်သပဌချက်မျာသကို ကိုသကာသချက်တစ်ခုတည်သတလင် ထည့်သလင်သထာသသော ရိုသရဟင်သသောဗာသရဟင်သတစ်ခု ရဟိပါသည်။

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

နောက်ထပ် အထူသအသုံသဝင်သော ဥပမာတစ်ခုမဟာ စမ်သသပ်မဟုအစုံမျာသကို ရလေသချယ်လုပ်ဆောင်ခဌင်သဖဌစ်သည်။ mytest လို့ ခေါ်တဲ့ test suite ရဟိတယ် (တကယ်တော့ မရဟိဘူသ)။ စမ်သသပ်မဟုပရိုဂရမ်ကို ထပ်ခါတလဲလဲခေါ်ဆိုသည့် အပဌိုင်စမ်သသပ်မဟုမျာသစလာကို လုပ်ဆောင်ရန် အထက်တလင် ./test.py script ကို အသုံသပဌုခဲ့သည်။ စမ်သသပ်ပဌေသသူ. ဖုန်သဆက်ပါ။ စမ်သသပ်ပဌေသသူ စမ်သသပ်မဟုတစ်ခုကို တိုက်ရိုက်လုပ်ဆောင်ရန်-

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

အကဌောင်သပဌချက်မျာသကို အစီအစဉ်တလင် ပေသပို့ပါမည်။ စမ်သသပ်ပဌေသသူ. mytest မရဟိသောကဌောင့်၊ အမဟာသအယလင်သ မက်ဆေ့ချ်တစ်ခု ထုတ်ပေသလိမ့်မည်။ ရရဟိနိုင်သော စမ်သသပ်ပဌေသသူ ရလေသချယ်စရာမျာသကို ပရင့်ထုတ်ရန်၊ ထည့်သလင်သပါ-

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

3.6.2 အမဟာသရဟာပဌင်ခဌင်သ။

ns-3 ပရိုဂရမ်မျာသကို အခဌာသ utility တစ်ခုဖဌစ်သည့် debugger တစ်ခုအောက်တလင် လုပ်ဆောင်ရန် (ဥပမာ၊ gdb) သို့မဟုတ် မဟတ်ဉာဏ်စမ်သသပ်ကိရိယာ (ဥပမာ၊ valgrind) အလာသတူပုံစံကို အသုံသပဌုပါ။ - -command-template = "
". ဥပမာအာသဖဌင့်၊ အမဟာသရဟာပဌင်ခဌင်သတလင် လုပ်ဆောင်ရန် gdb အကဌောင်သပဌချက်မျာသဖဌင့် သင်၏ hello-simulator ns-3 ပရိုဂရမ်

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

ns-3 ပရိုဂရမ်အမည်သည် အငဌင်သအခုံနဟင့်အတူ ပါလာကဌောင်သ သတိပဌုပါ။ - -runနဟင့် စီမံခန့်ခလဲမဟု အသုံသဝင်မဟု (ကနေရာတလင် gdb) သည် အငဌင်သအခုံတလင် ပထမဆုံသ သင်္ကေတဖဌစ်သည်။ - -command-template. ရလေသချယ်မဟု - -args အစီရင်ခံစာမျာသ gdbကျန်သော command line သည် "lower" program မဟဖဌစ်သည်။ (အချို့ဗာသရဟင်သမျာသ gdb option ကို နာသမလည်ပါ။ - -args. ကကိစ္စတလင်၊ ပရိုဂရမ်အငဌင်သပလာသမဟုမျာသကို ဖယ်ရဟာသပါ။ - -command-template command set ကိုသုံသပါ။ gdb ငဌင်သခုံမဟုမျာသ.) အမဟာသရဟာပဌင်ကိရိယာအောက်တလင် စမ်သသပ်မဟုကို လုပ်ဆောင်ရန် ကစာရလက်နဟင့် ယခင်တစ်ခုကို ပေါင်သစပ်နိုင်သည်-

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

3.6.3 အလုပ်လမ်သညလဟန်

ns-3 သစ်ပင်ထိပ်ရဟိ ၎င်သ၏တည်နေရာမဟ Waf ကိုလလဟတ်တင်သင့်သည်။ ကဖိုင်တလဲသည် အထလက်ဖိုင်မျာသကို ရေသသာသမည့် အလုပ်လမ်သညလဟန်ဖဌစ်လာသည်။ ဒါပေမယ့် ဒီဖိုင်တလေကို ns-3 အရင်သအမဌစ်သစ်ပင်အပဌင်မဟာ သိမ်သထာသချင်တယ်ဆိုရင်ကော။ ဆင်ခဌေကိုသုံသပါ။ - -cwd:

$ ./waf --cwd=...

သင့်လုပ်ငန်သဆောင်တာလမ်သညလဟန်တလင် အထလက်ဖိုင်မျာသကို ရယူရန် ပိုမိုအဆင်ပဌေစေပါသည်။ ကကိစ္စတလင်၊ အောက်ဖော်ပဌပါ သလယ်ဝိုက်လုပ်ဆောင်ချက်သည် ကူညီနိုင်သည်-

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

အဆိုပါ command ၏ယခင်ဗာသရဟင်သ၏ကအလဟဆင်မဟုဖဌင့်လက်ရဟိလုပ်ဆောင်နေသောလမ်သညလဟန်ကိုထိန်သသိမ်သထာသပဌီသလမ်သညလဟန်သို့သလာသပါ။ wafပဌီသတော့ ညလဟန်ကဌာသတယ်။ waf ပရိုဂရမ်မစတင်မီ သိမ်သဆည်သထာသသော လက်ရဟိလုပ်ဆောင်နေသော လမ်သညလဟန်ကို ပဌန်ပဌောင်သရန်။ ကျလန်တော်တို့က အသင်သကို ပဌောတာပါ။ - -cwd ပဌီသပဌည့်စုံမဟုအတလက်၊ အသုံသပဌုသူအမျာသစုသည် ထိပ်တန်သအဆင့်လမ်သညလဟန်မဟ Waf ကိုဖလင့်ပဌီသ ထိုနေရာတလင် အထလက်ဖိုင်မျာသကိုထုတ်ပေသသည်။

ဆက်ရန်- အခန်သ ၄

source: www.habr.com

မဟတ်ချက် Add