Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатора Π·Π° ΠΌΡ€Π΅ΠΆΠΈ ns-3. Π“Π»Π°Π²Π° 3

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатора Π·Π° ΠΌΡ€Π΅ΠΆΠΈ ns-3. Π“Π»Π°Π²Π° 3
Π³Π»Π°Π²ΠΈ 1,2

3 Π—Π°ΠΏΠΎΡ‡Π²Π°Ρ‰Π° Ρ€Π°Π±ΠΎΡ‚Π°
3.1 ΠŸΡ€Π΅Π³Π»Π΅Π΄
3.2 ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ условия
3.2.1 Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° Ρ€Π΅Π»ΠΈΠ·Π° Π½Π° ns-3 ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Ρ…ΠΈΠ² с ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄
3.3 Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Git
3.3.1 Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Bake
3.4 БглобяванС на ns-3
3.4.1 БглобяванС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° build.py
3.4.2 БглобяванС с Bake
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-developers.

По-Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚Ρ€ΠΈ Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° изтСглянС ΠΈ сглобяванС Π½Π° ns-3. ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ официалния Ρ€Π΅Π»ΠΈΠ· ΠΎΡ‚ основния сайт. Вторият β€” Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ копия Π½Π° разработчичСскитС вСрсии Π½Π° основната инсталация Π½Π° ns-3. ВрСтият β€” ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ инструмСнти Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Π·Π° Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π·Π° ns-3. Π©Π΅ ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ ΠΏΡ€Π΅Π· всСки, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ инструмСнтитС ΠΌΠ°Π»ΠΊΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°Ρ‚.

ΠžΠΏΠΈΡ‚Π½ΠΈΡ‚Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π½Π° Linux ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠΈΡ‚Π°Ρ‚ Π·Π°Ρ‰ΠΎ ns-3 Π½Π΅ сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€? Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ дистрибуции Π½Π° Linux (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Debian), ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΈ трябва сами Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚ ns-3, Π·Π°Ρ‚ΠΎΠ²Π° наличността Π½Π° изходния ΠΊΠΎΠ΄ Π΅ ΡƒΠ΄ΠΎΠ±Π½Π°. По Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‰Π΅ сС фокусирамС Π²ΡŠΡ€Ρ…Ρƒ инсталацията ΠΎΡ‚ изходния ΠΊΠΎΠ΄.

Π—Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ прилоТСния ns-3 ΠΏΡ€Π°Π²Π°Ρ‚Π° root Π½Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ, ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π° сС Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π° потрСбитСлска смСтка.

3.2 ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ условия

ЦСлият Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ns-3 ΠΈΠΌΠ° Ρ€Π΅Π΄ΠΈΡ†Π° зависимости ΠΎΡ‚ странични Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Π½ΠΎ Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ случаи ns-3 ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ с ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° няколко разпространСни (чСсто инсталирани ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ: ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ C++, Python, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π½Π° изходния ΠΊΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, vim, emacs ΠΈΠ»ΠΈ Eclipse) ΠΈ, Π°ΠΊΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, систСми Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° вСрсии 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++
    clang++ ΠΈΠ»ΠΈ g++ (g++ вСрсия 4.9 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π°)
  • Python
    python2 вСрсия >= 2.7.10, ΠΈΠ»ΠΈ python3 вСрсия >=3.4
  • Git
    всяка послСдна вСрсия (Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ns-3 Π½Π° GitLab.com)
  • tar
    всяка послСдна вСрсия (Π·Π° Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ ns-3)
  • bunzip2
    всяка Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π° вСрсия (Π·Π° Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ ns-3)

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ вСрсията Π½Π° Python, инсталирана ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ python -V. Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ вСрсията Π½Π° g++, Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ g++ -v. Ако някои инструмСнти липсват ΠΈΠ»ΠΈ са Ρ‚Π²ΡŠΡ€Π΄Π΅ стари, моля, ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ сС към Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎΡ‚ΠΎ Π·Π° инсталация Π½Π° уСбстраницата Π½Π° ns‑3.

ΠžΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠ΅, Ρ‡Π΅ читатСлят Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² Linux, MacOS ΠΈΠ»ΠΈ Π΅ΠΌΡƒΠ»Π°Ρ†ΠΈΠΎΠ½Π½Π° срСда Π·Π° Linux ΠΈ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ посочСнитС ΠΏΠΎ-Π³ΠΎΡ€Π΅ инструмСнти.

3.2.1 Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° Ρ€Π΅Π»ΠΈΠ·Π° Π½Π° ns-3 ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Ρ…ΠΈΠ² с ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄

Π’ΠΎΠ²Π° Π΅ Π½Π°Ρ‡ΠΈΠ½ΡŠΡ‚ Π½Π° дСйствиС Π½Π° Π½ΠΎΠ² ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π», ΠΊΠΎΠΉΡ‚ΠΎ ΠΆΠ΅Π»Π°Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ ΠΈ СкспСримСнтира с послСднитС вСрсии ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΈ издания Π½Π° ns‑3. Π˜Π·Π΄Π°Π½ΠΈΡΡ‚Π° Π½Π° ns‑3 сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ Π² компрСсирани Π°Ρ€Ρ…ΠΈΠ²ΠΈ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄, понякога Π½Π°Ρ€ΠΈΡ‡Π°Π½ΠΈ tarball. tarball β€” Ρ‚ΠΎΠ²Π° Π΅ спСциалСн Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° софтуСрСн Π°Ρ€Ρ…ΠΈΠ², Π² ΠΊΠΎΠΉΡ‚ΠΎ няколко Ρ„Π°ΠΉΠ»Π° са ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. ΠΡ€Ρ…ΠΈΠ²ΡŠΡ‚ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ компрСсиран. ΠŸΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° изтСглянС Π½Π° ns‑3 ΠΏΡ€Π΅Π· tarball Π΅ прост, просто трябва Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, Π΄Π° Π³ΠΎ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΈ Π΄Π° Π³ΠΎ Ρ€Π°Π·Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅.

Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ искатС ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ ns‑3 Π² Π»ΠΎΠΊΠ°Π»Π½Π° дирСктория с ΠΈΠΌΠ΅ workspace. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½Π° вСрсия Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° Linux слСдното (Ρ€Π°Π·Π±ΠΈΡ€Π° сС, замСняйки ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° вСрсиитС)

