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 ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Π²Π΅Π±-ΡΠ°ΠΉΡΠ°:
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΠ°ΠΊΠ΅Ρ/Π²Π΅ΡΡΠΈΡ
- ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ 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 ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ 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.
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, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ:
Cloning into 'bake'...
remote: Enumerating objects: 2086, done.
remote: Counting objects: 100% (2086/2086), done.
remote: Compressing objects: 100% (649/649), done.
remote: Total 2086 (delta 1404), reused 2078 (delta 1399)
Receiving objects: 100% (2086/2086), 2.68 MiB | 3.82 MiB/s, done.
Resolving deltas: 100% (1404/1404), done.
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ 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 β ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ , ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΡ ΡΡ ΠΏΠΎ ΡΠ΅ΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΠ°ΠΌΠΈ ΠΈ ΠΊΠΎΠΌΠΌΡΡΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ-ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠ΅ΡΠΈ.
Π’Π΅ΠΊΡΡΠΈΠΉ ΡΠ½Π°ΠΏΡΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (Π½Π΅ΡΠ΅Π»ΠΈΠ·Π½ΡΠΉ) nsβ3 ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ:
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°ΡΠ°ΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π² ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π² Π½ΠΈΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠ΅Π»ΠΈΠ·Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎ Π²ΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ·.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠ΄Π°, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Ρ Π½Π° Π²Π΅Π±-ΡΡΡΠ°Π½ΠΈΡΡ Β«nsβ3 ReleasesΒ»:
Π’Π΅ΠΏΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΡΠΆΠ½ΡΠ΅ Π½Π°ΠΌ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΠ°ΡΡΠΈ nsβ3, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Bake. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π²ΠΎΠ΄Π½ΡΡ ΡΠ»ΠΎΠ² ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Bake.
Bake ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π·Π°Π³ΡΡΠΆΠ°Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ source ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠ±ΠΎΡΠΎΡΠ½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. 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++ compiler - OK
> Mercurial - OK
> Git - OK
> Tar tool - OK
> Unzip tool - OK
> Make - OK
> cMake - OK
> patch tool - OK
> Path searched for tools: /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin ...
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Mercurial, CVS, Git ΠΈ Bazaar, ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ Π½Π° ΡΡΠΎΠΌ ΡΠ°Π³Π΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ΄. ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ (Π΅ΡΠ»ΠΈ ΡΠΌΠ΅Π΅ΡΠ΅) ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ Π·Π° ΠΏΠΎΠΌΠΎΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅:
$ ./bake.py download
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅:
>> Searching for system dependency setuptools - OK
>> Searching for system dependency libgoocanvas2 - OK
>> Searching for system dependency gi-cairo - OK
>> Searching for system dependency pygobject - OK
>> Searching for system dependency pygraphviz - OK
>> Searching for system dependency python-dev - OK
>> Searching for system dependency qt - OK
>> Searching for system dependency g++ - OK
>> Downloading pybindgen-0.19.0.post4+ng823d8b2 (target directory:pybindgen) - OK
>> Downloading netanim-3.108 - OK
>> Downloading ns-3.29 - OK
ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ, ΡΡΠΎ Π±ΡΠ»ΠΈ ΡΠΊΠ°ΡΠ°Π½Ρ ΡΡΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ 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. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ ΡΠ±ΠΎΡΠΊΠΈ nsβ3 Π±ΡΡΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΡΡ ΠΊ ΠΏΡΡΠΌΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Waf. ΠΡΠ°ΠΊ, Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ nsβ3, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ.
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ, Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π°. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π²Ρ Π½Π°ΡΡΡΠΎΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ΡΠ±ΠΎΡΠΊΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ. Π§ΡΠΎΠ±Ρ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Waf, ΡΡΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈ ΡΠ΅ΡΡΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
$ ./waf clean
$ ./waf configure --build-profile=optimized --enable-examples --enable-tests
ΠΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡ Waf Π²Π½Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ (Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°). ΠΠ΅ΡΠ²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΡΠΈΡΡΠΊΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΠ±ΠΎΡΠΊΠΈ, ΠΎΠ½Π° ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ, Π½ΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° (ΡΠ°ΠΊΠΆΠ΅ ΡΠΌ. ΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠ±ΠΎΡΠΊΠΈ Π½ΠΈΠΆΠ΅); ΡΡΠΎ ΡΠ΄Π°Π»ΠΈΡ ΡΠ°Π½Π΅Π΅ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ build/. ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ±ΠΎΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ²ΠΎΠ΄, ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
Setting top to : /home/ns3user/workspace/bake/source/ns-3-dev
Setting out to : /home/ns3user/workspace/bake/source/ns-3-dev/build
Checking for 'gcc' (C compiler) : /usr/bin/gcc
Checking for cc version : 7.3.0
Checking for 'g++' (C++ compiler) : /usr/bin/g++
Checking for compilation flag -march=native support : ok
Checking for compilation flag -Wl,--soname=foo support : ok
Checking for compilation flag -std=c++11 support : ok
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking boost includes : headers not found, please ,!provide a --boost-includes argument (see help)
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.3 : 2.7.15 python-config : /usr/bin/python-config
Asking python-config for pyembed '--cflags --libs --ldflags' flags : yes
Testing pyembed configuration : yes
Asking python-config for pyext '--cflags --libs --ldflags' flags : yes
Testing pyext configuration : yes
Checking for compilation flag -fvisibility=hidden support : ok
Checking for compilation flag -Wno-array-bounds support : ok
Checking for pybindgen location : ../pybindgen ,!(guessed)
Checking for python module 'pybindgen' : 0.19.0. ,!post4+g823d8b2
Checking for pybindgen version : 0.19.0. ,!post4+g823d8b2
Checking for code snippet : yes
Checking for types uint64_t and unsigned long equivalence : no
Checking for code snippet : no
Checking for types uint64_t and unsigned long long equivalence : yes
Checking for the apidefs that can be used for Python bindings : gcc-LP64
Checking for internal GCC cxxabi : complete
Checking for python module 'pygccxml' : not found
Checking for click location : not found
Checking for program 'pkg-config' : /usr/bin/pkg- ,!config
Checking for 'gtk+-3.0' : not found
Checking for 'libxml-2.0' : yes
checking for uint128_t : not found
checking for __uint128_t : yes
Checking high precision implementation : 128-bit integer ,!(default)
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for header sys/types.h : yes
Checking for header sys/stat.h : yes
Checking for header dirent.h : yes
Checking for header stdlib.h : yes
Checking for header signal.h : yes
Checking for header pthread.h : yes
Checking for header stdint.h : yes
Checking for header inttypes.h : yes
Checking for header sys/inttypes.h : not found
Checking for library rt : yes
Checking for header sys/ioctl.h : yes
Checking for header net/if.h : yes
Checking for header net/ethernet.h : yes
Checking for header linux/if_tun.h : yes
Checking for header netpacket/packet.h : yes
Checking for NSC location : not found
Checking for 'sqlite3' : not found
Checking for header linux/if_tun.h : yes
Checking for python module 'gi' : 3.26.1
Checking for python module 'gi.repository.GObject' : ok
Checking for python module 'cairo' : ok
Checking for python module 'pygraphviz' : 1.4rc1
Checking for python module 'gi.repository.Gtk' : ok
Checking for python module 'gi.repository.Gdk' : ok
Checking for python module 'gi.repository.Pango' : ok
Checking for python module 'gi.repository.GooCanvas' : ok
Checking for program 'sudo' : /usr/bin/sudo
Checking for program 'valgrind' : not found
Checking for 'gsl' : not found python-config : not found
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -fstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for compilation flag -Wstrict-aliasing support : ok
Checking for program 'doxygen' : /usr/bin/doxygen
---- Summary of optional ns-3 features:
Build profile : optimized
Build directory :
BRITE Integration : not enabled (BRITE not enabled (see option --with- ,!brite))
DES Metrics event collection : not enabled (defaults to disabled)
Emulation FdNetDevice : enabled
Examples : enabled
File descriptor NetDevice : enabled
GNU Scientific Library (GSL) : not enabled (GSL not found)
Gcrypt library : not enabled
(libgcrypt not found: you can use ,!libgcrypt-config to find its location.) GtkConfigStore : not enabled (library 'gtk+-3.0 >= 3.0' not fou nd)
MPI Support : not enabled (option --enable-mpi not selected)
ns-3 Click Integration : not enabled (nsclick not enabled (see option --with- ,!nsclick))
ns-3 OpenFlow Integration : not enabled (Required boost libraries not found)
Network Simulation Cradle : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice : not enabled (PlanetLab operating system not detected ,!(see option --force-planetlab)) PyViz visualizer : enabled
Python API Scanning Support : not enabled (Missing 'pygccxml' Python module)
Python Bindings : enabled
Real Time Simulator : enabled
SQlite stats data output : not enabled (library 'sqlite3' not found)
Tap Bridge : enabled
Tap FdNetDevice : enabled
Tests : enabled
Threading Primitives : enabled
Use sudo to set suid bit : not enabled (option --enable-sudo not selected)
XmlIo : enabled
'configure' finished successfully (6.387s)
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ Π»ΠΈΡΡΠΈΠ½Π³Π°. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠΈΠΈ nsβ3 Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΡΠ΅Π±ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ XmlTo, Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° libxml-2.0. ΠΡΠ»ΠΈ ΡΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π΅ Π±ΡΠ»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ nsβ3 Π½Π΅ Π±ΡΠ»Π° Π±Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π°, ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ sudo Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±ΠΈΡΠ° suidΒ«ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ID Π³ΡΡΠΏΠΏΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡΒ» Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Β«Π½Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π°Β» (Β«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: Entering directory `/path/to/ns-3-allinone/ns-3.29/build'
Build profile: debug
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ build.py ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ --enable-examples
ΠΈ --enable-tests
, Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ Waf ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π°ΠΏΡΡΠΌΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ:
$ ./build.py --disable-python
ΡΠ΅Π°ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠΉ:
build.py: error: no such option: --disable-python
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ -β―- ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· 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 << "Part of an output line..." << std::flush; timer.Start ,!()); DoLongInvolvedComputation ();
NS_BUILD_DEBUG (timer.Stop (); std::cout << "Done: " << timer << std::endl;)
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Waf ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π΄ΡΡΠ³ΡΡ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΡΠΈΠΈ -β―-out
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
$ ./waf configure --out=my-build-dir
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡ ΡΡΠΎ Ρ ΠΏΡΠΎΡΠΈΠ»ΡΠΌΠΈ ΡΠ±ΠΎΡΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
$ ./waf configure --build-profile=debug --out=build/debug
$ ./waf build
...
$ ./waf configure --build-profile=optimized --out=build/optimized
$ ./waf build
...
Π§ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ±ΠΎΡΠΊΠ°ΠΌΠΈ, Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ±ΠΎΡΠΊΡ. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΠ΅ΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠΈΠ»Ρ, Waf Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ, Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²ΡΠ΅Π³ΠΎ.
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠ±ΠΎΡΠΊΠΈ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π΄Π°Π²Π°ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ:
$ export NS3CONFIG="--enable-examples --enable-tests"
$ export NS3DEBUG="--build-profile=debug --out=build/debug"
$ export NS3OPT=="--build-profile=optimized --out=build/optimized"
$ ./waf configure $NS3CONFIG $NS3DEBUG
$ ./waf build
...
$ ./waf configure $NS3CONFIG $NS3OPT
$ ./waf build
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈ ΡΠ»Π°Π³ΠΈ
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Waf Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ nsβ3 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ C++ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈΠ· GCC ( g++). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Waf C++ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, ΠΏΡΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ CXX. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π‘++ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ 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 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠ±ΠΎΠ΅Π², ΠΊΡΠ°Ρ ΠΎΠ² ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ valgrind, ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΠΈΡΠΎΠ³ΠΎΠ²ΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΎΡ Waf ΠΈ ΡΠ΅ΡΡΠ΅ΡΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
Waf: Entering directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/path/to/workspace/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (1.799s)
Modules built:
aodv applications bridge
click config-store core
csma csma-layout dsdv
emu energy flow-monitor
internet lte mesh
mobility mpi netanim
network nix-vector-routing ns3tcp
ns3wifi olsr openflow
point-to-point point-to-point-layout propagation
spectrum stats tap-bridge
template test tools
topology-read uan virtual-net-device
visualizer wifi wimax
PASS: TestSuite ns3-wifi-interference
PASS: TestSuite histogram
...
PASS: TestSuite object
PASS: TestSuite random-number-generators
92 of 92 tests passed (92 passed, 0 failed, 0 crashed, 0 valgrind errors)
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΠ±ΡΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° nsβ3. (ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΡΡΠΎΠΊ Β«PASS: β¦Β» ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ, ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠ°ΠΆΠ½ΠΎ ΡΠΎ, ΡΡΠΎ Π² ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΎΡΡΠ΅ΡΠ° Π²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ; Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΡ Π½Π΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ ΠΈΠ»ΠΈ ΠΏΠΎΡΠ΅ΡΠΏΠ΅Π» ΠΊΡΠ°Ρ .) Π Waf, ΠΈ test.py Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠ΄ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΌΠ°ΡΠΈΠ½Ρ.
3.6 ΠΠ°ΠΏΡΡΠΊ ΡΠΊΡΠΈΠΏΡΠ°
ΠΠ±ΡΡΠ½ΠΎ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠΊΡΠΈΠΏΡΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ Waf. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΡΡΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈ ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Waf Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ -β―-run
. ΠΠ°ΠΏΡΡΡΠΈΠΌ Π΄Π»Ρ nsβ3 ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π²Π΅Π·Π΄Π΅ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ hello world, Π½Π°Π±ΡΠ°Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
$ ./waf --run hello-simulator
Waf ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ±ΡΠ°Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ±ΠΎΡΠΊΡ. ΠΠ°ΡΠ΅ΠΌ Waf Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄.
Hello Simulator
ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΠ΅ΠΌ! Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ nsβ3!
Π§ΡΠΎ ΠΌΠ½Π΅ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π½Π΅ Π²ΠΈΠΆΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ?
ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Waf, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅, ΡΡΠΎ ΡΠ±ΠΎΡΠΊΠ° Π±ΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, Π½ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄ Β«Hello SimulatorΒ», ΡΠΎ Π΅ΡΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ, ΡΡΠΎ Π²Ρ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ [Π‘Π±ΠΎΡΠΊΠ°-Ρ-Waf] ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ±ΠΎΡΠΊΠΈ Π½Π° optimized, Π½ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅ΠΆΠΈΠΌ 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 <ns3-program> --command-template="%s <args>"
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ <ns3-program> Π½Π° ΠΈΠΌΡ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΡΠ³ΡΠΌΠ΅Π½Ρ -β―-command-template
Π΄Π»Ρ Waf β ΡΡΠΎ, ΠΏΠΎ ΡΡΡΠΈ, ΡΠ΅ΡΠ΅ΠΏΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Waf ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Waf ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ ΡΠ±ΠΎΡΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΡΡΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡ ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ %s, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ». ΠΡΠ»ΠΈ Π²Π°ΠΌ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ nsβ3 ΠΈ Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ:
$ ./waf --run '<ns3-program> --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 <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