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 వాఫ్‌తో నిర్మించండి
3.5 టెస్టింగ్ ns-3
3.6 స్క్రిప్ట్‌ను రన్ చేస్తోంది
3.6.1 కమాండ్ లైన్ ఆర్గ్యుమెంట్‌లు
3.6.2 డీబగ్గింగ్
3.6.3 వర్కింగ్ డైరెక్టరీ

చాప్టర్ 3

మొదలు అవుతున్న

ఈ అధ్యాయం ఎప్పుడూ ns-3ని ఇన్‌స్టాల్ చేయని కంప్యూటర్‌తో ప్రారంభించడానికి రీడర్‌ను సిద్ధం చేయడానికి ఉద్దేశించబడింది. ఇది మద్దతు ఉన్న ప్లాట్‌ఫారమ్‌లు, ముందస్తు అవసరాలు, ns-3ని ఎలా పొందాలి, ns-3ని ఎలా నిర్మించాలి మరియు మీ బిల్డ్‌ని ఎలా పరీక్షించాలి మరియు సాధారణ ప్రోగ్రామ్‌లను అమలు చేయాలి.

3.1 అవలోకనం

ns-3 సిమ్యులేటర్ సహకార సాఫ్ట్‌వేర్ లైబ్రరీల వ్యవస్థగా నిర్మించబడింది. అసెంబ్లీ సమయంలో, వినియోగదారు ప్రోగ్రామ్‌ల కోడ్ ఈ లైబ్రరీలతో లింక్ చేయబడింది. C++ లేదా Python ప్రోగ్రామింగ్ భాషలు అనుకూల ప్రోగ్రామ్‌లను వ్రాయడానికి ఉపయోగించబడతాయి.

Ns-3 సోర్స్ కోడ్‌గా పంపిణీ చేయబడింది, అంటే ముందుగా లైబ్రరీలను నిర్మించి ఆపై వినియోగదారు ప్రోగ్రామ్‌ను రూపొందించడానికి లక్ష్య వ్యవస్థ తప్పనిసరిగా సాఫ్ట్‌వేర్ అభివృద్ధి వాతావరణాన్ని కలిగి ఉండాలి. సూత్రప్రాయంగా, ns-3ని నిర్దిష్ట సిస్టమ్ కోసం రెడీమేడ్ లైబ్రరీలుగా పంపిణీ చేయవచ్చు మరియు భవిష్యత్తులో అవి ఈ విధంగా పంపిణీ చేయబడతాయి. కానీ ఈ రోజుల్లో చాలా మంది వినియోగదారులు వాస్తవానికి ns-3ని సవరించడం ద్వారా తమ పనిని చేస్తారు, కాబట్టి లైబ్రరీలను నిర్మించడానికి సోర్స్ కోడ్‌ను కలిగి ఉండటం ఉపయోగకరంగా ఉంటుంది. ఎవరైనా ఆపరేటింగ్ సిస్టమ్‌ల కోసం రెడీమేడ్ లైబ్రరీలు మరియు ప్యాకేజీలను రూపొందించే పనిని చేపట్టాలనుకుంటే, దయచేసి మెయిలింగ్ జాబితాను సంప్రదించండి ns-డెవలపర్లు.

తరువాత, మేము ns-3ని డౌన్‌లోడ్ చేయడానికి మరియు నిర్మించడానికి మూడు మార్గాలను పరిశీలిస్తాము. మొదటిది ప్రధాన సైట్ నుండి అధికారిక విడుదలను డౌన్‌లోడ్ చేయడం మరియు నిర్మించడం. రెండవది ప్రాథమిక ns-3 ఇన్‌స్టాలేషన్ యొక్క డెవలప్‌మెంట్ వెర్షన్‌ల కాపీల ఎంపిక మరియు అసెంబ్లీ. మూడవది ns-3 కోసం మరిన్ని పొడిగింపులను లోడ్ చేయడానికి అదనపు బిల్డ్ సాధనాలను ఉపయోగించడం. సాధనాలు కొద్దిగా భిన్నంగా ఉన్నందున మేము ఒక్కొక్కటిగా వెళ్తాము.

