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++ ወይም Python ፕሮግራሚንግ ቋንቋዎች ብጁ ፕሮግራሞችን ለመጻፍ ያገለግላሉ።

Ns-3 እንደ ምንጭ ኮድ ይሰራጫል፣ ይህ ማለት በመጀመሪያ ቤተ-መጻሕፍትን ለመገንባት እና የተጠቃሚውን ፕሮግራም ለመገንባት የታለመው ስርዓት የሶፍትዌር ልማት አካባቢ ሊኖረው ይገባል ማለት ነው። በመርህ ደረጃ፣ ns-3 ለአንድ የተወሰነ ስርዓት ዝግጁ-የተሰሩ ቤተ-መጻሕፍት ሊሰራጭ ይችላል፣ እና ወደፊት በዚህ መንገድ ሊሰራጭ ይችላል። አሁን ግን ብዙ ተጠቃሚዎች በራሱ ns-3 በማስተካከል ስራቸውን ይሰራሉ ​​ስለዚህ ቤተ-መጻሕፍትን ለመገንባት የምንጭ ኮድ መኖሩ ጠቃሚ ነው። ለስርዓተ ክወናዎች ዝግጁ የሆኑ ቤተ-መጻሕፍትን እና ፓኬጆችን የመፍጠር ሥራ ላይ ማንም ሰው መሥራት የሚፈልግ ከሆነ እባክዎ የፖስታ መላኪያ ዝርዝሩን ያግኙ። ns-ገንቢዎች.

በመቀጠል፣ ns-3ን ለማውረድ እና ለመገንባት ሶስት መንገዶችን እንመለከታለን። የመጀመሪያው ከዋናው ጣቢያ ላይ ይፋዊ ልቀት ማውረድ እና መገንባት ነው። ሁለተኛው የመሠረታዊ ns-3 መጫኛ የዕድገት ስሪቶች ቅጂዎችን መምረጥ እና መሰብሰብ ነው. ሶስተኛው ለ ns-3 ተጨማሪ ቅጥያዎችን ለመጫን ተጨማሪ የግንባታ መሳሪያዎችን መጠቀም ነው. መሣሪያዎቹ ትንሽ ስለሚለያዩ እያንዳንዳቸውን እናልፋለን።

ልምድ ያካበቱ የሊኑክስ ተጠቃሚዎች ለምን ns-3 የጥቅል አስተዳዳሪን እንደሚጠቀሙ ሌሎች ቤተ-መጻሕፍት በጥቅል አልቀረበም ብለው ሊያስቡ ይችላሉ። ለተለያዩ የሊኑክስ ስርጭቶች (ለምሳሌ ዴቢያን) ሁለትዮሽ ፓኬጆች ቢኖሩም፣ አብዛኛዎቹ ተጠቃሚዎች መጨረሻቸው ቤተ-መጻሕፍትን አርትዕ በማድረግ እና ns-3ን ራሳቸው እንደገና መገንባት ስላለባቸው የምንጭ ኮድ መገኘቱ ጠቃሚ ነው። በዚህ ምክንያት, ከምንጩ ላይ በመጫን ላይ እናተኩራለን.

ለአብዛኛዎቹ መተግበሪያዎች ns-3 መብቶች ሥር አያስፈልጉም, ያልተፈቀደ የተጠቃሚ መለያ ለመጠቀም ይመከራል.

3.2 ቅድመ-ሁኔታዎች

የሚገኙት የ ns-3 ቤተ-መጻሕፍት አጠቃላይ ስብስብ በሶስተኛ ወገን ቤተ-መጻሕፍት ላይ በርካታ ጥገኝነቶች አሏቸው፣ ነገር ግን በአብዛኛው ns-3 መገንባት እና ለብዙ የጋራ (ብዙውን ጊዜ በነባሪ የተጫኑ) አካላትን በመደገፍ ጥቅም ላይ ሊውል ይችላል-C ++ ማጠናከሪያ ፣ Python፣ የምንጭ ኮድ አርታዒ (ለምሳሌ፣ vim, ኢማካዎች ወይም ዪሐይ መጪለም) እና፣የልማት ማከማቻዎች ጥቅም ላይ ከዋሉ፣የ Git ስሪት ቁጥጥር ስርዓቶች። አብዛኛዎቹ የመጀመሪያ ጊዜ ተጠቃሚዎች ውቅራቸው አንዳንድ ns-3 የላቁ ባህሪያት እንደጎደሉ ከዘገበ መጨነቅ አያስፈልጋቸውም ነገር ግን ሙሉ መጫንን ለሚፈልጉ ፕሮጀክቱ ብዙ ጠቃሚ ምክሮችን እና ዘዴዎችን የያዘ ዊኪ ይሰጣል። የዚህ ገጽ አንዱ የመጫኛ ገጽ ነው ፣ ለተለያዩ ስርዓቶች የመጫኛ መመሪያዎች ፣ በሚከተሉት ይገኛሉ ። https://www.nsnam.org/wiki/Installation.

የዚህ ዊኪ ቅድመ ሁኔታ ክፍል የተለመዱ ns-3 አማራጮችን ለመደገፍ የትኞቹ ጥቅሎች እንደሚያስፈልጉ ያብራራል እና እንዲሁም በሊኑክስ ወይም ማክኦኤስ የተለመዱ ጣዕሞች ላይ ለመጫን ጥቅም ላይ የሚውሉ ትዕዛዞችን ይሰጣል።

በዚህ አጋጣሚ የ ns-3 wiki ገጽን ወይም ዋናውን ድህረ ገጽ ማሰስ ትችላላችሁ፡- https://www.nsnam.org, ምክንያቱም እዚያ ብዙ መረጃ አለ. ከአዲሱ የ ns-3 (ns-3.29) ስሪት ጀምሮ ns-3ን ለማስኬድ የሚከተሉት መሳሪያዎች ያስፈልጋሉ።

