
3 ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°
3.1 ΠΡΠ΅Π³Π»Π΅Π΄
3.2 ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ
3.2.1 ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ns-3 ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π°ΡΡ
ΠΈΠ² Ρ ΠΈΠ·Ρ
ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄
3.3 ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Git
3.3.1 ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Bake
3.4 Π‘Π±ΠΎΡΠΊΠ° Π½Π° ns-3
3.4.1 Π‘Π±ΠΎΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° build.py
3.4.2 Π‘Π±ΠΎΡΠΊΠ° Ρ Bake
3.4.3 Π‘Π±ΠΎΡΠΊΠ° Ρ Waf
3.5 Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ns-3
3.6 Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°
3.6.1 ΠΠΎΠΌΠ°Π½Π΄Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ
3.6.2 ΠΠ΅Π±ΡΠ³Π²Π°Π½Π΅
3.6.3 Π Π°Π±ΠΎΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
ΠΠ»Π°Π²Π° 3
ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°
Π’Π°Π·ΠΈ Π³Π»Π°Π²Π° Π΅ Π½Π°ΡΠΎΡΠ΅Π½Π° ΠΊΡΠΌ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ° Π½Π° ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΊΠΎΠΌΠΏΡΡΡΡ, Π½Π° ΠΊΠΎΠΉΡΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ns-3. ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ ΠΎΠ±Ρ Π²Π°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ, ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ, Π½Π°ΡΠΈΠ½ΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ns-3, Π½Π°ΡΠΈΠ½ΠΈΡΠ΅ Π·Π° ΡΠ±ΠΎΡΠΊΠ° Π½Π° ns-3 ΠΈ Π½Π°ΡΠΈΠ½ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π²Π°ΡΠ°ΡΠ° ΡΠ±ΠΎΡΠΊΠ° ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ.
3.1 ΠΡΠ΅Π³Π»Π΅Π΄
Π‘ΠΈΠΌΡΠ»Π°ΡΠΎΡΡΡ ns-3 Π΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ ΠΊΠ°ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π°ΡΠΈ ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΡΠΈ ΡΠ±ΠΎΡΠΊΠ°ΡΠ° ΠΊΠΎΠ΄ΡΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ ΡΠ΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΅Π·ΠΈΡΠΈΡΠ΅ C++ ΠΈΠ»ΠΈ Python.
Ns-3 ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° ΡΡΡ ΡΠΎΡΡΡΠ΅ΡΠ½Π° ΡΡΠ΅Π΄Π° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΏΡΡΠ²ΠΎ Π΄Π° ΡΡΠ±Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. Π ΠΏΡΠΈΠ½ΡΠΈΠΏ, ns-3 ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΈ ΠΊΠ°ΡΠΎ Π³ΠΎΡΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΈ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Π½ΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½. ΠΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈ Π²ΡΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ°, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΉΠΊΠΈ ΡΠ°ΠΌΠΎΡΠΎ ns-3, Π·Π°ΡΠΎΠ²Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π·Π° ΡΠ±ΠΎΡΠΊΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΈΡΠΊΠ° Π΄Π° ΠΏΠΎΠ΅ΠΌΠ΅ Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΏΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΠΎΡΠΎΠ²ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΌΠΎΠ»Ρ ΡΠ²ΡΡΠΆΠ΅ΡΠ΅ ΡΠ΅ Ρ ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈΡ ΡΠΏΠΈΡΡΠΊ ns-developers.
Π‘Π»Π΅Π΄Π²Π°ΡΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅, ΡΠ° ΡΡΠΈ Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΡΠ±ΠΎΡΠΊΠ° Π½Π° ns-3. ΠΡΡΠ²ΠΈΡΡ Π΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΈ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠ°ΠΉΡ. ΠΡΠΎΡΠΈΡΡ Π΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΈ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΊΠΎΠΏΠΈΡ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π±Π°Π·ΠΎΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° ns-3. Π’ΡΠ΅ΡΠΈΡΡ - Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΡΠ±ΠΎΡΠΊΠ°, Π·Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π·Π° ns-3. Π©Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΏΡΠ΅Π· Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΡΡ , ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ.
ΠΠΏΠΈΡΠ½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π° Linux ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°Ρ Π·Π°ΡΠΎ nsβ3 Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΊΠ°ΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π΄ΡΡΠ³ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ? ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Π½Π° Linux (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Debian), ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π°ΠΊΡΠ°Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΠΈ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΈ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ nsβ3, Π·Π°ΡΠΎΠ²Π° Π½Π°Π»ΠΈΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π΅ ΡΠ΄ΠΎΠ±Π½Π°. ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°Π·ΠΈ ΠΏΡΠΈΡΠΈΠ½Π° ΡΠ΅ ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΡΡ Ρ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡΡΠ° ΠΎΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄.
ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ nsβ3 ΠΏΡΠ°Π²Π° root Π½Π΅ ΡΠ° Π½ΡΠΆΠ½ΠΈ, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π° ΡΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠ° ΡΠΌΠ΅ΡΠΊΠ°.
3.2 ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ
Π¦Π΅Π»ΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ Π½Π°Π»ΠΈΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ nsβ3 ΠΈΠΌΠ° ΡΠ΅Π΄ΠΈΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½ΠΎ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ nsβ3 ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈ (ΡΠ΅ΡΡΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°: ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ Π½Π° C++, Python, ΡΠ΅Π΄Π°ΠΊΡΠΎΡ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, vim, emacs ΠΈΠ»ΠΈ Eclipse) ΠΈ, Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅ Git. ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π½Π΅ ΠΈΠΌ ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°Ρ, Π°ΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈΠΌ ΡΡΠΎΠ±ΡΠ°Π²Π° Π·Π° Π½ΡΠΊΠΎΠΈ Π»ΠΈΠΏΡΠ²Π°ΡΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° nsβ3, Π½ΠΎ Π·Π° ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΆΠ΅Π»Π°ΡΡ ΠΏΡΠ»Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ, ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΠΈΠΊΠΈ, ΠΊΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΡΡΡΠ°Π½ΠΈΡΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΡΡΠ²Π΅ΡΠΈ ΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ. ΠΠ΄Π½Π° ΠΎΡ ΡΠ΅Π·ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ Π΅ ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° βΠΠ½ΡΡΠ°Π»Π°ΡΠΈΡβ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π½Π° Π°Π΄ΡΠ΅Ρ: .
Π Π°Π·Π΄Π΅Π»ΡΡ βΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡβ Π½Π° ΡΠ°Π·ΠΈ ΡΠΈΠΊΠΈ-ΡΡΡΠ°Π½ΠΈΡΠ° ΠΎΠ±ΡΡΠ½ΡΠ²Π° ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΎΠ±ΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π½Π° nsβ3, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° ΡΡΡ Π½ΠΎΡΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π² ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Linux ΠΈΠ»ΠΈ macOS.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΎΡ ΡΠ°ΠΊΠ°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ ΠΊΠ°ΡΠΎ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΊΠΈ-ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° nsβ3 ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠ΅Π±ΡΠ°ΠΉΡ: , ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°ΠΌ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° nsβ3 (nsβ3.29), Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ nsβ3 ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ:
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΠ°ΠΊΠ΅Ρ/Π²Π΅ΡΡΠΈΡ
- ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ C++
clang++ ΠΈΠ»ΠΈ g++ (g++ Π²Π΅ΡΡΠΈΡ 4.9 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π°) - Python
python2 Π²Π΅ΡΡΠΈΡ >= 2.7.10, ΠΈΠ»ΠΈ python3 Π²Π΅ΡΡΠΈΡ >=3.4 - Git
Π½ΡΠΊΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π° Π²Π΅ΡΡΠΈΡ (Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ nsβ3 Π½Π° GitLab.com) - tar
Π½ΡΠΊΠΎΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π° Π²Π΅ΡΡΠΈΡ (Π·Π° ΡΠ°Π·ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΠ·Π° nsβ3) - bunzip2
Π½ΡΠΊΠΎΡ Π°ΠΊΡΡΠ°Π»Π½Π° Π²Π΅ΡΡΠΈΡ (Π·Π° ΡΠ°Π·ΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π»ΠΈΠ·Π° nsβ3)
ΠΠ° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Python, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ python -V. ΠΠ° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° g++, Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ g++ -v. ΠΠΊΠΎ Π½ΡΠΊΠΎΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π»ΠΈΠΏΡΠ²Π°Ρ ΠΈΠ»ΠΈ ΡΠ° ΡΠ²ΡΡΠ΄Π΅ ΡΡΠ°ΡΠΈ, ΠΌΠΎΠ»Ρ, Π·Π°ΠΏΠΎΠ·Π½Π°ΠΉΡΠ΅ ΡΠ΅ Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° Π²ΠΈΠΊΠΈ ns-3.
ΠΡ ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΡΡ ΡΠ°Π±ΠΎΡΠΈ Π² Linux, MacOS ΠΈΠ»ΠΈ Linux Π΅ΠΌΡΠ»Π°ΡΠΎΡ ΠΈ ΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ Π³ΠΎΡΠ΅ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.
3.2.1 ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ns-3 ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π°ΡΡ ΠΈΠ² Ρ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄
Π’ΠΎΠ²Π° Π΅ Π½Π°ΡΠΈΠ½ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π° Π½ΠΎΠ² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈ ΠΈ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ° Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΡ ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ns-3. ΠΠ·Π΄Π°Π½ΠΈΡΡΠ° Π½Π° ns-3 ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ Π°ΡΡ ΠΈΠ²ΠΈ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄, Π½Π°ΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° tarball. tarball β ΡΠΎΠ²Π° Π΅ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ΅Π½ Π°ΡΡ ΠΈΠ², Π² ΠΊΠΎΠΉΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ° ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈ. ΠΡΡ ΠΈΠ²ΡΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½. ΠΡΠΎΡΠ΅ΡΡΡ Π½Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 ΡΡΠ΅Π· tarball Π΅ ΠΏΡΠΎΡΡ; ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈΡ, Π΄Π° Ρ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΈ ΡΠ°Π·Π°ΡΡ ΠΈΠ²ΠΈΡΠ°ΡΠ΅.
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ns-3 Π² Π»ΠΎΠΊΠ°Π»Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΈΠΌΠ΅ workspace. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½Π° ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ, ΠΊΠ°ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π° Linux (ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, Π·Π°ΠΌΠ΅Π½ΡΠΉΠΊΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅)
$ cd
$ mkdir workspace
$ cd workspace
$ wget https://www.nsnam.org/release/ns-allinone-3.29.tar.bz2
$ tar xjf ns-allinone-3.29.tar.bz2 ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡΠΈΠ»ΠΈΡΠ° wget, ΠΊΠΎΡΡΠΎ Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ. ΠΠΊΠΎ Π½Π΅ ΡΡΠ΅ Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Ρ Π±ΡΠ°ΡΠ·ΡΡΠ° ΡΠΈ.
Π‘Π»Π΅Π΄Π²Π°ΠΉΠΊΠΈ ΡΠ΅Π·ΠΈ ΡΡΡΠΏΠΊΠΈ, ΡΠ΅ Π²Π»Π΅Π·Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° ns-allinone-3.29, ΠΊΡΠ΄Π΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
$ cd ns-allinone-3.29
$ ls
bake constants.py ns-3.29 README
build.py netanim-3.108 pybindgen-0.17.0.post58+ngcf00cc0 util.pyΠ‘Π΅Π³Π° ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² Π½Π° ns-3 ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΠ΅ΠΊΡΠΈΡΡΠ°, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ns-3.
3.3 ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Git
ΠΠΎΠ΄ΡΡ Π½Π° ns-3 Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π² Git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° GitLab.com Π½Π° Π°Π΄ΡΠ΅Ρ . ΠΡΡΠΏΠ°ΡΠ° nsnam ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄.
ΠΠ°ΠΉ-Π»Π΅ΡΠ½ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Git Ρ ΡΠ°Π½ΠΈΡΠ°ΡΠ° Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ fork ΠΈΠ»ΠΈ Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ns-3-allinone. Π’ΠΎΠ²Π° Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ΡΠΎ ΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ns-3. ΠΠΊΠΎ ΡΡΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π² Git, ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ΅ "fork" ΠΈ "ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅" ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π²ΠΈ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ·Π½Π°ΡΠΈ; Π°ΠΊΠΎ Π΅ ΡΠ°ΠΊΠ°, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌΠ΅ Π²ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΡΠ΅ (ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° Π²Π΅ΡΡΠΈΡ) ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π½Π°ΠΌΠΈΡΠ°Ρ ΡΠ΅ Π½Π° GitLab.com, ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° ΡΠΈ ns-3-allinone ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΠΎΠΏΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ Π°ΡΡ ΠΈΠ² Π½Π° Π²Π΅ΡΡΠΈΡΡΠ°. Π’Ρ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:
$ ls
build.py constants.py download.py README util.pyΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° download.py, ΠΊΠΎΠΉΡΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅ ns-3 ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄. Π’ΡΠΊ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ·Π±ΠΎΡ: ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ns-3:
$ python download.pyΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ns-3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ»Π°Π³Π° -n Π·Π° ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ°:
$ python download.py -n ns-3.29Π‘Π»Π΅Π΄ ΡΠ°Π·ΠΈ ΡΡΡΠΏΠΊΠ° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° ns-3-allinone ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ns-3, bake, pybindgen ΠΈ netanim.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°
ΠΠ° ΠΌΠ°ΡΠΈΠ½Π° Ρ ΡΠΈΡΡΠ° Ubuntu16.04, ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄: $ sudo python3 download.py -n ns-3.29 (ΡΡΠΊ ΠΈ ΠΏΠΎ-Π½Π°Π΄ΠΎΠ»Ρ Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°).
3.3.1 ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Bake
ΠΠ²Π°ΡΠ° ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° (Π°ΡΡ ΠΈΠ² Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ns-3-allinone ΡΡΠ΅Π· Git) ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° ns-3 Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ (pybindgen Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Python ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ ΠΈ netanim Π·Π° Π°Π½ΠΈΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°). Π’ΡΠ΅ΡΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π² ns-3-allinone, ΡΠ΅ Π½Π°ΡΠΈΡΠ° bake.
Bake β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠΎΡΡΡΠ΅Ρ ΠΎΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ns-3. Bake ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ns-3, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡΠ° ns-3, ΠΊΠ°ΡΠΎ ΡΡΠ΅Π΄Π° Direct Code Execution, CradleNetwork Simulation Cradle, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Python ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ "ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ" Π½Π° ns-3.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°
CradleNetwork Simulation Cradle β ΡΠ°ΠΌΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΡΠΈΠΌΡΠ»Π°ΡΠΎΡ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Π°Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠ΅ΠΊΠΎΠ²Π΅ TCP / IP.
ΠΠΊΠΎ ΡΠΌΡΡΠ°ΡΠ΅, ΡΠ΅ Π²Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° ns-3 ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ.
Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ns-3 Bake Π±Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² tar-ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ. Π ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ°ΠΉΠ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ΡΠΎ Π½Π° Π°ΠΊΡΡΠ°Π»Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ. Π’ΠΎΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π΅ΡΡΠΈΡ Bake, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° Ρ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ ns-3.29, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΡΠΎΠ²Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ns-3 ΠΈΠ»ΠΈ ΠΏΠΎ-ΡΠ°Π½ΠΎ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡ (Π°ΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° bakeconf.xml Π½Π΅ ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π΅Π½ΠΈ).
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° ΠΊΠΎΠΏΠΈΠ΅ bake, ΠΊΠ°ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π½Π° Linux (ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Git):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° git, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
ΠΠ»ΠΎΠ½ΠΈΡΠ°ΠΌ Π² 'bake'...
remote: ΠΠ·Π±ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 2086, ΡΠ²ΡΡΡΠ΅Π½ΠΎ.
remote: ΠΡΠΎΠ΅Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 100% (2086/2086), ΡΠ²ΡΡΡΠ΅Π½ΠΎ.
remote: ΠΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 100% (649/649), ΡΠ²ΡΡΡΠ΅Π½ΠΎ.
remote: ΠΠ±ΡΠΎ 2086 (delta 1404), ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ 2078 (delta 1399)
ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, ΡΠ²ΡΡΡΠ΅Π½ΠΎ.
Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄Π΅Π»ΡΠ°: 100% (1404/1404), ΡΠ²ΡΡΡΠ΅Π½ΠΎ.Π‘Π»Π΅Π΄ ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° clone ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΈΠΌΠ΅ bake, ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΡΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Python ΡΠΊΡΠΈΠΏΡΠ°, Python ΠΌΠΎΠ΄ΡΠ» Ρ ΠΈΠΌΠ΅ bake ΠΈ XML ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ°ΠΉΠ». Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, Π·Π° Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΠΈ ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡΠ° Π½Π° ns-3 ΠΏΠΎ Π²Π°Ρ ΠΈΠ·Π±ΠΎΡ. ΠΠ°Π»ΠΈΡΠ½ΠΈ ΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π»ΠΈ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°:
ns-3.29: ΠΌΠΎΠ΄ΡΠ», ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ°; ΡΠΎΠΉ ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π² tarball;
ns-3-dev: ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΌΠΎΠ΄ΡΠ», Π½ΠΎ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΎΡ Π΄ΡΡΠ²ΠΎΡΠΎ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°;
ns-allinone-3.29: ΠΌΠΎΠ΄ΡΠ», ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° Π΄ΡΡΠ³ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΡΠΎ Click ΡΡΡΠ΅ΡΠΈ ΠΈ Network Simulation Cradle, Openflow Π·Π° ns-3.
ns-3-allinone: ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° allinone, Π½ΠΎ Π·Π° ΠΊΠΎΠ΄ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°
Click β ΠΌΠΎΠ΄ΡΠ»Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΡΠ΅ΡΠΈ.
Openflow Π΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΡΠ΅Π΄Π°Π²Π°Π½ΠΈ ΠΏΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΎΡ ΡΡΡΠ΅ΡΠΈ ΠΈ ΠΊΠΎΠΌΡΡΠ°ΡΠΎΡΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π·Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΠΌΠ° ΠΌΡΠ΅ΠΆΠ°.
Π’Π΅ΠΊΡΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Ρ snapshot (Π½Π΅ΡΠ΅Π»ΠΈΠ·Π΅Π½) Π½Π° ns-3 ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π½Π° Π°Π΄ΡΠ΅Ρ:.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ΅ ΡΡΡΠ΅ΠΌΡΡ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅Π·ΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π² ΡΠΎΠ³Π»Π°ΡΡΠ²Π°Π½ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, Π½ΠΎ ΡΠ΅ ΡΠ° Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° ΠΈ Π² ΡΡΡ ΠΏΡΠΈΡΡΡΡΠ²Π° Π½Π΅ΡΠ΅Π»ΠΈΠ·Π΅Π½ ΠΊΠΎΠ΄, ΡΠ°ΠΊΠ° ΡΠ΅ Π°ΠΊΠΎ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΠ°ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠ·Π±ΠΈΡΠ°ΠΉΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»Π½ΠΈΡ ΡΠ΅Π»ΠΈΠ·.
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΡΠ΅ ΡΠΏΠΈΡΡΠΊΠ° Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ Π½Π° ΡΠ΅Π±ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° 'ns-3 Releases': ΠΈ ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π½Π° Π»ΠΈΠ½ΠΊΠ° Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ. Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Ρ ns-3.29.
Π‘Π΅Π³Π°, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΡΡΡΡΠ°Π²Π½ΠΈ ΡΠ°ΡΡΠΈ Π½Π° ns-3, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Bake. ΠΠ΅ΠΊΠ° ΠΊΠ°ΠΆΠ΅ΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ Π΄ΡΠΌΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Bake.
Bake ΡΠ°Π±ΠΎΡΠΈ, ΠΈΠ·ΡΠ΅Π³Π»ΡΠΉΠΊΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π·Π° ΡΠ±ΠΎΡΠΊΠ°. Bake ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΎ, ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΠΉΠΊΠΈ ΡΠ΅ Π½Π° Π±ΠΈΠ½Π°ΡΠ½ΠΈΡ ΡΠ°ΠΉΠ», Π½ΠΎ Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Bake Π½Π΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ°, Π² ΠΊΠΎΡΡΠΎ Π΅ ΠΊΠ°ΡΠ΅Π½, Π΅ ΠΆΠ΅Π»Π°ΡΠ΅Π»Π½ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΏΡΡ bake Π² ΠΏΡΡΡ ΡΠΈ (ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° PATH), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½ (ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Linux bash). ΠΡΠΈΠ΄Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° βbakeβ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libΠ’ΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° bake.py Π² ΠΏΡΡΡ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΠΈ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π΄Π° Π½Π°ΠΌΠΈΡΠ°Ρ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ Π΅ ΡΡΠ·Π΄Π°Π» bake. Π Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° bake, ΠΎΠΏΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° PATH ΠΈ PYTHONPATH Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°, Π½ΠΎ Π·Π° ΠΏΡΠ»Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° nsβ3-allinone (Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ) ΡΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ Π½ΡΠΆΠ½Π°.
ΠΡΠΈΠ΄Π΅ΡΠ΅ Π² ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π² ΠΊΠΎΠ½ΡΠΎΠ»Π°ΡΠ°:
$ ./bake.py configure -e ns-3.29Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ°ΠΌΠ΅ Bake Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΄Π°Π»ΠΈ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. ΠΡΠ²Π΅Π΄Π΅ΡΠ΅:
$ ./bake.py checkΠ’ΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:
> Python - OK
> GNU C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ - OK
> Mercurial - OK
> Git - OK
> Tar ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ - OK
> Unzip ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ - OK
> Make - OK
> cMake - OK
> patch ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ - OK
> ΠΡΡ Π·Π° ΡΡΡΡΠ΅Π½Π΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅, ΠΊΠ°ΡΠΎ Mercurial, CVS, Git ΠΈ Bazaar, ΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π½Π° ΡΠ°Π·ΠΈ ΡΡΡΠΏΠΊΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ΄Π°. ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΏΠΎ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡ Π·Π° Π²Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°ΡΠΈΠ½ (Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅) ΠΈΠ»ΠΈ ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π·Π° ΠΏΠΎΠΌΠΎΡ ΠΊΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΡΠΎΡΡΡΠ΅ΡΠ°:
$ ./bake.py downloadΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ setuptools - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ libgoocanvas2 - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ gi-cairo - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ pygobject - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ pygraphviz - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ python-dev - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ qt - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ g++ - OK
>> ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° pybindgen-0.19.0.post4+ng823d8b2 (ΡΠ΅Π»Π΅Π²Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ:pybindgen) - OK
>> ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° netanim-3.108 - OK
>> ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3.29 - OKΠ’ΠΎΠ²Π° ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ° ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ΠΈ ΡΡΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Π‘Π΅Π³Π° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° source ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ls; ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenΠ‘Π΅Π³Π° ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡΠ° nsβ3.
3.4 Π‘Π±ΠΎΡΠΊΠ° Π½Π° ns-3
ΠΠ°ΠΊΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ΡΠΎ Π½Π° nsβ3, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ nsβ3. ΠΠ°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ Π΅, ΡΠ΅ nsβ3 Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, Π½Π°ΡΠ΅ΡΠ΅Π½ Waf, ΠΎΠΏΠΈΡΠ°Π½ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Ρ Waf, Π½ΠΎ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΄ΠΎΠ±Π½ΠΈ ΡΠΊΡΠΈΠΏΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠ±ΠΎΡΠΊΠΈ. ΠΠ°ΡΠΎΠ²Π°, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° Waf, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π² build.py ΠΈ ΡΠ±ΠΎΡΠΊΠ° Ρ bake.
3.4.1 Π‘Π±ΠΎΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° build.py
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’Π°Π·ΠΈ ΡΡΡΠΏΠΊΠ° Π½Π° ΡΠ±ΠΎΡΠΊΠ°ΡΠ° Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠ°ΠΌΠΎ ΠΎΡ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ Π°ΡΡ ΠΈΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ Π½Π°ΡΠΈΠ½; Π° Π½Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½Π° ΡΡΠ΅Π· git ΠΈΠ»ΠΈ bake.
ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ Π°ΡΡ ΠΈΠ² Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° tarball, Π² nsβ3βallinone ΠΈΠΌΠ° ΡΠ΄ΠΎΠ±Π΅Π½ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅. Π’ΠΎΠΉ ΡΠ΅ Π½Π°ΡΠΈΡΠ° build.py. Π’Π°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° Π²Π°Ρ ΠΏΠΎ Π½Π°ΡΠΈΠ½, ΠΊΠΎΠΉΡΠΎ Π΅ Π½Π°ΠΉ-ΠΏΠΎΠ»Π΅Π·Π΅Π½. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ nsβ3 ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΡΠ±ΠΎΡΠΊΠ° nsβ3, Waf, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ Π² ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ.
ΠΠΊΠΎ ΡΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° tarball, ΡΠΎ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π²ΠΈ ~\/workspace ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΈΠΌΠ΅ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ ns-allinone-3.29. ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ .\/build.py --enable-examples --enable-tests
ΠΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° build.py ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ Π² nsβ3. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° ΡΡΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ. ΠΠΎΡΠ»Π΅, Π°ΠΊΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ nsβ3 Π±Π΅Π· ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π²Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ°.
Π©Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, ΠΏΠΎΠΊΠ°Π·Π²Π°Π½ΠΈ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ΠΈ ΠΎΡ Π²Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. ΠΡΡΠ²ΠΎ ΡΠΊΡΠΈΠΏΡΡΡ ΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Π°Π½ΠΈΠΌΠ°ΡΠΎΡΠ° netanim, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ pybindgen ΠΈ Π½Π°ΠΊΡΠ°Ρ nsβ3. Π ΠΊΡΠ°Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
Waf: Leaving directory '\/path\/to\/workspace\/ns-allinone-3.29\/ns-3.29\/build'\n'build' finished successfully (6m25.032s) \n\nModules built:\nantenna aodv applications\nbridge buildings config-store\ncore csma csma-layout\ndsdv dsr energy \nfd-net-device flow-monitor internet\ninternet-apps lr-wpan lte\nmesh mobility mpi\nnetanim (no Python) network nix-vector-routing \nolsr point-to-point point-to-point-layout \npropagation sixlowpan spectrum \nstats tap-bridge test (no Python) \ntopology-read traffic-control uan \nvirtual-net-device visualizer wave \nwifi wimax \n\nModules not built (see ns-3 tutorial for explanation):\nbrite click openflow \nLeaving directory .\/ns-3.29Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠΈ ΡΠ΅Π΄Π° Π½Π° ΡΠΏΠΈΡΡΠΊΠ° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ΠΈ:
Modules not built (see ns-3 tutorial for explanation):\nbrite clickΠ’ΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ nsβ3, ΠΊΠΎΠΈΡΠΎ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΌΠΎΠ³Π°Ρ Π΄Π° Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ ΠΈΠ»ΠΈ ΡΠ΅ Π·Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ. Π’ΠΎΠ²Π° Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΡΡ Π½Π΅ Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.
3.4.2 Π‘Π±ΠΎΡΠΊΠ° Ρ Bake
ΠΠΊΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ bake Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° nsβ3. ΠΡΠ²Π΅Π΄Π΅ΡΠ΅:
$ .\/bake.py buildΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OKΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΈ Π΄Π²Π΅ΡΠ΅ ΡΡΡΠΏΠΊΠΈ Π½Π°Π²Π΅Π΄Π½ΡΠΆ, ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅, ΠΊΠ°ΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅ Β«bake.py deployΒ».
ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Ρ Π³ΡΠ΅ΡΠΊΠΈ, Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ, Π°ΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡΡ Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡΠ° Π±Π΅ΡΠ΅, ΡΠ΅ castxml ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ bake Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π²ΠΈΠ΄Π°:
>> Building castxml - Problem
> Problem: Optional dependency, module "castxml" failed
Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΡΠ°ΠΉΠ½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, bake ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ "castxml" Π½Π΅ Π΅ ΠΎΡΠ½ΠΎΠ²Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ.
ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ·Π²ΠΈΠΊΠ°ΠΉΡΠ΅ bake Ρ -v ΠΈΠ»ΠΈ -vvv, Π·Π° ΠΏΡΠ»Π΅Π½ ΠΏΠΎΠ΄ΡΠΎΠ±Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ.ΠΠΎ castxml Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Python ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ. ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ (ΠΏΠΎΠ½Π΅ Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡ nsβ3), ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π·Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°.
ΠΠΊΠΎ ΠΈΠΌΠ° Π³ΡΠ΅ΡΠΊΠ°, ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ Π²ΠΈ Π΄Π°Π΄Π΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π·Π° Π»ΠΈΠΏΡΠ²Π°ΡΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
$ .\/bake.py showΠ©Π΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅.
3.4.3 Π‘Π±ΠΎΡΠΊΠ° Ρ Waf
ΠΠΎ ΡΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° nsβ3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ ΠΈΠ»ΠΈ ΡΠΊΡΠΈΠΏΡ build.py, ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ bake. Π’Π΅Π·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° nsβ3 ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅. ΠΡΡΡΠ½ΠΎΡΡ, Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Waf ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° nsβ3. Waf ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° nsβ3. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π±ΡΡΠ·ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΊΡΠΌ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Waf. Π ΡΠ°ΠΊΠ°, Π·Π° Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° nsβ3, ΠΊΠΎΡΡΠΎ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΡΠ΅ ΡΡΠ·Π΄Π°Π»ΠΈ.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΊΡΠ°ΡΠΊΠΎ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° Π²Π½Π΅ΡΠ΅ΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ Π½Π°ΠΉ-ΠΏΠΎΠ»Π΅Π·Π½Π°ΡΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, Π΅ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π²ΠΈ Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π° Π²Π΅ΡΡΠΈΡ. ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° ΡΠ±ΠΎΡΠΊΠ°. ΠΠ° Π΄Π° ΠΎΠ±ΡΡΠ½ΠΈΡΠ΅ Π½Π° Waf ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ±ΠΎΡΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ²Π°ΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:
$ .\/waf clean
$ .\/waf configure --build-profile=optimized --enable-examples --enable-testsΠ’ΠΎΠ²Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Waf ΠΈΠ·Π²ΡΠ½ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ (Π·Π° Π²Π°ΡΠ΅ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ). ΠΡΡΠ²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΠ±ΠΎΡΠΊΠ°, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π΅ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ Π΅ Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° (Π²ΠΆ. ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ΅ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ); ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ ΠΏΡΠ΅Π΄ΠΈ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π½Π°ΠΌΠΈΡΠ°ΡΠΈ ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° build\/. ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΡΡΡΡΠΎΠ΅Π½ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ:
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° top Π΄ΠΎ : /home/ns3user/workspace/bake/source/ns-3-dev
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π·Π° ΠΈΠ·Ρ
ΠΎΠ΄ Π΄ΠΎ : /home/ns3user/workspace/bake/source/ns-3-dev/build
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'gcc' (C ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ) : /usr/bin/gcc
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²Π΅ΡΡΠΈΡ Π½Π° cc : 7.3.0
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'g++' (C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ) : /usr/bin/g++
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -march=native : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -Wl,--soname=foo : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -std=c++11 : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Boost Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ : Π·Π°Π³Π»Π°Π²ΠΈΡ Π½Π΅ ΡΠ° Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ --boost-includes (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎΠΌΠΎΡΡΠ°)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Boost Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ : Π·Π°Π³Π»Π°Π²ΠΈΡ Π½Π΅ ΡΠ° Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ --boost-includes (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎΠΌΠΎΡΡΠ°)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'python' : /usr/bin/python
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²Π΅ΡΡΠΈΡ Π½Π° python >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
ΠΠ°ΠΏΠΈΡΠ²Π°Π½Π΅ ΠΊΡΠΌ python-config Π·Π° pyembed '--cflags --libs --ldflags' ΡΠ»Π°Π³ΠΎΠ²Π΅ : Π΄Π°
Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° pyembed : Π΄Π°
ΠΠ°ΠΏΠΈΡΠ²Π°Π½Π΅ ΠΊΡΠΌ python-config Π·Π° pyext '--cflags --libs --ldflags' ΡΠ»Π°Π³ΠΎΠ²Π΅ : Π΄Π°
Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° pyext : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -fvisibility=hidden : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -Wno-array-bounds : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° pybindgen : ../pybindgen ,!(ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'pybindgen' : 0.19.0. ,!post4+g823d8b2
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²Π΅ΡΡΠΈΡ Π½Π° pybindgen : 0.19.0. ,!post4+g823d8b2
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄ : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ uint64_t ΠΈ unsigned long : Π½Π΅
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄ : Π½Π΅
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ uint64_t ΠΈ unsigned long long : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° apidefs, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° Python ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ : gcc-LP64
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²ΡΡΡΠ΅ΡΠ΅Π½ GCC cxxabi : Π·Π°Π²ΡΡΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'pygccxml' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° click : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'pkg-config' : /usr/bin/pkg-config
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'gtk+-3.0' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'libxml-2.0' : Π΄Π°
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° uint128_t : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° __uint128_t : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎΡΡ : 128-Π±ΠΈΡΠΎΠ² ΠΈΠ½ΡΠ΅Π³Π΅Ρ ,!(ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ stdint.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ inttypes.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ sys/inttypes.h : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ sys/types.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ sys/stat.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ dirent.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ stdlib.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ signal.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ pthread.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ stdint.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ inttypes.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ sys/inttypes.h : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° rt : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ sys/ioctl.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ net/if.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ net/ethernet.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ linux/if_tun.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ netpacket/packet.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° NSC : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'sqlite3' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ linux/if_tun.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi' : 3.26.1
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.GObject' : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'cairo' : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'pygraphviz' : 1.4rc1
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.Gtk' : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.Gdk' : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.Pango' : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.GooCanvas' : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'sudo' : /usr/bin/sudo
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'valgrind' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'gsl' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ python-config : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -fstrict-aliasing : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -fstrict-aliasing : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -Wstrict-aliasing : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ»Π°Π³ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ -Wstrict-aliasing : ok
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'doxygen' : /usr/bin/doxygen
---- Π Π΅Π·ΡΠΌΠ΅ Π½Π° ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ns-3:
ΠΡΠΎΡΠΈΠ» Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ : ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½
ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ :
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ BRITE : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (BRITE Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (Π²ΠΆ. ΠΎΠΏΡΠΈΡ --with- ,!brite))
Π‘ΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΡ Π·Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π½Π° DES : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ)
ΠΠΌΡΠ»ΡΡΠΈΡ FdNetDevice : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π°
ΠΡΠΈΠΌΠ΅ΡΠΈ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
Π€Π°ΠΉΠ»ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ NetDevice : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
GNU ΠΠ°ΡΡΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (GSL) : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (GSL Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½)
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Gcrypt : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (libgcrypt Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ,!libgcrypt-config, Π·Π° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.) GtkConfigStore : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° 'gtk+-3.0 >= 3.0' Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π°)
MPI ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (ΠΎΠΏΡΠΈΡ --enable-mpi Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π°)
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ns-3 Click : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (nsclick Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (Π²ΠΆ. ΠΎΠΏΡΠΈΡ --with- ,!nsclick))
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ns-3 OpenFlow : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° Boost Π½Π΅ ΡΠ° Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ)
ΠΡΠ΅ΠΆΠΎΠ²Π° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ Cradle : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (NSC Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ (Π²ΠΆ. ΠΎΠΏΡΠΈΡ --with-nsc))
PlanetLab FdNetDevice : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° PlanetLab Π½Π΅ Π΅ ΠΎΡΠΊΡΠΈΡΠ° ,!(Π²ΠΆ. ΠΎΠΏΡΠΈΡ --force-planetlab)) PyViz Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΎΡ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ Π½Π° Python API : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (ΠΠΈΠΏΡΠ²Π°Ρ ΠΌΠΎΠ΄ΡΠ» 'pygccxml' Python)
Python Π‘Π²ΡΡΠ·Π²Π°Π½ΠΈΡ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
Π‘ΠΈΠΌΡΠ»Π°ΡΠΎΡ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
ΠΠ·Ρ
ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° SQLite ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° 'sqlite3' Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π°)
Tap Bridge : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
Tap FdNetDevice : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
Π’Π΅ΡΡΠΎΠ²Π΅ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
ΠΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ sudo, Π·Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ suid Π±ΠΈΡ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ (ΠΎΠΏΡΠΈΡ --enable-sudo Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π°)
XmlIo : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
'configure' ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²ΡΡΡΠ΅Π½ΠΎ (6.387s)ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΠΏΠΈΡΡΠΊ. ΠΡΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ ns-3 Π½Π΅ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ XmlTo, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libxml-2.0ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π½Π°Π»ΠΈΡΠ½Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠΊΠΎ ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π° ΠΈ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ns-3 Π½Π΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π°, ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΈΠΌΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π° sudo Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° Π±ΠΈΡΠ° suid Β«ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π³ΡΡΠΏΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅Β» Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΡΠΎ Β«Π½Π΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π°Β» (Β«not enabledΒ»). ΠΠ°ΠΊΡΠ°Ρ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Waf Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ --check-config.
Π‘Π΅Π³Π° Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΈ Π΄Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅.
$ ./waf clean
$ ./waf configure --build-profile=debug --enable-examples --enable-testsΠ‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π΅ ΡΠ΅Π³Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π° ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ ns-3, ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΡΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅:
$ ./wafΠΠ΅ΠΊΠ° ΡΡΡΠΏΠΊΠΈΡΠ΅, ΠΎΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ° Π²ΠΈ Π½Π°ΠΊΠ°ΡΠ°Π»ΠΈ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ°ΡΡ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ns-3 Π΄Π²Π° ΠΏΡΡΠΈ, Π½ΠΎ ΠΏΠΎΠ½Π΅ ΡΠ΅Π³Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠΎΠ΄.
ΠΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π°ΠΊΡΠΈΠ²Π½ΠΈΡ ΠΏΡΠΎΡΠΈΠ» Π·Π° Π΄Π°Π΄Π΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ ./waf --check-profile
Waf: ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `/path/to/ns-3-allinone/ns-3.29/build'
ΠΡΠΎΡΠΈΠ» Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅: debugΠ Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½ΠΈΡΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ build.py ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ --enable-examples ΠΈ --enable-tests, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ²Π° Π½ΡΠΌΠ° Π΄Π° ΡΡΠ°Π±ΠΎΡΠΈ: Waf $ ./build.py --disable-python
ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ ΡΠ΅ Π±ΡΠ΄Π΅:build.py: error: no such option: --disable-python
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ -- ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΡΠ΅Π·, Π·Π°ΡΠΎΠ²Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎΡΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΡΡΠ°Π±ΠΎΡΠΈ: waf$ ./build.py -- --disable-python
ΡΡΠΉ ΠΊΠ°ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°./waf configure βdisable-python . ΠΡΠΎ ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π·Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Waf.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅
Π Π΅Π»ΠΈΠ·ΠΈΡΠ΅ Π½Π° nsβ3 ΡΠ° ΡΠ΅ΡΡΠ²Π°Π½ΠΈ Ρ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ, Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ ΠΈΠΌ Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Π½Π° Linux ΠΈ MacOS. Π‘ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΎΠ±Π°ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΡΠ²Π°Ρ Π½ΠΎΠ²ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Ρ Π½ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ, Π° ΡΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅Π°Π³ΠΈΡΠ°Ρ ΠΏΠΎ-ΠΏΠ΅Π΄Π°Π½ΡΠΈΡΠ½ΠΎ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΡΠ°. nsβ3 Π½Π°ΡΡΡΠΎΠΉΠ²Π° ΡΠ²ΠΎΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π΄Π° ΡΡΠ΅ΡΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ°ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π°, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎ-ΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΏΠΎ-Π½ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΏΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ nsβ3.28 Π·Π° Fedora 28, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° Π½ΠΎΠ²Π° Π³Π»Π°Π²Π½Π° Π²Π΅ΡΡΠΈΡ gcc (gcc-8). ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ nsβ3.28 ΠΈΠ»ΠΈ ΠΏΠΎ-ΡΡΠ°ΡΠΈ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ΄ Fedora 28, Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Gtk2+, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π³ΡΠ΅ΡΠΊΠ°:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of β__gtk_reserved1β [-Werror=parentheses] void (*__gtk_reserved1);Π ΠΈΠ·Π΄Π°Π½ΠΈΡΡΠ°, Π·Π°ΠΏΠΎΡΠ²Π°ΡΠΈ ΠΎΡ nsβ3.28.1, Waf ΠΈΠΌΠ° ΠΎΠΏΡΠΈΡ Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π’Ρ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΠ»Π°Π³Π° Β«-WerrorΒ» Π² g++ ΠΈ clang++. Π’Π°Π·ΠΈ ΠΎΠΏΡΠΈΡ Π΅ Β«--disable-werrorΒ» ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅:
$ .\/waf configure --disable-werror --enable-examples --enable-testsΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅
ΠΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Waf ΠΈΠΌΠ°Ρ ΡΠΌΠΈΡΡΠ» ΡΠ°ΠΌΠΎ Π² Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅, Π΄ΠΎΠΊΠ°ΡΠΎ Π΄ΡΡΠ³ΠΈ Π΄Π΅ΠΉΡΡΠ²Π°Ρ ΡΠ°ΠΌΠΎ Π² Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° Π΅ΠΌΡΠ»Π°ΡΠΈΡ Π½Π° nsβ3, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π½Π° Π±ΠΈΡΠ° suid ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ sudo, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅. Π’ΠΎΠ²Π° ΡΠ΅ ΠΎΡΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΠΎΡ Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅, ΠΈ ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΡΠΎ ΡΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅.
$ .\/waf configure --enable-sudo --enable-examples --enable-testsΠΠΊΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, Waf ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° sudo, Π·Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠΊΠ΅ΡΠΈ Π½Π° ΠΊΠΎΠ΄Π° Π·Π° Π΅ΠΌΡΠ»Π°ΡΠΈΡ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Ρ ΠΏΡΠ°Π²Π° root. Π Waf Π½Π°Π»ΠΈΡΠ½ΠΈ ΡΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° Π΅ΡΠ°ΠΏΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. ΠΠ° Π΄Π° ΠΏΡΠΎΡΡΠΈΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΈΡΠ΅, Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅:
$ .\/waf --helpΠ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅.
ΠΡΠΎΡΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°
ΠΠ΅ΡΠ΅ Π²ΠΈΠ΄ΡΡ ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ Waf Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ Π΄Π΅Π±ΡΠ³ ΠΈ optimized:
$ .\/waf --build-profile=debugΠΠΌΠ° ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΏΡΠΎΡΠΈΠ» Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, release. ΠΠΏΡΠΈΡΡΠ° -d ΠΊΠΎΠΉΡΠΎ Π΅ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ Π½Π° --build-profile. ΠΡΠΎΡΠΈΠ»ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ (assertions) ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°:

ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π»ΠΎΠ³ΠΎΠ²Π΅ΡΠ΅ ΠΈ ΡΠ²ΡΡΠ΄Π΅Π½ΠΈΡΡΠ° ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ ΡΠ°ΠΌΠΎ Π² ΠΎΡΠ»Π°Π΄ΡΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ. ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½Π°ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π΅ Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ ΡΠΈ Π² ΠΎΡΠ»Π°Π΄ΡΡΠ΅Π½ ΡΠ΅ΠΆΠΈΠΌ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ (Π·Π° ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ) Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°ΡΠ°.
ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ°ΠΌΠΎ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ° Code Wrapper Macro:
NS_BUILD_DEBUG (std::cout << "Π§Π°ΡΡ ΠΎΡ ΠΈΠ·Ρ
ΠΎΠ΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ..." << std::flush; timer.Start, !()); DoLongInvolvedComputation();
NS_BUILD_DEBUG (timer.Stop(); std::cout << "ΠΠΎΡΠΎΠ²ΠΎ: " << timer << std::endl;)ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Waf ΠΏΠΎΡΡΠ°Π²Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°ΡΠ° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π΄ΡΡΠ³Π° ΠΈΠ·Ρ
ΠΎΠ΄Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΎΠΏΡΠΈΡΡΠ° -β―-out, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
$ ./waf configure --out=my-build-dirΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΉΠΊΠΈ ΡΠΎΠ²Π° Ρ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΡΠ΅ Π»Π΅ΡΠ½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...Π’ΠΎΠ²Π° Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ³Π»ΠΎΠ±ΠΊΠΈ, Π±Π΅Π· Π΄Π° ΡΡΡΠ±Π²Π° Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ Π΄Π° ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ³Π»ΠΎΠ±ΠΊΠ°. ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π½Π° Π΄ΡΡΠ³Π° Π²Π΅ΡΡΠΈΡ, Waf ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° ΡΠ°ΠΌΠΎ Π½Π΅Ρ, Π±Π΅Π· Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ»Π½Π° Π½ΠΎΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° Π²ΡΠΈΡΠΊΠΎ.
ΠΠΎΠ³Π°ΡΠΎ ΡΠ°ΠΊΠ° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ°ΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° Π²Π½ΠΈΠΌΠ°Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ Π΄Π° Π·Π°Π΄Π°Π²Π°ΡΠ΅ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ΡΠΎ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ:
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT="--build-profile=optimized --out=build/optimized"
$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build
...
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf buildΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅
Π Π³ΠΎΡΠ΅ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Waf Π·Π° ΡΠ³Π»ΠΎΠ±ΠΊΠ° Π½Π° ns-3 ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ ΠΎΡ GCC ( g++). ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ Waf C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ, ΠΊΠ°ΡΠΎ Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° CXX. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Clang, clang++,
$ CXX="clang++" ./waf configure
$ ./waf build ΠΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ Waf Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° distcc:
$ CXX="distcc g++" ./waf configure
$ ./waf buildΠΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° distcc ΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΡΠ΅ΠΊΡΠΈΡΡΠ° "ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ". ΠΠ° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΏΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ns-3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ° CXXFLAGS_EXTRA.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π°
Waf ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΡΡΠ±ΡΠ°Π½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ build, ΠΈ ΡΡΠΉ ΠΊΠ°ΡΠΎ Waf Π·Π½Π°Π΅ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π΄ΡΡΠ³Π°Π΄Π΅.
ΠΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ ΠΈΠ·Π²ΡΠ½ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ./waf install. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΏΡΠ΅ΡΠΈΠΊΡΡΡ Π·Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π΅ /usr/local, Π·Π°ΡΠΎΠ²Π° ./waf install ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π² /usr/local/bin, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π² /usr/local/lib ΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² /usr/local/include. ΠΡΠ°Π²Π° Π·Π° ΡΡΠΏΠ΅ΡΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Ρ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°ΡΠΈΡ ΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΈΠΏΠΈΡΠ½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ Π±ΡΠ΄Π΅ sudo ./waf install. ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Waf ΠΏΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠ±ΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΡΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΏΠΎ ΠΏΡΡΡ ΠΊΡΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅, Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π² Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°. Π’Π°ΠΊΠ° ΡΠ΅ ΠΏΡΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ, Π΄Π°Π»ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½ΡΠΆΠ½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ°Ρ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Ρ Π΄ΡΡΠ³ ΠΏΡΠ΅ΡΠΈΠΊΡ, ΠΏΡΠ΅Π΄Π°Π²Π°ΠΉΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΎΠΏΡΠΈΡΡΠ° --prefix, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
./waf configure --prefix=/opt/localΠΠΊΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ, ΡΠ»Π΅Π΄ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π²ΡΠ²Π΅Π΄Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ . /waf, ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΏΡΠ΅ΡΠΈΠΊΡΡΡ /opt/local.
ΠΠΎΠΌΠ°Π½Π΄Π° ./waf clean ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠ΅Π΄ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½Π°ΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π°ΠΊΠΎ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Waf Ρ Π΄ΡΡΠ³ ΠΏΡΠ΅ΡΠΈΠΊΡ.
Π’Π°ΠΊΠ° ΡΠ΅, Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° nsβ3, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ./waf install. ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½ΡΠΌΠ° Π΄Π° ΠΈΠΌ Π΅ Π½ΡΠΆΠ½Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Waf ΡΠ΅ Π²Π·Π΅ΠΌΠ΅ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, Π½ΠΎ Π½ΡΠΊΠΎΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΡΡ ΡΠΎΠ²Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π°ΠΊΠΎ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ Π΄Π΅ΠΉΠ½ΠΎΡΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈΠ·Π²ΡΠ½ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° nsβ3.
Waf Π΅ Π΅Π΄ΠΈΠ½Π΅Π½
ΠΠ° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ nsβ3 ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ Waf ΡΠΊΡΠΈΠΏΡ. ΠΠ°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°, ΡΠ΅ ΠΏΡΠ΅ΠΊΠ°ΡΠ°ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ scratch/ ΠΈΠ»ΠΈ ΠΏΠΎ-Π΄ΡΠ»Π±ΠΎΠΊΠΎ, Π²src/... ΠΈ Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Waf. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΊΡΠ΄Π΅ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°ΡΠ΅ ΠΈ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Waf ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
$ ../../../../waf ...Π½ΠΎ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΌΠΎΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΠΏΠΎΠ΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠ΄ΠΈΠ½ ΠΎΡ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡΠ΅ Π½Π°ΡΠΈΠ½ΠΈ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, ΠΊΠ°ΡΠΎ emacs ΠΈΠ»ΠΈ vim, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΎΡΠ²Π°ΡΡΡ Π΄Π²Π΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π½ΠΈ ΡΠ΅ΡΠΈΠΈ, Π΅Π΄Π½Π°ΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° nsβ3, Π° Π²ΡΠΎΡΠ°ΡΠ° Π·Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΡΠ°ΠΌΠΎ tarball, ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°:
$ export NS3DIR="$PWD"
$ function waff { cd $NS3DIR && ./waf $* ; }
$ cd scratch
$ waff buildΠ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠΌΠ°ΠΌΠ»ΠΈΠ²ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΡΡΠΈΠ²ΠΈΠ°Π»Π΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ waf ΠΏΠΎ ΠΎΠ±ΡΠ°Π·Π΅Ρ exec ../.. /waf. ΠΠΎΠ»Ρ, Π½Π΅ ΠΏΡΠ°Π²Π΅ΡΠ΅ ΡΠΎΠ²Π°. Π’ΠΎ ΠΎΠ±ΡΡΠΊΠ²Π° Π½ΠΎΠ²Π°ΡΠΈΡΠ΅ ΠΈ ΠΏΡΠΈ Π»ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡΡΠ΄Π½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π°Π΅ΠΌΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°. Π Π΅ΡΠ΅Π½ΠΈΡΡΠ°, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅, ΡΠ° ΠΏΡΡΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ΅.
3.5 Π’Π΅ΡΡΠ²Π°Π½Π΅ Π½Π° ns-3
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ns-3, ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΠΊΠΈ ΡΠΊΡΠΈΠΏΡΠ° ./test.py:
$ ./test.pyΠ’Π΅Π·ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ Ρ Waf. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠ΅
92 ΠΎΡ 92 ΡΠ΅ΡΡΠ° ΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈ (92 ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈ, 0 Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΈ, 0 ΡΠ΅ ΡΡΠΈΠ½Π°Ρ
Π°, 0 Π³ΡΠ΅ΡΠΊΠΈ valgrind)Π’ΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ²Π°Π»ΠΈ, ΡΡΠΈΠ²ΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π³ΡΠ΅ΡΠΊΠΈ valgrind, ΡΠΊΠ°Π·Π²Π°ΡΠΈ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΈ ΠΊΠΎΠ΄Π°.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π΅Π½ ΠΎΡΡΠ΅Ρ ΠΎΡ Waf ΠΈ ΡΠ΅ΡΡΠ΅ΡΠ°, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ΅ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:
Waf: ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: ΠΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²ΡΡΡΠ΅Π½ (1.799s)
ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ:
aodv applications bridge
click config-store core
csma csma-layout dsdv
emu energy flow-monitor
internet lte mesh
mobility mpi netanim
network nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagation
spectrum stats tap-bridge
template test tools
topology-read uan virtual-net-device
visualizer wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite object
PASS: TestSuite random-number-generators
92 ΠΎΡ 92 ΡΠ΅ΡΡΠ° ΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈ (92 ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈ, 0 Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΈ, 0 ΡΠ΅ ΡΡΠΈΠ½Π°Ρ
Π°, 0 Π³ΡΠ΅ΡΠΊΠΈ valgrind)
Π’Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π·Π° Π±ΡΡΠ·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ns-3. (ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΡΠ΅Π΄ΡΡ Π½Π° Π»ΠΈΠ½ΠΈΠΈΡΠ΅ βPASS: ...β ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π°ΡΠΈΡΠ°, ΡΠΎΠ²Π° Π΅ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ. ΠΠ°ΠΆΠ½ΠΎ Π΅, ΡΠ΅ Π² ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΈΡ ΡΠ΅Π΄ Π² ΠΊΡΠ°Ρ Π½Π° ΠΎΡΡΠ΅ΡΠ° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈ; Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΡΠ΅ΡΡ Π½Π΅ Π΅ Π·Π°Π²ΡΡΡΠΈΠ» Π½Π΅ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ»ΠΈ ΡΠ΅ Π΅ ΡΡΠΈΠ½Π°Π».) Π Waf, ΠΈ test.py ΡΠ΅ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ΄ΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½Π°ΡΠ°.
3.6 Π‘ΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°
ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° Waf. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ ΠΏΡΡΠΈΡΠ°ΡΠ° ΠΊΡΠΌ ΠΎΠ±ΡΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ° Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈ ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΏΡΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Waf Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ -β―-run. ΠΠ΅ΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π·Π° ns-3 Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ° Π½Π° Π²ΡΠ΅ΠΏΡΠΈΡΡΡΡΠ²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° hello world, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ ./waf --run hello-simulatorWaf ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈ Π΄Π°Π»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈ, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Waf ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π΄Π°Π΄Π΅ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄.
Hello SimulatorΠΠΎΠ·Π΄ΡΠ°Π²Π»Π΅Π½ΠΈΡ! Π‘Π΅Π³Π° ΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π½Π° nsβ3!
ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²Ρ, Π°ΠΊΠΎ Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°?
ΠΠΊΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Waf, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ, ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π΅ Π·Π°Π²ΡΡΡΠΈΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π½ΠΎ Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π° βHello Simulatorβ, Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΡΠ΅ Π² ΡΠ°ΡΡΡΠ° [Π‘Π±ΠΎΡΠΊΠ°-Ρ-Waf] ΡΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° optimized, Π½ΠΎ Π΄Π° ΡΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ½Π°Π»ΠΈ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΡΠ΅ΠΆΠΈΠΌ Π΄Π΅Π±ΡΠ³. Π¦Π΅Π»ΠΈΡΡ ΠΈΠ·Ρ ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Π°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ nsβ3, ΠΊΠΎΠΉΡΠΎ Π·Π°ΠΏΠΈΡΠ²Π° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠ΅ΡΠ°Ρ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Π°ΡΠ°. ΠΠ·Ρ ΠΎΠ΄ΡΡ ΠΎΡ ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠΎΠ΄ β ΡΠΎΠΉ Π΅ "ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½". ΠΠΊΠΎ Π½Π΅ Π²ΠΈΠΆΠ΄Π°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π° βHello Simulatorβ, Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ . /waf configure --build-profile=debug --enable-examples --enable-testsΠ·Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ Waf ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ nsβ3, ΠΊΠΎΠΈΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅-ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ Π°ΠΊΡΡΠ°Π»Π½Π°ΡΠ° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅
$ ./wafΠ‘Π΅Π³Π°, Π°ΠΊΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° hello-simulator, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ.
3.6.1 ΠΠΎΠΌΠ°Π½Π΄Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ
ΠΠ° Π΄Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° nsβ3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½:
$ . /waf --run --command-template="%s "ΠΠ°ΠΌΠ΅Π½Π΅ΡΠ΅ Ρ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΠΈ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅. ΠΡΠ³ΡΠΌΠ΅Π½Ρ -β―-command-template Π·Π° Waf Π²ΡΡΡΠ½ΠΎΡΡ Π΅ ΡΠ΅ΡΠ΅ΠΏΡΠ° Π·Π° ΡΡΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅Π°Π»Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ Waf ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. Waf ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°, ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π΅ Π·Π°Π²ΡΡΡΠ΅Π½Π°, Π·Π°Π΄Π°Π²Π° ΠΏΡΡΠΈΡΠ° ΠΊΡΠΌ ΠΎΠ±ΡΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ ΠΈ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΠΉΠΊΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΏΡΠ»Π½ΠΈΡΠ΅Π»Ρ %s, ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡ ΡΠ°ΠΉΠ». ΠΠΊΠΎ ΡΠΎΠ·ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΠΈ ΡΠ΅ ΡΡΡΡΠ²Π° ΡΠ»ΠΎΠΆΠ΅Π½, ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΏΠΎ-ΠΏΡΠΎΡΡ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° nsβ3 ΠΈ Π½Π΅ΠΉΠ½ΠΈΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ, ΠΏΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈ ΠΊΠ°Π²ΠΈΡΠΊΠΈ:
$ . /waf --run ' --arg1=value1 --arg2=value2 ...'ΠΡΡΠ³, ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΏΡΠΈΠΌΠ΅Ρ Π΅ ΠΈΠ·Π±ΠΎΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π°Π±ΠΎΡΠΈ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΠ΅ΡΡΠΎΠ² Π½Π°Π±ΠΎΡ (suite) mytest (Π½Π°ΠΈΡΡΠΈΠ½Π°, ΡΠ°ΠΊΡΠ² Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°). ΠΠΎ-Π³ΠΎΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠ° . /test.py Π·Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΠΎΠ²Π΅, ΠΊΠΎΠΉΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ test-runner. ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ test-runner Π½Π°ΠΏΡΠ°Π²ΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΅Π΄ΠΈΠ½ ΡΠ΅ΡΡ:
$ .\/waf --run test-runner --command-template="%s --suite=mytest --verbose"ΠΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° test-runner. Π’ΡΠΉ ΠΊΠ°ΡΠΎ mytest Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°, ΡΠ΅ Π±ΡΠ΄Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π³ΡΠ΅ΡΠΊΠ°. ΠΠ° Π΄Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠ°ΡΠ΅ Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ test-runner, Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅:
$ .\/waf --run test-runner --command-template="%s --help"3.6.2 ΠΠ΅Π±ΡΠ³Π²Π°Π½Π΅
ΠΠ° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° nsβ3 ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π΄ΡΡΠ³Π° ΡΡΠΈΠ»ΠΈΡΠ°, ΠΊΠ°ΡΠΎ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, gdb) ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, valgrind), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΡΠΎΡΠΌΠ° -β―-command-template = "β¦". ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ° gdb Π²Π°ΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° hello-simulator nsβ3 Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅:
$ .\/waf --run=hello-simulator --command-template="gdb %s --args "ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° nsβ3 ΠΈΠ΄Π²Π° Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ -β―-run, Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° (ΡΡΠΊ gdb) Π΅ ΠΏΡΡΠ²ΠΈΡΡ ΡΠΎΠΊΠ΅Π½ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° -β―-command-template. ΠΠΏΡΠΈΡΡΠ° -β―-args ΡΡΠΎΠ±ΡΠ°Π²Π° gdb, ΠΊΠ°ΡΠΎ ΠΎΡΡΠ°Π½Π°Π»Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° βΠΏΠΎ-Π΄ΠΎΠ»Π½Π°β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°. (ΠΡΠΊΠΎΠΈ Π²Π΅ΡΡΠΈΠΈ gdb Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Ρ ΠΎΠΏΡΠΈΡΡΠ° -β―-args. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΎΡ -β―-command-template ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ gdb args.) ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡ ΠΏΠΎΠ΄ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°:
$ .\/waf --run test-runner --command-template="gdb %s --args --suite=mytest --verbose"3.6.3 Π Π°Π±ΠΎΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
Waf ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΎΡ ΡΠ²ΠΎΠ΅ΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π³ΠΎΡΠ½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ nsβ3. Π’Π°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ° ΡΡΠ°Π²Π° ΡΠ°Π±ΠΎΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½ΠΈ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΡΠ΅, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈΠ·Π²ΡΠ½ Π΄ΡΡΠ²ΠΎΡΠΎ Ρ ΠΈΠ·Ρ
ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π½Π° nsβ3? ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° -β―-cwd:
$ .\/waf --cwd=...ΠΠΎΠΆΠ΅ Π΄Π° Π²ΠΈ Π΅ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° ΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π½Π΅ΠΏΡΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅:
$ function waff {
CWD="$PWD"
cd $NS3DIR >\/dev\/null
.\/waf --cwd="$CWD" $*
cd - >\/dev\/null
}Π’ΠΎΠ²Π° Π΄Π΅ΠΊΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π·Π°ΠΏΠ°Π·Π²Π° ΡΠ΅ΠΊΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Waf, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠΊΠ°Π·Π²Π° Waf Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° Π·Π°ΠΏΠ°Π·Π΅Π½Π°ΡΠ° ΠΏΡΠ΅Π΄ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΠ΅ΠΊΡΡΠ° ΡΠ°Π±ΠΎΡΠ½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. Π‘ΠΏΠΎΠΌΠ΅Π½Π°Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° -β―-cwd Π·Π° ΠΏΡΠ»Π½ΠΎΡΠ°ΡΠ° Π½Π° ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Waf ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° Π³ΠΎΡΠ½ΠΎ Π½ΠΈΠ²ΠΎ ΠΈ ΡΠ°ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