అనుభవజ్ఞులైన Linux వినియోగదారులు ప్యాకేజీ నిర్వాహికిని ఉపయోగించే ఇతర లైబ్రరీల వలె ns-3 ఎందుకు ప్యాకేజీగా అందించబడలేదని ఆశ్చర్యపోవచ్చు? వివిధ Linux పంపిణీల కోసం బైనరీ ప్యాకేజీలు ఉన్నప్పటికీ (ఉదా. డెబియన్), చాలా మంది వినియోగదారులు లైబ్రరీలను సవరించడం మరియు ns-3ని స్వయంగా పునర్నిర్మించవలసి ఉంటుంది, కాబట్టి అందుబాటులో ఉన్న సోర్స్ కోడ్ సులభమే. ఈ కారణంగా, మేము మూలం నుండి ఇన్‌స్టాల్ చేయడంపై దృష్టి పెడతాము.

చాలా అనువర్తనాలకు ns-3 హక్కులు రూట్ అవసరం లేదు, ప్రత్యేకించబడని వినియోగదారు ఖాతాను ఉపయోగించమని సిఫార్సు చేయబడింది.

3.2 ముందస్తు అవసరాలు

అందుబాటులో ఉన్న ns-3 లైబ్రరీల మొత్తం సెట్ థర్డ్-పార్టీ లైబ్రరీలపై అనేక డిపెండెన్సీలను కలిగి ఉంది, అయితే చాలా వరకు ns-3 అనేక సాధారణ (తరచుగా డిఫాల్ట్‌గా ఇన్‌స్టాల్ చేయబడిన) భాగాలకు మద్దతుతో నిర్మించబడవచ్చు మరియు ఉపయోగించబడుతుంది: ఒక C++ కంపైలర్, పైథాన్, సోర్స్ కోడ్ ఎడిటర్ (ఉదాహరణకు, vim, Emacs లేదా ఎక్లిప్స్) మరియు, డెవలప్‌మెంట్ రిపోజిటరీలను ఉపయోగించినట్లయితే, 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ని అమలు చేయడానికి క్రింది సాధనాలు అవసరం:

టూల్ ప్యాకేజీ/వెర్షన్

  • C++ కంపైలర్
    క్లాంగ్++ లేదా g++ (g++ వెర్షన్ 4.9 లేదా అంతకంటే ఎక్కువ)
  • పైథాన్
    python2 వెర్షన్ >= 2.7.10, లేదా python3 వెర్షన్ >=3.4
  • Git
    ఏదైనా తాజా వెర్షన్ (GitLab.comలో ns-3ని యాక్సెస్ చేయడానికి)
  • తారు
    ఏదైనా తాజా వెర్షన్ (ns‑3 విడుదలను అన్‌ప్యాక్ చేయడానికి)
  • బంజిప్2
    ఏదైనా తాజా వెర్షన్ (ns‑3 విడుదలను అన్‌ప్యాక్ చేయడానికి)

పైథాన్ యొక్క డిఫాల్ట్ సంస్కరణను తనిఖీ చేయడానికి, నమోదు చేయండి python -V. g++ సంస్కరణను తనిఖీ చేయడానికి, టైప్ చేయండి g++ -v. ఏదైనా సాధనాలు లేకుంటే లేదా చాలా పాతవి అయితే, దయచేసి ns-3 వికీ పేజీలోని ఇన్‌స్టాలేషన్ గైడ్‌ని చూడండి.

ఇప్పటి నుండి, రీడర్ Linux, MacOS లేదా Linux ఎమ్యులేటర్‌ని నడుపుతున్నారని మరియు కనీసం పై సాధనాలను కలిగి ఉన్నారని మేము అనుకుంటాము.

3.2.1 మూలాధార ఆర్కైవ్‌గా ns-3 విడుదలను డౌన్‌లోడ్ చేస్తోంది

ns-3 యొక్క తాజా విడుదల మరియు ప్యాకేజీ సంస్కరణలను డౌన్‌లోడ్ చేసి, వాటితో ప్రయోగాలు చేయాలనుకునే కొత్త వినియోగదారు కోసం ఇది చర్య యొక్క కోర్సు. ns-3 విడుదలలు కంప్రెస్డ్ సోర్స్ ఆర్కైవ్‌లుగా ప్రచురించబడతాయి, వీటిని కొన్నిసార్లు పిలుస్తారు టార్బాల్. టార్బాల్ అనేది ఒక ప్రత్యేక సాఫ్ట్‌వేర్ ఆర్కైవ్ ఫార్మాట్, దీనిలో అనేక ఫైల్‌లు కలిసి ఉంటాయి. ఆర్కైవ్ సాధారణంగా కుదించబడుతుంది. ns-3 బూట్ ప్రక్రియ ద్వారా టార్బాల్ సులభం, మీరు విడుదలను ఎంచుకుని, డౌన్‌లోడ్ చేసి, దాన్ని అన్‌ప్యాక్ చేయాలి.