የመሳሪያ ጥቅል/ስሪት

  • C ++ ማጠናከሪያ
    clang++ ወይም g++ (g++ ስሪት 4.9 ወይም ከዚያ በላይ)
  • ዘንዶ
    python2 ስሪት >= 2.7.10፣ ወይም python3 ስሪት >=3.4
  • Git
    ማንኛውም የቅርብ ጊዜ ስሪት (ns-3 በ GitLab.com ላይ ለመድረስ)
  • ሬንጅ
    ማንኛውም የቅርብ ጊዜ ስሪት (የ ns-3 ልቀትን ለመክፈት)
  • bunzip2
    ማንኛውም የቅርብ ጊዜ ስሪት (የ ns-3 ልቀቱን ለመክፈት)

የፓይዘንን ነባሪ ስሪት ለመፈተሽ ይተይቡ python -V. የ g++ ሥሪቱን ለመፈተሽ ይተይቡ g++ -v. ማንኛቸውም መሳሪያዎች ከጎደሉ ወይም በጣም ያረጁ ከሆኑ እባክዎን በ ns-3 wiki ገጽ ላይ ያለውን የመጫኛ መመሪያ ይመልከቱ።

ከአሁን በኋላ አንባቢው ሊኑክስን፣ ማክኦኤስን ወይም ሊኑክስን ኢምዩሌተርን እያሄደ እንደሆነ እና ቢያንስ ከላይ የተጠቀሱት መሳሪያዎች እንዳሉት እንገምታለን።

3.2.1 ns-3 ልቀቱን እንደ ምንጭ መዝገብ በማውረድ ላይ

የቅርብ ጊዜውን የ ns-3 እትሞችን እና የጥቅል ስሪቶችን ማውረድ እና መሞከር ለሚፈልግ አዲስ ተጠቃሚ ይህ የእርምጃ አካሄድ ነው። ns-3 ልቀቶች እንደ የታመቁ ምንጭ ማህደሮች ይታተማሉ፣ አንዳንዴም ይባላሉ tar tarball. tar tarball ብዙ ፋይሎች በአንድ ላይ የሚጣመሩበት ልዩ የሶፍትዌር ማህደር ቅርጸት ነው። ማህደሩ ብዙውን ጊዜ የታመቀ ነው። ns-3 የማስነሻ ሂደት በ tar tarball ቀላል ነው፣ አንድ ልቀትን መምረጥ፣ ማውረድ እና መንቀል ብቻ ያስፈልግዎታል።

እርስዎ፣ እንደ ተጠቃሚ፣ በተጠራው የአካባቢ ማውጫ ውስጥ 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 ኮድ በ Git ማከማቻዎች በ GitLab.com ላይ ይገኛል። https://gitlab.com/nsnam/. ቡድን ንሳም በክፍት ምንጭ ፕሮጀክት ጥቅም ላይ የዋሉ የተለያዩ ማከማቻዎችን በአንድ ላይ ያመጣል.

የጂት ማከማቻዎችን መጠቀም ለመጀመር ቀላሉ መንገድ አካባቢውን መንካት ወይም መዝጋት ነው። ns-3-አሊኖን. ይህ በብዛት ጥቅም ላይ የዋሉ የ ns-3 ንኡስ ስርዓቶችን መጫን እና መሰብሰብን የሚያስተዳድር የስክሪፕት ስብስብ ነው። ለጊት አዲስ ከሆንክ፣ "ፎርክ" እና "ክሎን" የሚሉት ቃላት ለእርስዎ የማያውቁ ሊሆኑ ይችላሉ። እንደዚያ ከሆነ በ 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

እባክዎን ስክሪፕት እንዳለ ያስተውሉ ማውረድ.py, እሱም በተጨማሪ ns-3 እና ተጓዳኝ ኮድ ያወጣል። እዚህ ምርጫ አለህ፡ ወይ የቅርብ ጊዜውን ns-3 ልማት ቅጽበተ ፎቶ አውርድ፡

$ python download.py

ወይም ባንዲራውን በመጠቀም ns-3 መልቀቅን ይመርጣሉ -n የመልቀቂያ ቁጥሩን ለማመልከት፡-

$ python download.py -n ns-3.29

ከዚህ ደረጃ በኋላ ወደ ማውጫው ይሂዱ ns-3-አሊኖን ተጨማሪ ማከማቻዎች ይወርዳሉ ns-3, መጋገር, ፒቢንጀን и netanim.

አመለከተ
ንጹህ ኡቡንቱ16.04 ባለው ማሽን ላይ ትዕዛዙን ወደዚህ መቀየር ነበረብኝ፡- $ sudo python3 download.py -n ns-3.29 (ከዚህ በኋላ የአስተርጓሚ ማስታወሻዎች).

3.3.1 ቤክን ​​በመጠቀም ns-3 በመጫን ላይ

ከላይ ያሉት ሁለት ዘዴዎች (የምንጭ መዝገብ ወይም ማከማቻ ns-3-አሊኖን በጂት በኩል) በጣም ቀላል የሆነውን ns-3 ጭነት ከብዙ addons ጋር ለማግኘት ጠቃሚ ናቸው።ፒቢንጀን የ Python ማሰሪያዎችን ለማመንጨት እና netanim ለአውታረ መረብ አኒሜሽን). በነባሪ የቀረበው ሦስተኛው ማከማቻ በ ns-3-allinone ይባላል መጋገር.

መጋገር ለ ns-3 ፕሮጀክት የተዘጋጀ ከበርካታ ማከማቻዎች የሶፍትዌር ግንባታ የተቀናጀ መሳሪያ ነው። መጋገር የ ns-3 የእድገት ስሪቶችን ለማግኘት እንዲሁም እንደ አካባቢ ያሉ የ ns-3 ስርጭቱን መሰረታዊ ስሪት ለማውረድ እና ለመገንባት ሊያገለግል ይችላል የቀጥታ ኮድ አፈፃፀም, CradleNetwork Simulation Cradle, አዲስ የ Python ማሰሪያዎችን እና የተለያዩ ns-3 "መተግበሪያዎችን" የመፍጠር ችሎታ.

