Упатство Π·Π° ΠΌΡ€Π΅ΠΆΠ΅Π½ симулатор 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 со помош Π½Π° ΠŸΠ΅Ρ‡Π΅ΡšΠ΅
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-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈ.

Π‘Π»Π΅Π΄Π½ΠΎ, ќС Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Ρ‚Ρ€ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° ns-3. ΠŸΡ€Π²ΠΈΠΎΡ‚ Π΅ Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ΄ Π³Π»Π°Π²Π½ΠΈΠΎΡ‚ ΡΠ°Ρ˜Ρ‚. Π’Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ Π΅ ΠΈΠ·Π±ΠΎΡ€ ΠΈ ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΏΠΈΠΈ Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° основната ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° ns-3. Π’Ρ€Π΅Ρ‚ΠΈΠΎΡ‚ Π΅ Π΄Π° сС користат Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π·Π° Π΄Π° сС Π²Ρ‡ΠΈΡ‚Π°Π°Ρ‚ повСќС СкстСнзии Π·Π° ns-3. ЌС Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ сСкој ΠΎΠ΄ Π½ΠΈΠ² бидСјќи Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ сС ΠΌΠ°Π»ΠΊΡƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ.

Π˜ΡΠΊΡƒΡΠ½ΠΈΡ‚Π΅ корисници Π½Π° Linux ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΡ€Π°ΡˆΠ°Π°Ρ‚ Π·ΠΎΡˆΡ‚ΠΎ ns-3 Π½Π΅ Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ ΠΊΠ°ΠΊΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΊΠ°ΠΊΠΎ ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠΈ користат ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ? Иако ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ дистрибуции Π½Π° Линукс (Π½Π° ΠΏΡ€. Π”Π΅Π±ΠΈΠ°Π½), ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ корисници Π·Π°Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ со ΡƒΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΈ ΠΌΠΎΡ€Π°Π°Ρ‚ сами Π΄Π° Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π°Ρ‚ ns-3, ΠΏΠ° Π·Π°Ρ‚ΠΎΠ° Π΅ корисно Π΄Π° сС ΠΈΠΌΠ° Π½Π° Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡšΠ΅ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄. ΠŸΠΎΡ€Π°Π΄ΠΈ ΠΎΠ²Π°Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ќС сС фокусирамС Π½Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡ€ΠΎΡ‚.

Π—Π° ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ns-3 ΠΏΡ€Π°Π²Π° ΠΊΠΎΡ€Π΅Π½ Π½Π΅ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ, сС ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π° Π΄Π° користитС Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€Π°Π½Π° корисничка смСтка.

3.2 ΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈ

Π¦Π΅Π»ΠΈΠΎΡ‚ сСт Π½Π° достапни ns-3 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠΌΠ° Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Π½Π° зависности ΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ΄ Ρ‚Ρ€Π΅Ρ‚ΠΈ страни, Π½ΠΎ Π²ΠΎ најголСм Π΄Π΅Π» ns-3 ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ ΠΈ користи со ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΈ (чСсто стандардно инсталирани) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ: ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ C++, Python, ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‡ Π½Π° ΠΈΠ·Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, vim, emacs ΠΈΠ»ΠΈ Π—Π°Ρ‚Π΅ΠΌΠ½ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ) ΠΈ, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ сС користат ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜, систСми Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Π½Π° Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° Git. ΠŸΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ корисници Π·Π° ΠΏΡ€Π² ΠΏΠ°Ρ‚ Π½Π΅ΠΌΠ° Π΄Π° Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС Π³Ρ€ΠΈΠΆΠ°Ρ‚ Π°ΠΊΠΎ Π½ΠΈΠ²Π½Π°Ρ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° објави Π΄Π΅ΠΊΠ° нСдостасуваат Π½Π΅ΠΊΠΎΠΈ Π½Π°ΠΏΡ€Π΅Π΄Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ns-3, Π½ΠΎ Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ сакаат цСлосна ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π²ΠΈΠΊΠΈ ΡˆΡ‚ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° страници со ΠΌΠ½ΠΎΠ³Ρƒ корисни совСти ΠΈ Ρ‚Ρ€ΠΈΠΊΠΎΠ²ΠΈ. Π•Π΄Π½Π° Ρ‚Π°ΠΊΠ²Π° страница Π΅ страницата Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°, со инструкции Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ систСми, достапни Π½Π°: https://www.nsnam.org/wiki/Installation.

Π”Π΅Π»ΠΎΡ‚ β€žΠŸΡ€Π΅Π΄ΡƒΡΠ»ΠΎΠ²ΠΈβ€œ Π½Π° ΠΎΠ²Π° Π²ΠΈΠΊΠΈ ΠΎΠ±Ρ˜Π°ΡΠ½ΡƒΠ²Π° ΠΊΠΎΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π½Π° Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ns-3 ΠΈ исто Ρ‚Π°ΠΊΠ° Π³ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ сС користат Π·Π° Π½ΠΈΠ²Π½ΠΎ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ΠΈΡ‚Π΅ вкусови Π½Π° Linux ΠΈΠ»ΠΈ macOS.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја искориститС ΠΎΠ²Π°Π° моТност Π΄Π° ја истраТитС Π²ΠΈΠΊΠΈ страницата ns-3 ΠΈΠ»ΠΈ Π³Π»Π°Π²Π½Π°Ρ‚Π° Π²Π΅Π±-Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°: https://www.nsnam.org, бидСјќи Ρ‚Π°ΠΌΡƒ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΠΎΡ‡Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ ΠΎΠ΄ Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ns-3 (ns-3.29), ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ сС слСднитС Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ ns-3:

ΠŸΠ°ΠΊΠ΅Ρ‚/Π²Π΅Ρ€Π·ΠΈΡ˜Π° со Π°Π»Π°Ρ‚ΠΊΠΈ

  • C++ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€
    clang++ ΠΈΠ»ΠΈ g++ (g++ Π²Π΅Ρ€Π·ΠΈΡ˜Π° 4.9 ΠΈΠ»ΠΈ повисока)
  • ΠŸΠ°Ρ˜Ρ‚ΠΎΠ½
    python2 Π²Π΅Ρ€Π·ΠΈΡ˜Π° >= 2.7.10, ΠΈΠ»ΠΈ python3 Π²Π΅Ρ€Π·ΠΈΡ˜Π° >=3.4
  • ΠΎΠ΄ΠΈ
    која Π±ΠΈΠ»ΠΎ најнова Π²Π΅Ρ€Π·ΠΈΡ˜Π° (Π·Π° пристап Π΄ΠΎ ns-3 Π½Π° GitLab.com)
  • ΠΊΠ°Ρ‚Ρ€Π°Π½
    која Π±ΠΈΠ»ΠΎ најнова Π²Π΅Ρ€Π·ΠΈΡ˜Π° (Π·Π° ΠΎΡ‚ΠΏΠ°ΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ 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 сС ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°Π°Ρ‚ ΠΊΠ°ΠΊΠΎ Π°Ρ€Ρ…ΠΈΠ²ΠΈ со компрСсирани ΠΈΠ·Π²ΠΎΡ€ΠΈ, понСкогаш Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ Ρ‚Π°Ρ€Π±ΠΎΠ». Ρ‚Π°Ρ€Π±ΠΎΠ» Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π΅Π½ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π½Π° Π°Ρ€Ρ…ΠΈΠ²Π° Π½Π° софтвСр Π²ΠΎ кој Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π°Ρ‚ Π·Π°Π΅Π΄Π½ΠΎ. Архивата ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π΅ компрСсирана. ns-3 процСс Π½Π° подигањС ΠΏΡ€Π΅ΠΊΡƒ Ρ‚Π°Ρ€Π±ΠΎΠ» Π΅ Сдноставно, само Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅, Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΈ ΠΎΡ‚ΠΏΠ°ΠΊΡƒΠ²Π°Ρ‚Π΅.

Π”Π° прСтпоставимС Π΄Π΅ΠΊΠ° Π²ΠΈΠ΅, ΠΊΠ°ΠΊΠΎ корисник, сакатС Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ns-3 Π²ΠΎ Π»ΠΎΠΊΠ°Π»Π΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π½Π°Ρ€Π΅Ρ‡Π΅Π½ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ простор. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½Π° копија ΠΎΠ΄ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ со Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° слСдново Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° Linux (сС Ρ€Π°Π·Π±ΠΈΡ€Π°, Π·Π°ΠΌΠ΅Π½ΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΈ соодвСтнитС Π±Ρ€ΠΎΠ΅Π²ΠΈ Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π°)

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

ΠžΠ±Ρ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° користСна ΠΏΠΎΠ³ΠΎΡ€Π΅ wget, која Π΅ Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° линија Π·Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ ΠΎΠ΄ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚. Ако Π½Π΅ стС Π³ΠΎ инсталиралС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ користитС Π²Π°ΡˆΠΈΠΎΡ‚ прСлистувач Π·Π° ΠΎΠ²Π°.

БлСдСјќи Π³ΠΈ ΠΎΠ²ΠΈΠ΅ Ρ‡Π΅ΠΊΠΎΡ€ΠΈ ќС Π²Π΅ однСсС Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ns-allinone-3.29, Ρ‚Π°ΠΌΡƒ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ

$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.py

Π‘Π΅Π³Π° стС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π΄Π° ја ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ основната Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π° ns-3 ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅Ρ‚Π΅ Π½Π° Π΄Π΅Π»ΠΎΡ‚ Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ns-3.

3.3 ΠŸΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ ns-3 со помош Π½Π° Git

ΠšΠΎΠ΄ΠΎΡ‚ ns-3 Π΅ достапСн Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π°Ρ‚Π° Π½Π° Git Π½Π° GitLab.com Π½Π° https://gitlab.com/nsnam/. Π“Ρ€ΡƒΠΏΠ° нснам Π³ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡƒΠ²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° ΡˆΡ‚ΠΎ Π³ΠΈ користи ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ со ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄.

НајлСсСн Π½Π°Ρ‡ΠΈΠ½ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π°Ρ‚Π° Π½Π° Git Π΅ Π΄Π° ја Ρ€Π°Π·Π±ΠΈΠ΅Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° ns-3-Π°Π»ΠΈΠ½ΠΎΠ½. Ова Π΅ Π·Π±ΠΈΡ€ Π½Π° скрипти ΠΊΠΎΠΈ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°Π°Ρ‚ со Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½Π°Ρ˜Ρ‡Π΅ΡΡ‚ΠΎ користСнитС потсистСми ns-3. Ако стС Π½ΠΎΠ²ΠΈ Π²ΠΎ Git, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ‚Π΅ β€žforkβ€œ ΠΈ β€žcloneβ€œ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π²ΠΈ сС Π½Π΅ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ; Π°ΠΊΠΎ Π΅ Ρ‚Π°ΠΊΠ°, Π²ΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ Сдноставно Π΄Π° Π³ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Ρ‚Π΅ (Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ сопствСна копија) ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅Ρ‚ΠΎ Π»ΠΎΡ†ΠΈΡ€Π°Π½ΠΎ Π½Π° GitLab.com Π²Π°ΠΊΠ°:

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

Π’ΠΎ ΠΎΠ²Π°Π° Ρ„Π°Π·Π°, ΠΏΠΎΠ³Π»Π΅Π΄ΠΎΡ‚ Π½Π° Π²Π°ΡˆΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ns-3-Π°Π»ΠΈΠ½ΠΎΠ½ ΠΌΠ°Π»ΠΊΡƒ ΠΏΠΎΠΈΠ½Π°ΠΊΠΎΠ² ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π·Π° Π°Ρ€Ρ…ΠΈΠ²ΠΈ Π·Π° издавањС опишан ΠΏΠΎΠ³ΠΎΡ€Π΅. Π’ΠΎΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:

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

Π’Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΈΠΌΠ°Ρ˜Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° постои скрипта ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅.py, кој Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΎ ќС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ ns-3 ΠΈ ΠΏΡ€ΠΈΠ΄Ρ€ΡƒΠΆΠ½ΠΈΠΎΡ‚ ΠΈΠ·Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄. ОвдС ΠΈΠΌΠ°Ρ‚Π΅ ΠΈΠ·Π±ΠΎΡ€: ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ ја Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° слика Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° ns-3:

$ python download.py

ΠΈΠ»ΠΈ ΠΏΡ€Π΅Ρ‚ΠΏΠΎΡ‡ΠΈΡ‚Π°Π°Ρ‚ ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅ ns-3 ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ Π·Π½Π°ΠΌΠ΅Ρ‚ΠΎ -n Π·Π° Π΄Π° Π³ΠΎ Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° издавањС:

$ python download.py -n ns-3.29

По овој Ρ‡Π΅ΠΊΠΎΡ€ Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ns-3-Π°Π»ΠΈΠ½ΠΎΠ½ ќС сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° ns-3, сС ΠΏΠ΅Ρ‡Π΅, pybindgen ΠΈ Π½Π΅Ρ‚Π°Π½ΠΈΠΌ.

Π˜ΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌ
На машина со чист Ubuntu16.04, Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° ја смСнам ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π° ΠΎΠ²Π°: $ sudo python3 download.py -n ns-3.29 (Π²ΠΎ Π½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½ΠΈΠΎΡ‚ тСкст бСлСшки Π½Π° ΠΏΡ€Π΅Π²Π΅Π΄ΡƒΠ²Π°Ρ‡ΠΎΡ‚).

3.3.1 Π’Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° ns-3 со помош Π½Π° ΠŸΠ΅Ρ‡Π΅ΡšΠ΅

Π“ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΡ‚Π΅ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ (ΠΈΠ·Π²ΠΎΡ€Π½Π° Π°Ρ€Ρ…ΠΈΠ²Π° ΠΈΠ»ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ ns-3-Π°Π»ΠΈΠ½ΠΎΠ½ ΠΏΡ€Π΅ΠΊΡƒ Git) сС корисни Π·Π° добивањС Π½Π° Π½Π°Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π°Ρ‚Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° ns-3 со повСќС Π΄ΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (pybindgen Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ врски Π·Π° Python ΠΈ Π½Π΅Ρ‚Π°Π½ΠΈΠΌ Π·Π° ΠΌΡ€Π΅ΠΆΠ½Π° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡ˜Π°). Π‘Π΅ Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π° Ρ‚Ρ€Π΅Ρ‚ΠΎΡ‚ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ ΡˆΡ‚ΠΎ Π΅ стандардно ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΎ Π²ΠΎ ns-3-allinone сС ΠΏΠ΅Ρ‡Π΅.

ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅ Π΅ Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€Π°Π½ΠΎ Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° софтвСр ΠΎΠ΄ повСќС ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π°, Ρ€Π°Π·Π²ΠΈΠ΅Π½Π° Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ ns-3. ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° добивањС Ρ€Π°Π·Π²ΠΎΡ˜Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° ns-3, ΠΊΠ°ΠΊΠΎ ΠΈ Π·Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° СкстСнзии Π½Π° основната Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° ns-3, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° Π”ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚, CradleNetwork Simulation Cradle, моТност Π·Π° создавањС Π½ΠΎΠ²ΠΈ Python Π²Ρ€Π·ΡƒΠ²Π°ΡšΠ° ΠΈ Ρ€Π°Π·Π½ΠΈ ns-3 β€žΠ°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈβ€œ.

Π˜ΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌ
CradleNetwork Simulation Cradle Π΅ Ρ€Π°ΠΌΠΊΠ° која Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° користитС вистински ΠΌΡ€Π΅ΠΆΠ½ΠΈ ΠΊΡƒΠΏΠΎΠ²ΠΈ TCP/IP Π²ΠΎ ΠΌΡ€Π΅ΠΆΠ΅Π½ симулатор.

Ако ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°Ρ‚Π΅ Π²Π°ΡˆΠ°Ρ‚Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° ns-3 Π΄Π° ΠΈΠΌΠ° Π½Π°ΠΏΡ€Π΅Π΄Π½ΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја слСдитС ΠΎΠ²Π°Π° ΠΏΠ°Ρ‚Π΅ΠΊΠ° Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°.

Π’ΠΎ Π½Π°Ρ˜Π½ΠΎΠ²ΠΈΡ‚Π΅ изданија ns-3 ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅ бСшС Π΄ΠΎΠ΄Π°Π΄Π΅Π½ Π½Π° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ°Ρ‚Ρ€Π°Π½. Π˜Π·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° ΡˆΡ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Π³ΠΈ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΡ‚Π΅ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° софтвСр Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ. Π’ΠΎΠ° Π΅, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅, кој сС дистрибуира со ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ ns-3.29, ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° Ρ‚ΠΎΠ° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ns-3 ΠΈΠ»ΠΈ ΠΏΠΎΡ€Π°Π½ΠΎ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΡ†Π½Π΅ΠΆΠ½ΠΈ изданија (Π°ΠΊΠΎ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° со опис Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΡ‚ bakeconf.xml Π½Π΅ сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°).

ΠœΠΎΠΆΠ΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ° Π΄Π° ја Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° копија сС пСчСсо Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° Linux ΠΊΠΎΠ½Π·ΠΎΠ»Π° (ΠΏΡ€Π΅Ρ‚ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°Ρ˜ΡœΠΈ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°Ρ‚Π΅ инсталирано Git):

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

Кога ќС ја ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° git, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ ΠΊΠ°ΠΊΠΎ слСдново:

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

ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС Π·Π°Π²Ρ€ΡˆΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΊΠ»ΠΎΠ½ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ сС ΠΏΠ΅Ρ‡Π΅, Ρ‡ΠΈΡ˜Π° содрТина Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° Π²Π°ΠΊΠ°:

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

Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ°Ρ‚Π΅ Π²Ρ‡ΠΈΡ‚Π°Π½ΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Python скрипти, ΠΈΠΌΠ΅Π½ΡƒΠ²Π°Π½ Python ΠΌΠΎΠ΄ΡƒΠ» сС ΠΏΠ΅Ρ‡Π΅ ΠΈ XML конфигурациска Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. Π‘Π»Π΅Π΄Π½ΠΈΠΎΡ‚ Ρ‡Π΅ΠΊΠΎΡ€ Π΅ Π΄Π° Π³ΠΈ користитС ΠΎΠ²ΠΈΠ΅ скрипти Π·Π° Π΄Π° ја ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° ns-3 ΠΏΠΎ ваш ΠΈΠ·Π±ΠΎΡ€. Достапни сС Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Ρ†Π΅Π»ΠΈ Π·Π° ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅:

  1. ns-3.29: ΠΌΠΎΠ΄ΡƒΠ» ΡˆΡ‚ΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π° Π½Π° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ; ќС ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ слични Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π²ΠΎ tarball;

  2. ns-3-dev: сличСн ΠΌΠΎΠ΄ΡƒΠ», Π½ΠΎ со ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ΠΊΠΎΠ΄ ΠΎΠ΄ Ρ€Π°Π·Π²ΠΎΡ˜Π½ΠΎΡ‚ΠΎ стСбло;

  3. ns-Π°Π»ΠΈΠ½ΠΎΠ½-3.29: ΠœΠΎΠ΄ΡƒΠ» кој Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π΄Ρ€ΡƒΠ³ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Π½Π°ΡΠΎΡ‡ΡƒΠ²Π°ΡšΠ΅ Π½Π° кликањС ΠΈ Π»ΡƒΠ»ΠΊΠ° Π·Π° ΡΠΈΠΌΡƒΠ»Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΌΡ€Π΅ΠΆΠ°, Openflow Π·Π° ns-3.

  4. ns-3-Π°Π»ΠΈΠ½ΠΎΠ½: слично Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π·Π° издавањС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΎΡ‚ сС Π²ΠΎ Π΅Π΄Π½ΠΎ, Π½ΠΎ Π·Π° ΠΊΠΎΠ΄ Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜.

Π˜ΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌ
ΠšΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ β€” ΠΌΠΎΠ΄ΡƒΠ»Π°Ρ€Π½Π° софтвСрска Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ Ρ€ΡƒΡ‚Π΅Ρ€ΠΈ.

Openflow Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со процСсот Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ прСнСсСни ΠΏΡ€Π΅ΠΊΡƒ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ‡Π½Π° ΠΌΡ€Π΅ΠΆΠ° со Ρ€ΡƒΡ‚Π΅Ρ€ΠΈ ΠΈ ΠΏΡ€Π΅ΠΊΠΈΠ½ΡƒΠ²Π°Ρ‡ΠΈ, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ˜ΡœΠΈ ΠΌΡ€Π΅ΠΆΠ½Π° Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π° со софтвСр.

Π’Π΅ΠΊΠΎΠ²Π½Π°Ρ‚Π° слика Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ (Π½Π΅ΠΈΠ·Π΄Π°Π΄Π΅Π½) ns-3 ΠΌΠΎΠΆΠ΅ Π΄Π° сС најдС Π½Π°:https://gitlab.com/nsnam/ns-3-dev.git.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Π°Ρ‚ Π΄Π° Π³ΠΈ Π·Π°Π΄Ρ€ΠΆΠ°Ρ‚ ΠΎΠ²ΠΈΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° Π²ΠΎ конзистСнтСн Ρ€Π°Π±ΠΎΡ‚Π΅Π½ рСдослСд, Π½ΠΎ Ρ‚ΠΈΠ΅ сС Π²ΠΎ областа Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ ΠΈ содрТат нСобјавСн ΠΊΠΎΠ΄, ΠΏΠ° Π°ΠΊΠΎ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚Π΅ Π΄Π° користитС Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π°Ρˆ ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π³ΠΎ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ со ΠΏΡ€Π΅Π»ΠΈΡΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° списокот со ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° ΠΈΠ»ΠΈ со одСњС Π½Π° Π²Π΅Π±-страницата ns-3 Releases:https://www.nsnam.org/releases/ ΠΈ ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ²Π°ΡšΠ΅ Π½Π° врската со Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°. Π’ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ќС ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌΠ΅ со ns-3.29.

Π‘Π΅Π³Π°, Π·Π° Π΄Π° Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅ ns-3 ΡˆΡ‚ΠΎ Π½ΠΈ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ, ќС ја користимС Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅. Π”Π° ΠΊΠ°ΠΆΠ΅ΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π²ΠΎΠ²Π΅Π΄Π½ΠΈ Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ Π·Π° Π΄Π΅Π»ΠΎΡ‚ΠΎ ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅.

Bake Ρ€Π°Π±ΠΎΡ‚ΠΈ со Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡ€ΠΈ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΈΠ·Π²ΠΎΡ€ ΠΈ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°. ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ со ΡƒΠΏΠ°Ρ‚ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±ΠΈΠ½Π°Ρ€Π½ΠΎΡ‚ΠΎ, Π½ΠΎ Π°ΠΊΠΎ сакатС Π΄Π° сС ΠΊΠ°Π½Π΄ΠΈΠ΄ΠΈΡ€Π° ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅ Π½Π΅ ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π²ΠΎ кој Π΅ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Π½, ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡Π»ΠΈΠ²ΠΎ Π΅ Π΄Π° сС Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎ сС ΠΏΠ΅Ρ‡Π΅ Π΄ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΠ°Ρ‚Π΅ΠΊΠ° (ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° PATH), Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ слСдува (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Linux bash shell). ΠžΠ΄Π΅Ρ‚Π΅ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ β€žbakeβ€œ ΠΈ ΠΏΠΎΡ‚ΠΎΠ° поставСтС Π³ΠΈ слСднитС ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина:

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

Ова ќС ја постави ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΠ΅Ρ‡Π΅.py Π΄ΠΎ ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π½Π° школка ΠΈ ќС ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π΄Π° Π³ΠΈ Π½Π°Ρ˜Π΄Π°Ρ‚ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ создал сС ΠΏΠ΅Ρ‡Π΅. Π’ΠΎ Π½Π΅ΠΊΠΎΠΈ случаи Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° сС ΠΏΠ΅Ρ‡Π΅, поставкитС Π·Π° PATH ΠΈ PYTHONPATH опишани ΠΏΠΎΠ³ΠΎΡ€Π΅ Π½Π΅ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ, Π½ΠΎ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Π°Ρ‚Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° ns-3-allinone (со Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ) ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π±Π°Ρ€Π°.

ΠžΠ΄Π΅Ρ‚Π΅ Π²ΠΎ Π²Π°ΡˆΠΈΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΈ внСсСтС Π³ΠΎ слСдново Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°:

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

Π‘Π»Π΅Π΄Π½ΠΎ ќС ΠΏΡ€Π°ΡˆΠ°ΠΌΠ΅ ΠŸΠ΅Ρ‡Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π°Π»Π°Ρ‚ΠΊΠΈ Π·Π° Π΄Π° Π³ΠΈ Π²Ρ‡ΠΈΡ‚Π°ΠΌΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ. Π‘ΠΈΡ€Π°Ρ˜Ρ‚Π΅:

$ ./bake.py check

Π’Ρ€Π΅Π±Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π΅ΡˆΡ‚ΠΎ ΠΊΠ°ΠΊΠΎ слСдново:

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

ОсобСно, Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ Π·Π° ΠΏΡ€ΠΈΠΊΠ°Ρ‡ΡƒΠ²Π°ΡšΠ΅ ΠΊΠ°ΠΊΠΎ Mercurial, CVS, Git ΠΈ Bazaar сС Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΈ Π²ΠΎ овој Ρ‡Π΅ΠΊΠΎΡ€ бидСјќи Π½ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π°Π°Ρ‚ Π΄Π° Π³ΠΎ Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ΠΊΠΎΠ΄ΠΎΡ‚. Π’ΠΎ ΠΎΠ²Π°Π° Ρ„Π°Π·Π°, ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ нСдостасуваат Π½Π° Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π²Π°ΡˆΠΈΠΎΡ‚ систСм (Π°ΠΊΠΎ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ) ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ со Π²Π°ΡˆΠΈΠΎΡ‚ систСмски администратор Π·Π° помош.

Π‘Π»Π΅Π΄Π½ΠΎ, ΠΎΠ±ΠΈΠ΄Π΅Ρ‚Π΅ сС Π΄Π° Π³ΠΎ ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Ρ‚Π΅ софтвСрот:

$ ./bake.py download

Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ Π½Π΅ΡˆΡ‚ΠΎ ΠΊΠ°ΠΊΠΎ:

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

Ова ќС Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ΅Π½ΠΈ Ρ‚Ρ€ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈ. Π‘Π΅Π³Π° ΠΎΠ΄Π΅Ρ‚Π΅ Π²ΠΎ ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΈ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ls; Π’Ρ€Π΅Π±Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅:

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

Π‘Π΅Π³Π° стС ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π΄Π° ја ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° ns-3.

3.4 Π‘ΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ ns-3

Како ΠΈ со ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅Ρ‚ΠΎ Π½Π° ns-3, ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ ns-3. Π“Π»Π°Π²Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° ΡˆΡ‚ΠΎ сакамС Π΄Π° ја нагласимС Π΅ Π΄Π΅ΠΊΠ° ns-3 Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ со помош Π½Π° Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° Wafопишано ΠΏΠΎΠ΄ΠΎΠ»Ρƒ. ΠŸΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ корисници ќС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со Waf, Π½ΠΎ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΈ скрипти ΠΊΠΎΠΈ ќС Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ послоТСни изданија. Π—Π°Ρ‚ΠΎΠ° Π²Π΅ ΠΌΠΎΠ»Π°ΠΌ, ΠΏΡ€Π΅Π΄ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ Π·Π° Waf, ПоглСдни build.py ΠΈ ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅ со сС ΠΏΠ΅Ρ‡Π΅.

3.4.1 Π—Π³Ρ€Π°Π΄Π° со build.py

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅! Овој Ρ‡Π΅ΠΊΠΎΡ€ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π΅ достапСн само ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡ€Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Π°Ρ€Ρ…ΠΈΠ²Π°Ρ‚Π° Π΄ΠΎΠ±ΠΈΠ΅Π½Π° ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ опишано ΠΏΠΎΠ³ΠΎΡ€Π΅; ΠΈ Π½Π΅ сС ΠΏΡ€Π΅Π·Π΅ΠΌΠ° ΠΏΡ€Π΅ΠΊΡƒ git ΠΈΠ»ΠΈ bake.

Кога Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со Π°Ρ€Ρ…ΠΈΠ²Π° Π·Π° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅ Ρ‚Π°Ρ€Π±ΠΎΠ»Π²ΠΎ ns-3-Π°Π»ΠΈΠ½ΠΎΠ½ ΠŸΠΎΡΡ‚ΠΎΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Π° скрипта ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ олСсни ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈΡ‚Π΅. Π‘Π΅ Π²ΠΈΠΊΠ° build.py. Оваа ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ќС Π³ΠΎ постави ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π·Π° вас Π½Π° Π½Π°Ρ˜ΠΊΠΎΡ€ΠΈΡΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½. Π‘Π΅ΠΏΠ°ΠΊ, ΠΈΠΌΠ°Ρ˜Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π΄Π΅ΠΊΠ° ΠΏΠΎΠ½Π°ΠΏΡ€Π΅Π΄Π½ΠΎΡ‚ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° со ns-3 ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° сопствСниот систСм Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° ns-3, Waf, кој ќС Π±ΠΈΠ΄Π΅ Π²ΠΎΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΠ΄ΠΎΡ†Π½Π° Π²ΠΎ ΠΎΠ²Π° упатство.

Ако стС ΠΏΡ€Π΅Π·Π΅ΠΌΠ°Π»Π΅ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Ρ‚Π°Ρ€Π±ΠΎΠ», ΠΏΠΎΡ‚ΠΎΠ° Π²ΠΎ Π²Π°ΡˆΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ~/Ρ€Π°Π±ΠΎΡ‚Π΅Π½ простор Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ со ΠΈΠΌΠ΅ Π½Π΅ΡˆΡ‚ΠΎ слично ns-Π°Π»ΠΈΠ½ΠΎΠ½-3.29. ВнСсСтС Π³ΠΎ слСдново:

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

Кога ќС сС ΠΏΠΎΠ²ΠΈΠΊΠ°Π°Ρ‚ build.py ΠšΠΎΡ€ΠΈΡΡ‚Π΅Π²ΠΌΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија Π·Π° Π΄Π° Π³ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ ΠΈ тСстовитС користСни Π²ΠΎ ΠΎΠ²Π° упатство, ΠΊΠΎΠΈ Π½Π΅ сС стандардно ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ Π²ΠΎ ns-3. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π³ΠΈ Π³Ρ€Π°Π΄ΠΈ ΠΈ ситС достапни ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. ΠŸΠΎΡ‚ΠΎΠ°, Π°ΠΊΠΎ сакатС, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ns-3 Π±Π΅Π· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстови ΠΈΠ»ΠΈ Π΄Π° исклучитС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΊΠΎΠΈ Π½Π΅ сС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π·Π° Π²Π°ΡˆΠ°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π°.

ЌС Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΈΠ·Π»Π΅Π·Π½ΠΈ ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΎΠ΄ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ°Π½ΠΈ ΠΎΠ΄ скриптата Π΄ΠΎΠ΄Π΅ΠΊΠ° Π³ΠΈ Π³Ρ€Π°Π΄ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Π΄Π΅Π»ΠΎΠ²ΠΈ ΡˆΡ‚ΠΎ стС Π³ΠΈ Π²Ρ‡ΠΈΡ‚Π°Π»Π΅. ΠŸΡ€Π²ΠΎ сцСнариото ќС сС ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° Π³ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Π°Π½ΠΈΠΌΠ°Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π΅Ρ‚Π°Π½ΠΈΠΌ, ΠΏΠΎΡ‚ΠΎΠ° Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° Π²Ρ€Π·ΡƒΠ²Π°ΡšΠ΅ 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 ΠΌΠΎΠΆΠ΅ Π΄Π° сС состави со Π°Π»Π°Ρ‚ΠΊΠ° сС ΠΏΠ΅Ρ‡Π΅ Π½Π΅ Π½Π° ситС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, ќС сС појави Π²Π°ΠΊΠ²Π° ΠΏΠΎΡ€Π°ΠΊΠ°:

>> 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, ΠΈΠ»ΠΈ Π°Π»Π°Ρ‚ΠΊΠ° сС ΠΏΠ΅Ρ‡Π΅. ОвиС Π°Π»Π°Ρ‚ΠΊΠΈ сС корисни Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ ns-3 ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ΡΡƒΡˆΠ½ΠΎΡΡ‚, Π·Π° Π΄Π° сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ, Ρ‚ΠΈΠ΅ ја ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Waf ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ns-3. Waf инсталиран со ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ ns-3. ΠŸΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ корисници Π±Ρ€Π·ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½ΡƒΠ²Π°Π°Ρ‚ Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ ΠΈ ΡΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π½Π° ns-3 Waf. Π—Π½Π°Ρ‡ΠΈ, Π·Π° Π΄Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅, ΠΎΠ΄Π΅Ρ‚Π΅ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ns-3 ΡˆΡ‚ΠΎ ΠΏΡ€Π²ΠΈΡ‡Π½ΠΎ стС Π³ΠΎ создалС.

Ова Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ Π΅ строго ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ, Π½ΠΎ ќС Π±ΠΈΠ΄Π΅ корисно ΠΌΠ°Π»ΠΊΡƒ Π΄Π° сС Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π½Π°Π·Π°Π΄ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚. Π’Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎ Π½Π°Ρ˜ΠΊΠΎΡ€ΠΈΡΠ½Π°Ρ‚Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π΅ Π΄Π° ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ, стС Π³ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π»Π΅ Π²Π°ΡˆΠΈΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ. АјдС Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ Π²ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π·Π° создавањС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° Π³Ρ€Π°Π΄Π±Π°. Π—Π° Π΄Π° ΠΌΡƒ ΠΎΠ±Ρ˜Π°ΡΠ½ΠΈΡ‚Π΅ Π½Π° Waf Π΄Π΅ΠΊΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€Π°Π²ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈ изданија ΠΊΠΎΠΈ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстови, ќС Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ слСднитС ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

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

Ова ќС Π·Π°ΠΏΠΎΡ‡Π½Π΅ Waf Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ (Π·Π° ваша погодност). ΠŸΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° сС чисти ΠΎΠ΄ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°, ΠΎΠ²Π° ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π½Π΅ Π΅ строго Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π΅ Π΄ΠΎΠ±Ρ€Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° (исто Ρ‚Π°ΠΊΠ° Π²ΠΈΠ΄Π΅Ρ‚Π΅ Π³ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° ΠΏΠΎΠ΄ΠΎΠ»Ρƒ); ΠΎΠ²Π° ќС Π³ΠΈ ΠΈΠ·Π±Ρ€ΠΈΡˆΠ΅ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ со ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ Π»ΠΎΡ†ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ/. Кога ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π΅ Ρ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ ΠΈ систСмот Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π³ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ зависности, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠ·Π»Π΅Π· сличСн Π½Π° слСдново:

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

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

Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π³ΠΎ послСдниот Π΄Π΅Π» ΠΎΠ΄ списокот ΠΏΠΎΠ³ΠΎΡ€Π΅. НСкои ΠΎΠΏΡ†ΠΈΠΈ ns-3 Π½Π΅ сС стандардно ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π±Π°Ρ€Π°Π°Ρ‚ систСмска ΠΏΠΎΠ΄Π΄Ρ€ΡˆΠΊΠ° Π·Π° Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° Π΄Π° сС ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈ XmlTo, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ присутна Π½Π° систСмот libxml-2.0. Ако ΠΎΠ²Π°Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ½Π°Ρ˜Π΄Π΅Π½Π° ΠΈ соодвСтната Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ns-3 Π½Π΅ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π°, ќС сС ΠΏΡ€ΠΈΠΊΠ°ΠΆΠ΅ ΠΏΠΎΡ€Π°ΠΊΠ°. Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, Π·Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° сС користи ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° sudo Π΄Π° Π³ΠΎ поставитС Π±ΠΈΡ‚ΠΎΡ‚ suid β€žΠΏΠΎΡΡ‚Π°Π²Π΅Ρ‚Π΅ Π³ΠΎ ID Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° ΠΏΡ€ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅β€œ Π·Π° ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ Π½Π΅ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΎ ΠΈ Π·Π°Ρ‚ΠΎΠ° ΠΎΠ²Π°Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° сС ΠΏΠΎΡ˜Π°Π²ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ β€žΠ½Π΅ Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½Π°β€œ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ листа Π½Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ, користСтС Waf со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ --check-config.

Π‘Π΅Π³Π° Π΄Π° сС Π²Ρ€Π°Ρ‚ΠΈΠΌΠ΅ ΠΈ Π΄Π° сС ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ ΡˆΡ‚ΠΎ содрТи ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстови.

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

БистСмот Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° сСга Π΅ поставСн ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π²Π΅Ρ€Π·ΠΈΠΈ Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ ns-3 со Сдноставно Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅:

$ ./waf

Π§Π΅ΠΊΠΎΡ€ΠΈΡ‚Π΅ ΠΏΠΎΠ³ΠΎΡ€Π΅ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π²Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ˜Π° Π΄Π²Π°ΠΏΠ°Ρ‚ΠΈ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ Π΄Π΅Π» ΠΎΠ΄ систСмот ns-3, Π½ΠΎ сСга Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ја ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ ΠΊΠΎΠ΄.

Π—Π° Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ кој ΠΏΡ€ΠΎΡ„ΠΈΠ» Π΅ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π·Π° Π΄Π°Π΄Π΅Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚, постои ΠΊΠΎΠΌΠ°Π½Π΄Π°:

$ ./waf --check-profile 
Waf: Entering directory `/path/to/ns-3-allinone/ns-3.29/build' 
Build profile: debug

Π“ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΎΡ‚ΠΎ сцСнарио build.py ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ --enable-examples ΠΈ --enable-tests, Π½ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Waf Π½Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ²Π° Π½Π΅ΠΌΠ° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ:

$ ./build.py --disable-python

Ρ€Π΅Π°ΠΊΡ†ΠΈΡ˜Π°Ρ‚Π° ќС Π±ΠΈΠ΄Π΅ Π²Π°ΠΊΠ°:

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

Π‘Π΅ΠΏΠ°ΠΊ, ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½ΠΈΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ - - ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ€Π΅ΠΊΡƒ ΠΌΠ°Ρ„Ρ‚Π°ΠΏΠ° намСсто Π³ΠΎΡ€Π΅Π½Π°Π²Π΅Π΄Π΅Π½ΠΎΡ‚ΠΎ ќС Ρ€Π°Π±ΠΎΡ‚ΠΈ слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π°:

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

бидСјќи ја Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ./waf ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ˜ --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-errorβ€œ ΠΈ ΠΌΠΎΡ€Π° Π΄Π° сС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°:

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

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΈΠ»ΠΈ склопСтС

НСкои ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Waf ΠΈΠΌΠ°Π°Ρ‚ Π·Π½Π°Ρ‡Π΅ΡšΠ΅ само Π²ΠΎ Ρ„Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, Π° Π½Π΅ΠΊΠΎΠΈ сС Π²Π°Π»ΠΈΠ΄Π½ΠΈ само Π²ΠΎ Ρ„Π°Π·Π°Ρ‚Π° Π½Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ сакатС Π΄Π° Π³ΠΈ користитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π·Π° Π΅ΠΌΡƒΠ»Π°Ρ†ΠΈΡ˜Π° ns-3, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠΈΡ‚Π΅ поставката Π·Π° Π±ΠΈΡ‚ suid ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ sudo, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ опишано ΠΏΠΎΠ³ΠΎΡ€Π΅. Ова ќС Π³ΠΈ ΠΎΡ‚Ρ„Ρ€Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ Π½Π° Ρ‡Π΅ΠΊΠΎΡ€ΠΎΡ‚ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, ΠΈ Π½Π° Ρ‚ΠΎΡ˜ Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја слСднава ΠΊΠΎΠΌΠ°Π½Π΄Π°, која исто Ρ‚Π°ΠΊΠ° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстови.

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

Ако Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π° Waf ќС Π·Π°ΠΏΠΎΡ‡Π½Π΅ sudoΠ΄Π° Π³ΠΈ смСнитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ сокСт Π·Π° Π΅ΠΌΡƒΠ»Π°Ρ†ΠΈΡ˜Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΊΠΎΡ€Π΅Π½. Π’ΠΎ Waf ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ†ΠΈΠΈ достапни Π·Π° Ρ‡Π΅ΠΊΠΎΡ€ΠΈΡ‚Π΅ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°. Π—Π° Π΄Π° Π³ΠΈ истраТитС Π²Π°ΡˆΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΠΈ, внСсСтС:

$ ./waf --help

Π’ΠΎ слСдниот Π΄Π΅Π» ќС користимС Π½Π΅ΠΊΠΎΠΈ ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅.

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π½Π° собраниСто

Π’Π΅ΡœΠ΅ Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Waf Π·Π° склопови debug ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈ:

$ ./waf --build-profile=debug

ΠŸΠΎΡΡ‚ΠΎΠΈ ΠΈ срСдСн ΠΏΡ€ΠΎΡ„ΠΈΠ» Π½Π° ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅, ΠΏΠΎΡ€Π°ΠΊΠ°. ΠžΠΏΡ†ΠΈΡ˜Π° -d Π΅ синоним Π·Π° --build-profile. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° ја ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° ΠΏΡ€Π΅ΠΊΠΈΠ½ΡƒΠ²Π°Ρ‡ΠΈ Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π°, Ρ‚Π²Ρ€Π΄Π΅ΡšΠ° ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚:

Упатство Π·Π° ΠΌΡ€Π΅ΠΆΠ΅Π½ симулатор ns-3. ПоглавјС 3

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

Ако ΠΈΠΌΠ°Ρ‚Π΅ ΠΊΠΎΠ΄ ΡˆΡ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ само Π²ΠΎ ΠΎΠ΄Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°, користСтС Π³ΠΎ ΠΌΠ°ΠΊΡ€ΠΎΡ‚ΠΎ Π·Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ:

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

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ, Waf мСста Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°Π²Π΅Π΄Π΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΈΠ·Π»Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° -β€―-out, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

Π‘ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΎΠ²Π° со ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ лСсно Π΄Π° сС ΠΏΡ€Π΅Ρ„Ρ€Π»Π°Ρ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π°:

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

Π¨Ρ‚ΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ со повСќС склопови Π±Π΅Π· Π΄Π° ΠΌΠΎΡ€Π°Ρ‚Π΅ сСкој ΠΏΠ°Ρ‚ Π΄Π° Π³ΠΎ ΠΏΡ€Π΅ΠΏΠΈΡˆΡƒΠ²Π°Ρ‚Π΅ Π½Π°Ρ˜Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΡΠΊΠ»ΠΎΠΏΡƒΠ²Π°ΡšΠ΅. Кога ќС сС ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΡ‚Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΡ„ΠΈΠ», Waf ќС Π³ΠΎ состави само Ρ‚ΠΎΠ°, Π±Π΅Π· цСлосно Π΄Π° ΠΏΡ€Π΅ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π° сè.

Кога Π³ΠΈ ΠΌΠ΅Π½ΡƒΠ²Π°Ρ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° овој Π½Π°Ρ‡ΠΈΠ½, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π²Π½ΠΈΠΌΠ°Π²Π°Ρ‚Π΅ сСкој ΠΏΠ°Ρ‚ Π΄Π° Π³ΠΈ Π΄Π°Π²Π°Ρ‚Π΅ иститС ΠΎΠΏΡ†ΠΈΠΈ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°. Π”Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΠΆΠΈΠ²ΠΎΡ‚Π½Π°Ρ‚Π° срСдина ќС Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ:

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

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

ΠšΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΈ ΠΈ Π·Π½Π°ΠΌΠ΅Π½Ρ†Π°

Π’ΠΎ Π³ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Waf Π·Π° Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ ns-3 Π³ΠΎ користи ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ C++ ΠΎΠ΄ GCC ( g ++). Π‘Π΅ΠΏΠ°ΠΊ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ оној ΡˆΡ‚ΠΎ Π³ΠΎ користитС Waf C++ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€, со Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° CXX. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° C++ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ Clang, clang++,

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

На ист Π½Π°Ρ‡ΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Waf Π΄Π° сС користи дистрибуирана ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ дискцц:

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

ПовСќС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° distcc ΠΈ дистрибуираната ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°Ρ˜Π΄Π΅Ρ‚Π΅ Π½Π° страницата Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°. Π—Π° Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π·Π½Π°ΠΌΠ΅Π½Ρ†Π° Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ΠΎΡ‚ ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ns-3, користСтС ја ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° CXXFLAGS_EXTRA.

Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°

Waf ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи Π·Π° ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°ΡšΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ мСста Π½Π° систСмот. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΎ, ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ сС Π½Π°ΠΎΡ“Π°Π°Ρ‚ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ сС ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ, ΠΈ бидСјќи Waf ја Π·Π½Π°Π΅ Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΎΠ²ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ ΠΈΠ·Π²Ρ€ΡˆΠ½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Π½Π΅ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΈ инсталиратС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎ мСсто.

Ако корисницитС ΠΏΡ€Π΅Ρ‚ΠΏΠΎΡ‡ΠΈΡ‚Π°Π°Ρ‚ Π΄Π° инсталираат Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°, Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° ја ΠΈΠ·Π²Ρ€ΡˆΠ°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ./Π²Π°Ρ„ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Π΄Π½ΠΈΠΎΡ‚ прСфикс Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π΅ / usr / Π»ΠΎΠΊΠ°Π»Π½ΠΎΠ—Π°Ρ‚ΠΎΠ° ./Π²Π°Ρ„ ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜ ќС инсталира ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π²ΠΎ / usr / local / bin, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ / usr / local / lib ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ Π·Π° заглавија Π²ΠΎ /usr/local/include. ΠŸΡ€Π°Π²Π°Ρ‚Π° Π½Π° супСркорисницитС ΠΎΠ±ΠΈΡ‡Π½ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС постават со стандардСн прСфикс, Ρ‚Π°ΠΊΠ° ΡˆΡ‚ΠΎ Π±ΠΈ Π±ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° sudo ./waf ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜. Кога ќС сС стартува, Waf ΠΏΡ€Π²ΠΎ ќС ΠΈΠ·Π±Π΅Ρ€Π΅ Π΄Π° Π³ΠΈ користи сподСлСнитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°, Π° ΠΏΠΎΡ‚ΠΎΠ° ќС Π±Π°Ρ€Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎ ΠΏΠ°Ρ‚Π΅ΠΊΠ°Ρ‚Π° Π΄ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ Π²ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° срСдина. Π—Π½Π°Ρ‡ΠΈ, ΠΊΠΎΠ³Π° инсталиратС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° систСм, Π΄ΠΎΠ±Ρ€Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π΅ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ сС користат вистинскитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ†ΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π°Ρ‚ Π΄Π° инсталираат со Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ прСфикс со ΠΏΡ€Π΅Π΄Π°Π²Π°ΡšΠ΅ Π½Π° ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° --prefix, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

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

Ако ΠΏΠΎΠ΄ΠΎΡ†Π½Π°, ΠΏΠΎ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π°, корисникот ја внСсС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° ./waf, ќС сС користи прСфиксот /ΠΎΠΏΡ‚/Π»ΠΎΠΊΠ°Π»Π½ΠΎ.

Π’ΠΈΠΌ ./waf clean ΠΌΠΎΡ€Π° Π΄Π° сС користи ΠΏΡ€Π΅Π΄ Ρ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΡ‚ Π°ΠΊΠΎ ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ќС користи Waf ΠΏΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ прСфикс.

Π’Π°ΠΊΠ°, Π·Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° ns-3 Π½Π΅ΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π΄Π° сС Ρ˜Π°Π²ΡƒΠ²Π°Ρ‚Π΅ ./waf install. На ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ корисници Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌ Ρ‚Ρ€Π΅Π±Π° ΠΎΠ²Π°Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Waf ќС Π³ΠΈ собСрС Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°, Π½ΠΎ Π½Π° Π½Π΅ΠΊΠΎΠΈ корисници ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌ Π±ΠΈΠ΄Π΅ корисно Π°ΠΊΠΎ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ активности Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π° со ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ ns-3.

Π’Π°Ρ„ сингл

На Π½Π°Ρ˜Π²ΠΈΡΠΎΠΊΠΎΡ‚ΠΎ Π½ΠΈΠ²ΠΎ Π½Π° ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΡ‚ΠΎ Π΄Ρ€Π²ΠΎ ns-3, ΠΈΠΌΠ° само Π΅Π΄Π½Π° Waf скрипта. ΠžΡ‚ΠΊΠ°ΠΊΠΎ ќС ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅, ќС ΠΏΠΎΠΌΠΈΠ½Π΅Ρ‚Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Π²Ρ€Π΅ΠΌΠ΅ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ scratch/ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π»Π°Π±ΠΎΠΊΠΎ Π²ΠΎsrc/... Π° Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΠΊΠ°Π½Π΄ΠΈΠ΄ΠΈΡ€Π° Waf. ΠœΠΎΠΆΠ΅Ρ‚Π΅ само Π΄Π° сС сСтитС ΠΊΠ°Π΄Π΅ стС ΠΈ Π΄Π° Ρ‚Ρ€Ρ‡Π°Ρ‚Π΅ Waf ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ слСдува:

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

Π½ΠΎ ΠΎΠ²Π° ќС Π±ΠΈΠ΄Π΅ досадно ΠΈ склоно ΠΊΠΎΠ½ Π³Ρ€Π΅ΡˆΠΊΠΈ, ΠΏΠ° Π·Π°Ρ‚ΠΎΠ° ΠΈΠΌΠ° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π°. Π•Π΄Π΅Π½ Π²ΠΎΠΎΠ±ΠΈΡ‡Π°Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΅ Π΄Π° користитС ΡƒΡ€Π΅Π΄ΡƒΠ²Π°Ρ‡ Π½Π° тСкст ΠΊΠ°ΠΊΠΎ Π½Π° ΠΏΡ€ emacs ΠΈΠ»ΠΈ vim, Π²ΠΎ која сС ΠΎΡ‚Π²ΠΎΡ€Π°Π°Ρ‚ Π΄Π²Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π½ΠΈ сСсии, Π΅Π΄Π½Π°Ρ‚Π° сС користи Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° ns-3, Π° Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° сС користи Π·Π° ΡƒΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π²ΠΎΡ€Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄. Ако ΠΈΠΌΠ°Ρ‚Π΅ само Ρ‚Π°Ρ€Π±ΠΎΠ», Ρ‚ΠΎΠ³Π°Ρˆ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° Π½Π° ΠΎΠΊΠΎΠ»ΠΈΠ½Π°Ρ‚Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅:

$ 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 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)

Ова Π΅ Π²Π°ΠΆΠ½Π° ΠΏΠΎΡ€Π°ΠΊΠ° Π·Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ ΠΏΠ°Ρ“Π°ΡšΠ°, ΠΏΠ°Π΄ΠΎΠ²ΠΈ ΠΈΠ»ΠΈ Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° valgrind, ΡˆΡ‚ΠΎ ΡƒΠΊΠ°ΠΆΡƒΠ²Π° Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΠΊΠΎΠ΄ΠΎΡ‚ ΠΈΠ»ΠΈ нСкомпатибилност ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ ΠΈ ΠΊΠΎΠ΄ΠΎΡ‚.

ЌС Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΈΠΎΡ‚ ΠΈΠ·Π»Π΅Π· ΠΎΠ΄ Waf ΠΈ тСстСр кој Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° сСкој тСст, кој ќС ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΎΡ‚ΠΏΡ€ΠΈΠ»ΠΈΠΊΠ° Π²Π°ΠΊΠ°:

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

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

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

...

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

Оваа ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΠΈΡ‡Π½ΠΎ ја ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°Π°Ρ‚ корисницитС Π·Π° Π±Ρ€Π·ΠΎ Π΄Π° ΠΏΠΎΡ‚Π²Ρ€Π΄Π°Ρ‚ Π΄Π΅ΠΊΠ° Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° ns-3 Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π°. (Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° рСдослСдот Π½Π° Π»ΠΈΠ½ΠΈΠΈΡ‚Π΅ β€žPASS: ...β€œ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½, ΠΎΠ²Π° Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ. Она ΡˆΡ‚ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΅ Π΄Π΅ΠΊΠ° Π»ΠΈΠ½ΠΈΡ˜Π°Ρ‚Π° Π·Π° Ρ€Π΅Π·ΠΈΠΌΠ΅ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ ΠΎΠ΄ ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ΠΎΡ‚ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° ситС тСстови ΠΏΠΎΠΌΠΈΠ½Π°Π»Π΅; Π½ΠΈΡ‚Ρƒ Π΅Π΄Π΅Π½ тСст Π½Π΅ успСал ΠΈΠ»ΠΈ ΠΏΠ°Π΄Π½Π°Π».) И WafИ тСст.py ќС ја ΠΏΠ°Ρ€Π°Π»Π΅Π»ΠΈΠ·ΠΈΡ€Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½ΠΈΠ· достапнитС процСсорски Ρ˜Π°Π΄Ρ€Π° Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°.

3.6 Π˜Π·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° скриптата

ΠžΠ±ΠΈΡ‡Π½ΠΎ Π³ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΠΌΠ΅ скриптитС ΠΏΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° Waf. Ова ΠΌΡƒ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° систСмот Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π΄Π° осигура Π΄Π΅ΠΊΠ° ΠΏΠ°Ρ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° сподСлСнитС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сС ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ поставСни ΠΈ Π΄Π΅ΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ сС достапни Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ. Π—Π° Π΄Π° ја стартуватС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, Сдноставно користСтС Waf со ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ -β€―-run. АјдС Π΄Π° Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ ns-3 Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ΠΎΡ‚ Π½Π° сСприсутната ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π—Π΄Ρ€Π°Π²ΠΎ свСтотсо Π²Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° слСдново:

$ ./waf --run hello-simulator

Waf ΠΏΡ€Π²ΠΎ ќС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π΄Π°Π»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° ΠΈ ќС ја ΠΈΠ·Π³Ρ€Π°Π΄ΠΈ Π°ΠΊΠΎ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ. ΠŸΠΎΡ‚ΠΎΠ° Waf ќС ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° која Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π° слСдниот ΠΈΠ·Π»Π΅Π·.

Hello Simulator

БСкоја чСст! Π‘Π΅Π³Π° стС корисник Π½Π° ns-3!

Π¨Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²Π°ΠΌ Π°ΠΊΠΎ Π½Π΅ Π³ΠΈ Π²ΠΈΠ΄Π°ΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅?

Ако Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΏΠΎΡ€Π°ΠΊΠΈ WafΡˆΡ‚ΠΎ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π° Π΄Π΅ΠΊΠ° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π° Π΅ Π·Π°Π²Ρ€ΡˆΠ΅Π½Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π½ΠΎ Π½Π΅ Π³ΠΎ Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ β€žΠ—Π΄Ρ€Π°Π²ΠΎ ΡΠΈΠΌΡƒΠ»Π°Ρ‚ΠΎΡ€β€œ, Ρ‚ΠΎΠ³Π°Ρˆ постои моТност Π²ΠΎ Π΄Π΅Π»ΠΎΡ‚ [Build-with-Waf] Π΄Π° стС Π³ΠΎ ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΠ»Π΅ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ Π½Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈ, Π½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡˆΡ‚ΠΈ Π΄Π° сС Π²Ρ€Π°Ρ‚ΠΈ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ debug. Π¦Π΅Π»ΠΈΠΎΡ‚ ΠΈΠ·Π»Π΅Π· ΠΎΠ΄ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° ΡˆΡ‚ΠΎ сС користи Π²ΠΎ ΠΎΠ²Π° упатство користи ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ns-3 ΡˆΡ‚ΠΎ Π²Ρ€ΡˆΠΈ Π΅Π²ΠΈΠ΄Π΅Π½Ρ†ΠΈΡ˜Π° ΠΈ сС користи Π·Π° ΠΏΠ΅Ρ‡Π°Ρ‚Π΅ΡšΠ΅ Π½Π° сопствСни ΠΏΠΎΡ€Π°ΠΊΠΈ Π²ΠΎ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°. Π˜Π·Π»Π΅Π·ΠΎΡ‚ ΠΎΠ΄ ΠΎΠ²Π°Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° автоматски сС ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° ΠΊΠΎΠ³Π° сС ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΈΠΎΡ‚ ΠΊΠΎΠ΄ - Ρ‚ΠΎΡ˜ Π΅ β€žΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½β€œ. Ако Π½Π΅ Π³ΠΎ Π³Π»Π΅Π΄Π°Ρ‚Π΅ ΠΈΠ·Π»Π΅Π·ΠΎΡ‚ β€žHello Simulatorβ€œ, внСсСтС Π³ΠΎ слСдново:

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

Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ Waf Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° Π²Π΅Ρ€Π·ΠΈΠΈ Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ ns-3, ΠΊΠΎΠΈ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ тСстови. ΠŸΠΎΡ‚ΠΎΠ° Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ‚Π΅ΠΊΠΎΠ²Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π·Π° ΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΡƒΠ²Π°ΡšΠ΅ Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ со ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅

$ ./waf

Π‘Π΅Π³Π° Π°ΠΊΠΎ ја стартуватС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π΄Ρ€Π°Π²ΠΎ-симулатор, Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π³ΠΎ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°Π½ΠΈΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚.

3.6.1 АргумСнти Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија

Π—Π° Π΄Π° Π³ΠΈ прСнСсСтС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ns-3, користСтС ја слСднава шСма:

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

Π—Π°ΠΌΠ΅Π½Π΅Ρ‚Π΅ Π΄ΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΈ Π΄ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅. АргумСнт -β€―-command-template Π·Π° Waf Π²ΠΎ ΡΡƒΡˆΡ‚ΠΈΠ½Π° Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ Π·Π° Π³Ρ€Π°Π΄Π΅ΡšΠ΅ Π½Π° вистинската ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° линија Waf сС користи Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°. Waf ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡƒΠ²Π° Π΄Π°Π»ΠΈ ΠΈΠ·Π³Ρ€Π°Π΄Π±Π°Ρ‚Π° Π΅ Π·Π°Π²Ρ€ΡˆΠ΅Π½Π°, Π³ΠΈ поставува ΠΏΠ°Ρ‚Π΅ΠΊΠΈΡ‚Π΅ Π½Π° сподСлСната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΏΠΎΡ‚ΠΎΠ° Π³ΠΎ користи ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΈΠΎΡ‚ шаблон Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π° линија ΠΈ Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΡƒΠ²Π° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° Π»ΠΎΠΊΠ°Π»ΠΎΡ‚ %s Π·Π° ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ½Π°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°. Ако смСтатС Π΄Π΅ΠΊΠ° ΠΎΠ²Π°Π° синтакса Π΅ ΠΊΠΎΠΌΠΏΠ»ΠΈΡ†ΠΈΡ€Π°Π½Π°, постои поСдноставна Π²Π΅Ρ€Π·ΠΈΡ˜Π° која ја Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ns-3 ΠΈ Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΡ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π²ΠΎ Π΅Π΄ΠΈΠ½Π΅Ρ‡Π½ΠΈ Π½Π°Π²ΠΎΠ΄Π½ΠΈΡ†ΠΈ:

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

Π”Ρ€ΡƒΠ³ особСно корисСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ сСлСктивно водСњС Π½Π° тСст ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ. Π”Π° прСтпоставимС Π΄Π΅ΠΊΠ° постои тСст ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π°Ρ€Π΅Ρ‡Π΅Π½ mytest (Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ Π½Π΅ постои). ΠŸΠΎΠ³ΠΎΡ€Π΅ ја користСвмС скриптата ./test.py Π·Π° Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ тСстови ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ, ΡˆΡ‚ΠΎ ΠΏΠΎΡΡ‚ΠΎΡ˜Π°Π½ΠΎ ја ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ тСст-Π²ΠΎΠ·Π°Ρ‡. ΠˆΠ°Π²Π΅Ρ‚Π΅ сС тСст-Π²ΠΎΠ·Π°Ρ‡ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ Π΅Π΄Π΅Π½ тСст:

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

АргумСнтитС ќС Π±ΠΈΠ΄Π°Ρ‚ прСнСсСни Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° тСст-Π²ΠΎΠ·Π°Ρ‡. Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ mytest Π½Π΅ постои, ќС сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΏΠΎΡ€Π°ΠΊΠ° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠ°. Π—Π° Π΄Π° Π³ΠΈ испСчатитС достапнитС ΠΎΠΏΡ†ΠΈΠΈ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅, внСсСтС:

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

3.6.2 Π”Π΅Π±Π°Π³ΠΈΡ€Π°ΡšΠ΅

Π—Π° Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ ns-3 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³Π° Π°Π»Π°Ρ‚ΠΊΠ°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ Π΄Π΅Π±Π°Π³Π΅Ρ€ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π³Π΄Π±) ΠΈΠ»ΠΈ Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π°Π»Π³Ρ€ΠΈΠ½Π΄), користСтС слична Ρ„ΠΎΡ€ΠΌΠ° -β€―-command-template = "…". На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ Π΄Π΅Π±Π°Π³Π΅Ρ€ΠΎΡ‚ Π³Π΄Π± Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° hello-simulator ns-3 со Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ:

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

Π—Π°Π±Π΅Π»Π΅ΠΆΠ΅Ρ‚Π΅ Π΄Π΅ΠΊΠ° ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ns-3 Π΄ΠΎΠ°Ρ“Π° со Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ -β€―-run, ΠΈ Π°Π»Π°Ρ‚ΠΊΠ°Ρ‚Π° Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ (Ρ‚ΡƒΠΊΠ° Π³Π΄Π±) Π΅ ΠΏΡ€Π²ΠΈΠΎΡ‚ Π·Π½Π°ΠΊ Π²ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΡ‚ -β€―-command-template. ΠžΠΏΡ†ΠΈΡ˜Π° -β€―-args ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π° Π³Π΄Π±Π΄Π΅ΠΊΠ° остатокот ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ‚Π° линија ΠΏΡ€ΠΈΠΏΠ°Ρ“Π° Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° β€žΠΏΠΎΠ½ΠΈΡΠΊΠ°β€œ. (НСкои Π²Π΅Ρ€Π·ΠΈΠΈ Π³Π΄Π± Π½Π΅ ја Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ ΠΎΠΏΡ†ΠΈΡ˜Π°Ρ‚Π° -β€―-args. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, отстранСтС Π³ΠΈ програмскитС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΎΠ΄ -β€―-command-template ΠΈ користСтС Π³ΠΎ мноТСството ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π³Π΄Π± Π»Π°ΠΊΠΎΠ²ΠΈ.) МоТСмС Π΄Π° Π³ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ овој Ρ€Π΅Ρ†Π΅ΠΏΡ‚ ΠΈ ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΈΠΎΡ‚ Π·Π° Π΄Π° Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠ΅ тСстот ΠΏΠΎΠ΄ Π΄Π΅Π±Π°Π³Π΅Ρ€ΠΎΡ‚:

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

3.6.3 Π Π°Π±ΠΎΡ‚Π΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ

Waf Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС лансира ΠΎΠ΄ Π½Π΅Π³ΠΎΠ²Π°Ρ‚Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° Π²Ρ€Π²ΠΎΡ‚ Π½Π° Π΄Ρ€Π²ΠΎΡ‚ΠΎ ns-3. Оваа ΠΏΠ°ΠΏΠΊΠ° станува Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ќС Π±ΠΈΠ΄Π°Ρ‚ напишани ΠΈΠ·Π»Π΅Π·Π½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ. Но, ΡˆΡ‚ΠΎ Π°ΠΊΠΎ сакатС Π΄Π° Π³ΠΈ Ρ‡ΡƒΠ²Π°Ρ‚Π΅ ΠΎΠ²ΠΈΠ΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΡ‚ΠΎ Π΄Ρ€Π²ΠΎ ns-3? ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ -β€―-cwd:

$ ./waf --cwd=...

МоТСби ќС Π²ΠΈ Π±ΠΈΠ΄Π΅ ΠΏΠΎΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΄Π° Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ ΠΈΠ·Π»Π΅Π·Π½ΠΈΡ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π²ΠΎ Π²Π°ΡˆΠΈΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ. Π’ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜, слСдната ΠΈΠ½Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½Π° Π°ΠΊΡ†ΠΈΡ˜Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅:

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

Оваа Π΄Π΅ΠΊΠΎΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π³ΠΎ Π·Π°Ρ‡ΡƒΠ²ΡƒΠ²Π° Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ, ΠΎΠ΄ΠΈ Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ WafΠ° ΠΏΠΎΡ‚ΠΎΠ° ΡƒΠΏΠ°Ρ‚ΡƒΠ²Π° Waf Π·Π° Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΎΡ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π½Π°Π·Π°Π΄ Π²ΠΎ Ρ‚Π΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π΅Π½ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌ Π·Π°Ρ‡ΡƒΠ²Π°Π½ ΠΏΡ€Π΅Π΄ Π΄Π° ја стартуватС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°. Π“ΠΎ спомСнувамС Ρ‚ΠΈΠΌΠΎΡ‚ -β€―-cwd Π—Π° комплСтност, ΠΏΠΎΠ²Π΅ΡœΠ΅Ρ‚ΠΎ корисници Сдноставно Π³ΠΎ стартуваат Waf ΠΎΠ΄ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΎΡ‚ Π½Π° највисоко Π½ΠΈΠ²ΠΎ ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π°Ρ‚ ΠΈΠ·Π»Π΅Π·Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Ρ‚Π°ΠΌΡƒ.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒΠ²Π°: ПоглавјС 4

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€