మీరు వినియోగదారుగా, స్థానిక డైరెక్టరీలో ns-3ని నిర్మించాలనుకుంటున్నారని అనుకుందాం కార్యస్థలం. కింది వాటిని 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, ఇది ఇంటర్నెట్ నుండి వస్తువులను డౌన్‌లోడ్ చేయడానికి కమాండ్ లైన్ సాధనం. మీరు దీన్ని ఇన్‌స్టాల్ చేయకుంటే, మీరు దీని కోసం మీ బ్రౌజర్‌ని ఉపయోగించవచ్చు.

ఈ దశలను అనుసరించి మిమ్మల్ని 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/. సమూహం న్స్నం ఓపెన్ సోర్స్ ప్రాజెక్ట్ ఉపయోగించే వివిధ రిపోజిటరీలను కలిపిస్తుంది.

Git రిపోజిటరీలను ఉపయోగించడం ప్రారంభించడానికి సులభమైన మార్గం పర్యావరణాన్ని ఫోర్క్ చేయడం లేదా క్లోన్ చేయడం ns-3-అల్లినోన్. ఇది సాధారణంగా ఉపయోగించే ns-3 సబ్‌సిస్టమ్‌ల లోడింగ్ మరియు అసెంబ్లీని నిర్వహించే స్క్రిప్ట్‌ల సమితి. మీరు Gitకి కొత్త అయితే, "ఫోర్క్" మరియు "క్లోన్" అనే పదాలు మీకు తెలియకపోవచ్చు; అలా అయితే, మీరు GitLab.comలో ఉన్న రిపోజిటరీని ఇలా క్లోన్ చేయాలని (మీ స్వంత కాపీని రూపొందించాలని) మేము సిఫార్సు చేస్తున్నాము:

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

ఈ దశలో, మీ డైరెక్టరీ వీక్షణ ns-3-అల్లినోన్ పైన వివరించిన విడుదల ఆర్కైవ్ డైరెక్టరీ నుండి కొద్దిగా భిన్నంగా ఉంటుంది. ఇది ఇలా ఉండాలి:

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

స్క్రిప్ట్ ఉందని దయచేసి గమనించండి download.py, ఇది అదనంగా ns-3 మరియు దానితో పాటు సోర్స్ కోడ్‌ను సంగ్రహిస్తుంది. ఇక్కడ మీకు ఎంపిక ఉంది: తాజా ns-3 డెవలప్‌మెంట్ స్నాప్‌షాట్‌ని డౌన్‌లోడ్ చేసుకోండి:

$ python download.py

లేదా ఫ్లాగ్‌ని ఉపయోగించి ns-3 విడుదలను ఇష్టపడండి -n విడుదల సంఖ్యను సూచించడానికి:

$ python download.py -n ns-3.29

డైరెక్టరీకి ఈ దశ తర్వాత ns-3-అల్లినోన్ అదనపు రిపోజిటరీలు డౌన్‌లోడ్ చేయబడతాయి 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 అనుకరణ క్రెడిల్ అనేది నెట్‌వర్క్ సిమ్యులేటర్ లోపల నిజమైన TCP/IP నెట్‌వర్క్ స్టాక్‌లను ఉపయోగించడానికి మిమ్మల్ని అనుమతించే ఫ్రేమ్‌వర్క్.

మీ ns-3 ఇన్‌స్టాలేషన్‌లో అధునాతన లేదా అదనపు ఫీచర్లు ఉండాలని మీరు ఆశించినట్లయితే, మీరు ఈ ఇన్‌స్టాలేషన్ మార్గాన్ని అనుసరించవచ్చు.

