ns-3 நெட்வொர்க் சிமுலேட்டர் பயிற்சி. அத்தியாயம் 3

ns-3 நெட்வொர்க் சிமுலேட்டர் பயிற்சி. அத்தியாயம் 3
அத்தியாயம் 1,2

3 தொடங்குதல்
3.1 கண்ணோட்டம்
3.2 முன்நிபந்தனைகள்
3.2.1 ns-3 வெளியீட்டை ஆதாரக் காப்பகமாகப் பதிவிறக்குகிறது
3.3 Git ஐப் பயன்படுத்தி 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++ அல்லது பைதான் நிரலாக்க மொழிகள் பயன்படுத்தப்படுகின்றன.

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++ கம்பைலர், பைதான், ஒரு மூல குறியீடு திருத்தி (உதாரணமாக, ஊக்கம், இமேக்ஸ் அல்லது கிரகணம்) மற்றும், வளர்ச்சி களஞ்சியங்கள் பயன்படுத்தப்பட்டால், Git பதிப்பு கட்டுப்பாட்டு அமைப்புகள். பெரும்பாலான முதல் முறை பயனர்கள் தங்கள் உள்ளமைவில் சில ns-3 மேம்பட்ட அம்சங்களைக் காணவில்லை எனப் புகாரளித்தால் கவலைப்படத் தேவையில்லை, ஆனால் முழு நிறுவலை விரும்புவோருக்கு, திட்டமானது பல பயனுள்ள உதவிக்குறிப்புகள் மற்றும் தந்திரங்களைக் கொண்ட பக்கங்களை உள்ளடக்கிய விக்கியை வழங்குகிறது. அத்தகைய ஒரு பக்கம் நிறுவல் பக்கம் ஆகும், இதில் பல்வேறு கணினிகளுக்கான நிறுவல் வழிமுறைகள் கிடைக்கின்றன: https://www.nsnam.org/wiki/Installation.

இந்த விக்கியின் முன்நிபந்தனைகள் பிரிவு பொதுவான ns-3 விருப்பங்களை ஆதரிக்க எந்த தொகுப்புகள் தேவை என்பதை விளக்குகிறது மற்றும் Linux அல்லது macOS இன் பொதுவான சுவைகளில் அவற்றை நிறுவப் பயன்படுத்தப்படும் கட்டளைகளையும் வழங்குகிறது.

ns-3 விக்கி பக்கத்தை அல்லது முக்கிய இணையதளத்தை ஆராய இந்த வாய்ப்பை நீங்கள் பயன்படுத்திக் கொள்ளலாம்: https://www.nsnam.org, ஏனெனில் அங்கு நிறைய தகவல்கள் உள்ளன. ns-3 (ns-3.29) இன் சமீபத்திய பதிப்பில் தொடங்கி, ns-3ஐ இயக்க பின்வரும் கருவிகள் தேவை:

