
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 Π΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΡΠΊ ΠΈΠ»ΠΈ Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΡΠ΅ ΡΡΠ΅Π΄Π° nsβ3-allinone. Π’ΠΎΠ²Π° Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ΡΠΎ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π°ΠΉ-ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° nsβ3. ΠΠΊΠΎ ΡΡΠ΅ Π½ΠΎΠ²ΠΈ Π² Git, ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ΅ "ΡΠΎΡΠΊ" ΠΈ "ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅" ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ° Π²ΠΈ Π½Π΅ΠΏΠΎΠ·Π½Π°ΡΠΈ; Π°ΠΊΠΎ Π΅ ΡΠ°ΠΊΠ°, ΠΏΡΠ΅ΠΏΠΎΡΡΡΠ²Π°ΠΌΠ΅ Π²ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°ΡΠ΅ (ΡΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΠΊΠΎΠΏΠΈΡ) ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° GitLab.com, ΠΊΠ°ΠΊΡΠΎ ΡΠ»Π΅Π΄Π²Π°:
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/ns-3-allinone.git
$ cd ns-3-allinone ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΠΏΡΠ΅Π³Π»Π΅Π΄ΡΡ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π²ΠΈ nsβ3-allinone ΠΌΠ°Π»ΠΊΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΠΎΠΏΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ Π°ΡΡ ΠΈΠ² Π½Π° Π²Π΅ΡΡΠΈΡΡΠ°. Π’Ρ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:
$ ls
build.py constants.py download.py README util.pyΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° download.py, ΠΊΠΎΠΉΡΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅ nsβ3 ΠΈ ΡΠ²ΡΡΠ·Π°Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄. Π’ΡΠΊ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ·Π±ΠΎΡ: ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ΅Π½ ΡΠ½ΠΈΠΌΠΊΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° nsβ3:
$ python download.pyΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈΡΡΠ° nsβ3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ»Π°Π³Π° -n Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡΡΠ°:
$ python download.py -n ns-3.29Π‘Π»Π΅Π΄ ΡΠ°Π·ΠΈ ΡΡΡΠΏΠΊΠ° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° nsβ3-allinone ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ nsβ3, bake, pybindgen ΠΈ netanim.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°
ΠΠ° ΠΌΠ°ΡΠΈΠ½Π° Ρ ΡΠΈΡΡΠ° Ubuntu16.04 ΠΌΠΈ Π±Π΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄: $ sudo python3 download.py -n ns-3.29 (ΡΡΠΊ ΠΈ Π½Π°ΡΠ°ΡΡΠΊ Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π½Π° ΠΏΡΠ΅Π²ΠΎΠ΄Π°ΡΠ°).
3.3.1 ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3 Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Bake
ΠΠ²Π°ΡΠ° ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° (Π°ΡΡ ΠΈΠ² Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ nsβ3-allinone ΡΡΠ΅Π· Git) ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° nsβ3 Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ (pybindgen Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Python ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ ΠΈ netanim Π·Π° Π°Π½ΠΈΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ΅ΠΆΠ°ΡΠ°). Π’ΡΠ΅ΡΠΈΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π² nsβ3-allinone, ΡΠ΅ Π½Π°ΡΠΈΡΠ° bake.
ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° β ΡΠΎΠ²Π° Π΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π·Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠΎΡΡΡΠ΅Ρ ΠΎΡ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° nsβ3. ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° nsβ3, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡΠ° nsβ3, ΠΊΠ°ΡΠΎ ΡΡΠ΅Π΄Π° Direct Code Execution, CradleNetwork Simulation Cradle, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Python ΠΏΡΠΈΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ βΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡβ nsβ3.
ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠ°
CradleNetwork Simulation Cradle β ΡΠ°ΠΌΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ² ΡΠΈΠΌΡΠ»Π°ΡΠΎΡ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Π°Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΡΠ΅ΠΊΠΎΠ²Π΅ TCP / IP.
ΠΠΊΠΎ ΡΠΌΡΡΠ°ΡΠ΅, ΡΠ΅ Π²Π°ΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° nsβ3 ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΡΡ Π½Π° ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ.
Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° nsβ3 ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π±Π΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ Π² tar-Π²Π΅ΡΡΠΈΡ. Π Π²Π΅ΡΡΠΈΡΡΠ° Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠ°ΠΉΠ» ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° Π°ΠΊΡΡΠ°Π»Π½ΠΈ ΠΊΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ°. Π’ΠΎΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π΅ΡΡΠΈΡ ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° Ρ Π²Π΅ΡΡΠΈΡΡΠ° nsβ3.29, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΡΠ°Π·ΠΈ Π²Π΅ΡΡΠΈΡ nsβ3 ΠΈΠ»ΠΈ ΠΏΠΎ-ΡΠ°Π½Π½ΠΈ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π·Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ (Π°ΠΊΠΎ ΡΠ°ΠΉΠ»ΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° bakeconf.xml Π½Π΅ Π΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½).
ΠΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π°ΠΉ-Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ bake, ΠΊΠ°ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ² Π²Π°ΡΠΈΡ Linux ΠΊΠΎΠ½Π·ΠΎΠ» (ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΡΠ΅ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Git):
$ cd
$ mkdir workspace
$ cd workspace
$ git clone https://gitlab.com/nsnam/bake.gitΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° git, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
ΠΠ»ΠΎΠ½ΠΈΡΠ°Π½Π΅ Π² 'bake'...
remote: ΠΠΎΠΌΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 2086, Π³ΠΎΡΠΎΠ²ΠΎ.
remote: ΠΡΠΎΠ΅Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 100% (2086/2086), Π³ΠΎΡΠΎΠ²ΠΎ.
remote: ΠΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 100% (649/649), Π³ΠΎΡΠΎΠ²ΠΎ.
remote: ΠΠ±ΡΠΎ 2086 (delta 1404), ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ 2078 (delta 1399)
ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, Π³ΠΎΡΠΎΠ²ΠΎ.
Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄Π΅Π»ΡΠΈ: 100% (1404/1404), Π³ΠΎΡΠΎΠ²ΠΎ.Π‘Π»Π΅Π΄ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° clone ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΈΠΌΠ΅ bake, ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:
$ cd bake
$ ls
bake bakeconf.xml bake.py doc examples generate-binary.py test TODOΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΡΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Python ΡΠΊΡΠΈΠΏΡΠ°, Python ΠΌΠΎΠ΄ΡΠ» Ρ ΠΈΠΌΠ΅ bake ΠΈ XML ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ°ΠΉΠ». Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° nsβ3 ΠΏΠΎ Π²Π°Ρ ΠΈΠ·Π±ΠΎΡ. ΠΠ°Π»ΠΈΡΠ½ΠΈ ΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π»ΠΈ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ°:
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 ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°, ΠΈΠ·ΡΠ΅Π³Π»ΡΠΉΠΊΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° source ΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°, ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΠΉΠΊΠΈ ΡΠ΅ Π½Π° Π±ΠΈΠ½Π°ΡΠ½ΠΈΡ ΡΠ°ΠΉΠ», Π½ΠΎ Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π½Π΅ ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ°, Π² ΠΊΠΎΡΡΠΎ Π±Π΅ΡΠ΅ ΠΊΠ°ΡΠ΅Π½, Π΅ ΠΆΠ΅Π»Π°ΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈ ΠΏΡΡΡΡ ΠΊΡΠΌ bake Π²Π°ΡΠΈΡ ΠΏΡΡ (ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° ΡΡΠ΅Π΄Π° PATH), Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½ (ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Linux bash). ΠΡΠ΅ΠΌΠΈΠ½Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° βbakeβ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π·Π°Π΄Π°ΠΉΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°:
$ export BAKE_HOME=`pwd`
$ export PATH=$PATH:$BAKE_HOME:$BAKE_HOME/build/bin
$ export PYTHONPATH=$PYTHONPATH:$BAKE_HOME:$BAKE_HOME/build/libΠ’ΠΎΠ²Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° bake.py Π² ΠΏΡΡΡ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ° ΠΈ ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π΄Π° Π½Π°ΠΌΠΈΡΠ°Ρ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ bake. Π Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ bake, ΠΎΠΏΠΈΡΠ°Π½Π°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° PATH ΠΈ PYTHONPATH Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°, Π½ΠΎ Π·Π° ΠΏΡΠ»Π½ΠΎΡΠΎ ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° nsβ3-allinone (Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ) ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°.
ΠΡΠΈΠ΄Π΅ΡΠ΅ Π² ΡΠ°Π±ΠΎΡΠ½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ ./bake.py configure -e ns-3.29Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ»ΠΈΠΌ ΠΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅:
$ ./bake.py checkΠ’ΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΡΠ°ΠΊΠΎΠ²Π°:
> Python - OK
> GNU C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> ΠΡΡ, ΡΡΡΡΠ΅Π½ Π·Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΊΠ°ΡΠΎ Mercurial, CVS, Git ΠΈ Bazaar ΡΠ° ΠΎΡΠ½ΠΎΠ²Π½ΠΈ Π½Π° ΡΠ°Π·ΠΈ ΡΡΡΠΏΠΊΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ΄Π°. ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ Π»ΠΈΠΏΡΠ²Π°ΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΏΠΎ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈΡ Π½Π°ΡΠΈΠ½ Π·Π° Π²Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° (Π°ΠΊΠΎ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ) ΠΈΠ»ΠΈ ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π·Π° ΠΏΠΎΠΌΠΎΡ ΠΊΡΠΌ Π²Π°ΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΎΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΡΠ΅ ΡΠΎΡΡΡΠ΅ΡΠ°:
$ ./bake.py downloadΠ Π΅Π·ΡΠ»ΡΠ°ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π½Π΅ΡΠΎ ΡΠ°ΠΊΠΎΠ²Π°:
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ setuptools - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ libgoocanvas2 - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ gi-cairo - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ pygobject - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ pygraphviz - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ python-dev - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ qt - OK
>> Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½Π°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ g++ - OK
>> ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° pybindgen-0.19.0.post4+ng823d8b2 (ΡΠ΅Π»Π΅Π²Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ:pybindgen) - OK
>> ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° netanim-3.108 - OK
>> ΠΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ns-3.29 - OKΠ’ΠΎΠ²Π° ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ° ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½ΠΈ ΡΡΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΠΊΠ°. Π‘Π΅Π³Π° ΠΎΡΠΈΠ΄Π΅ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° source ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ls; ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅:
$ cd source
$ ls
netanim-3.108 ns-3.29 pybindgenΠ‘Π΅Π³Π° ΡΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΡΠ³Π»ΠΎΠ±ΠΈΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡΠ° nsβ3.
3.4 Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Π½Π° ns-3
ΠΠ°ΠΊΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ΡΠΎ Π½Π° nsβ3, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π΄Π° ΡΠ³Π»ΠΎΠ±ΠΈΡΠ΅ nsβ3. ΠΠ°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π΅ΠΌ, Π΅, ΡΠ΅ nsβ3 ΡΠ΅ ΡΠ³Π»ΠΎΠ±ΡΠ²Π° Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΡΠ³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅, Π½Π°ΡΠ΅ΡΠ΅Π½ Waf, ΠΎΠΏΠΈΡΠ°Π½ ΠΏΠΎ-Π΄ΠΎΠ»Ρ. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Ρ Waf, Π½ΠΎ ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΄ΠΎΠ±Π½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ ΠΈΠ»ΠΈ Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠ°ΡΠΎΠ²Π°, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° Waf, ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ Π½Π° build.py ΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Ρ bake.
3.4.1 Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° build.py
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π’Π°Π·ΠΈ ΡΡΡΠΏΠΊΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π΅ Π½Π°Π»ΠΈΡΠ½Π° ΡΠ°ΠΌΠΎ ΠΎΡ Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ Π°ΡΡ ΠΈΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅; Π° Π½Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½Π° ΠΏΡΠ΅Π· git ΠΈΠ»ΠΈ bake.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π°ΡΡ ΠΈΠ² Π½Π° ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ tarball, Π² nsβ3βallinone ΠΈΠΌΠ° ΡΠ΄ΠΎΠ±Π΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅. Π’ΠΎΠΉ ΡΠ΅ Π½Π°ΡΠΈΡΠ° build.py. Π’Π°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° Π²Π°Ρ ΠΏΠΎ Π½Π°ΠΉ-ΠΏΠΎΠ»Π΅Π·Π½ΠΈΡ Π½Π°ΡΠΈΠ½. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ nsβ3 ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° nsβ3, Waf, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ Π² ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ.
ΠΠΊΠΎ ΡΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° tarball, ΡΠΎ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ~ /workspace ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΈΠΌΠ΅ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ ns-allinone-3.29. ΠΡΠ²Π΅Π΄Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
$ ./build.py --enable-examples --enable-tests
ΠΡΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° build.py ΠΏΡΠΈΠ»ΠΎΠΆΠΈΡ ΠΌΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄, Π·Π° Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΡΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, ΠΊΠΎΠΈΡΠΎ Π² nsβ3 ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π½Π΅ ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΡΡΡΠΎΠΈ Π²ΡΠΈΡΠΊΠΈ Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π°, Π°ΠΊΠΎ ΠΆΠ΅Π»Π°Π΅ΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ nsβ3 Π±Π΅Π· ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° Π²Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ°.
Π©Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, ΠΏΠΎΠΊΠ°Π·Π²Π°Π½ΠΈ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠ° ΠΏΡΠΈ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ°ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠ»ΠΈ. ΠΡΡΠ²ΠΎ, ΡΠΊΡΠΈΠΏΡΡΡ ΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ° Π΄Π° ΡΡΠ±Π΅ΡΠ΅ Π°Π½ΠΈΠΌΠ°ΡΠΎΡΠ° netanim, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ pybindgen ΠΈ Π½Π°ΠΊΡΠ°Ρ, nsβ3. Π ΠΊΡΠ°Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ:
Waf: Leaving directory '/path/to/workspace/ns-allinone-3.29/ns-3.29/build'
'build' finished successfully (6m25.032s)
Modules built:
antenna aodv applications
bridge buildings config-store
core csma csma-layout
dsdv dsr energy
fd-net-device flow-monitor internet
internet-apps lr-wpan lte
mesh mobility mpi
netanim (no Python) network nix-vector-routing
olsr point-to-point point-to-point-layout
propagation sixlowpan spectrum
stats tap-bridge test (no Python)
topology-read traffic-control uan
virtual-net-device visualizer wave
wifi wimax
Modules not built (see ns-3 tutorial for explanation):
brite click openflow
Leaving directory ./ns-3.29Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠΈ ΡΠ΅Π΄Π° Π½Π° Π»ΠΈΡΡΠΈΠ½Π³Π° Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ ΡΡΠ±ΡΠ°Π½ΠΈ:
Modules not built (see ns-3 tutorial for explanation):
brite clickΠ’ΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π½Π° ns-3, ΠΊΠΎΠΈΡΠΎ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π²ΡΠ½ΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ ΠΈΠ»ΠΈ ΡΠ΅ Π·Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΡ Π½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°. Π’ΠΎΠ²Π° Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠΈΠΌΡΠ»Π°ΡΠΎΡΡΡ Π½Π΅ Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ ΠΈΠ»ΠΈ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.
3.4.2 Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Ρ Bake
ΠΠΊΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΎΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ bake, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ns-3. ΠΡΠ²Π΅Π΄Π΅ΡΠ΅:
$ ./bake.py buildΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΎ ΡΠ°ΠΊΠΎΠ²Π°:
>> Building pybindgen-0.19.0.post4+ng823d8b2 - OK
>> Building netanim-3.108 - OK
>> Building ns-3.29 - OKΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°: ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΈ Π΄Π²Π΅ΡΠ΅ ΡΡΡΠΏΠΊΠΈ Π½Π°Π²Π΅Π΄Π½ΡΠΆ, ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅, ΠΊΠ°ΡΠΎ ΠΈΠ·Π²ΠΈΠΊΠ°ΡΠ΅ 'bake.py deploy'.
ΠΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΡΡ Π³ΡΠ΅ΡΠΊΠΈ, Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ, Π°ΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡΡ Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π΅Π½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΡΠΊΠΎΡΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΠΏΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡΠ°, ΡΠ²ΡΡΠ·Π°Π½ Ρ ΡΠ°ΠΊΡΠ°, ΡΠ΅ castxml ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ bake Π½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Π²ΠΈΠ΄Π°:
>> Building castxml - Problem
> Problem: Optional dependency, module "castxml" failed
This may reduce the functionality of the final build.
However, bake will continue since "castxml" is not an essential dependency.
For more information call bake with -v or -vvv, for full verbose mode.ΠΠ±Π°ΡΠ΅ castxml Π½ΡΠΆΠ΅Π½ Π΅ ΡΠ°ΠΌΠΎ Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Python ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ. ΠΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ (ΠΏΠΎ-ΡΠΊΠΎΡΠΎ Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ Π·Π°ΠΏΠΎΡΠ½Π°Ρ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡ ns-3), ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Ρ Π·Π° ΠΌΠΎΠΌΠ΅Π½ΡΠ°.
ΠΠΊΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅ Π³ΡΠ΅ΡΠΊΠ°, ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ Π²ΠΈ Π΄Π°Π΄Π΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π·Π° Π»ΠΈΠΏΡΠ²Π°ΡΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
$ ./bake.py showΠ©Π΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΠΏΠΈΡΠ²Π°ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅.
3.4.3 Π‘Π³Π»ΠΎΠ±ΡΠ²Π°Π½Π΅ Ρ Waf
ΠΠΎΡΠ΅Π³Π°, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ns-3, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ ΠΈΠ»ΠΈ ΡΠΊΡΠΈΠΏΡ build.py, ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ bake. Π’Π΅Π·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ns-3 ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅. ΠΡΡΡΠ½ΠΎΡΡ, ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Waf ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° Π½Π° ns-3. Waf ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΡΠ΅ Π·Π°Π΅Π΄Π½ΠΎ Ρ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ns-3. ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π±ΡΡΠ·ΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΊΡΠΌ ΠΏΡΡΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Waf. Π ΡΠ°ΠΊΠ°, Π·Π° Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ΅ΡΠ΅ ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° ns-3, ΠΊΠΎΡΡΠΎ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΡΠ΅.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠΎΠ²Π° Π½Π΅ Π΅ ΡΡΡΠΎΠ³ΠΎ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ, Π½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° Π²Π½Π΅ΡΠ΅ΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½Π°ΠΉ-ΠΏΠΎΠ»Π΅Π·Π½Π°ΡΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, Π΅ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π²ΠΈ Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΠ΅ΠΊΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π° Π²Π΅ΡΡΠΈΡ. ΠΠ° Π΄Π° ΠΎΠ±ΡΡΠ½ΠΈΡΠ΅ Π½Π° Waf ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ, Π²ΠΊΠ»ΡΡΠ²Π°ΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:
$ .\/waf clean
$ .\/waf configure --build-profile=optimized --enable-examples --enable-testsΠ’ΠΎΠ²Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Waf ΠΈΠ·Π²ΡΠ½ Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ (Π·Π° Π²Π°ΡΠ΅ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ). ΠΡΡΠ²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π΅ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ Π΅ Π΄ΠΎΠ±ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° (Π²ΠΆ. ΡΡΡΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ΅ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΏΠΎ-Π΄ΠΎΠ»Ρ); ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ ΠΏΡΠ΅Π΄ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, Π½Π°ΠΌΠΈΡΠ°ΡΠΈ ΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° build\/. ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡΡ Π΅ ΠΏΡΠ΅Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° ΡΠ»Π΅Π΄Π½ΠΈΡ:
ΠΠ°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΏΠΊΠ°ΡΠ° Π·Π° : /home/ns3user/workspace/bake/source/ns-3-dev
ΠΠ°ΡΡΡΠΎΠΉΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π° Π·Π° : /home/ns3user/workspace/bake/source/ns-3-dev/build
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'gcc' (C ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ) : /usr/bin/gcc
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²Π΅ΡΡΠΈΡ Π½Π° cc : 7.3.0
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'g++' (C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ) : /usr/bin/g++
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ»Π°Π³ -march=native : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ»Π°Π³ -Wl,--soname=foo : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ»Π°Π³ -std=c++11 : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Boost Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ : Π·Π°Π³Π»Π°Π²ΠΈΡ Π½Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ --boost-includes (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎΠΌΠΎΡΡΠ°)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Boost Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ : Π·Π°Π³Π»Π°Π²ΠΈΡ Π½Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ, ΠΌΠΎΠ»Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ --boost-includes (Π²ΠΈΠΆΡΠ΅ ΠΏΠΎΠΌΠΎΡΡΠ°)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'python' : /usr/bin/python
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²Π΅ΡΡΠΈΡ Π½Π° python >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
ΠΠ°ΠΏΠΈΡΠ²Π°Π½Π΅ Π΄ΠΎ python-config Π·Π° ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ pyembed '--cflags --libs --ldflags' : Π΄Π°
Π’Π΅ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° pyembed : Π΄Π°
ΠΠ°ΠΏΠΈΡΠ²Π°Π½Π΅ Π΄ΠΎ python-config Π·Π° ΡΠ»Π°Π³ΠΎΠ²Π΅ΡΠ΅ pyext '--cflags --libs --ldflags' : Π΄Π°
Π’Π΅ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° pyext : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ»Π°Π³ -fvisibility=hidden : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ»Π°Π³ -Wno-array-bounds : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° pybindgen : ../pybindgen ,!(ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'pybindgen' : 0.19.0. ,!post4+g823d8b2
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²Π΅ΡΡΠΈΡ Π½Π° pybindgen : 0.19.0. ,!post4+g823d8b2
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΊΠΎΠ΄ΠΎΠ² ΡΡΠ°Π³ΠΌΠ΅Π½Ρ : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ uint64_t ΠΈ unsigned long : Π½Π΅
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΊΠΎΠ΄ΠΎΠ² ΡΡΠ°Π³ΠΌΠ΅Π½Ρ : Π½Π΅
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΡΠ°Π²Π΅Π½ΡΡΠ²ΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ uint64_t ΠΈ unsigned long long : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° apidefs, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° Python Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ : gcc-LP64
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²ΡΡΡΠ΅ΡΠ΅Π½ GCC cxxabi : Π·Π°Π²ΡΡΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'pygccxml' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° click : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'pkg-config' : /usr/bin/pkg- ,!config
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'gtk+-3.0' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'libxml-2.0' : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° uint128_t : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° __uint128_t : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠ΅ΡΠΈΠ·Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ : 128-Π±ΠΈΡΠΎΠ² ΡΡΠ»ΠΎ ΡΠΈΡΠ»ΠΎ ,!(ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅)
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» stdint.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» inttypes.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» sys/inttypes.h : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» sys/types.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» sys/stat.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» dirent.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» stdlib.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» signal.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» pthread.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» stdint.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» inttypes.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» sys/inttypes.h : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° rt : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» sys/ioctl.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» net/if.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» net/ethernet.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» linux/if_tun.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» netpacket/packet.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° NSC : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'sqlite3' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π·Π°Π³Π»Π°Π²Π΅Π½ ΡΠ°ΠΉΠ» linux/if_tun.h : Π΄Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi' : 3.26.1
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.GObject' : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'cairo' : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'pygraphviz' : 1.4rc1
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.Gtk' : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.Gdk' : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.Pango' : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° python ΠΌΠΎΠ΄ΡΠ» 'gi.repository.GooCanvas' : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'sudo' : /usr/bin/sudo
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'valgrind' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π°
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° 'gsl' : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ python-config : Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ»Π°Π³ -fstrict-aliasing : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ»Π°Π³ -fstrict-aliasing : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ»Π°Π³ -Wstrict-aliasing : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ»Π°Π³ -Wstrict-aliasing : ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° 'doxygen' : /usr/bin/doxygen
---- Π Π΅Π·ΡΠΌΠ΅ Π½Π° ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ns-3:
ΠΡΠΎΡΠΈΠ» Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ : ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½
ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ :
BRITE ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (BRITE Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (Π²ΠΈΠΆΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° --with-,!brite))
Π‘ΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π·Π° ΡΡΠ±ΠΈΡΠΈΡ DES : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ)
ΠΠΌΡΠ»ΡΡΠΈΡ FdNetDevice : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π°
ΠΡΠΈΠΌΠ΅ΡΠΈ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
Π€Π°ΠΉΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ NetDevice : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
GNU ΠΠ°ΡΡΠ½Π° ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° (GSL) : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (GSL Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½)
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Gcrypt : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π°
(Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libgcrypt Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π°: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ,!libgcrypt-config Π·Π° Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.) GtkConfigStore : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° 'gtk+-3.0 >= 3.0' Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π°)
MPI ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (ΠΎΠΏΡΠΈΡ --enable-mpi Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π°)
ns-3 Click ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (nsclick Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (Π²ΠΈΠΆΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° --with-,!nsclick))
ns-3 OpenFlow ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° boost Π½Π΅ ΡΠ° Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ)
Cradle Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²Π°ΡΠ° ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (NSC Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ (Π²ΠΈΠΆΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° --with-nsc))
PlanetLab FdNetDevice : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ (ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° PlanetLab Π½Π΅ Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°ΡΠ° ,!(Π²ΠΈΠΆΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° --force-planetlab)) PyViz Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΎΡ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Python API ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° (ΠΠΈΠΏΡΠ²Π° 'pygccxml' Python ΠΌΠΎΠ΄ΡΠ»)
Python ΠΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
Π‘ΠΈΠΌΡΠ»Π°ΡΠΎΡ Π² Π Π΅Π°Π»Π½ΠΎ ΠΡΠ΅ΠΌΠ΅ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
ΠΠ·Ρ
ΠΎΠ΄ Π½Π° Π΄Π°Π½Π½ΠΈ Π·Π° SQLite ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ (Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° 'sqlite3' Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π°)
Tap Bridge : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
Tap FdNetDevice : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
Π’Π΅ΡΡΠΎΠ²Π΅ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
ΠΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ sudo Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° suid Π±ΠΈΡ : Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ (ΠΎΠΏΡΠΈΡ --enable-sudo Π½Π΅ Π΅ ΠΈΠ·Π±ΡΠ°Π½Π°)
XmlIo : Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½
'configure' Π·Π°Π²ΡΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ (6.387s)ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅. ΠΡΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ Π½Π° nsβ3 Π½Π΅ ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ XmlTo, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libxml-2.0. ΠΠΊΠΎ ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π° ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° nsβ3 Π½Π΅ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π°, ΡΠ΅ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΈΠΌΠ°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° sudo Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π±ΠΈΡ suid "ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° Π³ΡΡΠΏΠ°ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅" Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ. Π’ΠΎΠΉ Π½Π΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ Π·Π°ΡΠΎΠ²Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΡΠΎ "Π½Π΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π°" ("not enabled"). ΠΠ°ΠΊΡΠ°Ρ, Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ Waf Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° --check-config.
Π‘Π΅Π³Π° Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΈ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΠΎΡΠ»Π°Π΄ΡΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ, ΡΡΠ΄ΡΡΠΆΠ°ΡΠ° ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅.
$ .\/waf clean
$ .\/waf configure --build-profile=debug --enable-examples --enable-testsΠ‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΡΠ΅Π³Π° Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½Π° ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ ΠΎΡΠ»Π°Π΄ΡΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ nsβ3, ΠΊΠ°ΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅:
$ .\/wafΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡΡΠΏΠΊΠΈ Π²ΠΈ Π½Π°ΠΊΠ°ΡΠ°Ρ Π΄Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ ΡΠ°ΡΡ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° nsβ3 Π΄Π²Π° ΠΏΡΡΠΈ, Π½ΠΎ ΡΠ΅Π³Π° Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠΎΠ΄.
ΠΠ° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΠΊΠΎΠΉ ΠΏΡΠΎΡΠΈΠ» Π΅ Π°ΠΊΡΠΈΠ²Π΅Π½ Π·Π° Π΄Π°Π΄Π΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ .\/waf --check-profile
Waf: ΠΠ»ΠΈΠ·Π°Π½Π΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ `\/path\/to\/ns-3-allinone\/ns-3.29\/build'
ΠΡΠΎΡΠΈΠ» Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ: debugΠΠ±ΡΡΠ΄Π΅Π½ΠΈΡΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ build.py ΡΡΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ --enable-examples ΠΈ --enable-tests, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ Waf ΡΠΎΠΉ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ²Π° Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ:
$ .\/build.py --disable-pythonΡΠ΅Π°ΠΊΡΠΈΡΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅:
build.py: error: no such option: --disable-pythonΠΡΠ΅ ΠΏΠ°ΠΊ, ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ -β―- ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΡΠ΅Π· waf, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π³ΠΎΡΠ΅ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎΡΠΎ, ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ:
$ .\/build.py -- --disable-pythonΡΡΠΉ ΠΊΠ°ΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° .\/waf configure βdisable-python. ΠΡΠΎ ΠΎΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ²Π΅ΡΠ° Π·Π° Waf.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ
ΠΠ΅ΡΡΠΈΠΈΡΠ΅ Π½Π° ns-3 ΡΠ° ΡΠ΅ΡΡΠ²Π°Π½ΠΈ Ρ Π½Π°ΠΉ-Π½ΠΎΠ²ΠΈΡΠ΅ C++ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ, Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΡΠΊΠ°Π½Π΅ΡΠΎ ΠΈΠΌ Π² ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Π½Π° Linux ΠΈ MacOS. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Ρ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ, Π½ΠΎΠ²ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ Ρ Π½ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΡΠ΅ ΠΏΡΡΠΊΠ°Ρ, ΠΈ ΡΠ΅Π·ΠΈ Π½ΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ° ΠΏΠΎ-ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΈ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΡΠ°. ns-3 Π½Π°ΡΡΡΠΎΠΉΠ²Π° ΡΠ²ΠΎΡΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π΄Π° ΡΡΠ΅ΡΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ°ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈ, Π·Π°ΡΠΎΠ²Π° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π°, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎ-ΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π² ΠΏΠΎ-Π½ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΏΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΈ ΠΈΠΌΠ°ΡΠ΅ Π²Π΅ΡΡΠΈΡ ns-3.28 Π·Π° Fedora 28, ΠΊΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π°ΡΠ΅ Π½ΠΎΠ²Π° ΠΎΡΠ½ΠΎΠ²Π½Π° Π²Π΅ΡΡΠΈΡ gcc (gcc-8). ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π½Π° Π²Π΅ΡΡΠΈΡ ns-3.28 ΠΈΠ»ΠΈ ΠΏΠΎ-ΡΡΠ°ΡΠΈ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ΄ Fedora 28, ΠΏΡΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Gtk2+, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π³ΡΠ΅ΡΠΊΠ°:
/usr/include/gtk-2.0/gtk/gtkfilechooserbutton.h:59:8: error: unnecessary parentheses ,!in declaration of β__gtk_reserved1β [-Werror=parentheses] void (*__gtk_reserved1);Π Π²Π΅ΡΡΠΈΠΈΡΠ΅, Π·Π°ΠΏΠΎΡΠ²Π°ΡΠΈ ΠΎΡ ns-3.28.1, Waf Π΅ Π½Π°Π»ΠΈΡΠ½Π° ΠΎΠΏΡΠΈΡ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ. Π’Ρ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ° Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ»Π°Π³Π° "-Werror" Π² g++ ΠΈ clang++. Π’Π°Π·ΠΈ ΠΎΠΏΡΠΈΡ "--disable-werror" ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅:
$ ./waf configure --disable-werror --enable-examples --enable-testsΠΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅
ΠΡΠΊΠΎΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Waf ΠΈΠΌΠ°Ρ ΡΠΌΠΈΡΡΠ» ΡΠ°ΠΌΠΎ Π² Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅, Π° Π½ΡΠΊΠΎΠΈ Π΄Π΅ΠΉΡΡΠ²Π°Ρ ΡΠ°ΠΌΠΎ Π² Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π·Π° Π΅ΠΌΡΠ»Π°ΡΠΈΡ Π½Π° ns-3, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π·Π°Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π±ΠΈΡΠ° suid ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ sudo, ΠΊΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅. Π’ΠΎΠ²Π° ΡΠ΅ Π°Π½ΡΠ»ΠΈΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ ΠΎΡ Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΡΠΎ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅.
$ ./waf configure --enable-sudo --enable-examples --enable-testsΠΠΊΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°, Waf Π·Π°ΠΏΡΡΠΊΠ° sudo, Π·Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠΊΠ΅Ρ ΠΊΠΎΠ΄Π° Π½Π° Π΅ΠΌΡΠ»Π°ΡΠΎΡΠ°, Π·Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° Ρ ΠΏΡΠ°Π²Π°. root. Π Waf ΠΠ°Π»ΠΈΡΠ½ΠΈ ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΡΠΈΠΈ Π·Π° Π΅ΡΠ°ΠΏΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅. ΠΠ° Π΄Π° ΠΏΡΠΎΡΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈΡΠ΅, Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅:
$ ./waf --helpΠ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ.
ΠΡΠΎΡΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ
ΠΠ΅ΡΠ΅ Π²ΠΈΠ΄ΡΡ ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ Waf Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ debug ΠΈ optimized:
$ ./waf --build-profile=debugΠΠΌΠ° ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΏΡΠΎΡΠΈΠ» Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, release. ΠΠΏΡΠΈΡΡΠ° -d Π΅ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ Π½Π° --build-profile. ΠΡΠΎΡΠΈΠ»ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π»ΠΎΠ³ΠΈΡΠ°Π½Π΅, ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ (assertions) ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°:

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