አመለከተ
CradleNetwork Simulation Cradle በኔትወርክ ሲሙሌተር ውስጥ እውነተኛ የTCP/IP አውታረ መረብ ቁልሎችን እንድትጠቀም የሚያስችል ማዕቀፍ ነው።

የእርስዎ ns-3 ጭነት የላቀ ወይም ተጨማሪ ባህሪያት እንዲኖረው ከጠበቁ፣ ይህን የመጫኛ መንገድ መከተል ይችላሉ።

በቅርብ የ ns-3 ልቀቶች መጋገር ወደ ሬንጅ መለቀቅ ተጨምሯል. ልቀቱ በሚለቀቅበት ጊዜ የአሁኑን የሶፍትዌር ስሪቶች እንዲያወርዱ የሚያስችልዎ የማዋቀሪያ ፋይልን ያካትታል። ማለትም, ለምሳሌ, ስሪት መጋገርከ ns-3.29 ልቀት ጋር የሚሰራጭ፣ ለዚያ የ ns-3 ልቀት ወይም ከዚያ በፊት ክፍሎችን ለማውጣት ጥቅም ላይ ሊውል ይችላል፣ ነገር ግን በኋላ ለሚለቀቁት ክፍሎችን ለማውጣት ጥቅም ላይ ሊውል አይችልም (የጥቅል መግለጫው ፋይል ከሆነ) bakeconf.xml አልዘመነም)።

የቅርብ ቅጂውንም ማግኘት ይችላሉ። መጋገርየሚከተለውን ትዕዛዝ ወደ ሊኑክስ ኮንሶልዎ ውስጥ በማስገባት (ጂት እንደጫኑ በማሰብ)

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

የ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

ብዙ የፓይዘን ስክሪፕቶችን እንደጫኑ ልብ ይበሉ፣ የተሰየመው የፓይዘን ሞጁል። መጋገር እና የኤክስኤምኤል ውቅር ፋይል። ቀጣዩ እርምጃ እነዚህን ስክሪፕቶች ለማውረድ እና የመረጡትን የ 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 አካባቢ ተለዋዋጭ) ለምሳሌ እንደሚከተለው (የሊኑክስ ባሽ ሼል ምሳሌ)። ወደ "መጋገሪያ" ማውጫ ይሂዱ እና ከዚያ የሚከተሉትን የአካባቢ ተለዋዋጮች ያዘጋጁ።

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

ይህ ፕሮግራሙን ያስቀምጣል መጋገር.py ወደ ሼል ዱካ እና ሌሎች ፕሮግራሞች የፈጠራቸውን ተፈፃሚዎች እና ቤተ-መጻሕፍት እንዲያገኙ ያስችላቸዋል መጋገር. በአንዳንድ የአጠቃቀም ሁኔታዎች መጋገር, ከላይ የተገለጹት የ PATH እና PYTHONPATH መቼት አያስፈልግም, ነገር ግን የ ns-3-allinone (ከተጨማሪ ጥቅሎች ጋር) ሙሉ ለሙሉ መገንባት ብዙውን ጊዜ ያስፈልገዋል.

ወደ የስራ ማውጫዎ ይሂዱ እና በኮንሶል ውስጥ የሚከተለውን ያስገቡ፡

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

በመቀጠል እንጠይቃለን። መጋገር የተለያዩ ክፍሎችን ለመጫን በቂ መሳሪያዎች እንዳሉን ያረጋግጡ. ደውል፡

$ ./bake.py check

የሚከተለውን የመሰለ ነገር ማየት አለብህ።

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

በተለይም እንደ Mercurial፣CVS፣ Git እና 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 የተሰራውን የግንባታ መሳሪያ በመጠቀም ነው ዋፍከዚህ በታች ተብራርቷል. አብዛኛዎቹ ተጠቃሚዎች አብረው ይሰራሉ ዋፍ, ነገር ግን ለመጀመር ወይም የበለጠ ውስብስብ ግንባታዎችን ለማደራጀት የሚረዱዎት ጥቂት ምቹ ስክሪፕቶች አሉ። ስለዚህ እባክዎን ከማንበብዎ በፊት ዋፍ, ተመልከት ግንባታ.py እና ጋር ስብሰባ መጋገር.

3.4.1 ግንባታ በ build.py

እባክዎ ልብ ይበሉ! ይህ የግንባታ ደረጃ ከላይ እንደተገለፀው ከተገኘው ምንጭ መዝገብ ቤት ስሪት ብቻ ይገኛል; እና በgit ወይም bake አልወረደም።

ከመልቀቂያ መዝገብ ጋር ሲሰሩ tar tarball, በ ውስጥ ns-3-አሊኖን ክፍሎቹን መገጣጠም ቀላል ሊያደርግ የሚችል ምቹ ስክሪፕት አለ። build.py ይባላል። ይህ ፕሮግራም ፕሮጀክቱን በጣም ጠቃሚ በሆነ መንገድ ያዘጋጅልዎታል. ነገር ግን፣ የበለጠ የላቀ ማዋቀር እና ከns-3 ጋር መስራት አብዛኛውን ጊዜ የ ns-3ን የራሱን የግንባታ ስርዓት Waf መጠቀምን የሚያካትት መሆኑን እና በዚህ መማሪያ ውስጥ በኋላ ላይ ይተዋወቃል።

ተጠቅመው ካወረዱ tar tarball, ከዚያም በእርስዎ ማውጫ ውስጥ ~/የስራ ቦታ የሆነ ስም ያለው ማውጫ ns-አሊኖን-3.29. የሚከተለውን አስገባ፡

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