తాజా ns-3 విడుదలలలో రొట్టెలుకాల్చు తారు విడుదలకు జోడించబడింది. విడుదల సమయంలో మీరు ప్రస్తుత సాఫ్ట్‌వేర్ సంస్కరణలను డౌన్‌లోడ్ చేసుకోవడానికి అనుమతించే కాన్ఫిగరేషన్ ఫైల్‌ను విడుదల కలిగి ఉంటుంది. అంటే, ఉదాహరణకు, వెర్షన్ రొట్టెలుకాల్చు, విడుదలైన ns-3.29తో పంపిణీ చేయబడుతుంది, ns-3 లేదా అంతకు ముందు విడుదలైన భాగాలను తిరిగి పొందేందుకు ఉపయోగించవచ్చు, కానీ తర్వాత విడుదలల కోసం భాగాలను తిరిగి పొందేందుకు ఉపయోగించబడదు (ప్యాకేజీ వివరణ ఫైల్ అయితే bakeconf.xml నవీకరించబడలేదు).

మీరు తాజా కాపీని కూడా పొందవచ్చు రొట్టెలుకాల్చుమీ Linux కన్సోల్‌లో కింది ఆదేశాన్ని నమోదు చేయడం ద్వారా (మీరు Git ఇన్‌స్టాల్ చేసినట్లు ఊహించుకోండి):

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

మీరు git ఆదేశాన్ని అమలు చేసినప్పుడు, మీరు ఈ క్రింది వాటిని చూడాలి:

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

ఆదేశం పూర్తయిన తర్వాత క్లోన్ మీరు పేరు పెట్టబడిన డైరెక్టరీని కలిగి ఉండాలి రొట్టెలుకాల్చు, ఇందులోని విషయాలు ఇలా ఉండాలి:

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

మీరు అనేక పైథాన్ స్క్రిప్ట్‌లను లోడ్ చేశారని గమనించండి, పేరు పెట్టబడిన పైథాన్ మాడ్యూల్ రొట్టెలుకాల్చు మరియు XML కాన్ఫిగరేషన్ ఫైల్. మీకు నచ్చిన ns-3 డిస్ట్రిబ్యూషన్‌ను డౌన్‌లోడ్ చేయడానికి మరియు నిర్మించడానికి ఈ స్క్రిప్ట్‌లను ఉపయోగించడం తదుపరి దశ. అనేక అనుకూలీకరణ లక్ష్యాలు అందుబాటులో ఉన్నాయి:

  1. ns-3.29: విడుదలకు సంబంధించిన మాడ్యూల్; ఇది టార్‌బాల్‌లో విడుదలకు సమానమైన భాగాలను డౌన్‌లోడ్ చేస్తుంది;

  2. ns-3-dev: ఇదే మాడ్యూల్, కానీ డెవలప్‌మెంట్ ట్రీ నుండి కోడ్‌ని ఉపయోగించడం;

  3. ns-అల్లినోన్-3.29: క్లిక్ రూటింగ్ మరియు నెట్‌వర్క్ సిమ్యులేషన్ క్రాడిల్, ns-3 కోసం ఓపెన్‌ఫ్లో వంటి ఇతర అదనపు ఫీచర్‌లను కలిగి ఉండే మాడ్యూల్.

  4. ns-3-అల్లినోన్: మాడ్యూల్ యొక్క విడుదల సంస్కరణను పోలి ఉంటుంది అల్లినోన్, కానీ అభివృద్ధి కోడ్ కోసం.

వ్యాఖ్య
క్లిక్ చేయండి — రౌటర్లను సృష్టించడానికి మాడ్యులర్ సాఫ్ట్‌వేర్ ఆర్కిటెక్చర్.

ఓపెన్‌ఫ్లో అనేది రౌటర్లు మరియు స్విచ్‌ల ద్వారా డేటా నెట్‌వర్క్ ద్వారా ప్రసారం చేయబడిన డేటాను ప్రాసెస్ చేసే ప్రక్రియను నిర్వహించడానికి, సాఫ్ట్‌వేర్-నిర్వచించిన నెట్‌వర్క్ సాంకేతికతను అమలు చేయడానికి ఒక ప్రోటోకాల్.

ప్రస్తుత డెవలప్‌మెంట్ స్నాప్‌షాట్ (విడుదల కానిది) ns-3ని ఇక్కడ కనుగొనవచ్చు:https://gitlab.com/nsnam/ns-3-dev.git.