கருவி தொகுப்பு/பதிப்பு

  • சி++ கம்பைலர்
    clang++ அல்லது g++ (g++ பதிப்பு 4.9 அல்லது அதற்கு மேற்பட்டது)
  • பைதான்
    python2 பதிப்பு >= 2.7.10, அல்லது python3 பதிப்பு >=3.4
  • Git தகவல்
    ஏதேனும் சமீபத்திய பதிப்பு (GitLab.com இல் ns-3 ஐ அணுக)
  • தார்
    ஏதேனும் சமீபத்திய பதிப்பு (என்எஸ்-3 வெளியீட்டைத் திறக்க)
  • பன்சிப்2
    ஏதேனும் சமீபத்திய பதிப்பு (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 Git ஐப் பயன்படுத்தி ns-3 பதிவிறக்கம்

ns-3 குறியீடு GitLab.com இல் உள்ள Git களஞ்சியங்களில் கிடைக்கிறது https://gitlab.com/nsnam/. குழு nsnam திறந்த மூல திட்டத்தால் பயன்படுத்தப்படும் பல்வேறு களஞ்சியங்களை ஒன்றிணைக்கிறது.

Git களஞ்சியங்களைப் பயன்படுத்தத் தொடங்குவதற்கான எளிதான வழி, சுற்றுச்சூழலை ஃபோர்க் செய்வது அல்லது குளோன் செய்வது ns-3-அலினோன். இது மிகவும் பொதுவாகப் பயன்படுத்தப்படும் ns-3 துணை அமைப்புகளின் ஏற்றுதல் மற்றும் அசெம்பிளியை நிர்வகிக்கும் ஸ்கிரிப்ட்களின் தொகுப்பாகும். நீங்கள் Git க்கு புதியவராக இருந்தால், "fork" மற்றும் "clone" ஆகிய சொற்கள் உங்களுக்குப் பரிச்சயமில்லாமல் இருக்கலாம்; அப்படியானால், 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-அலினோன் கூடுதல் களஞ்சியங்கள் பதிவிறக்கம் செய்யப்படும் ns-3, ரொட்டி சுடுவது, pybindgen и netanim.

கருத்து
சுத்தமான Ubuntu16.04 கொண்ட கணினியில், நான் கட்டளையை இதற்கு மாற்ற வேண்டும்: $ sudo python3 download.py -n ns-3.29 (இனி மொழிபெயர்ப்பாளரின் குறிப்புகள்).

3.3.1 பேக்கைப் பயன்படுத்தி ns-3 ஐ ஏற்றுகிறது

மேலே உள்ள இரண்டு முறைகள் (மூலக் காப்பகம் அல்லது களஞ்சியம் ns-3-அலினோன் Git வழியாக) பல துணை நிரல்களுடன் எளிமையான ns-3 நிறுவலைப் பெறுவதற்கு பயனுள்ளதாக இருக்கும்(pybindgen பைதான் பிணைப்புகளை உருவாக்க மற்றும் netanim நெட்வொர்க் அனிமேஷனுக்காக). ns-3-அலினோனில் முன்னிருப்பாக வழங்கப்பட்ட மூன்றாவது களஞ்சியம் அழைக்கப்படுகிறது ரொட்டி சுடுவது.

சுட்டுக்கொள்ள ns-3 திட்டத்திற்காக உருவாக்கப்பட்ட பல களஞ்சியங்களிலிருந்து ஒருங்கிணைக்கப்பட்ட மென்பொருளை உருவாக்குவதற்கான ஒரு கருவியாகும். சுட்டுக்கொள்ள ns-3 இன் டெவலப்மெண்ட் பதிப்புகளைப் பெறவும், சுற்றுச்சூழல் போன்ற ns-3 விநியோகத்தின் அடிப்படைப் பதிப்பின் நீட்டிப்புகளைப் பதிவிறக்கவும் உருவாக்கவும் பயன்படுத்தலாம். நேரடி குறியீடு செயல்படுத்தல், CradleNetwork உருவகப்படுத்துதல் தொட்டில், புதிய பைதான் பிணைப்புகள் மற்றும் பல்வேறு 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. என்எஸ்-அலினோன்-3.29: கிளிக் ரூட்டிங் மற்றும் நெட்வொர்க் சிமுலேஷன் தொட்டில், ns-3க்கான Openflow போன்ற பிற கூடுதல் அம்சங்களை உள்ளடக்கிய ஒரு தொகுதி.

  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 சூழல் மாறி), எடுத்துக்காட்டாக பின்வருமாறு (லினக்ஸ் பாஷ் ஷெல்லுக்கான எடுத்துக்காட்டு). "பேக்" கோப்பகத்திற்குச் சென்று, பின்வரும் சூழல் மாறிகளை அமைக்கவும்:

$ 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 எனப்படும் உருவாக்க கருவியைப் பயன்படுத்தி கட்டமைக்கப்பட்டுள்ளது Wafகீழே விவரிக்கப்பட்டுள்ளது. பெரும்பாலான பயனர்கள் வேலை செய்வார்கள் Waf, ஆனால் நீங்கள் தொடங்குவதற்கு அல்லது மிகவும் சிக்கலான உருவாக்கங்களை ஒழுங்கமைக்க உதவும் சில எளிமையான ஸ்கிரிப்டுகள் உள்ளன. எனவே, நீங்கள் படிக்கும் முன் Waf, பாருங்கள் build.py மற்றும் சட்டசபை ரொட்டி சுடுவது.

