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, Π½ΠΎ Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ ΡΠ°ΠΊΠ°Π°Ρ ΡΠ΅Π»ΠΎΡΠ½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°, ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π²ΠΈΠΊΠΈ ΡΡΠΎ Π²ΠΊΠ»ΡΡΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠΎ ΠΌΠ½ΠΎΠ³Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈ ΡΠΎΠ²Π΅ΡΠΈ ΠΈ ΡΡΠΈΠΊΠΎΠ²ΠΈ. ΠΠ΄Π½Π° ΡΠ°ΠΊΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠ° Π΅ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ°, ΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΠ° Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΈ Π½Π°:
ΠΠ΅Π»ΠΎΡ βΠΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈβ Π½Π° ΠΎΠ²Π° Π²ΠΈΠΊΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ²Π° ΠΊΠΎΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π½Π° Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π·Π° ns-3 ΠΈ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° Π³ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π·Π° Π½ΠΈΠ²Π½ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ Π½Π° Π²ΠΎΠΎΠ±ΠΈΡΠ°Π΅Π½ΠΈΡΠ΅ Π²ΠΊΡΡΠΎΠ²ΠΈ Π½Π° Linux ΠΈΠ»ΠΈ macOS.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΈΡΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΎΠ²Π°Π° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΡΠ° ΠΈΡΡΡΠ°ΠΆΠΈΡΠ΅ Π²ΠΈΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° 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 Π½Π°
ΠΠ°ΡΠ»Π΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ°ΡΠ° Π½Π° 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 ΠΏΠΎ Π²Π°Ρ ΠΈΠ·Π±ΠΎΡ. ΠΠΎΡΡΠ°ΠΏΠ½ΠΈ ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΡΠ΅Π»ΠΈ Π·Π° ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΡΠ²Π°ΡΠ΅:
-
ns-3.29: ΠΌΠΎΠ΄ΡΠ» ΡΡΠΎ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ° Π½Π° ΠΎΡΠ»ΠΎΠ±ΠΎΠ΄ΡΠ²Π°ΡΠ΅ΡΠΎ; ΡΠ΅ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π²ΠΎ tarball;
-
ns-3-dev: ΡΠ»ΠΈΡΠ΅Π½ ΠΌΠΎΠ΄ΡΠ», Π½ΠΎ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ ΠΎΠ΄ ΡΠ°Π·Π²ΠΎΡΠ½ΠΎΡΠΎ ΡΡΠ΅Π±Π»ΠΎ;
-
ns-Π°Π»ΠΈΠ½ΠΎΠ½-3.29: ΠΠΎΠ΄ΡΠ» ΠΊΠΎΡ Π²ΠΊΠ»ΡΡΡΠ²Π° Π΄ΡΡΠ³ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ Π½Π°ΡΠΎΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠ»ΠΈΠΊΠ°ΡΠ΅ ΠΈ Π»ΡΠ»ΠΊΠ° Π·Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ°, Openflow Π·Π° ns-3.
-
ns-3-Π°Π»ΠΈΠ½ΠΎΠ½: ΡΠ»ΠΈΡΠ½ΠΎ Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΎΡ ΡΠ΅ Π²ΠΎ Π΅Π΄Π½ΠΎ, Π½ΠΎ Π·Π° ΠΊΠΎΠ΄ Π·Π° ΡΠ°Π·Π²ΠΎΡ.
ΠΠΌΠ°ΡΡΠ΅ Π½Π° ΡΠΌ
ΠΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ β ΠΌΠΎΠ΄ΡΠ»Π°ΡΠ½Π° ΡΠΎΡΡΠ²Π΅ΡΡΠΊΠ° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΡΡΠ΅ΡΠΈ.
Openflow Π΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΏΡΠ΅Π½Π΅ΡΠ΅Π½ΠΈ ΠΏΡΠ΅ΠΊΡ ΠΏΠΎΠ΄Π°ΡΠΎΡΠ½Π° ΠΌΡΠ΅ΠΆΠ° ΡΠΎ ΡΡΡΠ΅ΡΠΈ ΠΈ ΠΏΡΠ΅ΠΊΠΈΠ½ΡΠ²Π°ΡΠΈ, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΡΡΠΈ ΠΌΡΠ΅ΠΆΠ½Π° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° ΡΠΎ ΡΠΎΡΡΠ²Π΅Ρ.
Π’Π΅ΠΊΠΎΠ²Π½Π°ΡΠ° ΡΠ»ΠΈΠΊΠ° Π·Π° ΡΠ°Π·Π²ΠΎΡ (Π½Π΅ΠΈΠ·Π΄Π°Π΄Π΅Π½) ns-3 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΡΠ΄Π΅ Π½Π°:
ΠΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°Π°Ρ Π΄Π° Π³ΠΈ Π·Π°Π΄ΡΠΆΠ°Ρ ΠΎΠ²ΠΈΠ΅ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° Π²ΠΎ ΠΊΠΎΠ½Π·ΠΈΡΡΠ΅Π½ΡΠ΅Π½ ΡΠ°Π±ΠΎΡΠ΅Π½ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄, Π½ΠΎ ΡΠΈΠ΅ ΡΠ΅ Π²ΠΎ ΠΎΠ±Π»Π°ΡΡΠ° Π·Π° ΡΠ°Π·Π²ΠΎΡ ΠΈ ΡΠΎΠ΄ΡΠΆΠ°Ρ Π½Π΅ΠΎΠ±ΡΠ°Π²Π΅Π½ ΠΊΠΎΠ΄, ΠΏΠ° Π°ΠΊΠΎ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΠ°ΡΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎΠ³Π°Ρ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π³ΠΎ ΠΎΡΠΈΡΠΈΡΠ°Π»Π½ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° Π½Π°ΡΠ΄Π΅ΡΠ΅ Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΎΡ ΡΠΎ ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΡΠΏΠΈΡΠΎΠΊΠΎΡ ΡΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° ΠΈΠ»ΠΈ ΡΠΎ ΠΎΠ΄Π΅ΡΠ΅ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ns-3 Releases:
Π‘Π΅Π³Π°, Π·Π° Π΄Π° Π³ΠΈ Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ 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_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 ΠΎΠ΄ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΠΌΠΎΡ Π½Π° Π½Π°ΡΠ²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π°Ρ ΠΈΠ·Π»Π΅Π·Π½ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΠ°ΠΌΡ.
ΠΠ·Π²ΠΎΡ: www.habr.com