డెవలపర్‌లు ఈ రిపోజిటరీలను స్థిరమైన పని క్రమంలో ఉంచడానికి ప్రయత్నిస్తారు, కానీ అవి డెవలప్‌మెంట్ ప్రాంతంలో ఉన్నాయి మరియు విడుదల చేయని కోడ్‌ను కలిగి ఉంటాయి, కాబట్టి మీరు కొత్త ఫీచర్‌లను ఉపయోగించడానికి ప్లాన్ చేయకపోతే, అధికారిక విడుదలను ఎంచుకోండి.

మీరు రిపోజిటరీల జాబితాను బ్రౌజ్ చేయడం ద్వారా లేదా ns-3 విడుదలల వెబ్ పేజీకి వెళ్లడం ద్వారా కోడ్ యొక్క తాజా సంస్కరణను కనుగొనవచ్చు:https://www.nsnam.org/releases/ మరియు తాజా వెర్షన్ లింక్‌పై క్లిక్ చేయడం. ఈ ఉదాహరణలో మనం ns-3.29తో కొనసాగుతాము.

ఇప్పుడు, మనకు అవసరమైన ns-3 భాగాలను పొందడానికి, మేము సాధనాన్ని ఉపయోగిస్తాము రొట్టెలుకాల్చు. పని గురించి కొన్ని పరిచయ పదాలు చెప్పండి రొట్టెలుకాల్చు.

ప్యాకేజీ మూలాలను డైరెక్టరీలోకి లోడ్ చేయడం ద్వారా బేక్ పని చేస్తుంది మూలం మరియు బిల్డ్ డైరెక్టరీలో లైబ్రరీలను ఇన్‌స్టాల్ చేస్తోంది. రొట్టెలుకాల్చు బైనరీని సూచించడం ద్వారా అమలు చేయవచ్చు, కానీ మీరు అమలు చేయాలనుకుంటే రొట్టెలుకాల్చు ఇది డౌన్‌లోడ్ చేయబడిన డైరెక్టరీ నుండి కాదు, దీనికి మార్గాన్ని జోడించడం మంచిది రొట్టెలుకాల్చు మీ మార్గానికి (PATH ఎన్విరాన్మెంట్ వేరియబుల్), ఉదాహరణకు క్రింది విధంగా (Linux బాష్ షెల్ కోసం ఉదాహరణ). "రొట్టెలుకాల్చు" డైరెక్టరీకి వెళ్లి, ఆపై క్రింది పర్యావరణ వేరియబుల్స్ సెట్ చేయండి:

$ 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-అల్లినోన్ (అదనపు ప్యాకేజీలతో) పూర్తి బిల్డ్‌కు సాధారణంగా ఇది అవసరం.

మీ వర్కింగ్ డైరెక్టరీకి వెళ్లి కన్సోల్‌లో కింది వాటిని నమోదు చేయండి:

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

ప్రత్యేకించి, మెర్క్యురియల్, CVS, Git మరియు బజార్ వంటి అప్‌లోడ్ సాధనాలు ఈ దశలో చాలా అవసరం, ఎందుకంటే అవి కోడ్‌ను పొందడానికి మాకు అనుమతిస్తాయి. ఈ సమయంలో, మీ సిస్టమ్ కోసం సాధారణ పద్ధతిలో తప్పిపోయిన సాధనాలను ఇన్‌స్టాల్ చేయండి (మీకు ఎలా తెలిస్తే) లేదా సహాయం కోసం మీ సిస్టమ్ అడ్మినిస్ట్రేటర్‌ని సంప్రదించండి.

తరువాత, సాఫ్ట్‌వేర్‌ను డౌన్‌లోడ్ చేయడానికి ప్రయత్నించండి:

$ ./bake.py download

ఫలితం ఇలా ఉండాలి:

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

మూడు మూలాధారాలు డౌన్‌లోడ్ చేయబడ్డాయి అని దీని అర్థం. ఇప్పుడు సోర్స్ డైరెక్టరీకి వెళ్లి ls అని టైప్ చేయండి; మీరు చూడాలి:

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

ఇప్పుడు మీరు ns-3 పంపిణీని రూపొందించడానికి సిద్ధంగా ఉన్నారు.

3.4 అసెంబ్లీ ns-3