ሲደውሉ ግንባታ.py በዚህ ማጠናከሪያ ትምህርት ውስጥ ጥቅም ላይ የዋሉ ምሳሌዎችን እና ሙከራዎችን ለመገንባት የትእዛዝ መስመር ክርክሮችን ተጠቅመንበታል፣ እነዚህም በነባሪ በ ns-3 ውስጥ አልተገነቡም። በነባሪ, ፕሮግራሙ ሁሉንም የሚገኙትን ሞጁሎች ይገነባል. ከዚያ ከፈለጉ ns-3 ያለ ምሳሌዎች እና ሙከራዎች መገንባት ወይም ለስራዎ የማይፈለጉ ሞጁሎችን ማግለል ይችላሉ።

የጫኗቸውን የተለያዩ ክፍሎች በሚገነባበት ጊዜ በስክሪፕቱ የሚታዩ ብዙ የማጠናከሪያ የውጤት መልዕክቶችን ታያለህ። በመጀመሪያ ስክሪፕቱ አናሚውን ለመገንባት ይሞክራል። netanim, ከዚያም አስገዳጅ ጄነሬተር ፒቢንጀን እና በመጨረሻም 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 የዘመኑ የ Python ማሰሪያዎችን መፍጠር ከፈለጉ ብቻ ያስፈልጋል። ለአብዛኛዎቹ ተጠቃሚዎች ይህ አያስፈልግም (ቢያንስ ns-3 እስኪቀይሩ ድረስ)፣ ስለዚህ እንደዚህ አይነት ማስጠንቀቂያዎች ለጊዜው ችላ ሊባሉ ይችላሉ።

ካልተሳካ የሚከተለው ትዕዛዝ ስለጠፉ ጥገኞች ፍንጭ ይሰጥዎታል፡

$ ./bake.py show

ለመገንባት እየሞከሩ ያሉት የፓኬጆች የተለያዩ ጥገኛዎች ይዘረዘራሉ።

3.4.3 በ Waf ይገንቡ

እስከዚህ ነጥብ ድረስ, ns-3 ን ለመገንባት, ሁለቱንም ስክሪፕት እንጠቀማለን ግንባታ.py, ወይም መሳሪያ መጋገር. እነዚህ መሳሪያዎች ns-3ን ለመገንባት እና ቤተመጻሕፍትን ለመጠገን ጠቃሚ ናቸው። በእውነቱ, ለመገንባት የግንባታ መሳሪያውን ያካሂዳሉ ዋፍ ከማውጫ ns-3. ዋፍ በ ns-3 ምንጭ ኮድ ተጭኗል። አብዛኛዎቹ ተጠቃሚዎች ns-3 ን ለማዋቀር እና ለመሰብሰብ ወደ ቀጥታ አጠቃቀም በፍጥነት ይሄዳሉ ዋፍ. ስለዚህ፣ ለመቀጠል፣ እባክዎ መጀመሪያ ወደፈጠሩት ns-3 ማውጫ ይሂዱ።

በዚህ ጊዜ ይህ በጥብቅ አያስፈልግም, ነገር ግን ትንሽ ወደ ኋላ ለመመለስ እና በፕሮጀክት ውቅር ላይ ለውጦችን እንዴት ማድረግ እንደሚቻል ለማየት ጠቃሚ ይሆናል. ምናልባት እርስዎ ሊያደርጉት የሚችሉት በጣም ጠቃሚ የውቅረት ለውጥ የተመቻቸ የኮዱን ስሪት መፍጠር ነው። በነባሪነት ፕሮጄክትዎን የማረም ሥሪት እንዲገነባ አዋቅረዋል። የተመቻቸ ግንባታ ለመፍጠር አንድ ፕሮጀክት እንይ። ምሳሌዎችን እና ሙከራዎችን ያካተቱ የተስተካከሉ ግንባታዎችን መሥራት እንዳለበት ለ Waf ለማስረዳት የሚከተሉትን ትዕዛዞችን ማስኬድ ያስፈልግዎታል።

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

ይህ ይጀምራል ዋፍ ከአካባቢው ማውጫ ውጭ (ለእርስዎ ምቾት)። የመጀመሪያው ትዕዛዝ ከቀዳሚው ግንባታ ያጸዳል, ይህ ብዙውን ጊዜ በጥብቅ አስፈላጊ አይደለም, ነገር ግን ጥሩ ልምምድ ነው (እንዲሁም የግንባታ መገለጫዎችን ከዚህ በታች ይመልከቱ); ይህ ቀደም ሲል የተፈጠሩ ቤተ-መጻሕፍት እና በማውጫው ውስጥ የሚገኙትን የነገር ፋይሎችን ይሰርዛል መገንባት /. ፕሮጀክቱ እንደገና ሲዋቀር እና የግንባታ ስርዓቱ የተለያዩ ጥገኞችን ሲፈትሽ ከሚከተለው ጋር ተመሳሳይ የሆነ ውጤት ማየት አለብዎት።

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

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

እባክዎ ከላይ ያለውን የዝርዝሩን የመጨረሻ ክፍል ያስተውሉ. አንዳንድ ns-3 አማራጮች በነባሪነት አልነቁም ወይም በአግባቡ ለመስራት የስርዓት ድጋፍ ያስፈልጋቸዋል። ለምሳሌ XmlTo ን ለማንቃት ቤተ መፃህፍቱ በስርዓቱ ላይ መገኘት አለበት። libxml-2.0. ይህ ቤተ-መጽሐፍት ካልተገኘ እና ተጓዳኙ ns-3 ተግባር ካልነቃ መልእክት ይታያል። እንዲሁም ትዕዛዙን መጠቀም እንደሚቻል ልብ ይበሉ sudo ለተወሰኑ ፕሮግራሞች "የቡድን መታወቂያ በ runtime አዘጋጅ" የሚለውን suid ቢት ለማዘጋጀት. በነባሪነት አልነቃም እና ስለዚህ ይህ ባህሪ እንደ "አልነቃም" ሆኖ ይታያል. በመጨረሻም የነቁ አማራጮችን ዝርዝር ለማግኘት ተጠቀም ዋፍ ከመለኪያ ጋር --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

