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 පැකේජයක් ලෙස ලබා නොදෙන්නේ මන්දැයි කල්පනා කළ හැකිය. විවිධ Linux බෙදාහැරීම් සඳහා ද්විමය පැකේජ ඇතත් (උදා: Debian), බොහෝ පරිශීලකයින්ට පුස්තකාල සංස්කරණය කිරීම අවසන් වන අතර ns-3 නැවත ගොඩනඟා ගැනීමට සිදු වේ, එබැවින් මූලාශ්ර කේතය ලබා ගැනීම පහසුය. මෙම හේතුව නිසා, අපි මූලාශ්රයෙන් ස්ථාපනය කිරීම කෙරෙහි අවධානය යොමු කරමු.
බොහෝ යෙදුම් සඳහා ns-3 හිමිකම් මූල අවශ්ය නොවේ, වරප්රසාද ලත් පරිශීලක ගිණුමක් භාවිතා කිරීම රෙකමදාරු කරනු ලැබේ.
3.2 පූර්වාවශ්යතාවයන්
පවතින ns-3 පුස්තකාලවල සම්පූර්ණ කට්ටලය තුන්වන පාර්ශ්ව පුස්තකාල මත පරායත්තතා ගණනාවක් ඇත, නමුත් බොහෝ දුරට ns-3 පොදු (බොහෝ විට පෙරනිමියෙන් ස්ථාපනය කර ඇති) සංරචක කිහිපයක් සඳහා සහය ඇතිව ගොඩනගා භාවිතා කළ හැකිය: C++ සම්පාදකයක්, පයිතන්, මූලාශ්ර කේත සංස්කාරකයක් (උදාහරණයක් ලෙස, විම්, emacs හෝ සූර්ය ග්රහණය) සහ, සංවර්ධන ගබඩාවන් භාවිතා කරන්නේ නම්, Git අනුවාද පාලන පද්ධති. බොහෝ පළමු වරට භාවිතා කරන්නන් ඔවුන්ගේ වින්යාසය සමහර ns-3 උසස් විශේෂාංග අස්ථානගත වී ඇත්නම් කරදර වීමට අවශ්ය නොවනු ඇත, නමුත් සම්පූර්ණ ස්ථාපනයක් අවශ්ය අය සඳහා, ව්යාපෘතිය ප්රයෝජනවත් ඉඟි සහ උපක්රම රාශියක් සහිත පිටු ඇතුළත් විකියක් සපයයි. එවැනි එක් පිටුවක් වන්නේ ස්ථාපන පිටුවයි, විවිධ පද්ධති සඳහා ස්ථාපන උපදෙස් සහිත, ලබා ගත හැක:
මෙම විකියේ පූර්වාවශ්යතා අංශය පොදු ns-3 විකල්ප සඳහා සහය වීමට අවශ්ය පැකේජ මොනවාද යන්න පැහැදිලි කරන අතර Linux හෝ macOS හි පොදු රසයන් මත ඒවා ස්ථාපනය කිරීමට භාවිතා කරන විධානයන් ද සපයයි.
ඔබට ns-3 විකි පිටුව හෝ ප්රධාන වෙබ් අඩවිය ගවේෂණය කිරීමට මෙම අවස්ථාවෙන් ප්රයෝජන ගත හැක:
මෙවලම් පැකේජය/අනුවාදය
- C++ සම්පාදකය
clang++ හෝ g++ (g++ අනුවාදය 4.9 හෝ ඊට වැඩි) - Python මීට උදාහරණ
python2 අනුවාදය >= 2.7.10, හෝ python3 අනුවාදය >=3.4 - Git
ඕනෑම නවතම අනුවාදයක් (GitLab.com හි ns-3 වෙත ප්රවේශ වීමට) - තාර
ඕනෑම නවතම අනුවාදයක් (ns‑3 නිකුතුව ඉවත් කිරීම සඳහා) - බන්සිප්2
ඕනෑම නවතම අනුවාදයක් (ns‑3 නිකුතුව ඉවත් කිරීම සඳහා)
Python හි පෙරනිමි අනුවාදය පරීක්ෂා කිරීමට, ටයිප් කරන්න python -V
. g++ අනුවාදය පරීක්ෂා කිරීමට, ටයිප් කරන්න g++ -v
. කිසියම් මෙවලම් අස්ථානගත වී ඇත්නම් හෝ ඉතා පැරණි නම්, කරුණාකර ns-3 wiki පිටුවේ ඇති ස්ථාපන මාර්ගෝපදේශය වෙත යොමු වන්න.
මෙතැන් සිට, අපි පාඨකයා Linux, MacOS, හෝ Linux emulator ධාවනය කරන අතර අවම වශයෙන් ඉහත මෙවලම් ඇති බව උපකල්පනය කරමු.
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
ඉහත භාවිතා කරන ලද උපයෝගීතාවයට අවධානය යොමු කරන්න ඩී, අන්තර්ජාලයෙන් වස්තූන් බාගත කිරීම සඳහා වන විධාන රේඛා මෙවලමකි. ඔබ එය ස්ථාපනය කර නොමැති නම්, ඔබට මේ සඳහා ඔබේ බ්රව්සරය භාවිතා කළ හැකිය.
මෙම පියවර අනුගමනය කිරීමෙන් ඔබව 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 ගබඩාවල ඇත
Git repositories භාවිතා කිරීම ආරම්භ කිරීමට ඇති පහසුම ක්රමය නම් පරිසරය දෙබල කිරීම හෝ ක්ලෝන කිරීමයි 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-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 යාවත්කාලීන කර නැත).
අලුත්ම පිටපතත් ගන්න පුළුවන් රවුම් කේක්පහත විධානය ඔබගේ 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 බෙදාහැරීම බාගත කර ගොඩනැගීමට මෙම ස්ක්රිප්ට් භාවිතා කිරීමයි. අභිරුචිකරණ ඉලක්ක කිහිපයක් තිබේ:
-
ns-3.29: නිකුතුවට අනුරූප මොඩියුලය; එය තාරබෝලයේ නිකුතුවට සමාන සංරචක බාගත කරනු ඇත;
-
ns-3-dev: සමාන මොඩියුලයක්, නමුත් සංවර්ධන ගසෙන් කේතය භාවිතා කිරීම;
-
ns-ඇලිනෝන්-3.29: Click routing සහ Network Simulation Cradle, ns-3 සඳහා Openflow වැනි අනෙකුත් අමතර විශේෂාංග ඇතුලත් මොඩියුලයක්.
-
ns-3-ඇලිනෝන්: මොඩියුලයේ මුදා හැරීමේ අනුවාදයට සමානයි ඇලිනෝන්, නමුත් සංවර්ධන කේතය සඳහා.
අදහස් දැක්වීම්
ක්ලික් කරන්න - රවුටර නිර්මාණය කිරීම සඳහා මොඩියුලර් මෘදුකාංග ගෘහ නිර්මාණ ශිල්පය.
Openflow යනු රවුටර සහ ස්විච මගින් දත්ත ජාලයක් හරහා සම්ප්රේෂණය වන දත්ත සැකසීමේ ක්රියාවලිය කළමනාකරණය කිරීම සඳහා වන ප්රොටෝකෝලයකි, මෘදුකාංග නිර්වචනය කරන ලද ජාල තාක්ෂණය ක්රියාත්මක කිරීම.
වත්මන් සංවර්ධන ස්නැප්ෂොට් (නිදහස් නොවන) ns-3 සොයා ගත හැක:
සංවර්ධකයින් මෙම ගබඩාවන් ස්ථාවර ක්රියාකාරී අනුපිළිවෙලක තබා ගැනීමට උත්සාහ කරයි, නමුත් ඒවා සංවර්ධන ප්රදේශයේ පවතින අතර නිකුත් නොකළ කේතයක් අඩංගු වේ, එබැවින් ඔබ නව විශේෂාංග භාවිතා කිරීමට අදහස් නොකරන්නේ නම්, නිල නිකුතුව තෝරන්න.
ඔබට ගබඩා ලැයිස්තුව පිරික්සීමෙන් හෝ ns-3 Releases වෙබ් පිටුවට යාමෙන් කේතයේ නවතම අනුවාදය සොයාගත හැක:
දැන්, අපට අවශ්ය ns-3 සංරචක ලබා ගැනීමට, අපි මෙවලම භාවිතා කරන්නෙමු පිළිස්සීම. කාර්යය ගැන හැඳින්වීමේ වචන කිහිපයක් කියමු පිළිස්සීම.
පැකේජ මූලාශ්ර නාමාවලියකට පූරණය කිරීමෙන් බේක් ක්රියා කරයි මූලාශ්රය සහ ගොඩනැගීමේ නාමාවලිය තුළට පුස්තකාල ස්ථාපනය කිරීම. පිළිස්සීම ද්විමය යොමු කිරීමෙන් ධාවනය කළ හැක, නමුත් ඔබට ධාවනය කිරීමට අවශ්ය නම් පිළිස්සීම එය බාගත කළ නාමාවලියෙන් නොවේ, වෙත මාර්ගය එකතු කිරීම සුදුසුය රවුම් කේක් ඔබගේ මාර්ගයට (PATH පරිසර විචල්යය), උදාහරණයක් ලෙස පහත පරිදි (Linux bash shell සඳහා උදාහරණය). "bake" නාමාවලිය වෙත ගොස් පහත පරිසර විචල්යයන් සකසන්න:
$ 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 ...
විශේෂයෙන්ම, මෙම පියවරේදී Mercurial, CVS, Git සහ Bazaar වැනි උඩුගත මෙවලම් අත්යවශ්ය වේ, මන්ද ඒවා අපට කේතය ලබා ගැනීමට ඉඩ සලසයි. මෙම අවස්ථාවේදී, ඔබගේ පද්ධතිය සඳහා සුපුරුදු ආකාරයෙන් අතුරුදහන් වූ මෙවලම් ස්ථාපනය කරන්න (ඔබ දන්නේ නම්) හෝ උදව් සඳහා ඔබේ පද්ධති පරිපාලක අමතන්න.
ඊළඟට, මෘදුකාංගය බාගත කිරීමට උත්සාහ කරන්න:
$ ./bake.py download
ප්රතිඵලය මෙවැනි දෙයක් විය යුතුය:
>> Searching for system dependency setuptools - OK
>> Searching for system dependency libgoocanvas2 - OK
>> Searching for system dependency gi-cairo - OK
>> Searching for system dependency pygobject - OK
>> Searching for system dependency pygraphviz - OK
>> Searching for system dependency python-dev - OK
>> Searching for system dependency qt - OK
>> Searching for system dependency g++ - OK
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK
>> Downloading netanim-3.108 - OK
>> Downloading ns-3.29 - OK
මෙයින් අදහස් වන්නේ මූලාශ්ර තුනක් බාගත කර ඇති බවයි. දැන් මූලාශ්ර නාමාවලිය වෙත ගොස් ls ලෙස ටයිප් කරන්න; ඔබ දැකිය යුතුය:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgen
දැන් ඔබ ns-3 බෙදාහැරීම ගොඩනැගීමට සූදානම්.
3.4 එකලස් ns-3
ns-3 බාගැනීමේදී මෙන්, ns-3 ගොඩනැගීමට ක්රම කිහිපයක් තිබේ. අපට අවධාරණය කිරීමට අවශ්ය ප්රධානම දෙය නම් ns-3 ගොඩනගා ඇත්තේ ගොඩනැගීමේ මෙවලමක් භාවිතා කර බවයි වෆිපහත විස්තර කර ඇත. බොහෝ පරිශීලකයින් සමඟ වැඩ කරනු ඇත වෆි, නමුත් ඔබට වඩාත් සංකීර්ණ ගොඩනැගීම් ආරම්භ කිරීමට හෝ සංවිධානය කිරීමට උදවු කිරීමට පහසු ස්ක්රිප්ට් කිහිපයක් තිබේ. ඒ නිසා කරුණාකර, ඔබ ගැන කියවීමට පෙර වෆි, පොඩ්ඩක් බලන්න build.py සහ එකලස් කිරීම රවුම් කේක්.
3.4.1 build.py සහිත ගොඩනැගිල්ල
කරුණාකරලා! මෙම ගොඩනැගීමේ පියවර ලබා ගත හැක්කේ ඉහත විස්තර කර ඇති පරිදි ලබාගත් මූලාශ්ර සංරක්ෂිත අනුවාදයෙන් පමණි; සහ git හෝ bake හරහා බාගත කර නැත.
මුදා හැරීමේ ලේඛනාගාරයක් සමඟ වැඩ කරන විට තාර බෝලඇතුළත 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 පිළිස්සීම සහිත ගොඩනැගිල්ල
ඔබ ව්යාපෘති ගබඩාවලින් ප්රභව කේතය ලබා ගැනීමට ඉහත bake භාවිතා කළේ නම්, ඔබට එය ns-3 ගොඩනැගීමට දිගටම භාවිතා කළ හැක. අමතන්න:
$ ./bake.py build
සහ ඔබ එවැනි දෙයක් දැකිය යුතුය:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OK
Tooltip: "bake.py deploy" ඇමතීමෙන් ඔබට බාගැනීම් සහ ගොඩනැගීමේ පියවර දෙකම එකවර කළ හැක.
සියලුම සංරචක එකලස් කිරීම අසාර්ථක විය හැක, නමුත් සංරචකයක් අවශ්ය නොවේ නම් එකලස් කිරීම දිගටම කරගෙන යනු ඇත. උදාහරණයක් ලෙස, මෑත කාලීන අතේ ගෙන යා හැකි ගැටළුවක් විය castxml මෙවලමෙන් එකලස් කළ හැකිය රවුම් කේක් සියලුම වේදිකාවල නොවේ. මෙම අවස්ථාවේදී, මෙවැනි පණිවිඩයක් දිස්වනු ඇත:
>> Building castxml - Problem
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.
කෙසේ වෙතත්, castxml ඔබට යාවත්කාලීන පයිතන් බන්ධන සෑදීමට අවශ්ය නම් පමණක් අවශ්ය වේ. බොහෝ පරිශීලකයින් සඳහා මෙය අවශ්ය නොවේ (අවම වශයෙන් ඔවුන් ns-3 වෙනස් කරන තුරු), එබැවින් එවැනි අනතුරු ඇඟවීම් දැනට ආරක්ෂිතව නොසලකා හැරිය හැක.
එය අසමත් වුවහොත්, පහත විධානය මඟින් ඔබට අතුරුදහන් පරායත්තතා පිළිබඳ ඉඟියක් ලබා දෙනු ඇත:
$ ./bake.py show
ඔබ ගොඩනැගීමට උත්සාහ කරන පැකේජවල විවිධ පරායත්තතා ලැයිස්තුගත වනු ඇත.
3.4.3 Waf සමඟ ගොඩනඟන්න
මේ මොහොත දක්වා, ns-3 ගොඩනැගීම ආරම්භ කිරීමට, අපි එක්කෝ ස්ක්රිප්ට් එක භාවිතා කළෙමු build.py, හෝ මෙවලම රවුම් කේක්. මෙම මෙවලම් ns-3 ගොඩනැගීමට සහ පුස්තකාල නඩත්තු කිරීමට ප්රයෝජනවත් වේ. ඇත්ත වශයෙන්ම, ගොඩනැගීම සඳහා ඔවුන් ගොඩනැගීමේ මෙවලම ක්රියාත්මක කරයි වෆි ns-3 නාමාවලියෙන්. වෆි ns-3 මූල කේතය සමඟ ස්ථාපනය කර ඇත. බොහෝ පරිශීලකයින් ඉක්මනින් වින්යාස කිරීමට සහ එකලස් කිරීමට ns‑3 භාවිතා කිරීමට ඉක්මන් වේ වෆි. එබැවින්, ඉදිරියට යාමට, කරුණාකර ඔබ මුලින් නිර්මාණය කළ ns-3 නාමාවලිය වෙත යන්න.
මෙම අවස්ථාවේදී මෙය දැඩි ලෙස අවශ්ය නොවේ, නමුත් එය ටිකක් පසුපසට ගොස් ව්යාපෘති වින්යාසය වෙනස් කරන්නේ කෙසේදැයි බැලීම ප්රයෝජනවත් වනු ඇත. ඔබට කළ හැකි වඩාත්ම ප්රයෝජනවත් වින්යාස වෙනස් කිරීම වනුයේ කේතයේ ප්රශස්ත අනුවාදයක් නිර්මාණය කිරීමයි. පෙරනිමියෙන්, ඔබ දෝශ නිරාකරණ අනුවාදයක් තැනීමට ඔබේ ව්යාපෘතිය වින්යාස කර ඇත. ප්රශස්ත ගොඩනැගීමක් නිර්මාණය කිරීමේ ව්යාපෘතියක් දෙස බලමු. උදාහරණ සහ පරීක්ෂණ ඇතුළත් ප්රශස්ත ගොඩනැගීම් සෑදිය යුතු බව Waf වෙත පැහැදිලි කිරීමට, ඔබට පහත විධානයන් ක්රියාත්මක කිරීමට අවශ්ය වනු ඇත:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
මෙය දියත් කරනු ඇත වෆි දේශීය නාමාවලියෙන් පිටත (ඔබේ පහසුව සඳහා). පළමු විධානය පෙර ගොඩනැගීමෙන් පිරිසිදු කරයි, මෙය සාමාන්යයෙන් දැඩි ලෙස අවශ්ය නොවේ, නමුත් එය හොඳ පරිචයකි (පහත ගොඩනැගීමේ පැතිකඩද බලන්න); මෙය ඩිරෙක්ටරියේ ඇති කලින් සාදන ලද පුස්තකාල සහ වස්තු ගොනු මකා දමයි ගොඩනැගීම/. ව්යාපෘතිය නැවත වින්යාස කර ඇති විට සහ ගොඩනැගීමේ පද්ධතිය විවිධ පරායත්තතා පරීක්ෂා කරන විට, ඔබ පහත දැක්වෙන ප්රතිදානයට සමාන ප්රතිදානයක් දැකිය යුතුය:
Setting top to : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler) : /usr/bin/gcc
Checking for cc version : 7.3.0
Checking for 'g++' (C++ compiler) : /usr/bin/g++
Checking for compilation flag -march=native support : ok
Checking for compilation flag -Wl,--soname=foo support : ok
Checking for compilation flag -std=c++11 support : ok
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags : yes
Testing pyext configuration : yes
Checking for compilation flag -fvisibility=hidden support : ok
Checking for compilation flag -Wno-array-bounds support : ok
Checking for pybindgen location : ../pybindgen ,!(guessed)
Checking for python module 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Checking for pybindgen version : 0.19.0. ,!post4+g823d8b2
Checking for code snippet : yes
Checking for types uint64_t and unsigned long equivalence : no
Checking for code snippet : no
Checking for types uint64_t and unsigned long long equivalence : yes
Checking for the apidefs that can be used for Python bindings : gcc-LP64
Checking for internal GCC cxxabi : complete
Checking for python module 'pygccxml' : not found
Checking for click location : not found
Checking for program 'pkg-config' : /usr/bin/pkg- ,!config
Checking for 'gtk+-3.0' : not found
Checking for 'libxml-2.0' : yes
checking for uint128_t : not found
checking for __uint128_t : yes
Checking high precision implementation : 128-bit integer ,!(default)
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for header sys/types.h : yes
Checking for header sys/stat.h : yes
Checking for header dirent.h : yes
Checking for header stdlib.h : yes
Checking for header signal.h : yes
Checking for header pthread.h : yes
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for library rt : yes
Checking for header sys/ioctl.h : yes
Checking for header net/if.h : yes
Checking for header net/ethernet.h : yes
Checking for header linux/if_tun.h : yes
Checking for header netpacket/packet.h : yes
Checking for NSC location : not found
Checking for 'sqlite3' : not found
Checking for header linux/if_tun.h : yes
Checking for python module 'gi' : 3.26.1
Checking for python module 'gi.repository.GObject' : ok
Checking for python module 'cairo' : ok
Checking for python module 'pygraphviz' : 1.4rc1
Checking for python module 'gi.repository.Gtk' : ok
Checking for python module 'gi.repository.Gdk' : ok
Checking for python module 'gi.repository.Pango' : ok
Checking for python module 'gi.repository.GooCanvas' : ok
Checking for program 'sudo' : /usr/bin/sudo
Checking for program 'valgrind' : not found
Checking for 'gsl' : not found python-config : not found
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for program 'doxygen' : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory :
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite))
DES Metrics event collection : not enabled (defaults to disabled)
Emulation FdNetDevice : enabled
Examples : enabled
File descriptor NetDevice : enabled
GNU Scientific Library (GSL) : not enabled (GSL not found)
Gcrypt library : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore : not enabled (library 'gtk+-3.0 >= 3.0' not fou nd)
MPI Support : not enabled (option --enable-mpi not selected)
ns-3 Click Integration : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration : not enabled (Required boost libraries not found)
Network Simulation Cradle : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled
Python API Scanning Support : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled
Real Time Simulator : enabled
SQlite stats data output : not enabled (library 'sqlite3' not found)
Tap Bridge : enabled
Tap FdNetDevice : enabled
Tests : enabled
Threading Primitives : enabled
Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
XmlIo : enabled
'configure' finished successfully (6.387s)
ඉහත ලැයිස්තුගත කර ඇති අවසාන කොටස කරුණාකර සටහන් කරන්න. සමහර ns-3 විකල්ප පෙරනිමියෙන් සක්රීය කර නැත හෝ නිසි ලෙස ක්රියා කිරීමට පද්ධති සහාය අවශ්ය වේ. උදාහරණයක් ලෙස, XmlTo සබල කිරීමට, පුස්තකාලය පද්ධතියේ තිබිය යුතුය libxml-2.0. මෙම පුස්තකාලය සොයා නොගත්තේ නම් සහ අදාළ ns-3 ශ්රිතය සක්රීය නොකළේ නම්, පණිවිඩයක් පෙන්වනු ඇත. විධානය භාවිතා කළ හැකි බව ද සලකන්න කිසිදිනක භාවිතා ඇතැම් වැඩසටහන් සඳහා suid bit සැකසීමට "ධාවන වේලාවේදී කණ්ඩායම් හැඳුනුම්පත සකසන්න". එය පෙරනිමියෙන් සක්රිය කර නොමැති අතර එම නිසා මෙම විශේෂාංගය "සක්රීය කර නැත" ලෙස දිස්වේ. අවසාන වශයෙන්, සක්රීය විකල්ප ලැයිස්තුවක් ලබා ගැනීමට, භාවිතා කරන්න වෆි පරාමිතිය සමඟ --check-config
.
දැන් අපි ආපසු ගොස් උදාහරණ සහ පරීක්ෂණ අඩංගු දෝශ නිරාකරණය වෙත ආපසු යමු.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
ගොඩනැගීමේ පද්ධතිය දැන් සකසා ඇති අතර ඔබට සරලව ටයිප් කිරීමෙන් ns-3 වැඩසටහන් වල දෝශ නිරාකරණ අනුවාද සෑදිය හැක:
$ ./waf
ඉහත පියවර මඟින් ඔබට ns-3 පද්ධතියේ කොටසක් දෙවරක් ගොඩනඟා ගැනීමට බල කර ඇත, නමුත් දැන් ඔබ වින්යාසය වෙනස් කර ප්රශස්ත කේතය ගොඩනඟන්නේ කෙසේදැයි දනී.
ලබා දී ඇති ව්යාපෘති වින්යාසය සඳහා කුමන පැතිකඩ සක්රිය දැයි පරීක්ෂා කිරීමට, විධානයක් ඇත:
$ ./waf --check-profile
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
ඉහත දර්ශනය build.py තර්ක සඳහා ද සහාය දක්වයි --enable-examples
и --enable-tests
, නමුත් වෙනත් විකල්ප වෆි එය සෘජුව සහාය නොදක්වයි. උදාහරණයක් ලෙස, මෙය ක්රියා නොකරනු ඇත:
$ ./build.py --disable-python
ප්රතික්රියාව මේ වගේ වනු ඇත:
build.py: error: no such option: --disable-python
කෙසේ වෙතත්, විශේෂ ක්රියාකරු - - හරහා අතිරේක පරාමිතීන් සම්මත කිරීමට භාවිතා කළ හැක වොෆ්එබැවින් ඉහත විධානය වෙනුවට පහත විධානය ක්රියා කරයි:
$ ./build.py -- --disable-python
මන්ද එය ප්රධාන විධානය ජනනය කරයි ./waf configure --disable-python. ගැන තවත් හඳුන්වාදීමේ උපදෙස් කිහිපයක් මෙන්න වෆි.
ගොඩනැගීමේ දෝෂ හැසිරවීම
ns-3 නිකුතු සාමාන්ය Linux සහ MacOS බෙදාහැරීම් මත නිකුත් කරන අවස්ථාවේ පවතින නවතම C++ සම්පාදක මත පරීක්ෂා කෙරේ. කෙසේ වෙතත්, කාලයත් සමඟම, නව සම්පාදක සමඟ නව බෙදාහැරීම් නිකුත් කරනු ලබන අතර, මෙම නව සම්පාදකයින් අනතුරු ඇඟවීම් සම්බන්ධයෙන් වඩාත් උද්යෝගිමත් වේ. සියලුම අනතුරු ඇඟවීම් දෝෂ ලෙස සැලකීමට ns-3 එහි ගොඩනැගීම වින්යාස කරයි, එබැවින් සමහර විට ඔබ නව පද්ධතියක පැරණි අනුවාදයක් ධාවනය කරන්නේ නම්, සම්පාදක අනතුරු ඇඟවීමක් මඟින් ගොඩනැගීම නතර කළ හැකිය.
උදාහරණයක් ලෙස, Fedora 3.28 සඳහා ns‑28 නිකුතුවක් කලින් තිබුනා, එයට නව ප්රධාන අනුවාදයක් ඇතුලත් විය. gcc (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 වෆි මෙම ගැටළු විසඳීම සඳහා විකල්පයක් ඇත. එය g++ සහ clang++ හි "-Werror" ධජය සැකසීම අක්රීය කරයි. මෙය "--disable-werror" විකල්පය වන අතර වින්යාස කිරීමේදී යෙදිය යුතුය:
$ ./waf configure --disable-werror --enable-examples --enable-tests
වින්යාස කරන්න හෝ එකලස් කරන්න
සමහර විධාන වෆි අර්ථය ඇත්තේ වින්යාස කිරීමේ අදියරේදී පමණක් වන අතර සමහර ඒවා වලංගු වන්නේ ගොඩනැගීමේ අදියරේදී පමණි. උදාහරණයක් ලෙස, ඔබට ns-3 අනුකරණ විශේෂාංග භාවිතා කිරීමට අවශ්ය නම්, ඔබට බිට් සැකසුම සක්රීය කළ හැක දකුණු භාවිතා කිරීම කිසිදිනක භාවිතා, ඉහත විස්තර කර ඇති පරිදි. මෙය වින්යාස කිරීමේ පියවර විධාන අභිබවා යනු ඇත, එබැවින් ඔබට පහත විධානය භාවිතයෙන් වින්යාසය වෙනස් කළ හැකිය, එයට උදාහරණ සහ පරීක්ෂණ ද ඇතුළත් වේ.
$ ./waf configure --enable-sudo --enable-examples --enable-tests
ඔබ මෙය කරන්නේ නම් වෆි දියත් කරනු ඇත කිසිදිනක භාවිතාඅනුකරණ කේත සොකට් නිර්මාණය කිරීමේ වැඩසටහන් අවසර සහිතව ධාවනය කිරීමට වෙනස් කිරීමට මූල. මෙම වෆි වින්යාස කිරීම සහ ගොඩනැගීමේ පියවර සඳහා තවත් බොහෝ විකල්ප තිබේ. ඔබේ විකල්ප ගවේෂණය කිරීමට, ඇතුළු කරන්න:
$ ./waf --help
ඊළඟ කොටසේදී අපි පරීක්ෂණ සම්බන්ධ විකල්ප කිහිපයක් භාවිතා කරමු.
එකලස් කිරීමේ පැතිකඩ
ඔබට වින්යාස කළ හැකි ආකාරය අපි දැනටමත් දැක ඇත්තෙමු වෆි එක්රැස්වීම් සඳහා දෝශනිරාකරණ වාර්ථා и ප්රශස්තමයි:
$ ./waf --build-profile=debug
අතරමැදි එකලස් කිරීමේ පැතිකඩක් ද ඇත, නිකුත්වේ. විකල්පය -d
සමාන පදයකි --build-profile
. ගොඩනැගීමේ පැතිකඩ ලොග් කිරීම, ප්රකාශ කිරීම් සහ සම්පාදක ප්රශස්තිකරණ ස්විච භාවිතය පාලනය කරයි:
ඔබට පෙනෙන පරිදි, ලොග් කිරීම සහ ප්රකාශයන් ලබා ගත හැක්කේ නිදොස්කරණය ගොඩනැගීමේදී පමණි. නිර්දේශිත පරිචය වන්නේ ඔබේ ස්ක්රිප්ට් නිදොස් කිරීමේ ප්රකාරයේදී සංවර්ධනය කර, පසුව ප්රශස්ත ගොඩනැගීමේ පැතිකඩක නැවත නැවත ධාවනය (සංඛ්යාලේඛන හෝ පරාමිති වෙනස් කිරීම් සඳහා) සිදු කිරීමයි.
ඔබ සතුව ඇතැම් ගොඩනැගීමේ පැතිකඩවල පමණක් ධාවනය විය යුතු කේතයක් තිබේ නම්, Code Wrapper Macro භාවිතා කරන්න:
NS_BUILD_DEBUG (std::cout << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)
පෙරනිමි, වෆි තැනුම් නාමාවලියෙහි කෞතුක භාණ්ඩ තැනීම. විකල්පය භාවිතයෙන් ඔබට වෙනත් ප්රතිදාන නාමාවලියක් නියම කළ හැක - -out
උදාහරණයක් ලෙස:
$ ./waf configure --out=my-build-dir
මෙය ගොඩනැගීමේ පැතිකඩ සමඟ ඒකාබද්ධ කිරීමෙන්, ඔබට විවිධ සම්පාදන විකල්ප අතර පහසුවෙන් මාරු විය හැක:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
සෑම අවස්ථාවකදීම නවතම එකලස් කිරීම නැවත ලිවීමකින් තොරව බහු එකලස් කිරීම් සමඟ වැඩ කිරීමට ඔබට ඉඩ සලසයි. ඔබ වෙනත් පැතිකඩකට මාරු වූ විට, වෆි සියල්ල සම්පූර්ණයෙන්ම නැවත සම්පාදනය නොකර එය පමණක් සම්පාදනය කරනු ඇත.
මේ විදියට බිල්ඩ් ප්රොෆයිල් මාරු කරනකොට එක එක කන්ෆිගරේෂන් ඔප්ෂන් දෙන්න පරිස්සම් වෙන්න ඕන. පාරිසරික විචල්යයන් කිහිපයක් නිර්වචනය කිරීම ඔබට වැරදි වළක්වා ගැනීමට උපකාරී වේ:
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized"
$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build
...
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build
සම්පාදකයින් සහ කොඩි
ඉහත උදාහරණ වල වෆි ns-3 ගොඩනැගීමට GCC වෙතින් C++ සම්පාදකය භාවිතා කරයි ( g ++) කෙසේ වෙතත්, ඔබ භාවිතා කරන එක වෙනස් කළ හැකිය වෆි C++ සම්පාදකය, CXX පරිසර විචල්යය අර්ථ දැක්වීමෙන්. උදාහරණයක් ලෙස, C++ සම්පාදක Clang භාවිතා කිරීමට, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build
එකම ආකාරයෙන් ඔබට වින්යාසගත කළ හැකිය වෆි භාවිතයෙන් බෙදා හරින ලද සම්පාදනය භාවිතා කිරීමට distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf build
distcc සහ බෙදා හරින ලද සම්පාදනය පිළිබඳ වැඩි විස්තර ප්රලේඛන අංශයේ ව්යාපෘති පිටුවෙන් සොයාගත හැකිය. ns-3 වින්යාස කිරීමේදී සම්පාදක ධජ එක් කිරීමට, CXXFLAGS_EXTRA පරිසර විචල්යය භාවිතා කරන්න.
ස්ථාපනය
වෆි පද්ධතියේ විවිධ ස්ථානවල පුස්තකාල ස්ථාපනය කිරීමට භාවිතා කළ හැක. පෙරනිමියෙන්, සම්පාදනය කරන ලද පුස්තකාල සහ ක්රියාත්මක කළ හැකි නාමාවලියෙහි පිහිටා ඇත ගොඩනගා ගන්න, සහ Waf මෙම පුස්තකාල සහ ක්රියාත්මක කළ හැකි ස්ථානය දන්නා බැවින්, වෙනත් තැනක පුස්තකාල ස්ථාපනය කිරීමට අවශ්ය නොවේ.
පරිශීලකයන් ගොඩනැගීමේ නාමාවලියෙන් පිටත ස්ථාපනය කිරීමට කැමති නම්, ඔවුන්ට විධානය ක්රියාත්මක කළ හැක ./waf ස්ථාපනය. ස්ථාපනය සඳහා පෙරනිමි උපසර්ගය වේ / usr / localඑබැවින් ./waf ස්ථාපනය තුළ වැඩසටහන් ස්ථාපනය කරනු ඇත / usr / local / bin, පුස්තකාල තුළ / usr / local / lib සහ ශීර්ෂ ගොනු තුළ /usr/local/include. සුපර් යූසර් අයිතීන් සාමාන්යයෙන් පෙරනිමි උපසර්ගයක් සමඟ සැකසීමට අවශ්ය වේ, එබැවින් සාමාන්ය විධානයක් වනු ඇත sudo ./waf ස්ථාපනය. දියත් කළ විට, Waf මුලින්ම ගොඩනැගීමේ නාමාවලියෙහි හවුල් පුස්තකාල භාවිතා කිරීමට තෝරා ගනු ඇත, පසුව දේශීය පරිසරය තුළ වින්යාස කර ඇති පුස්තකාල වෙත යන මාර්ගය ඔස්සේ පුස්තකාල සොයන්න. එබැවින් පද්ධතියක පුස්තකාල ස්ථාපනය කිරීමේදී, නිවැරදි පුස්තකාල භාවිතා කරන්නේ දැයි පරීක්ෂා කිරීම හොඳ පුරුද්දකි. වින්යාස කිරීමේදී විකල්පය සම්මත කිරීමෙන් පරිශීලකයින්ට වෙනත් උපසර්ගයක් සමඟ ස්ථාපනය කිරීමට තෝරා ගත හැකිය --prefix
උදාහරණයක් ලෙස:
./waf configure --prefix=/opt/local
පසුව නම්, ගොඩනැගීමෙන් පසුව, පරිශීලකයා ස්ථාපන විධානය ඇතුල් කරයි ./waf
, උපසර්ගය භාවිතා කරනු ඇත / තේරීම / දේශීය.
කණ්ඩායම ./waf clean
ස්ථාපනය භාවිතා කරන්නේ නම් ව්යාපෘතිය නැවත සකස් කිරීමට පෙර භාවිතා කළ යුතුය වෆි වෙනස් උපසර්ගයක් යටතේ.
මේ අනුව, ns-3 භාවිතා කිරීමට ඇමතීමට අවශ්ය නැත ./waf install
. බොහෝ පරිශීලකයින්ට මෙම විධානය අවශ්ය නොවනු ඇත වෆි ගොඩනැගීම් නාමාවලියෙන් වත්මන් පුස්තකාල ලබා ගනී, නමුත් සමහර පරිශීලකයින්ට ඔවුන්ගේ ක්රියාකාරකම් ns-3 නාමාවලියෙන් පිටත වැඩසටහන් සමඟ වැඩ කිරීම සම්බන්ධ නම් මෙය ප්රයෝජනවත් වේ.
Waf තනි
ns-3 ප්රභව ගසේ ඉහලම මට්ටමේ ඇත්තේ Waf script එකක් පමණි. ඔබ වැඩ කිරීමට පටන් ගත් පසු, ඔබ නාමාවලියෙහි බොහෝ කාලයක් ගත කරනු ඇත scratch/
හෝ ගැඹුරටsrc/...
සහ ඒ සමගම ධාවනය කිරීමට සිදු වේ වෆි. ඉන්න තැන මතක තියාගෙන දුවන්න පුළුවන් වෆි පහත පරිදි:
$ ../../../waf ...
නමුත් මෙය වෙහෙසකර සහ දෝෂ සහිත වනු ඇත, එබැවින් වඩා හොඳ විසඳුම් තිබේ. එක් පොදු ක්රමයක් නම් පෙළ සංස්කාරකයක් භාවිතා කිරීමයි emacs හෝ විම්, ටර්මිනල් සැසි දෙකක් විවෘත කර ඇති අතර, එකක් ns-3 ගොඩනැගීමට භාවිතා කරන අතර, දෙවැන්න මූලාශ්ර කේතය සංස්කරණය කිරීමට භාවිතා කරයි. ඔබට පමණක් තිබේ නම් තාර බෝල, එවිට පරිසර විචල්යයක් උදව් විය හැක:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff build
මොඩියුල ඩිරෙක්ටරිය තුළ එය සුළු waf script එකක් එකතු කිරීමට පෙළඹිය හැක exec ../../waf
. කරුණාකර එය කරන්න එපා. මෙය නවකයන් සඳහා ව්යාකූල වන අතර, දුර්වල ලෙස සිදු කරන විට, ගොඩනැගීමේ දෝෂ හඳුනා ගැනීමට අපහසු වේ. ඉහත දක්වා ඇති විසඳුම් භාවිතා කළ යුතු මාර්ගය වේ.
3.5 පරීක්ෂණ ns-3
ඔබට ස්ක්රිප්ට් ධාවනය කිරීමෙන් ns-3 බෙදාහැරීමේ ඒකක පරීක්ෂණ ධාවනය කළ හැක ./test.py:
$ ./test.py
මෙම පරීක්ෂණ සමාන්තරව සිදු කෙරේ වෆි. අවසානයේදී ඔබට පණිවිඩයක් පෙනෙනු ඇත:
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
මෙය වැල්ග්රයින්ඩ් බිඳවැටීම්, බිඳවැටීම් හෝ දෝෂ හඳුනාගැනීම සඳහා වැදගත් පණිවිඩයක් වන අතර, කේතය සමඟ ගැටලු හෝ මෙවලම් සහ කේතය අතර නොගැලපීම පෙන්නුම් කරයි.
වෙතින් අවසාන ප්රතිදානය ද ඔබට පෙනෙනු ඇත වෆි සහ එක් එක් පරීක්ෂණය ධාවනය කරන පරීක්ෂකයෙක්, එය මේ වගේ දෙයක් පෙනෙනු ඇත:
Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (1.799s)
Modules built:
aodv applications bridge
click config-store core
csma csma-layout dsdv
emu energy flow-monitor
internet lte mesh
mobility mpi netanim
network nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagation
spectrum stats tap-bridge
template test tools
topology-read uan virtual-net-device
visualizer wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
මෙම විධානය සාමාන්යයෙන් භාවිතා කරන්නන් විසින් ක්රියාත්මක කරනු ලබන්නේ ns-3 බෙදාහැරීම නිවැරදිව ගොඩනගා ඇති බව ඉක්මනින් තහවුරු කර ගැනීමටයි. ("PASS: ..." රේඛාවල අනුපිළිවෙල වෙනස් විය හැකි බව සලකන්න, මෙය සාමාන්ය දෙයකි. වැදගත් දෙය නම් වාර්තාවේ අවසානයේ ඇති සාරාංශ රේඛාව මඟින් සියලුම පරීක්ෂණ සමත් වූ බව පෙන්වීමයි; කිසිදු පරීක්ෂණයක් අසාර්ථක වී හෝ බිඳ වැටුනේ නැත.) සහ වෆිහා test.py යන්ත්රයේ පවතින ප්රොසෙසර් කෝර් හරහා වැඩ සමාන්තර කරයි.
3.6 ස්ක්රිප්ට් ධාවනය කිරීම
අපි සාමාන්යයෙන් පාලනය යටතේ ස්ක්රිප්ට් ධාවනය කරනවා වෆි. බෙදාගත් පුස්තකාල මාර්ග නිවැරදිව සකසා ඇති බව සහ ධාවන වේලාවේදී පුස්තකාල ලබා ගත හැකි බව සහතික කිරීමට මෙය ගොඩනැගීමේ පද්ධතියට ඉඩ සලසයි. වැඩසටහන ක්රියාත්මක කිරීම සඳහා, සරලව භාවිතා කරන්න වෆි පරාමිතිය සමඟ - -run
. සර්වසම්පූර්ණ වැඩසටහනට සමාන ns-3 ක්රියාත්මක කරමු හෙලෝ වර්ල්ඩ්පහත ටයිප් කිරීමෙන්:
$ ./waf --run hello-simulator
Waf විසින් ප්රථමයෙන් වැඩසටහන නිවැරදිව ගොඩනගා ඇත්දැයි පරීක්ෂා කර අවශ්ය නම් ගොඩනගනු ඇත. ඉන්පසු වෆි පහත ප්රතිදානය නිපදවන වැඩසටහනක් ක්රියාත්මක කරයි.
Hello Simulator
සුභ පැතුම්! ඔබ දැන් ns-3 පරිශීලකයෙක්!
මම ප්රතිඵල නොපෙනේ නම් මා කළ යුත්තේ කුමක්ද?
ඔබ පණිවිඩ දුටුවහොත් වෆිගොඩනැගීම සාර්ථකව නිම වූ බව අඟවයි, නමුත් ඔබට ප්රතිදානය නොපෙනේ "හෙලෝ සිමියුලේටරය", එවිට [Build-with-Waf] කොටසේ ඔබ ඔබේ ගොඩනැගීමේ මාදිලිය වෙත මාරු වීමට ඉඩ ඇත. ප්රශස්තමයි, නමුත් නැවත ප්රකාරයට මාරු වීම මග හැරුණි දෝශනිරාකරණ වාර්ථා. මෙම නිබන්ධනයේ භාවිතා කරන සියලුම කොන්සෝල ප්රතිදානය ලොග් වීම සිදු කරන විශේෂ ns-3 සංරචකයක් භාවිතා කරන අතර කොන්සෝලයට අභිරුචි පණිවිඩ මුද්රණය කිරීමට භාවිතා කරයි. ප්රශස්ත කේතය සම්පාදනය කරන විට මෙම සංරචකයෙන් ප්රතිදානය ස්වයංක්රීයව අක්රිය වේ - එය "ප්රශස්ත" වේ. ඔබට "Hello Simulator" ප්රතිදානය නොපෙනේ නම්, පහත සඳහන් දෑ ඇතුලත් කරන්න:
$ ./waf configure --build-profile=debug --enable-examples --enable-tests
වින්යාස කිරීමට වෆි උදාහරණ සහ පරීක්ෂණ ඇතුළත් ns-3 වැඩසටහන් වල දෝශ නිරාකරණ අනුවාද ගොඩනැගීමට. පසුව ඔබ ටයිප් කිරීමෙන් කේතයේ වත්මන් නිදොස් කිරීමේ අනුවාදය නැවත ගොඩනැගිය යුතුය
$ ./waf
දැන් ඔබ වැඩසටහන ක්රියාත්මක කරන්නේ නම් hello-simulator, ඔබ අපේක්ෂිත ප්රතිඵලය දැකිය යුතුය.
3.6.1 විධාන රේඛා තර්ක
ns-3 වැඩසටහනට විධාන රේඛා තර්ක යැවීමට, පහත රටාව භාවිතා කරන්න:
$ ./waf --run <ns3-program> --command-template="%s <args>"
ආදේශ කරන්න ඔබගේ වැඩසටහනේ නමට සහ තර්ක වලට. තර්කය - -command-template
සඳහා වෆි සැබෑ විධාන රේඛාව ගොඩනැගීම සඳහා මූලිකවම වට්ටෝරුවකි වෆි වැඩසටහන ක්රියාත්මක කිරීමට භාවිතා කරයි. Waf විසින් ගොඩනැගීම සම්පූර්ණ වී ඇත්දැයි පරීක්ෂා කරයි, බෙදාගත් පුස්තකාල මාර්ග සකසයි, පසුව සපයා ඇති විධාන රේඛා අච්චුව භාවිතා කරයි සහ ක්රියාත්මක කළ හැකි ලෙස ඇමතීමට %s ස්ථාන දරන්නා සඳහා වැඩසටහනේ නම ආදේශ කරයි. ඔබට මෙම වාක්ය ඛණ්ඩය සංකීර්ණ බව පෙනේ නම්, ns-3 වැඩසටහන සහ එහි තර්ක තනි උද්ධෘතයන් තුළ ඇතුළත් සරල අනුවාදයක් තිබේ:
$ ./waf --run '<ns3-program> --arg1=value1 --arg2=value2 ...'
තවත් ප්රයෝජනවත් උදාහරණයක් වන්නේ පරීක්ෂණ කට්ටල තෝරාගෙන ධාවනය කිරීමයි. අපි හිතමු mytest කියලා test suite එකක් තියෙනවා කියලා (ඇත්තටම ඒක නෑ). ඉහත අපි ./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) හෝ මතක පරීක්ෂණ මෙවලමක් (උදාහරණයක් ලෙස, valgrind), සමාන ආකෘතියක් භාවිතා කරන්න - -command-template = "…"
. උදාහරණයක් ලෙස, නිදොස්කරණය තුළ ධාවනය කිරීමට gdb තර්ක සහිත ඔබගේ hello-simulator ns-3 වැඩසටහන:
$ ./waf --run=hello-simulator --command-template="gdb %s --args <args>"
ns-3 වැඩසටහනේ නම තර්කය සමඟ එන බව සලකන්න - -run
, සහ කළමනාකරණ උපයෝගීතාව (මෙහි gdb) යනු තර්කයේ පළමු සංකේතයයි - -command-template
. විකල්පය - -args
දැනුම් දෙයි gdbවිධාන රේඛාවේ ඉතිරි කොටස "පහළ" වැඩසටහනට අයත් වේ. (සමහර අනුවාද gdb විකල්පය තේරෙන්නේ නැහැ - -args
. මෙම අවස්ථාවේදී, වැඩසටහන් තර්ක ඉවත් කරන්න - -command-template
සහ විධාන කට්ටලය භාවිතා කරන්න gdb args.) නිදොස්කරණය යටතේ පරීක්ෂණය ධාවනය කිරීමට අපට මෙම වට්ටෝරුව සහ පෙර වට්ටෝරුව ඒකාබද්ධ කළ හැකිය:
$ ./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 ධාවනය කර එහි ප්රතිදාන ගොනු උත්පාදනය කරයි.
මූලාශ්රය: www.habr.com