ns-3ని డౌన్‌లోడ్ చేయడం వలె, ns-3ని నిర్మించడానికి అనేక మార్గాలు ఉన్నాయి. మేము నొక్కిచెప్పదలిచిన ప్రధాన విషయం ఏమిటంటే, ns-3 అనే బిల్డ్ టూల్ ఉపయోగించి నిర్మించబడింది Wafక్రింద వివరించబడింది. చాలా మంది వినియోగదారులు పని చేస్తారు Waf, కానీ మీరు ప్రారంభించడానికి లేదా మరింత క్లిష్టమైన బిల్డ్‌లను నిర్వహించడంలో మీకు సహాయపడటానికి కొన్ని సులభ స్క్రిప్ట్‌లు ఉన్నాయి. కాబట్టి దయచేసి, మీరు గురించి చదవడానికి ముందు Waf, ఒక్కసారి దీనిని చూడు build.py మరియు అసెంబ్లీ రొట్టెలుకాల్చు.

3.4.1 build.pyతో కూడిన భవనం

హెచ్చరిక ఈ బిల్డ్ స్టెప్ పైన వివరించిన విధంగా పొందిన సోర్స్ ఆర్కైవ్ వెర్షన్ నుండి మాత్రమే అందుబాటులో ఉంటుంది; మరియు git లేదా బేక్ ద్వారా డౌన్‌లోడ్ చేయబడలేదు.

విడుదల ఆర్కైవ్‌తో పని చేస్తున్నప్పుడు టార్బాల్లో ns-3-అల్లినోన్ భాగాలను సమీకరించడాన్ని సులభతరం చేసే సులభ స్క్రిప్ట్ ఉంది. దీన్ని build.py అంటారు. ఈ ప్రోగ్రామ్ మీ కోసం ప్రాజెక్ట్‌ను అత్యంత ఉపయోగకరమైన మార్గంలో సెటప్ చేస్తుంది. అయినప్పటికీ, ns-3తో మరింత అధునాతన సెటప్ మరియు పని సాధారణంగా ns-3 యొక్క స్వంత బిల్డ్ సిస్టమ్, Wafని ఉపయోగిస్తుందని గమనించండి, ఇది ఈ ట్యుటోరియల్‌లో తరువాత పరిచయం చేయబడుతుంది.

మీరు ఉపయోగించి డౌన్‌లోడ్ చేసినట్లయితే టార్బాల్, ఆపై మీ డైరెక్టరీలో ~/కార్యస్థలం ఏదో ఒక పేరు ఉన్న డైరెక్టరీ ns-అల్లినోన్-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 వాఫ్‌తో నిర్మించండి

ఈ సమయం వరకు, 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 ఫంక్షన్ ప్రారంభించబడకపోతే, ఒక సందేశం ప్రదర్శించబడుతుంది. ఆదేశాన్ని ఉపయోగించడం సాధ్యమవుతుందని కూడా గమనించండి సుడో నిర్దిష్ట ప్రోగ్రామ్‌ల కోసం సూయిడ్ బిట్‌ను సెట్ చేయడానికి “రన్‌టైమ్‌లో గ్రూప్ ఐడిని సెట్ చేయండి”. ఇది డిఫాల్ట్‌గా ప్రారంభించబడలేదు మరియు అందువల్ల ఈ ఫీచర్ "ప్రారంభించబడలేదు"గా కనిపిస్తుంది. చివరగా, ప్రారంభించబడిన ఎంపికల జాబితాను పొందడానికి, ఉపయోగించండి 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 కాన్ఫిగర్ --డిసేబుల్-పైథాన్. గురించిన మరికొన్ని పరిచయ చిట్కాలు ఇక్కడ ఉన్నాయి Waf.

బిల్డ్ లోపాలను నిర్వహించడం

ns-3 విడుదలలు సాధారణ Linux మరియు MacOS పంపిణీలలో విడుదల సమయంలో అందుబాటులో ఉన్న తాజా C++ కంపైలర్‌లపై పరీక్షించబడతాయి. అయితే, కాలక్రమేణా, కొత్త కంపైలర్‌లతో కొత్త డిస్ట్రిబ్యూషన్‌లు విడుదల చేయబడతాయి మరియు ఈ కొత్త కంపైలర్‌లు హెచ్చరికల గురించి మరింత నిరాడంబరంగా ఉంటాయి. ns-3 దాని బిల్డ్‌ను అన్ని హెచ్చరికలను ఎర్రర్‌లుగా పరిగణించేలా కాన్ఫిగర్ చేస్తుంది, కాబట్టి కొన్నిసార్లు మీరు కొత్త సిస్టమ్‌లో పాత వెర్షన్‌ను నడుపుతుంటే, కంపైలర్ హెచ్చరిక బిల్డ్‌ను ఆపివేయవచ్చు.