ከላይ ያለው ሁኔታ ግንባታ.py ክርክሮችንም ይደግፋል --enable-examples и --enable-tests, ግን ሌሎች አማራጮች ዋፍ በቀጥታ አይደግፍም. ለምሳሌ ይህ አይሰራም፡-

$ ./build.py --disable-python

ምላሹ እንደሚከተለው ይሆናል

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

ነገር ግን, ልዩ ኦፕሬተር - - ተጨማሪ መለኪያዎችን በ በኩል ለማለፍ ሊያገለግል ይችላል ዋፍስለዚህ ከላይ ካለው ይልቅ የሚከተለው ትዕዛዝ ይሰራል:

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

ምክንያቱም ዋናውን ትዕዛዝ ያመነጫል ./waf ውቅር --አሰናክል-python. ስለ አንዳንድ ተጨማሪ የመግቢያ ምክሮች እዚህ አሉ። ዋፍ.

የግንባታ ስህተቶችን ማስተናገድ

ns-3 የተለቀቁት በጋራ ሊኑክስ እና ማክኦኤስ ስርጭቶች ላይ በሚለቀቁበት ጊዜ በሚገኙ የቅርብ ጊዜዎቹ የC++ ማቀናበሪያዎች ላይ ይሞከራሉ። ነገር ግን፣ በጊዜ ሂደት፣ አዳዲስ ስርጭቶች ከአዳዲስ አቀናባሪዎች ጋር ይለቀቃሉ፣ እና እነዚህ አዳዲስ አዘጋጆች ስለ ማስጠንቀቂያዎች የበለጠ ጠንቃቃ ይሆናሉ። ns-3 ግንባታውን ሁሉንም ማስጠንቀቂያዎች እንደ ስሕተቶች እንዲይዝ ያዋቅረዋል፣ ስለዚህ አንዳንድ ጊዜ የቆየ ስሪት በአዲስ ሲስተም ላይ እያሄዱ ከሆነ፣ የአቀናባሪ ማስጠንቀቂያ ግንባታውን ሊያቆመው ይችላል።

ለምሳሌ፣ ከዚህ ቀደም የ ns‑3.28 ለ Fedora 28 የተለቀቀ ሲሆን ይህም አዲስ ዋና ስሪትን ያካትታል gcc (gcc-8 እ.ኤ.አ.). የተለቀቀውን ns-3.28 ወይም ቀደምት ስሪቶችን በFedora 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 ጀምሮ በተለቀቁት ውስጥ ዋፍ እነዚህን ችግሮች ለመፍታት አንድ አማራጭ አለ. የ"-Werror" ባንዲራ በ g++ እና በብሎግ++ ላይ ማቀናበርን ያሰናክላል። ይህ የ"--disable-werror" አማራጭ ነው እና በማዋቀር ጊዜ መተግበር አለበት፡-

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

ያዋቅሩ ወይም ያሰባስቡ

አንዳንድ ትዕዛዞች ዋፍ በማዋቀር ደረጃ ላይ ብቻ ትርጉም አላቸው፣ እና አንዳንዶቹ በግንባታ ደረጃ ላይ ብቻ የሚሰሩ ናቸው። ለምሳሌ፣ የ ns-3 ኢምዩሽን ባህሪያትን ለመጠቀም ከፈለጉ፣ የቢት ቅንብርን ማንቃት ይችላሉ። ሱይድ በመጠቀም sudo, ከላይ እንደተገለፀው. ይህ የማዋቀር ደረጃ ትዕዛዞችን ይሽራል፣ እና ስለዚህ የሚከተለውን ትዕዛዝ በመጠቀም ውቅሩን መቀየር ይችላሉ፣ እሱም ምሳሌዎችን እና ሙከራዎችንም ያካትታል።

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

ይህን ካደረግክ ዋፍ ይጀምራል sudoከፈቃዶች ጋር ለመስራት የማስመሰል ኮድ ሶኬት መፍጠር ፕሮግራሞችን ለመቀየር ሥር. በ ዋፍ ለማዋቀር እና ለግንባታ ደረጃዎች ብዙ ሌሎች አማራጮች አሉ። አማራጮችህን ለማሰስ አስገባ፡-

$ ./waf --help

በሚቀጥለው ክፍል ከሙከራ ጋር የተያያዙ አማራጮችን እንጠቀማለን።

የመሰብሰቢያ መገለጫዎች

እንዴት ማዋቀር እንደሚችሉ አስቀድመን አይተናል ዋፍ ለስብሰባዎች ማረም и የተመቻቹ:

$ ./waf --build-profile=debug

እንዲሁም መካከለኛ የመሰብሰቢያ መገለጫ አለ ፣ መልቀቅ. አማራጭ -d ጋር ተመሳሳይ ነው። --build-profile. የግንባታ ፕሮፋይሉ የምዝግብ ማስታወሻዎችን፣ ማረጋገጫዎችን እና የማጠናከሪያ ማሻሻያ ቁልፎችን አጠቃቀም ይቆጣጠራል፡-

ns-3 የአውታረ መረብ ማስመሰያ አጋዥ ስልጠና። ምዕራፍ 3

እንደሚመለከቱት ፣ ምዝግብ ማስታወሻዎች እና ማረጋገጫዎች በስህተት ግንባታዎች ውስጥ ብቻ ይገኛሉ። የሚመከረው ልምምድ የእርስዎን ስክሪፕት በአራሚ ሁነታ ማዳበር፣ ከዚያም ተደጋጋሚ ሩጫዎችን (ለስታስቲክስ ወይም መለኪያ ለውጦች) በተመቻቸ የግንባታ መገለጫ ውስጥ ማድረግ ነው።

በተወሰኑ የግንባታ መገለጫዎች ውስጥ ብቻ መሮጥ ያለበት ኮድ ካልዎት፣ Code Wrapper ማክሮን ይጠቀሙ፡-

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

ነባሪ ፣ ዋፍ ቦታዎች በግንባታ ማውጫ ውስጥ ቅርሶችን ይገነባሉ። አማራጩን በመጠቀም የተለየ የውጤት ማውጫ መግለጽ ይችላሉ። - -out, ለምሳሌ:

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

ይህንን ከግንባታ መገለጫዎች ጋር በማጣመር በቀላሉ በተለያዩ የቅንብር አማራጮች መካከል መቀያየር ይችላሉ።

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

በእያንዳንዱ ጊዜ የቅርብ ጊዜውን ስብሰባ እንደገና መፃፍ ሳያስፈልግ ከበርካታ ስብሰባዎች ጋር እንዲሰሩ ያስችልዎታል። ወደ ሌላ መገለጫ ሲቀይሩ፣ ዋፍ ሁሉንም ነገር ሙሉ በሙሉ ሳያጠናቅቅ እሱን ብቻ ያጠናቅራል።

የግንባታ መገለጫዎችን በዚህ መንገድ ሲቀይሩ በእያንዳንዱ ጊዜ ተመሳሳይ የማዋቀር አማራጮችን ለመስጠት መጠንቀቅ አለብዎት። በርካታ የአካባቢ ተለዋዋጮችን መግለፅ ስህተቶችን ለማስወገድ ይረዳዎታል፡-

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

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

ኮምፕሌተሮች እና ባንዲራዎች

ከላይ ባሉት ምሳሌዎች ዋፍ ns-3ን ለመገንባት ከጂሲሲ የሚገኘውን C++ ማጠናከሪያ ይጠቀማል ( ሰ ++). ሆኖም ግን, የሚጠቀሙበትን መቀየር ይችላሉ ዋፍ C++ ማጠናከሪያ፣ የCXX አካባቢን ተለዋዋጭ በመግለጽ። ለምሳሌ፣ C++ compiler Clangን፣ clang++ን ለመጠቀም፣

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

በተመሳሳይ መንገድ ማዋቀር ይችላሉ ዋፍ በመጠቀም የተከፋፈለ ጥንቅር ለመጠቀም distcc:

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

ስለ distcc እና የተከፋፈለ ስብስብ ተጨማሪ መረጃ በሰነድ ክፍል ውስጥ በፕሮጀክቱ ገጽ ላይ ሊገኝ ይችላል. ns-3ን ሲያዋቅሩ የማጠናከሪያ ባንዲራዎችን ለመጨመር የCXXFLAGS_EXTRA አካባቢ ተለዋዋጭ ይጠቀሙ።

ቅንብር

ዋፍ በስርዓቱ ላይ በተለያዩ ቦታዎች ላይብረሪዎችን ለመጫን ሊያገለግል ይችላል። በነባሪ, የተጠናቀሩ ቤተ-መጻሕፍት እና ተፈፃሚዎች በማውጫው ውስጥ ይገኛሉ መገንባት, እና Waf የእነዚህን ቤተ-መጻሕፍት እና አስፈፃሚዎች ቦታ ስለሚያውቅ, ቤተ-መጻሕፍትን ሌላ ቦታ መጫን አያስፈልግም.

ተጠቃሚዎች ከግንባታ ማውጫ ውጭ መጫንን ከመረጡ ትዕዛዙን ማሄድ ይችላሉ። ./waf ጫን. የመጫኛ ነባሪ ቅድመ ቅጥያ ነው። / usr / localስለዚህ ./waf ጫን ውስጥ ፕሮግራሞችን ይጭናል / usr / local / bin, ውስጥ ቤተ-መጻሕፍት / usr / local / lib እና የራስጌ ፋይሎች ወደ ውስጥ /usr/አካባቢ/አካተት. የሱፐር ተጠቃሚ መብቶች ብዙውን ጊዜ ከነባሪ ቅድመ ቅጥያ ጋር መቀናበር አለባቸው፣ ስለዚህ የተለመደው ትእዛዝ ይሆናል። sudo ./waf መጫን. ሲጀመር Waf በመጀመሪያ በግንባታ ማውጫ ውስጥ ያሉትን የተጋሩ ቤተ-መጻሕፍት ለመጠቀም ይመርጣል፣ ከዚያም በአካባቢው አካባቢ ወደተዋቀሩ ቤተ-መጻሕፍት በሚወስደው መንገድ ላይ ቤተ መጻሕፍትን ይፈልጋል። ስለዚህ ቤተ-መጻሕፍትን በሲስተሙ ላይ ሲጭኑ ትክክለኛዎቹ ቤተ መጻሕፍት ጥቅም ላይ እየዋሉ መሆናቸውን ማረጋገጥ ጥሩ አሠራር ነው። ተጠቃሚዎች በማዋቀር ጊዜ አማራጩን በማለፍ በተለየ ቅድመ ቅጥያ ለመጫን መምረጥ ይችላሉ። --prefix, ለምሳሌ:

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

በኋላ ከሆነ, ከግንባታው በኋላ, ተጠቃሚው የመጫኛ ትዕዛዙን ያስገባል ./waf, ቅድመ ቅጥያው ጥቅም ላይ ይውላል / መርጦ/አካባቢያዊ.

ቡድን ./waf clean መጫኑ ጥቅም ላይ የሚውል ከሆነ ፕሮጀክቱን እንደገና ከማዋቀሩ በፊት ጥቅም ላይ መዋል አለበት ዋፍ በተለየ ቅድመ ቅጥያ.