3.4.1 build.py கொண்ட கட்டிடம்

எச்சரிக்கை மேலே விவரிக்கப்பட்டுள்ளபடி பெறப்பட்ட மூலக் காப்பகப் பதிப்பிலிருந்து மட்டுமே இந்த உருவாக்கப் படி கிடைக்கும்; ஜிட் அல்லது பேக் மூலம் பதிவிறக்கம் செய்யப்படவில்லை.

வெளியீட்டு காப்பகத்துடன் பணிபுரியும் போது தார்பால்இல் ns-3-அலினோன் கூறுகளை அசெம்பிள் செய்வதை எளிதாக்கும் எளிமையான ஸ்கிரிப்ட் உள்ளது. இது build.py என்று அழைக்கப்படுகிறது. இந்தத் திட்டம் உங்களுக்கான திட்டத்தை மிகவும் பயனுள்ள வகையில் அமைக்கும். இருப்பினும், ns-3 உடன் மிகவும் மேம்பட்ட அமைப்பு மற்றும் வேலை பொதுவாக ns-3 இன் சொந்த உருவாக்க அமைப்பு, Waf ஐப் பயன்படுத்துவதை உள்ளடக்குகிறது, இது இந்த டுடோரியலில் பின்னர் அறிமுகப்படுத்தப்படும்.

பயன்படுத்தி பதிவிறக்கம் செய்திருந்தால் தார்பால், பின்னர் உங்கள் கோப்பகத்தில் ~/பணியிடம் ஏதோ ஒரு பெயர் கொண்ட அடைவு என்எஸ்-அலினோன்-3.29. பின்வருவனவற்றை பதிவு செய்யுங்கள்:

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

அழைக்கும் போது build.py இந்த டுடோரியலில் பயன்படுத்தப்படும் எடுத்துக்காட்டுகள் மற்றும் சோதனைகளை உருவாக்க கட்டளை வரி வாதங்களைப் பயன்படுத்தினோம், அவை முன்னிருப்பாக ns-3 இல் உருவாக்கப்படவில்லை. முன்னிருப்பாக, நிரல் கிடைக்கக்கூடிய அனைத்து தொகுதிகளையும் உருவாக்குகிறது. பின்னர், நீங்கள் விரும்பினால், எடுத்துக்காட்டுகள் மற்றும் சோதனைகள் இல்லாமல் ns-3 ஐ உருவாக்கலாம் அல்லது உங்கள் வேலைக்குத் தேவையில்லாத தொகுதிகளை விலக்கலாம்.

நீங்கள் ஏற்றிய பல்வேறு பகுதிகளை உருவாக்கும்போது, ​​ஸ்கிரிப்ட் மூலம் பல கம்பைலர் வெளியீடு செய்திகள் காட்டப்படுவதைக் காண்பீர்கள். முதலில் ஸ்கிரிப்ட் அனிமேட்டரை உருவாக்க முயற்சிக்கும் netanim, பின்னர் பிணைப்பு ஜெனரேட்டர் 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 ஐ உருவாக்க மற்றும் நூலகங்களை பராமரிக்க பயனுள்ளதாக இருக்கும். உண்மையில், அவர்கள் உருவாக்க கருவியை இயக்குகிறார்கள் 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 செயல்பாடு இயக்கப்படவில்லை எனில், ஒரு செய்தி காட்டப்படும். கட்டளையைப் பயன்படுத்த முடியும் என்பதையும் நினைவில் கொள்க சூடோ சில நிரல்களுக்கு "இயக்க நேரத்தில் குழு ஐடியை அமைக்கவும்" என்ற suid பிட்டை அமைக்க. இது முன்னிருப்பாக இயக்கப்படவில்லை, எனவே இந்த அம்சம் "இயக்கப்படவில்லை" என்று தோன்றும். இறுதியாக, இயக்கப்பட்ட விருப்பங்களின் பட்டியலைப் பெற, பயன்படுத்தவும் 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

இருப்பினும், சிறப்பு ஆபரேட்டர் - - வழியாக கூடுதல் அளவுருக்களை அனுப்ப பயன்படுத்தலாம் வடைஎனவே மேலே உள்ள கட்டளைக்கு பதிலாக பின்வரும் கட்டளை வேலை செய்யும்:

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

ஏனெனில் இது முக்கிய கட்டளையை உருவாக்குகிறது ./waf configure --disable-python. பற்றி மேலும் சில அறிமுக குறிப்புகள் உள்ளன Waf.

உருவாக்க பிழைகளைக் கையாளுதல்

ns-3 வெளியீடுகள் பொதுவான Linux மற்றும் MacOS விநியோகங்களில் வெளியீட்டின் போது கிடைக்கும் சமீபத்திய C++ கம்பைலர்களில் சோதிக்கப்படுகின்றன. இருப்பினும், காலப்போக்கில், புதிய விநியோகங்கள் புதிய கம்பைலர்களுடன் வெளியிடப்படுகின்றன, மேலும் இந்த புதிய கம்பைலர்கள் எச்சரிக்கைகள் குறித்து அதிக அக்கறையுடன் செயல்படுகின்றன. அனைத்து எச்சரிக்கைகளையும் பிழைகளாகக் கருதும் வகையில் ns-3 அதன் கட்டமைப்பை உள்ளமைக்கிறது, எனவே சில நேரங்களில் நீங்கள் ஒரு புதிய கணினியில் பழைய பதிப்பை இயக்கினால், ஒரு கம்பைலர் எச்சரிக்கை உருவாக்கத்தை நிறுத்தலாம்.

எடுத்துக்காட்டாக, Fedora 3.28க்கான ns‑28 இன் வெளியீடு முன்பு இருந்தது, அதில் ஒரு புதிய பெரிய பதிப்பு இருந்தது. GCC (gcc-8) ஃபெடோரா 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 இந்த பிரச்சனைகளை தீர்க்க ஒரு விருப்பம் உள்ளது. இது g++ மற்றும் clang++ இல் "-Werror" கொடியை அமைப்பதை முடக்குகிறது. இது "--disable-wrror" விருப்பமாகும், மேலும் இது உள்ளமைவின் போது பயன்படுத்தப்பட வேண்டும்:

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

கட்டமைக்கவும் அல்லது அசெம்பிள் செய்யவும்

சில கட்டளைகள் Waf கட்டமைப்பு கட்டத்தில் மட்டுமே அர்த்தம் உள்ளது, மேலும் சில கட்ட கட்டத்தில் மட்டுமே செல்லுபடியாகும். எடுத்துக்காட்டாக, நீங்கள் ns-3 எமுலேஷன் அம்சங்களைப் பயன்படுத்த விரும்பினால், நீங்கள் பிட் அமைப்பை இயக்கலாம் வழக்கு பயன்படுத்தி சூடோ, மேலே விவரிக்கப்பட்டபடி. இது உள்ளமைவு படி கட்டளைகளை மேலெழுதும், எனவே நீங்கள் பின்வரும் கட்டளையைப் பயன்படுத்தி உள்ளமைவை மாற்றலாம், இதில் எடுத்துக்காட்டுகள் மற்றும் சோதனைகளும் அடங்கும்.

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

இதைச் செய்தால் Waf தொடங்கும் சூடோஎமுலேஷன் கோட் சாக்கெட் உருவாக்கும் புரோகிராம்களை அனுமதியுடன் இயக்க மாற்ற ரூட். தி Waf உள்ளமைவு மற்றும் கட்ட படிகளுக்கு இன்னும் பல விருப்பங்கள் உள்ளன. உங்கள் விருப்பங்களை ஆராய, உள்ளிடவும்:

$ ./waf --help

அடுத்த பகுதியில் சோதனை தொடர்பான சில விருப்பங்களைப் பயன்படுத்துவோம்.

சட்டசபை சுயவிவரங்கள்

நீங்கள் எவ்வாறு கட்டமைக்க முடியும் என்பதை நாங்கள் ஏற்கனவே பார்த்தோம் Waf கூட்டங்களுக்கு சரிசெய்வதற்கான и உகந்ததாக:

$ ./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 ஐ உருவாக்க GCC இலிருந்து C++ கம்பைலரைப் பயன்படுத்துகிறது ( g ++) இருப்பினும், நீங்கள் பயன்படுத்தும் ஒன்றை மாற்றலாம் Waf C++ கம்பைலர், CXX சூழல் மாறியை வரையறுப்பதன் மூலம். எடுத்துக்காட்டாக, C++ கம்பைலர் Clang, clang++,

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

அதே வழியில் நீங்கள் கட்டமைக்க முடியும் Waf பயன்படுத்தி விநியோகிக்கப்பட்ட தொகுப்பைப் பயன்படுத்த distcc:

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

distcc மற்றும் விநியோகிக்கப்பட்ட தொகுப்பு பற்றிய கூடுதல் தகவல்களை ஆவணப் பிரிவில் உள்ள திட்டப் பக்கத்தில் காணலாம். ns-3 ஐ உள்ளமைக்கும் போது கம்பைலர் கொடிகளைச் சேர்க்க, CXXFLAGS_EXTRA சூழல் மாறியைப் பயன்படுத்தவும்.

நிறுவல்

Waf கணினியில் வெவ்வேறு இடங்களில் நூலகங்களை நிறுவ பயன்படுத்தலாம். முன்னிருப்பாக, தொகுக்கப்பட்ட நூலகங்கள் மற்றும் இயங்கக்கூடியவை கோப்பகத்தில் அமைந்துள்ளன உருவாக்க, மற்றும் இந்த நூலகங்கள் மற்றும் எக்ஸிகியூட்டபிள்களின் இருப்பிடத்தை Waf அறிந்திருப்பதால், வேறு எங்கும் நூலகங்களை நிறுவ வேண்டிய அவசியமில்லை.

பயனர்கள் உருவாக்க கோப்பகத்திற்கு வெளியே நிறுவ விரும்பினால், அவர்கள் கட்டளையை இயக்கலாம் ./waf நிறுவ. நிறுவலுக்கான முன்னொட்டு முன்னொட்டு / உள்ளூர் / usr ஆனதுஎனவே ./waf நிறுவ நிரல்களை நிறுவும் / Usr / local / பின், நூலகங்கள் / Usr / local / லிபரல் மற்றும் தலைப்பு கோப்புகள் /usr/local/include. சூப்பர் யூசர் உரிமைகள் பொதுவாக இயல்புநிலை முன்னொட்டுடன் அமைக்கப்பட வேண்டும், எனவே ஒரு பொதுவான கட்டளை இருக்கும் sudo ./waf நிறுவல். தொடங்கும் போது, ​​Waf முதலில் பில்ட் டைரக்டரியில் பகிரப்பட்ட நூலகங்களைப் பயன்படுத்தத் தேர்வு செய்யும், பின்னர் உள்ளூர் சூழலில் உள்ளமைக்கப்பட்ட நூலகங்களுக்கான பாதையில் உள்ள நூலகங்களைத் தேடும். எனவே ஒரு கணினியில் நூலகங்களை நிறுவும் போது, ​​சரியான நூலகங்கள் பயன்படுத்தப்படுகின்றனவா என்பதைச் சரிபார்ப்பது நல்லது. உள்ளமைவின் போது விருப்பத்தை அனுப்புவதன் மூலம் பயனர்கள் வேறு முன்னொட்டை நிறுவ தேர்வு செய்யலாம் --prefixஎடுத்துக்காட்டாக:

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

கட்டமைத்த பிறகு, பயனர் நிறுவல் கட்டளையை உள்ளிடுவார் ./waf, முன்னொட்டு பயன்படுத்தப்படும் /விருப்பம்/உள்ளூர்.

அணி ./waf clean நிறுவல் பயன்படுத்தினால், திட்டத்தை மறுகட்டமைக்கும் முன் பயன்படுத்த வேண்டும் Waf வேறு முன்னொட்டின் கீழ்.

எனவே, ns-3 ஐப் பயன்படுத்த அழைக்க வேண்டிய அவசியமில்லை ./waf install. பெரும்பாலான பயனர்களுக்கு இந்த கட்டளை தேவையில்லை, ஏனெனில் Waf பில்ட் டைரக்டரியில் இருந்து தற்போதைய லைப்ரரிகளை எடுக்கும், ஆனால் சில பயனர்கள் தங்கள் செயல்பாடுகளில் ns-3 கோப்பகத்திற்கு வெளியே உள்ள நிரல்களுடன் பணிபுரிந்தால் இது பயனுள்ளதாக இருக்கும்.

வாஃப் ஒற்றை

ns-3 மூல மரத்தின் மேல் மட்டத்தில், ஒரே ஒரு Waf ஸ்கிரிப்ட் மட்டுமே உள்ளது. நீங்கள் வேலை செய்ய ஆரம்பித்தவுடன், நீங்கள் அடைவில் நிறைய நேரம் செலவிடுவீர்கள் scratch/ அல்லது ஆழமாகsrc/... மற்றும் அதே நேரத்தில் இயக்க வேண்டும் Waf. நீங்கள் இருக்கும் இடத்தை நினைவில் வைத்துக்கொண்டு ஓடலாம் Waf பின்வருமாறு:

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

ஆனால் இது கடினமானதாகவும், பிழையானதாகவும் இருக்கும், எனவே சிறந்த தீர்வுகள் உள்ளன. போன்ற ஒரு உரை திருத்தியைப் பயன்படுத்துவது ஒரு பொதுவான வழி இமேக்ஸ் அல்லது ஊக்கம், இதில் இரண்டு டெர்மினல் அமர்வுகள் திறக்கப்படுகின்றன, ஒன்று 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)

வால்கிரைண்ட் செயலிழப்புகள், செயலிழப்புகள் அல்லது பிழைகளை அடையாளம் காண இது ஒரு முக்கியமான செய்தியாகும், இது குறியீட்டில் உள்ள சிக்கல்கள் அல்லது கருவிகள் மற்றும் குறியீட்டிற்கு இடையில் பொருந்தாத தன்மையைக் குறிக்கிறது.

இலிருந்து இறுதி வெளியீட்டையும் நீங்கள் காண்பீர்கள் 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உருவாக்கம் வெற்றிகரமாக முடிந்ததைக் குறிக்கிறது, ஆனால் நீங்கள் வெளியீட்டைக் காணவில்லை "ஹலோ சிமுலேட்டர்", பிறகு [Build-with-Waf] பிரிவில் உங்கள் உருவாக்கப் பயன்முறையை நீங்கள் மாற்றியிருக்க வாய்ப்பு உள்ளது உகந்ததாக, ஆனால் பயன்முறைக்கு மாறுவதைத் தவறவிட்டேன் சரிசெய்வதற்கான. இந்த டுடோரியலில் பயன்படுத்தப்படும் அனைத்து கன்சோல் வெளியீடும் ஒரு சிறப்பு 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 நிரல்களை இயக்க (உதாரணமாக, ஜிடிபி) அல்லது நினைவக சோதனை கருவி (உதாரணமாக, வால்கிரைண்ட்), இதே படிவத்தைப் பயன்படுத்தவும் - -command-template = "…". எடுத்துக்காட்டாக, பிழைத்திருத்தத்தில் இயக்க ஜிடிபி உங்கள் hello-simulator 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 வேலை அடைவு

ns-3 மரத்தின் உச்சியில் உள்ள இடத்தில் இருந்து Waf ஏவப்பட வேண்டும். இந்த கோப்புறையானது வெளியீட்டு கோப்புகள் எழுதப்படும் வேலை கோப்பகமாக மாறும். ஆனால் இந்த கோப்புகளை 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

கருத்தைச் சேர்