$ cd 
$ mkdir workspace 
$ cd workspace 
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2 
$ tar xjf ns-allinone-3.29.tar.bz2 

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° използвания ΠΏΠΎ-Π³ΠΎΡ€Π΅ инструмСнт wget, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ инструмСнт Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Ρ€Π΅Π΄ Π·Π° изтСглянС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΎΡ‚ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. Ако Π½Π΅ стС Π³ΠΎ инсталирали, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ с Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°.

Π‘Π»Π΅Π΄Π²Π°ΠΉΠΊΠΈ Ρ‚Π΅Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ, Ρ‰Π΅ Π½Π°Π²ΠΈΠ³ΠΈΡ€Π°Ρ‚Π΅ Π² дирСкторията 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 Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Git

ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ns‑3 Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΡ‚Π΅ Git Π½Π° GitLab.com Π½Π° адрСс https://gitlab.com/nsnam/. Π“Ρ€ΡƒΠΏΠ°Ρ‚Π° nsnam обСдинява Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄.

Най-лСсният Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ‚Π΅ Git Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΊ ΠΈΠ»ΠΈ Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ срСда ns‑3-allinone. Π’ΠΎΠ²Π° Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ управляват изтСглянСто ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π°ΠΉ-чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ подсистСми Π½Π° 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-allinone ΠΌΠ°Π»ΠΊΠΎ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ описаната ΠΏΠΎ-Π³ΠΎΡ€Π΅ дирСктория с Π°Ρ€Ρ…ΠΈΠ² Π½Π° вСрсията. Вя трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠ°:

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

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° скрипта download.py, ΠΊΠΎΠΉΡ‚ΠΎ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‰Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ ns‑3 ΠΈ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈΡ ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄. Π’ΡƒΠΊ ΠΈΠΌΠ°Ρ‚Π΅ ΠΈΠ·Π±ΠΎΡ€: ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ Π½Π°ΠΉ-новия ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅Π½ снимка Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ns‑3:

$ python download.py

ΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ вСрсията ns‑3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Ρ„Π»Π°Π³Π° -n Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° вСрсията:

$ python download.py -n ns-3.29

Π‘Π»Π΅Π΄ Ρ‚Π°Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠ° Π² дирСкторията ns‑3-allinone Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ns‑3, bake, pybindgen ΠΈ netanim.

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°
На машина с чиста Ubuntu16.04 ΠΌΠΈ бСшС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° промСня ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π° слСдния Π²ΠΈΠ΄: $ sudo python3 download.py -n ns-3.29 (Ρ‚ΡƒΠΊ ΠΈ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π½Π° ΠΏΡ€Π΅Π²ΠΎΠ΄Π°Ρ‡Π°).

3.3.1 Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Bake

Π”Π²Π°Ρ‚Π° спомСнати ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Π°Ρ€Ρ…ΠΈΠ² Π½Π° изходния ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ рСпозитория ns‑3-allinone Ρ‡Ρ€Π΅Π· Git) са ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-простата инсталация Π½Π° ns‑3 с няколко Π΄ΠΎΠ±Π°Π²ΠΊΠΈ (pybindgen Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Python ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ ΠΈ netanim Π·Π° Π°Π½ΠΈΠΌΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°). ВрСтият Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, прСдоставСн ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π² ns‑3-allinone, сС Π½Π°Ρ€ΠΈΡ‡Π° bake.

Опаковка β€” Ρ‚ΠΎΠ²Π° Π΅ инструмСнт Π·Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° софтуСр ΠΎΡ‚ няколко рСпозитория, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ns‑3. Опаковка ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° разработчСски вСрсии Π½Π° ns‑3, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π·Π° изтСглянС ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π° основната вСрсия Π½Π° дистрибуцията ns‑3, ΠΊΠ°Ρ‚ΠΎ срСда Direct Code Execution, CradleNetwork Simulation Cradle, Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° създаванС Π½Π° Π½ΠΎΠ²ΠΈ Python ΠΏΡ€ΠΈΠ²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ β€žΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡβ€œ ns‑3.

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°
CradleNetwork Simulation Cradle β€” Ρ€Π°ΠΌΠΊΠ°, която позволява Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ² симулатор Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π΅Π°Π»Π½ΠΈ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΈ стСковС TCP / IP.

Ако смятатС, Ρ‡Π΅ Π²Π°ΡˆΠ°Ρ‚Π° инсталация Π½Π° ns‑3 трябва Π΄Π° ΠΈΠΌΠ° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° слСдватС Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ Π½Π° инсталация.

Π’ послСднитС вСрсии Π½Π° ns‑3 Опаковка бСшС Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² tar-вСрсия. Π’ вСрсията Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ„Π°ΠΉΠ» конфигурация, позволяващ изтСглянС Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈ към ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° създаванС Π½Π° вСрсията вСрсии Π½Π° софтуСра. ВоСст, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вСрсия Опаковка, която сС разпространява с вСрсията ns‑3.29, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° Ρ‚Π°Π·ΠΈ вСрсия ns‑3 ΠΈΠ»ΠΈ ΠΏΠΎ-Ρ€Π°Π½Π½ΠΈ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° ΠΏΠΎ-късни вСрсии (Π°ΠΊΠΎ Ρ„Π°ΠΉΠ»ΡŠΡ‚ с описаниС Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° bakeconf.xml Π½Π΅ Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½).

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия bake, ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π° във вашия Linux ΠΊΠΎΠ½Π·ΠΎΠ» (ΠΏΡ€ΠΈ условиС, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ инсталиран Git):

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

По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° git, трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° слСдното:

ΠšΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅ Π² 'bake'...
remote: НомСриранС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ: 2086, Π³ΠΎΡ‚ΠΎΠ²ΠΎ. 
remote: Π‘Ρ€ΠΎΠ΅Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ: 100% (2086/2086), Π³ΠΎΡ‚ΠΎΠ²ΠΎ. 
remote: ΠšΠΎΠΌΠΏΡ€Π΅ΡΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ: 100% (649/649), Π³ΠΎΡ‚ΠΎΠ²ΠΎ. 
remote: ΠžΠ±Ρ‰ΠΎ 2086 (delta 1404), ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ 2078 (delta 1399) 
ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, Π³ΠΎΡ‚ΠΎΠ²ΠΎ. 
Π Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Π΄Π΅Π»Ρ‚ΠΈ: 100% (1404/1404), Π³ΠΎΡ‚ΠΎΠ²ΠΎ.

Π‘Π»Π΅Π΄ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° clone трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ дирСктория с ΠΈΠΌΠ΅ bake, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° която трябва Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠ°:

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

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ стС ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΠ»ΠΈ няколко Python скрипта, Python ΠΌΠΎΠ΄ΡƒΠ» с ΠΈΠΌΠ΅ bake ΠΈ XML ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ». Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚Π΅Π·ΠΈ скриптовС Π·Π° изтСглянС ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ns‑3 ΠΏΠΎ ваш ΠΈΠ·Π±ΠΎΡ€. Налични са няколко Ρ†Π΅Π»ΠΈ Π·Π° настройка:

  1. ns‑3.29: ΠΌΠΎΠ΄ΡƒΠ», отговарящ Π½Π° вСрсията; Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° вСрсията Π² tarball;

  2. ns‑3-dev: ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ», Π½ΠΎ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΎΡ‚ Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°;

  3. ns-allinone-3.29: ΠΌΠΎΠ΄ΡƒΠ», ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ Click ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ€Π°Π½Π΅ ΠΈ Network Simulation Cradle, Openflow Π·Π° ns-3.

  4. ns‑3-allinone: Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π½Π° вСрсионния ΠΌΠΎΠ΄ΡƒΠ» allinone, Π½ΠΎ Π·Π° ΠΊΠΎΠ΄ Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°.

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠ°
Click β€” ΠΌΠΎΠ΄ΡƒΠ»Π½Π° софтуСрна Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π·Π° създаванС Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ.

Openflow β€” ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° процСса Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΡ€Π΅Π΄Π°Π²Π°Π½ΠΈ Π² ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΎΡ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ ΠΊΠΎΠΌΡƒΡ‚Π°Ρ‚ΠΎΡ€ΠΈ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‰ тСхнологията Π½Π° софтуСрно-настраивана ΠΌΡ€Π΅ΠΆΠ°.

ВСкущия Snapshot Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° (Π½Π΅Ρ€Π΅Π»ΠΈΠ·Π΅Π½) ns‑3 ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° адрСс:https://gitlab.com/nsnam/ns-3-dev.git.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Ρ‚Π΅Π·ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π² послСдоватСлно Ρ€Π°Π±ΠΎΡ‚Π½ΠΎ ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅, Π½ΠΎ Ρ‚Π΅ са Π² областта Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ Π½Π΅Ρ€Π΅Π»ΠΈΠ·Π΅Π½ ΠΊΠΎΠ΄, Π·Π°Ρ‚ΠΎΠ²Π° Π°ΠΊΠΎ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° вСрсия.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ послСдната вСрсия Π½Π° ΠΊΠΎΠ΄Π°, ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ списъка Π½Π° Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΠΊΠ°Ρ‚ΠΎ посСтитС ΡƒΠ΅Π± страницата β€žns‑3 Releasesβ€œ:https://www.nsnam.org/releases/ ΠΈ Ρ‰Ρ€Π°ΠΊΠ½Π΅Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Π½Π° послСдната вСрсия. Π’ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΠΌ с ns‑3.29.

Π‘Π΅Π³Π°, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π½ΠΈ ΡΡŠΡΡ‚Π°Π²ΠΊΠΈ Π½Π° ns‑3, Ρ‰Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ инструмСнта Опаковка. НСка ΠΊΠ°ΠΆΠ΅ΠΌ няколко въвСдСни Π΄ΡƒΠΌΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Опаковка.

Bake Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°, изтСгляйки ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² дирСкторията source ΠΈ инсталира Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² дирСкторията Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅. Опаковка ΠΌΠΎΠΆΠ΅ Π΄Π° сС стартира, ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΠΉΠΊΠΈ сС Π½Π° бинарния Ρ„Π°ΠΉΠ», Π½ΠΎ Π°ΠΊΠΎ искатС Π΄Π° стартиратС Опаковка Π½Π΅ ΠΎΡ‚ дирСкторията, Π² която бСшС ΠΊΠ°Ρ‡Π΅Π½, Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»Π½ΠΎ Π΄Π° сС Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΡŠΡ‚ΡΡ‚ към bake вашия ΠΏΡŠΡ‚ (ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° срСда PATH), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Linux bash). ΠŸΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ Π² дирСкторията β€ž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 Π² ΠΏΡŠΡ‚Ρ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° ΠΈ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π΄Π° Π½Π°ΠΌΠΈΡ€Π°Ρ‚ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, създадСни ΠΎΡ‚ bake. Π’ някои случаи Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ bake, описаната ΠΏΠΎ-Π³ΠΎΡ€Π΅ настройка Π½Π° PATH ΠΈ PYTHONPATH Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°, Π½ΠΎ Π·Π° ΠΏΡŠΠ»Π½ΠΎΡ‚ΠΎ сглобяванС Π½Π° ns‑3-allinone (с Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ) ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°.

ΠžΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° дирСктория ΠΈ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° слСдното:

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

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ»ΠΈΠΌ Опаковка Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ инструмСнти Π·Π° изтСглянС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ. ΠΠ°ΠΏΠΈΡˆΠ΅Ρ‚Π΅:

$ ./bake.py check

Врябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅Ρ‰ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π°:

> Python - OK 
> GNU C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ - OK 
> Mercurial - OK 
> Git - OK 
> Tar tool - OK 
> Unzip tool - OK 
> Make - OK 
> cMake - OK 
> patch tool - OK 
> ΠŸΡŠΡ‚, Ρ‚ΡŠΡ€ΡΠ΅Π½ Π·Π° инструмСнти: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...

По-спСциално, инструмСнти Π·Π° изтСглянС ΠΊΠ°Ρ‚ΠΎ Mercurial, CVS, Git ΠΈ Bazaar са основни Π½Π° Ρ‚Π°Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠ°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ Π½ΠΈ позволяват Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠΎΠ΄Π°. На Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ инсталирайтС липсващитС инструмСнти ΠΏΠΎ обичайния Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° систСма (Π°ΠΊΠΎ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ) ΠΈΠ»ΠΈ сС ΠΎΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π·Π° ΠΏΠΎΠΌΠΎΡ‰ към вашия систСмСн администратор.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ софтуСра:

$ ./bake.py download

Π Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ трябва Π΄Π° бъдС Π½Π΅Ρ‰ΠΎ Ρ‚Π°ΠΊΠΎΠ²Π°:

>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост setuptools - OK 
>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост libgoocanvas2 - OK 
>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост gi-cairo - OK 
>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост pygobject - OK 
>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост pygraphviz - OK 
>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост python-dev - OK 
>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост qt - OK 
>> Π’ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° систСмната зависимост g++ - OK 
>> Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° pybindgen-0.19.0.post4+ng823d8b2 (Ρ†Π΅Π»Π΅Π²Π°Ρ‚Π° дирСктория:pybindgen) - OK 
>> Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° netanim-3.108 - OK 
>> Π˜Π·Ρ‚Π΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3.29 - OK

Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ са ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ Ρ‚Ρ€ΠΈ ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈΠΊΠ°. Π‘Π΅Π³Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² дирСкторията source ΠΈ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ 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 ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ с bake.

3.4.1 БглобяванС с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° build.py

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’Π°Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠ° Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° само ΠΎΡ‚ вСрсията Π½Π° изходния Π°Ρ€Ρ…ΠΈΠ², ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ описано ΠΏΠΎ-Π³ΠΎΡ€Π΅; Π° Π½Π΅ ΠΈΠ·Ρ‚Π΅Π³Π»Π΅Π½Π° ΠΏΡ€Π΅Π· git ΠΈΠ»ΠΈ bake.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π°Ρ€Ρ…ΠΈΠ² Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ tarball, Π² ns‑3‑allinone ΠΈΠΌΠ° ΡƒΠ΄ΠΎΠ±Π΅Π½ сцСнарий, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° опрости ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅. Π’ΠΎΠΉ сС Π½Π°Ρ€ΠΈΡ‡Π° build.py. Π’Π°Π·ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Ρ‰Π΅ настрои ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π° вас ΠΏΠΎ Π½Π°ΠΉ-полСзния Π½Π°Ρ‡ΠΈΠ½. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΏΠΎ-слоТнитС настройки ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ns‑3 ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° собствСната систСма Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ns‑3, Waf, която Ρ‰Π΅ бъдС прСдставСна ΠΏΠΎ-късно Π² Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ.

Ако стС ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° tarball, Ρ‚ΠΎ във Π²Π°ΡˆΠ°Ρ‚Π° дирСктория ~ /workspace трябва Π΄Π° сС появи дирСктория с ΠΈΠΌΠ΅ Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ ns-allinone-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

Ако ΠΏΠΎ-Π³ΠΎΡ€Π΅ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° изходния ΠΊΠΎΠ΄ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° стС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ bake, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° 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 ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ ΠΎΡ‚ инструмСнт bake Π½Π΅ Π½Π° всички ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ. Π’ Ρ‚ΠΎΠ·ΠΈ случай Ρ‰Π΅ сС появи ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΠ΄Π°:

>> 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, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΠΈΠ»ΠΈ скрипт build.py, ΠΈΠ»ΠΈ инструмСнт bake. Π’Π΅Π·ΠΈ инструмСнти са ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° ns-3 ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Ρ‚Π΅ стартират инструмСнта Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Waf ΠΎΡ‚ дирСкторията Π½Π° ns-3. Waf инсталира сС Π·Π°Π΅Π΄Π½ΠΎ с изходния ΠΊΠΎΠ΄ Π½Π° ns-3. ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π±ΡŠΡ€Π·ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Ρ‚ към пряко ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Waf. И Ρ‚Π°ΠΊΠ°, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅, моля, прСмСстСтС сС Π² дирСкторията ns-3, която ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…Ρ‚Π΅.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ строго Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ, Π½ΠΎ Ρ‰Π΅ бъдС ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° внСсСм ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² конфигурацията Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Най-вСроятно Π½Π°ΠΉ-ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ‚Π° промяна Π² конфигурацията, която ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π΅ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° вСрсия Π½Π° ΠΊΠΎΠ΄Π°. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π²ΠΈ Π΅ настроСн Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½Π°Ρ‚Π° вСрсия. НСка ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π·Π° създаванС Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° вСрсия. Π—Π° Π΄Π° обяснитС Π½Π° Waf ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‰ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстовС, Ρ‰Π΅ трябва Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ слСднитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

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

Π’ΠΎΠ²Π° Ρ‰Π΅ стартира Waf извън Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° дирСктория (Π·Π° вашС удобство). ΠŸΡŠΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° почистванС ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° компилация, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π΅ строго Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ Π΅ Π΄ΠΎΠ±Ρ€Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° (Π²ΠΆ. ΡΡŠΡ‰ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ Π·Π° компилация ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ); Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ ΠΏΡ€Π΅Π΄ΠΈ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π½Π°ΠΌΠΈΡ€Π°Ρ‰ΠΈ сС Π² дирСкторията build\/. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π΅ прСнастроСн ΠΈ систСмата Π·Π° компилация провСрява Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ зависимости, трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° слСдния:

НастройванС Π½Π° ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π·Π°      : /home/ns3user/workspace/bake/source/ns-3-dev
НастройванС Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Π·Π°      : /home/ns3user/workspace/bake/source/ns-3-dev/build
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 'gcc' (C ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€)        : /usr/bin/gcc 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° вСрсия Π½Π° cc                : 7.3.0 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 'g++' (C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€)      : /usr/bin/g++ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° компилационния Ρ„Π»Π°Π³ -march=native : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° компилационния Ρ„Π»Π°Π³ -Wl,--soname=foo : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° компилационния Ρ„Π»Π°Π³ -std=c++11 : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Boost Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ   : заглавия Π½Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ, моля, прСдоставСтС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ --boost-includes (Π²ΠΈΠΆΡ‚Π΅ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π°) 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Boost Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½ΠΈΡ   : заглавия Π½Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ, моля, прСдоставСтС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ --boost-includes (Π²ΠΈΠΆΡ‚Π΅ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π°) 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 'python'            : /usr/bin/python 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° вСрсия Π½Π° python >= 2.3       : 2.7.15 python-config                                                                     : /usr/bin/python-config
Π—Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π΄ΠΎ python-config Π·Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ pyembed '--cflags --libs --ldflags' : Π΄Π°
ВСст Π½Π° конфигурацията Π½Π° pyembed                                      : Π΄Π°
Π—Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ Π΄ΠΎ python-config Π·Π° Ρ„Π»Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ pyext '--cflags --libs --ldflags'   : Π΄Π°
ВСст Π½Π° конфигурацията Π½Π° pyext                                        : Π΄Π°

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° компилационния Ρ„Π»Π°Π³ -fvisibility=hidden : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° компилационния Ρ„Π»Π°Π³ -Wno-array-bounds : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° мСстополоТСниС Π½Π° pybindgen          : ../pybindgen ,!(ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ) 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'pybindgen'   : 0.19.0. ,!post4+g823d8b2 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° вСрсия Π½Π° pybindgen           : 0.19.0. ,!post4+g823d8b2 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΊΠΎΠ΄ΠΎΠ² Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚                : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° равСнство Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ uint64_t ΠΈ unsigned long : Π½Π΅ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΊΠΎΠ΄ΠΎΠ² Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚                                 : Π½Π΅ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° равСнство Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ uint64_t ΠΈ unsigned long long : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° apidefs, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° Python Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ                       : gcc-LP64 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ GCC cxxabi         : Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'pygccxml'    : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° мСстополоТСниС Π½Π° click              : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 'pkg-config'        : /usr/bin/pkg- ,!config 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 'gtk+-3.0'                  : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 'libxml-2.0'                : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° uint128_t                   : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° __uint128_t                 : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° високопрСцизна рСализация   : 128-Π±ΠΈΡ‚ΠΎΠ² цяло число ,!(ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅) 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» stdint.h             : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» inttypes.h           : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» sys/inttypes.h       : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» sys/types.h          : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» sys/stat.h           : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» dirent.h             : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» stdlib.h             : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» signal.h             : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» pthread.h            : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» stdint.h             : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» inttypes.h           : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» sys/inttypes.h       : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° rt                  : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» sys/ioctl.h          : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» net/if.h             : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» net/ethernet.h       : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» linux/if_tun.h       : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» netpacket/packet.h   : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° мСстополоТСниС Π½Π° NSC                : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 'sqlite3'                   : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ Ρ„Π°ΠΉΠ» linux/if_tun.h       : Π΄Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi'          : 3.26.1 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.GObject'      : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'cairo'                      : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'pygraphviz'                 : 1.4rc1 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.Gtk'          : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.Gdk'          : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.Pango'        : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.GooCanvas'    : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 'sudo'                             : /usr/bin/sudo 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 'valgrind'                         : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π° 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 'gsl' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ python-config            : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π»Π°Π³ -fstrict-aliasing : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π»Π°Π³ -fstrict-aliasing : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π»Π°Π³ -Wstrict-aliasing : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π»Π°Π³ -Wstrict-aliasing : ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 'doxygen'                          : /usr/bin/doxygen
---- РСзюмС Π½Π° ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ns-3:
ΠŸΡ€ΠΎΡ„ΠΈΠ» Π½Π° компилация : ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½
ДирСктория Π½Π° компилация : 
BRITE Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (BRITE Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ (Π²ΠΈΠΆΡ‚Π΅ опцията --with-,!brite)) 
Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π·Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡ DES : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ (ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ) 
Емуляция FdNetDevice        : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° 
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ                     : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ 
Π€Π°ΠΉΠ» дСскриптор NetDevice    : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ 
GNU Научна Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° (GSL) : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (GSL Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½) 
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Gcrypt               : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π°
(Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° libgcrypt Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π°: ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ,!libgcrypt-config Π·Π° Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ мСстополоТСниС.) GtkConfigStore               : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° 'gtk+-3.0 >= 3.0' Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π°)
MPI ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°                  : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (опция --enable-mpi Π½Π΅ Π΅ ΠΈΠ·Π±Ρ€Π°Π½Π°)
ns-3 Click Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ       : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (nsclick Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ (Π²ΠΈΠΆΡ‚Π΅ опцията --with-,!nsclick))
ns-3 OpenFlow Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ   : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (НСобходимитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° boost Π½Π΅ са Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ) 
Cradle Π½Π° ΠΌΡ€Π΅ΠΆΠΎΠ²Π°Ρ‚Π° симулация    : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ (NSC Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ (Π²ΠΈΠΆΡ‚Π΅ опцията --with-nsc))
PlanetLab FdNetDevice         : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ (ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма PlanetLab Π½Π΅ Π΅ Ρ€Π°Π·ΠΏΠΎΠ·Π½Π°Ρ‚Π° ,!(Π²ΠΈΠΆΡ‚Π΅ опцията --force-planetlab)) PyViz Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ 
ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Python API сканиранС   : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° (Липсва 'pygccxml' Python ΠΌΠΎΠ΄ΡƒΠ»)
Python Π‘ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ 
Π‘ΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€ Π² Π Π΅Π°Π»Π½ΠΎ Π’Ρ€Π΅ΠΌΠ΅           : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ 
Π˜Π·Ρ…ΠΎΠ΄ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° SQLite статистики      : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° 'sqlite3' Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π°)
Tap Bridge                    : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ 
Tap FdNetDevice               : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½
ВСстовС                         : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ 
ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΈ Π·Π° многопоточност          : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΈ 
Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ sudo Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° suid Π±ΠΈΡ‚   : Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ (опция --enable-sudo Π½Π΅ Π΅ ΠΈΠ·Π±Ρ€Π°Π½Π°)
XmlIo                         : Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½
'configure' Π·Π°Π²ΡŠΡ€ΡˆΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (6.387s)

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° послСдната част ΠΎΡ‚ списъка ΠΏΠΎ-Π³ΠΎΡ€Π΅. Някои ΠΎΠΏΡ†ΠΈΠΈ Π½Π° ns‑3 Π½Π΅ са Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ изискват ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° ΠΎΡ‚ систСмата, Π·Π° Π΄Π° работят ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. НапримСр, Π·Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ XmlTo, систСмата трябва Π΄Π° ΠΈΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° libxml-2.0. Ако Ρ‚Π°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π° ΠΈ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° функция Π½Π° ns‑3 Π½Π΅ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π°, Ρ‰Π΅ сС ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° sudo Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π±ΠΈΡ‚ suid "идСнтификация Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС" Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. Π’ΠΎΠΉ Π½Π΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Π·Π°Ρ‚ΠΎΠ²Π° Ρ‚Π°Π·ΠΈ функция сС ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ "Π½Π΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°" ("not enabled"). Накрая, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ списък с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Waf с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° --check-config.

Π‘Π΅Π³Π° Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ ΠΈ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½Π°Ρ‚Π° вСрсия, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстовС.

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

БистСмата Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ сСга Π΅ настроСна ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½ΠΈ вСрсии Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ ns‑3, ΠΊΠ°Ρ‚ΠΎ просто Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅:

$ .\/waf

НСка описанитС ΠΏΠΎ-Π³ΠΎΡ€Π΅ ΡΡ‚ΡŠΠΏΠΊΠΈ Π²ΠΈ Π½Π°ΠΊΠ°Ρ€Π°Ρ‚ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ част ΠΎΡ‚ систСмата ns‑3 Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ, Π½ΠΎ сСга Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ конфигурацията ΠΈ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ ΠΊΠΎΠ΄.

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π·Π° Π΄Π°Π΄Π΅Π½Π°Ρ‚Π° конфигурация Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:

$ .\/waf --check-profile 
Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `\/path\/to\/ns-3-allinone\/ns-3.29\/build' 
ΠŸΡ€ΠΎΡ„ΠΈΠ» Π½Π° компилация: debug

ΠžΠ±ΡΡŠΠ΄Π΅Π½ΠΈΡΡ‚ ΠΏΠΎ-Π³ΠΎΡ€Π΅ сцСнарий build.py ΡΡŠΡ‰ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ --enable-examples ΠΈ --enable-tests, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Waf Ρ‚ΠΎΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ. НапримСр, Ρ‚ΠΎΠ²Π° няма Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ:

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

рСакцията Ρ‰Π΅ бъдС:

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

ВсС ΠΏΠ°ΠΊ, спСциалСн ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ -β€―- ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Ρ‡Ρ€Π΅Π· waf, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ вмСсто горСспомСнатото, слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ:

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

Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° основната ΠΊΠΎΠΌΠ°Π½Π΄Π° .\/waf configure β€”disable-python. Π•Ρ‚ΠΎ ΠΎΡ‰Π΅ няколко ΡΡŠΠ²Π΅Ρ‚Π° Π·Π° Waf.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ компилация

ВСрсиитС Π½Π° ns-3 са тСствани с Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ‚Π΅ C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ, Π½Π°Π»ΠΈΡ‡Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° пусканСто ΠΈΠΌ Π² разпространСнитС дистрибуции Π½Π° Linux ΠΈ MacOS. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, Π½ΠΎΠ²ΠΈ дистрибуции с Π½ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ сС пускат, ΠΈ Ρ‚Π΅Π·ΠΈ Π½ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ са ΠΏΠΎ-ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΈ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° прСдупрСТдСнията. 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, Waf Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° опция Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Вя Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° Π·Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π»Π°Π³Π° "-Werror" Π² g++ ΠΈ clang++. Π’Π°Π·ΠΈ опция "--disable-werror" трябва Π΄Π° бъдС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅:

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

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅

Някои ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Waf ΠΈΠΌΠ°Ρ‚ смисъл само Π² Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅, Π° някои дСйстват само Π² Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅. НапримСр, Π°ΠΊΠΎ искатС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π·Π° Смулация Π½Π° ns-3, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Π·Π°Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΈΡ‚Π° suid ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ sudo, ΠΊΠ°ΠΊΡ‚ΠΎ бСшС описано ΠΏΠΎ-Π³ΠΎΡ€Π΅. Π’ΠΎΠ²Π° Ρ‰Π΅ Π°Π½ΡƒΠ»ΠΈΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ΠΎΡ‚ Π΅Ρ‚Π°ΠΏΠ° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ конфигурацията, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°, която ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстовС.

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

Ако Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, Waf запуска sudo, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π·Π° създаванС Π½Π° сокСт ΠΊΠΎΠ΄Π° Π½Π° Π΅ΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€Π°, Π·Π° Π΄Π° сС стартира с ΠΏΡ€Π°Π²Π°. root. Π’ Waf Налични са ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅. Π—Π° Π΄Π° ΠΏΡ€ΠΎΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈΡ‚Π΅, Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅:

$ ./waf --help

Π’ слСдващия Ρ€Π°Π·Π΄Π΅Π» Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ някои ΠΎΠΏΡ†ΠΈΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с тСстванСто.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π½Π° компилация

Π’Π΅Ρ‡Π΅ видяхмС ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Waf Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ debug ΠΈ optimized:

$ ./waf --build-profile=debug

Има ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΏΡ€ΠΎΡ„ΠΈΠ» Π½Π° компилация, release. ΠžΠΏΡ†ΠΈΡΡ‚Π° -d Π΅ синоним Π½Π° --build-profile. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŠΡ‚ Π½Π° компилация управлява ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅, утвСрТдСния (assertions) ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° оптимизация Π½Π° компилятора:

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатора Π·Π° ΠΌΡ€Π΅ΠΆΠΈ ns-3. Π“Π»Π°Π²Π° 3

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ, Π»ΠΎΠ³Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈ асСрциитС са Π½Π°Π»ΠΈΡ‡Π½ΠΈ само Π² дСбъг вСрсии Π½Π° сборкитС. ΠŸΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡ΠΈΡ‚Π΅Π»Π½Π°Ρ‚Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π΅ Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ скрипта си Π² Ρ€Π΅ΠΆΠΈΠΌ Π½Π° ΠΎΡ‚Π»Π°Π΄ΠΊΠ°, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Ρ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½ΠΈ (Π·Π° статистики ΠΈΠ»ΠΈ промяна Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ) Π² оптимизирания ΠΏΡ€ΠΎΡ„ΠΈΠ» Π½Π° сборката.

Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° сС изпълнява само Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π½Π° сборка, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ макроса Code Wrapper Macro:

NS_BUILD_DEBUG (std::cout << "Част ΠΎΡ‚ изходния Ρ€Π΅Π΄..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Π“ΠΎΡ‚ΠΎΠ²ΠΎ: " << 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 сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ ΠΎΡ‚ GCC ( g++). Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ използвания Waf C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, ΠΊΠ°Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата CXX. НапримСр, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Clang, clang++,

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

По ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Waf Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° компилация с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° distcc:

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

По-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° информация Π·Π° distcc ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°Ρ‚Π° компилация ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° страницата Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π° "ДокумСнтация". Π—Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Ρ„Π»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ns-3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° срСдата CXXFLAGS_EXTRA.

Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π΅

Waf ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° инсталиранС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ мСста Π² систСмата. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π² дирСкторията build, ΠΈ Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Waf Π·Π½Π°Π΅ мСстополоТСниСто Π½Π° Ρ‚Π΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС инсталират Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ никъдС Π΄Ρ€ΡƒΠ³Π°Π΄Π΅.

Ако ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ инсталация извън дирСкторията Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° .\/waf install. По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΏΡ€Π΅Ρ„ΠΈΠΊΡΡŠΡ‚ Π·Π° инсталация Π΅ /usr/local, слСдоватСлно .\/waf install Ρ‰Π΅ инсталира ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π² /usr/local/bin, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π² /usr/local/lib ΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² /usr/local/include. ΠŸΡ€Π°Π²Π° Π½Π° супСрпотрСбитСля ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° инсталиранС с подразбиращия сС прСфикс, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ‰Π΅ бъдС sudo .\/waf install. ΠŸΡ€ΠΈ стартиранС, Waf ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠ±Ρ‰ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² дирСкторията Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΈ слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Ρ‚ΡŠΡ€ΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎ ΠΏΡŠΡ‚Ρ към Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅, настроСни Π² Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° срСда. Π’Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€ΠΈ инсталиранС Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² систСмата Π΅ Π΄ΠΎΠ±Ρ€Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π΄Π° сС провСрява, Ρ‡Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π°Ρ‚ инсталация с Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ прСфикс, ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΉΠΊΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ опцията --prefix, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

Ако ΠΏΠΎ-късно, слСд ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, потрСбитСлят въвСдС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° инсталация .\/waf, Ρ‰Π΅ бъдС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ прСфикс /opt/local.

Π•ΠΊΠΈΠΏ .\/waf clean трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡ€Π΅Π΄ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Π° настройка Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π°ΠΊΠΎ Π·Π° инсталацията Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Waf ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ прСфикс.

Π’Π°ΠΊΠ° Ρ‡Π΅, Π·Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ns‑3, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° .\/waf install. На ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° няма Π΄Π° ΠΈΠΌ бъдС Π½ΡƒΠΆΠ½Π°, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Waf Ρ‰Π΅ ΠΏΠΎΠ΄Ρ…Π²Π°Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΡ‚ дирСкторията Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, Π½ΠΎ някои ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° намСрят Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π°ΠΊΠΎ тяхната дСйност Π²ΠΊΠ»ΡŽΡ‡Π²Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ извън дирСкторията ns‑3.

Waf Π΅ Π΅Π΄ΠΈΠ½Π΅Π½

На Π½Π°ΠΉ-Π³ΠΎΡ€Π½ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π΄ΡŠΡ€Π²ΠΎΡ‚ΠΎ с ΠΈΠ·Ρ…ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° ns‑3 ΠΈΠΌΠ° само Π΅Π΄ΠΈΠ½ Waf скрипт. ΠšΠ°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°, Ρ‰Π΅ ΠΏΡ€Π΅ΠΊΠ°Ρ€Π°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π² дирСкторията scratch\/ ΠΈΠ»ΠΈ ΠΏΠΎ-дълбоко Π²src\/... ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° Π΄Π° стартиратС Waf. ΠœΠΎΠΆΠ΅Ρ‚Π΅ просто Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ къдС сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚Π΅ ΠΈ Π΄Π° стартиратС Waf ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

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

Π½ΠΎ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС досадно ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π•Π΄ΠΈΠ½ ΠΎΡ‚ разпространСнитС Π½Π°Ρ‡ΠΈΠ½ΠΈ Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠ°Ρ‚ΠΎ emacs ΠΈΠ»ΠΈ vim, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС отварят Π΄Π²Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π½ΠΈ сСсии, Π΅Π΄Π½Π°Ρ‚Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ns‑3, Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Π·Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° изходния ΠΊΠΎΠ΄. Ако ΠΈΠΌΠ°Ρ‚Π΅ само tarball, Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° срСда:

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

$ cd scratch 
$ waff build

Π’ дирСкторията Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΈΠΌΠ°ΠΌΠ»ΠΈΠ²ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π΅Π½ сцСнарий waf ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ exec ../../waf. Моля, Π½Π΅ Π³ΠΎ ΠΏΡ€Π°Π²Π΅Ρ‚Π΅. Π’ΠΎΠ²Π° ΠΎΠ±ΡŠΡ€ΠΊΠ²Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΈ лошо изпълнСниС Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π΅ΠΌΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π² компилацията. Π Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡ€Π΅, са ΠΏΡŠΡ‚ΡΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°.

3.5 ВСстванС Π½Π° ns-3

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ тСстовС Π½Π° дистрибуцията ns-3, ΠΊΠ°Ρ‚ΠΎ стартиратС скрипта ./test.py:

$ ./test.py

Π’Π΅Π·ΠΈ тСстовС сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ с Waf. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ гласи, Ρ‡Π΅

92 ΠΎΡ‚ 92 тСста са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ (92 ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ, 0 Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ, 0 сринати, 0 Π³Ρ€Π΅ΡˆΠΊΠΈ valgrind)

Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° сривовС, сривовС ΠΈΠ»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ valgrind, ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‰ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ инструмСнтитС ΠΈ ΠΊΠΎΠ΄Π°.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ окончатСлния ΠΈΠ·Ρ…ΠΎΠ΄ ΠΎΡ‚ Waf ΠΈ тСстСра, ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‰ всСки тСст, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build' 
Waf: ИзлизанС ΠΎΡ‚ дирСктория `\/path\/to\/workspace\/ns-3-allinone\/ns-3-dev\/build' 
'build' Π·Π°Π²ΡŠΡ€ΡˆΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (1.799s) 

Π‘Π³Π»ΠΎΠ±Π΅Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ:
aodv           прилоТСния          мост
click          ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ ΠΌΠ°Π³Π°Π·ΠΈΠ½          основСн
csma           csma-структура           dsdv
Π΅ΠΌΡƒ            СнСргия                ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ
ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚       lte                   ΠΌΡ€Π΅ΠΆΠ°
мобилност       mpi                   netanim
ΠΌΡ€Π΅ΠΆΠ°        nix-Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅    ns3tcp
ns3wifi        olsr                  openflow
Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ° Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°-структура разпространСниС
ΡΠΏΠ΅ΠΊΡ‚ΡŠΡ€       статистики                 tap-мост
template       тСст                  инструмСнти
tопология-Ρ‡Π΅Ρ‚Π΅Π½Π΅  uan                   Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΎ ΠΌΡ€Π΅ΠΆΠΎΠ²ΠΎ устройство
Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€     wifi                  wimax

PASS: ВСстов ΠΏΠ°ΠΊΠ΅Ρ‚ ns3-wifi-interference
PASS: ВСстов ΠΏΠ°ΠΊΠ΅Ρ‚ хистограма 

...

PASS: ВСстов ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΠ±Π΅ΠΊΡ‚
PASS: ВСстов ΠΏΠ°ΠΊΠ΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° случайни числа
92 ΠΎΡ‚ 92 тСста са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ (92 ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ, 0 Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ, 0 сринати, 0 Π³Ρ€Π΅ΡˆΠΊΠΈ valgrind)

Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС стартира ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π·Π° Π±ΡŠΡ€Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° правилността Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° дистрибуцията ns-3. (ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ Ρ€Π΅Π΄ΡŠΡ‚ Π½Π° Π»ΠΈΠ½ΠΈΠΈΡ‚Π΅ Β«PASS: ...Β» ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½, Ρ‚ΠΎΠ²Π° Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ. Π’Π°ΠΆΠ½ΠΎ Π΅, Ρ‡Π΅ Π² окончатСлния Ρ€Π΅Π΄ Π² края Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Π° всички тСстовС са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ; Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ тСст Π½Π΅ Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈΠ» Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠ»ΠΈ Π΅ сринат.) И Waf, ΠΈ test.py Ρ‰Π΅ разпрСдСлят Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ядра Π½Π° процСсора Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°.

3.6 Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° скрипт

ОбикновСно стартирамС скриптовСтС ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° Waf. Π’ΠΎΠ²Π° позволява Π½Π° систСмата Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π΄Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° към ΠΎΠ±Ρ‰Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° са настроСни ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ Ρ‡Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС. Π—Π° Π΄Π° стартиратС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, просто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ Waf с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° - β€―-run. НСка стартирамС Π·Π° ns-3 Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ Π½Π° Π²ΡΠ΅ΠΌΠΎΠ³ΡŠΡ‰Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π΄Ρ€Π°Π²Π΅ΠΉ свят, ΠΊΠ°Ρ‚ΠΎ напишСм слСдното:

$ ./waf --run hello-simulator

Waf ΠΏΡŠΡ€Π²ΠΎ Ρ‰Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈ ΠΏΡ€ΠΈ нСобходимост Ρ‰Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ компилация. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Waf Ρ‰Π΅ изпълни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, която Ρ‰Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅ слСдния ΠΈΠ·Ρ…ΠΎΠ΄.

Hello Simulator

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»Π΅Π½ΠΈΡ! Π‘Π΅Π³Π° стС ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π½Π° ns‑3!

Какво Π΄Π° правя, Π°ΠΊΠΎ Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°?

Ако Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Waf, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ компилацията Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½ΠΎ Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π° Β«Hello SimulatorΒ», Ρ‚ΠΎ Π΅ възмоТно Π΄Π° стС Π² сСкцията [Π‘Π±ΠΎΡ€ΠΊΠ°-с-Waf] ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° си Π½Π° компилация Π½Π° optimized, Π½ΠΎ пропуснали Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌ debug. ЦСлият ΠΈΠ·Ρ…ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° спСциалСн ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ns‑3, ΠΊΠΎΠΉΡ‚ΠΎ изпълнява запис Π½Π° Π»ΠΎΠ³ ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠ΅Ρ‡Π°Ρ‚ Π½Π° потрСбитСлски ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°. Π˜Π·Ρ…ΠΎΠ΄ΡŠΡ‚ ΠΎΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ ΠΏΡ€ΠΈ компилация Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ ΠΊΠΎΠ΄ β€” Ρ‚ΠΎΠΉ Π΅ "ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½". Ако Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π° "Hello Simulator", Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅ слСдното:

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

Π·Π° Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Waf Π·Π° компилация Π½Π° ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½ΠΈ вСрсии Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ns‑3, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстовС. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΏΡ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Ρ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π½Π°Ρ‚Π° ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½Π° вСрсия Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅

$ .\/waf

Π‘Π΅Π³Π°, Π°ΠΊΠΎ стартиратС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° hello-simulator, трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ очаквания Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚.

3.6.1 АргумСнти Π½Π° командния Ρ€Π΅Π΄

Π—Π° Π΄Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Ρ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΡ‚ командния Ρ€Π΅Π΄ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ns‑3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ слСдния шаблон:

$ .\/waf --run  --command-template="%s "

Π—Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ с ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅. ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ -β€―-command-template Π·Π° Waf Π΅ ΠΏΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΎ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° фактичСската ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° линия Waf ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° Π·Π° изпълнСниС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°. Waf провСрява Π΄Π°Π»ΠΈ компилацията Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈΠ»Π°, Π·Π°Π΄Π°Π²Π° ΠΏΡŠΡ‚ΠΈΡ‰Π° към ΠΎΠ±Ρ‰Π°Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° прСдоставСния шаблон Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° линия ΠΈ замСства ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° вмСсто Π·Π°ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Ρ %s, Π·Π° Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ° изпълнимия Ρ„Π°ΠΉΠ». Ако Ρ‚ΠΎΠ·ΠΈ синтаксис Π²ΠΈ сС струва слоТСн, ΠΈΠΌΠ° ΠΏΠΎ-прост Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ns‑3 ΠΈ Π½Π΅ΠΉΠ½ΠΈΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, поставСни Π² Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΈ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ:

$ .\/waf --run ' --arg1=value1 --arg2=value2 ...'

Π”Ρ€ΡƒΠ³ особСно ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ сСлСктивното стартиранС Π½Π° Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ тСстовС. НСка ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΈΠΌΠ° тСстов Π½Π°Π±ΠΎΡ€ (suite) mytest (Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‚Π°ΠΊΡŠΠ² Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°). По-Π³ΠΎΡ€Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ скрипта .\/test.py Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ стартиранС Π½Π° Ρ€Π΅Π΄ΠΈΡ†Π° тСстовС, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° тСстванС test-runner. ИзвикванС test-runner Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π·Π° изпълнСниС Π½Π° Π΅Π΄ΠΈΠ½ тСст:

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

АргумСнтитС Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° test-runner. Въй ΠΊΠ°Ρ‚ΠΎ mytest Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°, Ρ‰Π΅ бъдС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°. Π—Π° Π΄Π° ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° test-runner, Π²ΡŠΠ²Π΅Π΄Π΅Ρ‚Π΅:

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

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° 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 
}

Π’ΠΎΠ²Π° Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° вСрсия Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π°ΠΏΠ°Π·Π²Π° Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° дирСктория, прСмСства сС Π² дирСкторията Waf, Π° слСд Ρ‚ΠΎΠ²Π° инструктира Waf Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° дирСктория ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° Π·Π°ΠΏΠ°Π·Π΅Π½Π°Ρ‚Π° ΠΏΡ€Π΅Π΄ΠΈ стартиранСто Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Ρ‚Π΅ΠΊΡƒΡ‰Π° Ρ€Π°Π±ΠΎΡ‚Π½Π° дирСктория. Π‘ΠΏΠΎΠΌΠ΅Π½Π°Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° -β€―-cwd Π·Π° ΠΏΡŠΠ»Π½ΠΎΡ‚Π°, ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ просто стартират Waf ΠΎΡ‚ дирСкторията Π½Π° Π½Π°ΠΉ-високо Π½ΠΈΠ²ΠΎ ΠΈ Ρ‚Π°ΠΌ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΠΈΠ·Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ.

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅: Π³Π»Π°Π²Π° 4

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster