Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатор Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° 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 Ρ…Ρ€Π°Π½ΠΈΡ‰Π°Ρ‚Π° Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ fork ΠΈΠ»ΠΈ Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡ‚Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ ns-3-allinone. Π’ΠΎΠ²Π° Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ скриптовС, ΠΊΠΎΠΈΡ‚ΠΎ управляват изтСглянСто ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½Π°ΠΉ-чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ подсистСми Π½Π° ns-3. Ако стС Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ Π² Git, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ‚Π΅ "fork" ΠΈ "ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅" ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π²ΠΈ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ; Π°ΠΊΠΎ Π΅ Ρ‚Π°ΠΊΠ°, ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°ΠΌΠ΅ Π²ΠΈ просто Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ (ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ собствСна вСрсия) рСпозитория, Π½Π°ΠΌΠΈΡ€Π°Ρ‰ сС Π½Π° 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.

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

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

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

Π’ послСднитС вСрсии Π½Π° ns-3 Bake бСшС Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² tar-ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ», позволяващ изтСглянСто Π½Π° Π°ΠΊΡ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ вСрсии Π½Π° софтуСра Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ. ВоСст, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, вСрсия Bake, която сС разпространява с ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ 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. НСка ΠΊΠ°ΠΆΠ΅ΠΌ няколко ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΈ Π΄ΡƒΠΌΠΈ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° Bake.

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

$ ./bake.py check

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

> Python - OK 
> GNU C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ - OK 
> Mercurial - OK 
> Git - OK 
> Tar инструмСнт - OK 
> Unzip инструмСнт - OK 
> Make - OK 
> cMake - OK 
> patch инструмСнт - 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'\n'build' finished successfully (6m25.032s) \n\nModules built:\nantenna                aodv                     applications\nbridge                 buildings                config-store\ncore                   csma                     csma-layout\ndsdv                   dsr                      energy \nfd-net-device          flow-monitor             internet\ninternet-apps          lr-wpan                  lte\nmesh                   mobility                 mpi\nnetanim (no Python)    network                  nix-vector-routing \nolsr                   point-to-point           point-to-point-layout \npropagation            sixlowpan                spectrum \nstats                  tap-bridge               test (no Python) \ntopology-read          traffic-control          uan \nvirtual-net-device     visualizer               wave \nwifi                   wimax \n\nModules not built (see ns-3 tutorial for explanation):\nbrite                  click                    openflow \nLeaving directory .\/ns-3.29

Π’ послСднитС Ρ‚Ρ€ΠΈ Ρ€Π΅Π΄Π° Π½Π° списъка Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π±ΠΈΠ»ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ:

Modules not built (see ns-3 tutorial for explanation):\nbrite                     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
Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ функционалността Π½Π° ΠΊΡ€Π°ΠΉΠ½Π°Ρ‚Π° компилация.
Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, bake Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ "castxml" Π½Π΅ Π΅ основна зависимост.
Π—Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ информация ΠΈΠ·Π²ΠΈΠΊΠ°ΠΉΡ‚Π΅ bake с -v ΠΈΠ»ΠΈ -vvv, Π·Π° пълСн ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ.

Но 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\/. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ бъдС прСустроСн ΠΈ систСмата Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ провСрява Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ зависимости, трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° слСдния:

Настройка Π½Π° top Π΄ΠΎ : /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 : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„Π»Π°Π³ Π·Π° компилация -Wl,--soname=foo : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„Π»Π°Π³ Π·Π° компилация -std=c++11 : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 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 : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„Π»Π°Π³ Π·Π° компилация -Wno-array-bounds : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° мСстополоТСниС Π½Π° 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' : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'cairo' : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'pygraphviz' : 1.4rc1 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.Gtk' : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.Gdk' : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.Pango' : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡƒΠ» 'gi.repository.GooCanvas' : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 'sudo' : /usr/bin/sudo 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° 'valgrind' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° 'gsl' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ python-config : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„Π»Π°Π³ Π·Π° компилация -fstrict-aliasing : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„Π»Π°Π³ Π·Π° компилация -fstrict-aliasing : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„Π»Π°Π³ Π·Π° компилация -Wstrict-aliasing : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Ρ„Π»Π°Π³ Π·Π° компилация -Wstrict-aliasing : ok 
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° '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 Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ дСбъг ΠΈ 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           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 ΠΎΡ‚ 92 тСста са ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ (92 ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π»ΠΈ, 0 Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ, 0 сС сринаха, 0 Π³Ρ€Π΅ΡˆΠΊΠΈ valgrind)

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

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

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

$ ./waf --run hello-simulator

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

Hello Simulator

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

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

Ако Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Waf, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚, Ρ‡Π΅ компилацията Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠΈΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½ΠΎ Π½Π΅ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ ΠΈΠ·Ρ…ΠΎΠ΄Π° β€žHello Simulatorβ€œ, Π΅ възмоТно Π΄Π° стС Π² частта [Π‘Π±ΠΎΡ€ΠΊΠ°-с-Waf] смСнили Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° компилация Π½Π° optimized, Π½ΠΎ Π΄Π° стС пропуснали Π΄Π° сС Π²ΡŠΡ€Π½Π΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌ дСбъг. ЦСлият ΠΈΠ·Ρ…ΠΎΠ΄ Π½Π° консолата, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² Ρ‚ΠΎΠ²Π° Ρ€ΡŠΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° спСциалСн ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ 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