ስለዚህ, ns-3 ን ለመጠቀም መደወል አያስፈልግም ./waf install. ምክንያቱም አብዛኛዎቹ ተጠቃሚዎች ይህን ትዕዛዝ አያስፈልጋቸውም። ዋፍ አሁን ያሉትን ቤተ-መጻሕፍት ከግንባታ ማውጫ ውስጥ ይወስዳል፣ ነገር ግን አንዳንድ ተጠቃሚዎች ተግባራቸው ከns-3 ማውጫ ውጭ ካሉ ፕሮግራሞች ጋር መስራትን የሚያካትት ከሆነ ይህ ጠቃሚ ሆኖ ሊያገኙት ይችላሉ።

ዋፍ ነጠላ

በ ns-3 ምንጭ ዛፍ ከፍተኛ ደረጃ ላይ አንድ Waf ስክሪፕት ብቻ አለ። አንዴ መሥራት ከጀመሩ በኋላ በማውጫው ውስጥ ብዙ ጊዜ ያሳልፋሉ scratch/ ወይም በጥልቀት ወደsrc/... እና በተመሳሳይ ጊዜ መሮጥ አለባቸው ዋፍ. የት እንዳሉ ማስታወስ እና መሮጥ ይችላሉ ዋፍ እንደሚከተለው ይሆናል;

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

ግን ይህ አሰልቺ እና ለስህተት የተጋለጠ ይሆናል, ስለዚህ የተሻሉ መፍትሄዎች አሉ. አንድ የተለመደ መንገድ እንደ የጽሑፍ አርታዒ መጠቀም ነው ኢማካዎች ወይም vim, ሁለት ተርሚናል ክፍለ ጊዜዎች የሚከፈቱበት, አንዱ ns-3 ን ለመገንባት ያገለግላል, ሁለተኛው ደግሞ የምንጭ ኮድን ለማረም ያገለግላል. ካለህ ብቻ tar tarball, ከዚያም የአካባቢ ተለዋዋጭ ሊረዳ ይችላል:

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

$ cd scratch 
$ waff build

በሞጁል ማውጫ ውስጥ እንደ ተራ የዋፍ ስክሪፕት ለመጨመር ፈታኝ ሊሆን ይችላል። exec ../../waf. እባካችሁ ያንን አታድርጉ። ይህ ለአዲስ ጀማሪዎች ግራ የሚያጋባ ነው፣ እና በደንብ ካልሰራ፣ ለመለየት አስቸጋሪ የሆኑ የግንባታ ስህተቶችን ያስከትላል። ከላይ የሚታዩት መፍትሄዎች ጥቅም ላይ መዋል ያለባቸው መንገዶች ናቸው.

3.5 በመሞከር ላይ ns-3

ስክሪፕቱን በማሄድ የ ns-3 ስርጭት ክፍል ሙከራዎችን ማሄድ ይችላሉ። ./ test.py:

$ ./test.py

እነዚህ ሙከራዎች በትይዩ ይከናወናሉ ዋፍ. በመጨረሻም የሚከተለውን መልእክት ማየት አለብህ፡-

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

ይህ የቫልግሪንድ ብልሽቶችን ፣ ብልሽቶችን ወይም ስህተቶችን ለመለየት አስፈላጊ መልእክት ነው ፣ ይህም በኮዱ ላይ ያሉ ችግሮችን ወይም በመሳሪያዎች እና በኮድ መካከል አለመጣጣምን ያሳያል ።

የመጨረሻውን ውጤት ከ ያያሉ ዋፍ እና እያንዳንዱን ሙከራ የሚያካሂድ ሞካሪ፣ እሱም እንደዚህ ያለ ነገር ይመስላል።

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

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

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

...

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

ይህ ትእዛዝ ብዙውን ጊዜ በተጠቃሚዎች የሚሰራው የ ns-3 ስርጭቱ በትክክል መሰራቱን በፍጥነት ለማረጋገጥ ነው። (የ"PASS: ..." መስመሮች ቅደም ተከተል ሊለያይ እንደሚችል ልብ ይበሉ, ይህ የተለመደ ነው. ዋናው ነገር በሪፖርቱ መጨረሻ ላይ ያለው ማጠቃለያ መስመር ሁሉም ሙከራዎች እንዳለፉ ያሳያል, ምንም ሙከራዎች አልተሳኩም ወይም አልተከሰቱም.) እና ዋፍና ፈተና.py በማሽኑ ፕሮሰሰር ኮሮች ላይ ስራን ትይዩ ያደርጋል።

3.6 ስክሪፕቱን በማሄድ ላይ

እኛ ብዙውን ጊዜ ስክሪፕቶችን በቁጥጥር ስር እናደርጋለን ዋፍ. ይህ የግንባታ ስርዓቱ የጋራ ቤተመፃህፍት መንገዶች በትክክል መዘጋጀታቸውን እና ቤተ መፃህፍቶቹ በሂደት ላይ መሆናቸውን ለማረጋገጥ ያስችላል። ፕሮግራሙን ለማሄድ በቀላሉ ይጠቀሙ ዋፍ ከመለኪያ ጋር - -run. በየቦታው ያለውን ፕሮግራም ns-3 አቻ እናሂድ ሰላም ልዑልየሚከተለውን በመተየብ፡-

$ ./waf --run hello-simulator

Waf በመጀመሪያ ፕሮግራሙ በትክክል መገንባቱን ያረጋግጣል እና አስፈላጊ ከሆነ ይገነባል። ከዚያም ዋፍ የሚከተለውን ውጤት የሚያመጣ ፕሮግራም ያስፈጽማል.

Hello Simulator

እንኳን ደስ አላችሁ! አሁን የ ns-3 ተጠቃሚ ነዎት!

ውጤቱን ካላየሁ ምን ማድረግ አለብኝ?

መልዕክቶች ካዩ ዋፍግንባታው በተሳካ ሁኔታ መጠናቀቁን ያሳያል ነገር ግን ውጤቱን አያዩም። "ሄሎ ሲሙሌተር", ከዚያ በ [Build-with-Waf] ክፍል ውስጥ የእርስዎን የግንባታ ሁነታ ወደ መቀየር እድሉ አለ የተመቻቹ፣ ግን ወደ ሁነታው መመለስ አምልጦታል። ማረም. በዚህ ማጠናከሪያ ትምህርት ውስጥ ጥቅም ላይ የዋለው ሁሉም የኮንሶል ውፅዓት ልዩ ns-3 ምዝግብ ማስታወሻን የሚያከናውን እና ብጁ መልዕክቶችን ወደ ኮንሶሉ ለማተም ያገለግላል። የተመቻቸ ኮድ ሲጠናቀር የዚህ አካል ውፅዓት በራስ-ሰር ይጠፋል - "የተመቻቸ" ነው። “ሄሎ ሲሙሌተር” ውጽኢቱ ካልኣይ ውጽኢት ናይዚ ውጽኢታዊ ምኽንያት ይግመት።

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

ለማበጀት ዋፍ ምሳሌዎችን እና ሙከራዎችን ያካተቱ የ ns-3 ፕሮግራሞችን የማረም ስሪቶችን ለመገንባት። ከዚያ በመተየብ የአሁኑን የኮዱ ማረም ስሪት እንደገና መገንባት አለብዎት

$ ./waf

አሁን ፕሮግራሙን ከሰሩ ሰላም-ሲሙሌተር, የሚጠበቀውን ውጤት ማየት አለብዎት.

3.6.1 የትእዛዝ መስመር ክርክሮች

የትእዛዝ መስመር ነጋሪ እሴቶችን ወደ ns-3 ፕሮግራም ለማለፍ የሚከተለውን ስርዓተ-ጥለት ይጠቀሙ፡-

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

ተካ ወደ ፕሮግራምዎ ስም እና ወደ ክርክሮች. ክርክር - -command-template ለ ዋፍ በእውነቱ ትክክለኛውን የትእዛዝ መስመር ለመገንባት የምግብ አዘገጃጀት መመሪያ ነው። ዋፍ ፕሮግራሙን ለማስፈጸም ጥቅም ላይ ይውላል. Waf ግንባታው መጠናቀቁን ይፈትሻል፣ የተጋሩ ቤተ መፃህፍት መንገዶችን ያዘጋጃል፣ ከዚያም የተሰጠውን የትዕዛዝ መስመር አብነት ይጠቀማል እና የ %s ቦታ ያዥ የፕሮግራሙን ስም በመተካት ፈጻሚውን ለመጥራት። ይህ አገባብ የተወሳሰበ ሆኖ ካገኙት የ ns-3 ፕሮግራምን እና ክርክሮቹ በነጠላ ጥቅሶች ውስጥ የተካተቱትን የሚያካትት ቀለል ያለ ስሪት አለ፡-

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

ሌላው በጣም ጠቃሚ ምሳሌ የሙከራ ስብስቦችን እየመረጡ ማስኬድ ነው። ሚትስት የሚባል የሙከራ ስብስብ እንዳለ እናስብ (በእርግጥ ግን የለም)። ከዚህ በላይ ./test.py ስክሪፕት ተጠቅመን በርካታ ሙከራዎችን በትይዩ ለማስኬድ፣ ይህም የሙከራ ፕሮግራሙን ደጋግሞ ይጠራል። ፈታኝ-ሯጭ. ይደውሉ ፈታኝ-ሯጭ አንድ ሙከራ ለማካሄድ በቀጥታ፡-

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

ክርክሮች ወደ ፕሮግራሙ ይተላለፋሉ ፈታኝ-ሯጭ. ምስጢራዊነት ስለሌለ የስህተት መልእክት ይፈጠራል። ያሉትን የሙከራ-ሯጭ አማራጮችን ለማተም የሚከተለውን ያስገቡ፡-

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

3.6.2 ማረም

በሌላ መገልገያ ስር ns-3 ፕሮግራሞችን ለማሄድ፣ ለምሳሌ አራሚ (ለምሳሌ፣ ጂ.ዲ.ቢ.) ወይም የማህደረ ትውስታ ሙከራ መሳሪያ (ለምሳሌ፡- valgrind), ተመሳሳይ ቅጽ ይጠቀሙ - -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 የስራ ማውጫ

Waf በ ns-3 ዛፍ አናት ላይ ካለው ቦታ መጀመር አለበት። ይህ አቃፊ የውጤት ፋይሎች የሚጻፉበት የስራ ማውጫ ይሆናል። ነገር ግን እነዚህን ፋይሎች ከns-3 ምንጭ ዛፍ ውጭ ማቆየት ከፈለጉስ? ክርክር ተጠቀም - -cwd:

$ ./waf --cwd=...

የውጤት ፋይሎችን በስራ ማውጫዎ ውስጥ ለማግኘት የበለጠ አመቺ ሆኖ ሊያገኙት ይችላሉ። በዚህ ሁኔታ, የሚከተለው ቀጥተኛ ያልሆነ እርምጃ ሊረዳ ይችላል.

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

ይህ የቀደመው የትእዛዝ ስሪት ማስጌጥ የአሁኑን የስራ ማውጫ ይጠብቃል ፣ ወደ ማውጫው ይሄዳል ዋፍእና ከዚያም መመሪያ ይሰጣል ዋፍ ፕሮግራሙን ከመጀመርዎ በፊት የሥራ ማውጫውን ወደ ቀድሞው የሥራ ማውጫ ለመቀየር። ቡድኑን እንጠቅሳለን - -cwd ለሙሉነት፣ አብዛኛው ተጠቃሚዎች በቀላሉ Wafን ከከፍተኛ ደረጃ ማውጫ ያሂዱ እና የውጤት ፋይሎችን እዚያ ያመነጫሉ።

የቀጠለ፡ ምዕራፍ 4

ምንጭ: hab.com

አስተያየት ያክሉ