ఉదాహరణకు, 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 నుండి ప్రారంభమయ్యే విడుదలలలో, in Waf ఈ సమస్యలను పరిష్కరించడానికి ఒక ఎంపిక అందుబాటులో ఉంది. ఇది "-వెర్రర్" ఫ్లాగ్‌ను g++ మరియు క్లాంగ్++లో సెట్ చేయడం నిలిపివేస్తుంది. ఇది "--disable-werror" ఎంపిక మరియు కాన్ఫిగరేషన్ సమయంలో తప్పనిసరిగా వర్తింపజేయాలి:

$ ./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++ కంపైలర్ క్లాంగ్, క్లాంగ్++,

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

అదే విధంగా మీరు కాన్ఫిగర్ చేయవచ్చు Waf ఉపయోగించి పంపిణీ చేయబడిన సంకలనాన్ని ఉపయోగించడానికి distcc:

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

distcc మరియు పంపిణీ చేయబడిన సంకలనం గురించి మరింత సమాచారం డాక్యుమెంటేషన్ విభాగంలో ప్రాజెక్ట్ పేజీలో చూడవచ్చు. ns-3ని కాన్ఫిగర్ చేస్తున్నప్పుడు కంపైలర్ ఫ్లాగ్‌లను జోడించడానికి, CXXFLAGS_EXTRA ఎన్విరాన్మెంట్ వేరియబుల్ ఉపయోగించండి.

సెట్టింగ్

Waf సిస్టమ్‌లోని వివిధ ప్రదేశాలలో లైబ్రరీలను ఇన్‌స్టాల్ చేయడానికి ఉపయోగించవచ్చు. డిఫాల్ట్‌గా, కంపైల్ చేయబడిన లైబ్రరీలు మరియు ఎక్జిక్యూటబుల్స్ డైరెక్టరీలో ఉన్నాయి నిర్మించడానికి, మరియు ఈ లైబ్రరీలు మరియు ఎక్జిక్యూటబుల్‌ల స్థానం వాఫ్‌కు తెలుసు కాబట్టి, లైబ్రరీలను మరెక్కడా ఇన్‌స్టాల్ చేయాల్సిన అవసరం లేదు.

వినియోగదారులు బిల్డ్ డైరెక్టరీ వెలుపల ఇన్‌స్టాల్ చేయాలనుకుంటే, వారు ఆదేశాన్ని అమలు చేయవచ్చు ./ వాఫ్ ఇన్‌స్టాల్. ఇన్‌స్టాలేషన్ కోసం డిఫాల్ట్ ప్రిఫిక్స్ / స్థానిక usr /అందువలన ./ వాఫ్ ఇన్‌స్టాల్ లో ప్రోగ్రామ్‌లను ఇన్‌స్టాల్ చేస్తుంది / Usr / local / బిన్, లైబ్రరీలలో / Usr / local / lib మరియు హెడర్ ఫైల్స్ ఇన్ /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 సోర్స్ ట్రీ ఎగువ స్థాయిలో, ఒకే ఒక వాఫ్ స్క్రిప్ట్ ఉంది. మీరు పని చేయడం ప్రారంభించిన తర్వాత, మీరు డైరెక్టరీలో ఎక్కువ సమయం గడుపుతారు scratch/ లేదా లోతుగాsrc/... మరియు అదే సమయంలో అమలు చేయాలి Waf. మీరు ఎక్కడ ఉన్నారో గుర్తుంచుకోండి మరియు పరుగెత్తవచ్చు Waf క్రింది విధంగా:

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

కానీ ఇది దుర్భరమైనది మరియు దోషపూరితమైనది, కాబట్టి మంచి పరిష్కారాలు ఉన్నాయి. వంటి టెక్స్ట్ ఎడిటర్‌ని ఉపయోగించడం ఒక సాధారణ మార్గం Emacs లేదా vim, దీనిలో రెండు టెర్మినల్ సెషన్‌లు తెరవబడతాయి, ఒకటి ns-3ని రూపొందించడానికి ఉపయోగించబడుతుంది మరియు రెండవది సోర్స్ కోడ్‌ను సవరించడానికి ఉపయోగించబడుతుంది. మీరు మాత్రమే కలిగి ఉంటే టార్బాల్, అప్పుడు ఎన్విరాన్మెంట్ వేరియబుల్ సహాయపడుతుంది:

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

$ cd scratch 
$ waff build

మాడ్యూల్ డైరెక్టరీలో ఒక చిన్నవిషయమైన వాఫ్ స్క్రిప్ట్‌ని జోడించడం ఉత్సాహం కలిగిస్తుంది 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 కింది అవుట్‌పుట్‌ను ఉత్పత్తి చేసే ప్రోగ్రామ్‌ను అమలు చేస్తుంది.

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 ప్రోగ్రామ్‌లను అమలు చేయడానికి (ఉదాహరణకు, gdb) లేదా మెమరీ పరీక్ష సాధనం (ఉదాహరణకు, వాల్గ్రైండ్), ఇదే ఫారమ్‌ని ఉపయోగించండి - -command-template = "…". ఉదాహరణకు, డీబగ్గర్‌లో అమలు చేయడానికి gdb వాదనలతో మీ హలో-సిమ్యులేటర్ ns-3 ప్రోగ్రామ్:

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

ns-3 ప్రోగ్రామ్ పేరు వాదనతో వస్తుందని గమనించండి - -run, మరియు నిర్వహణ యుటిలిటీ (ఇక్కడ gdb) వాదనలో మొదటి టోకెన్ - -command-template. ఎంపిక - -args నివేదికలు gdbమిగిలిన కమాండ్ లైన్ "తక్కువ" ప్రోగ్రామ్‌కు చెందినది. (కొన్ని సంస్కరణలు gdb ఎంపిక అర్థం కాలేదు - -args. ఈ సందర్భంలో, ప్రోగ్రామ్ ఆర్గ్యుమెంట్‌లను తీసివేయండి - -command-template మరియు కమాండ్ సెట్ ఉపయోగించండి gdb వాదనల.) డీబగ్గర్ కింద పరీక్షను అమలు చేయడానికి మేము ఈ రెసిపీని మరియు మునుపటిదాన్ని మిళితం చేయవచ్చు:

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

3.6.3 వర్కింగ్ డైరెక్టరీ

వాఫ్‌ను ns-3 చెట్టు పైభాగంలో దాని స్థానం నుండి ప్రయోగించాలి. ఈ ఫోల్డర్ అవుట్‌పుట్ ఫైల్‌లు వ్రాయబడే వర్కింగ్ డైరెక్టరీ అవుతుంది. అయితే మీరు ఈ ఫైల్‌లను ns-3 సోర్స్ ట్రీ వెలుపల ఉంచాలనుకుంటే? వాదన ఉపయోగించండి - -cwd:

$ ./waf --cwd=...

మీ వర్కింగ్ డైరెక్టరీలో అవుట్‌పుట్ ఫైల్‌లను పొందడం మీకు మరింత సౌకర్యవంతంగా ఉండవచ్చు. ఈ సందర్భంలో, క్రింది పరోక్ష చర్య సహాయపడుతుంది:

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

కమాండ్ యొక్క మునుపటి సంస్కరణ యొక్క ఈ అలంకరణ ప్రస్తుత పని డైరెక్టరీని సంరక్షిస్తుంది, డైరెక్టరీకి వెళుతుంది Wafఆపై నిర్దేశిస్తుంది Waf ప్రోగ్రామ్‌ను ప్రారంభించే ముందు వర్కింగ్ డైరెక్టరీని సేవ్ చేసిన ప్రస్తుత వర్కింగ్ డైరెక్టరీకి మార్చడానికి. మేము జట్టును ప్రస్తావిస్తాము - -cwd సంపూర్ణత కోసం, చాలా మంది వినియోగదారులు కేవలం టాప్-లెవల్ డైరెక్టరీ నుండి Wafని అమలు చేస్తారు మరియు అక్కడ అవుట్‌పుట్ ఫైల్‌లను ఉత్పత్తి చేస్తారు.

కొనసాగింపు: అధ్యాయం 4

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి