5 ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
5.1 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
5.1.1 ΠΠ±Π·ΠΎΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
5.1.2 Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
5.1.3 ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²Π°Ρ ΠΊΠΎΠ΄
5.2 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
5.2.1 ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
5.2.2 ΠΠ°Ρ
Π²Π°Ρ Π²Π°ΡΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΠΊΠΎΠΌΠ°Π½Π΄
5.3 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ
5.3.1 ASCII Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΠ°ΡΡΠΈΠ½Π³ ASCII ΡΡΠ°ΡΡ
5.3.2 Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° PCAP
ΠΠ»Π°Π²Π° 5
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
5.1 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΡ ΡΠΆΠ΅ Π²ΠΊΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ nsβ3, ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΠΊΡΠΈΠΏΡ first.cc. Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΡΠΌΠΎΡΡΠΈΠΌΡΡ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
5.1.1 ΠΠ±Π·ΠΎΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΈ nsβ3 Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ , Π² Β«ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°Β» (ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ stderr Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Unix) Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ . Π Π΄ΡΡΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , ΠΌΠΎΠ³ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ , ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡΡΠΎ Β«Π·Π°ΠΌΡΠ»ΠΈΡΡΒ» Π²ΡΠ²ΠΎΠ΄.
ΠΠΎΠ΄Ρ ΡΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² nsβ3, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΠΈ ΡΡΠΎΠ²Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ, ΠΈ ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΈΠ·Π±ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ, ΠΌΠ½ΠΎΠ³ΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΎ, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈΠ»ΠΈ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΡΠ°Π±Π΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΠΆΠ°Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡΠΈ. ΠΠΎΠ΄ΡΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ nsβ3 ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ· Π²Π°ΡΠ΅ΠΉ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ.
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ β ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ β Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π²Π°ΡΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ (Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» ΡΡΠ΅Π±Π½ΠΈΠΊΠ° 5.3). ΠΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΈΠ»ΠΈ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· Π²Π°ΡΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ.
Π Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠ΅ΠΌΡ ΡΡΠΎΠ²Π½Π΅ΠΉ (ΡΠΈΠΏΠΎΠ²) ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΆΡΡΠ½Π°Π»Π° ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡΠΈ.
- LOG_ERROR β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ (ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_ERROR);
- LOG_WARN β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_WARN);
- LOG_DEBUG β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ (ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_DEBUG);
- LOG_INFO β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎ Ρ ΠΎΠ΄Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_INFO);
- LOG_FUNCTION β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΡ Π²ΡΠ·Π²Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ (Π΄Π²Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΌΠ°ΠΊΡΠΎΡΠ°: NS_LOG_FUNCTION, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ»Π΅Π½ΠΎΠ², ΠΈ NS_LOG_FUNCTION_NOARGS, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ);
- LOG_LOGIC β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ: NS_LOG_LOGIC);
- LOG_ALL β ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π²ΡΠ΅Π³ΠΎ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠ³ΠΎ Π²ΡΡΠ΅ (ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ° Π½Π΅Ρ).
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (LOG_TYPE) Π΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΠΏ LOG_LEVEL_TYPE, ΠΊΠΎΡΠΎΡΡΠΉ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΡΡΠΎΠ²Π½Ρ Π²ΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ Π½Π°Π΄ Π½ΠΈΠΌ. (ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, LOG_ERROR ΠΈ LOG_LEVEL_ERROR, Π° ΡΠ°ΠΊΠΆΠ΅ LOG_ALL ΠΈ LOG_LEVEL_ALL ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ.) ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ LOG_INFO Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ NS_LOG_INFO, ΠΏΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ LOG_LEVEL_INFO ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ NS_LOG_DEBUG, NS_LOG_WARN ΠΈ NS_LOG_ERROR.
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π°, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΡΠΎΠ²Π½Ρ Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π²ΡΠ±ΠΎΡ.
- NS_LOG_UNCOND β Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (Π±Π΅Π· ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ).
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΠΎΡΠ΅Π½ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΊΡΠΌΡΠ»ΡΡΠΈΠ²Π½ΠΎ. ΠΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ sh-ΡΡΠ΅Π΄Ρ NS_LOG ΠΈΠ»ΠΈ ΠΏΡΡΠ΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π²ΡΠ·ΠΎΠ²Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΡΠ°Π½Π΅Π΅, ΡΠΈΡΡΠ΅ΠΌΠ° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Doxygen-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π΅Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠΈΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ scratch/myfirst.cc, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΈ.
5.1.2 Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ NS_LOG, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΆΡΡΠ½Π°Π»ΠΎΠ², Π½ΠΎ ΡΠ½Π°ΡΠ°Π»Π°, ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ, Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠΊΡΠΈΠΏΡ, ΠΊΠ°ΠΊ Π²Ρ Π΄Π΅Π»Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅,
$ ./waf --run scratch/myfirst
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΏΡΠΈΠΌΠ΅ΡΠ° nsβ3
$ Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build' 'build'
finished successfully (0.413s)
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Β«ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅Β» ΠΈ Β«ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅Β» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΡΠ΅, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ UdpEchoClientApplication ΠΈ UdpEchoServerApplication. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π΅Π΅ ΡΡΠΎΠ²Π΅Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ NS_LOG.
Π‘ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ sh-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Β«VARIABLE = valueΒ». ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ csh-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ, ΡΠΎΠ³Π΄Π° Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Β«ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ setenvΒ» ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΠΈΠΌΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ°ΠΌΠΈ.
Π Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ UDP ΡΡ ΠΎ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π° Π² scratch/myfirst.cc,
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
ΠΠ½Π° Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ LOG_LEVEL_INFO. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΠ»Π°Π³ ΡΡΠΎΠ²Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΌΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΈ Π²ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠ΅ ΡΡΠΎΠ²Π½ΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²ΠΊΠ»ΡΡΠΈΠ»ΠΈ NS_LOG_INFO, NS_LOG_DEBUG, NS_LOG_WARN ΠΈ NS_LOG_ERROR. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΡΡΠΎΠ²Π΅Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΊΡΠΈΠΏΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, ΠΏΡΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ NS_LOG ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
$ export NS_LOG=UdpEchoClientApplication=level_all
Π’Π°ΠΊ ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ NS_LOG sh-ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ,
UdpEchoClientApplication=level_all
ΠΠ΅Π²Π°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ β ΡΡΠΎ ΠΈΠΌΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π½Π°ΡΡΡΠΎΠΈΡΡ, Π° ΠΏΡΠ°Π²Π°Ρ ΡΠ°ΡΡΡ β ΡΡΠΎ ΡΠ»Π°Π³, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ ΡΡΠΎΠ²Π½ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ NS_LOG, ΡΠΈΡΡΠ΅ΠΌΠ° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ nsβ3 ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠΎΠ²Π½Ρ NS_LOG_FUNCTION. ΠΠ½ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ°. ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π² ΡΡΠ½ΠΊΡΠΈΡΡ
-ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ (ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ)NS_LOG_FUNCTION (this)
. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ NS_LOG_FUNCTION_NOARGS ()
ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΠ½ΠΊΡΠΈΡΡ
. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ nsβ3 Π½Π΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΎΡΡΠ°Π΅ΡΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π ΡΠ»ΡΡΠ°Π΅ ΡΡ
ΠΎ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π΄Π»Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΆΡΡΠ½Π°Π» Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°Π½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΈΠ³Π»ΡΠ΄ΠΈΡΠ΅ΡΡ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠΎΠΊΠΎΠΉ UdpEchoClientApplication ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°, Π² ΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅, Π³Π΄Π΅ Π²Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ C++ (: :). ΠΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, Π° ΠΈΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° Π΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, Π½ΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π½Π΅ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΠΈ ΡΠ°ΠΌ ΠΎΠ΄Π½ΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ. ΠΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ½ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΠΈΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ»Π°ΡΡΠ°.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
Π±ΡΠ²Π°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π°. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠ΅ΠΊΡΡ Π²ΡΡΠ΅, ΡΠΎ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π²ΠΎΠΏΡΠΎΡ, ΠΎΡΠΊΡΠ΄Π° Π²Π·ΡΠ»Π°ΡΡ ΡΡΡΠΎΠΊΠ° Β«Received 1024 bytes from 10.1.1.2
Β». ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΡΡΠΎΠ²Π΅Π½Ρ prefix_func Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ NS_LOG. ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅,
$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠ°Π²ΡΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½Π°Ρ ΡΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΠΠ, ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅Π»Π΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ² Unix. Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΆΡΡΠ½Π°Π»Π° ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠΈΠ΅ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ UDP ΡΡ
ΠΎ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΡΠ΅. Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«Received 1024 bytes from 10.1.1.2
Β» ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΅ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠ΅Π΅ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡ
ΠΎ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΡΠ°Π²ΡΠ΅Π΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΏΠΈΡΡ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ UDP ΡΡ
ΠΎ-ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π²Π²Π΅Π΄Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ
Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡΠΌΠΈ, Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Ρ NS_LOG.
$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func:
UdpEchoServerApplication=level_all|prefix_func'
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅: Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΅ΠΊΡΡΠ° Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ» Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΡΠ»Π΅ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ (:), ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° ΠΈΠ· ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΡ ΠΎ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅.
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.406s)
UdpEchoServerApplication:UdpEchoServer()
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
UdpEchoServerApplication:HandleRead(): Echoing packet
UdpEchoClientApplication:HandleRead(0x624920, 0x625160)
UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
UdpEchoServerApplication:StopApplication()
UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
Π’Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΈΠ΄Π΅ΡΡ Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π°. ΠΡ ΠΌΠΎΠΆΠ΅ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΏΡΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎ ΠΠΠ Π±ΠΈΡΠ° prefix_time:
$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time: UdpEchoServerApplication=level_all|prefix_func|prefix_time'
ΠΠΏΡΡΡ ΠΆΠ΅, Π²Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ» Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ, ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize(1024)
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
2s UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π΄Π»Ρ UdpEchoServer Π±ΡΠ» Π²ΡΠ·Π²Π°Π½ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ 0 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ, Π½ΠΎ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π½ΠΎΠ»Ρ ΡΠ΅ΠΊΡΠ½Π΄. Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° UdpEchoClient.
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.418s)
0s UdpEchoServerApplication:UdpEchoServer()
0s UdpEchoClientApplication:UdpEchoClient()
0s UdpEchoClientApplication:SetDataSize(1024)
1s UdpEchoServerApplication:StartApplication()
2s UdpEchoClientApplication:StartApplication()
2s UdpEchoClientApplication:ScheduleTransmit()
2s UdpEchoClientApplication:Send()
2s UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0)
2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
10s UdpEchoClientApplication:StopApplication()
UdpEchoClientApplication:DoDispose()
UdpEchoServerApplication:DoDispose()
UdpEchoClientApplication:~UdpEchoClient()
UdpEchoServerApplication:~UdpEchoServer()
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠΊΡΠΈΠΏΡ scratch/first.cc Π·Π°ΠΏΡΡΡΠΈΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡ ΠΎ-ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π° ΠΎΠ΄Π½Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ StartApplication ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΠ½Π΄Π΅. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡ ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΉ ΡΠ΅ΠΊΡΠ½Π΄Π΅ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ, ΠΊΠ°ΠΊ ΠΌΡ ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ Π² ΡΠΊΡΠΈΠΏΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Ρ ΠΎΠ΄ΠΎΠΌ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ ΠΏΠΎ Π²ΡΠ·ΠΎΠ²Ρ ScheduleTransmit Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Send ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° HandleRead Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡ ΠΎ-ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΡΡΠ΅ΠΊΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ΅ΡΠ΅Π· Π΄Π²ΡΡ ΡΠΎΡΠ΅ΡΠ½ΡΠΉ Π»ΠΈΠ½ΠΊ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 3,69 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΡ ΠΎ-ΡΠ΅ΡΠ²Π΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΎΡΠΎΠ·Π²Π°Π»ΡΡ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ, Π° Π·Π°ΡΠ΅ΠΌ, ΠΏΠΎΡΠ»Π΅ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΠ°Π½Π°Π»Π°, Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΡΡ ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΡ ΠΎ-ΠΏΠ°ΠΊΠ΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ HandleRead.
Π ΡΡΠΎΠΉ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ Π΄Π»Ρ Π²Π°Ρ. ΠΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π²Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, Π²ΠΊΠ»ΡΡΠΈΠ² Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ NS_LOG ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅,
$ export 'NS_LOG=*=level_all|prefix_func|prefix_time'
ΠΠ²Π΅Π·Π΄ΠΎΡΠΊΠ° Π²ΡΡΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡ Π²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ. Π― Π½Π΅ Π±ΡΠ΄Ρ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ Π²ΡΠ²ΠΎΠ΄ Π·Π΄Π΅ΡΡ (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈ ΠΎΠ½ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ 1265 ΡΡΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠ΄ΠΈΠ½ ΡΡ ΠΎ-ΠΏΠ°ΠΊΠ΅Ρ), Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠ°ΠΉΠ» ΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π³ΠΎ Π² Π²Π°ΡΠ΅ΠΌ Π»ΡΠ±ΠΈΠΌΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅,
$ ./waf --run scratch/myfirst > log.out 2>&1
Π― Π»ΠΈΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π°, ΠΊΠΎΠ³Π΄Π° Ρ ΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ Ρ ΠΏΠΎΠ½ΡΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ Π΄Π΅Π»Π° ΠΏΠΎΡΠ»ΠΈ Π½Π΅ ΡΠ°ΠΊ. Π― ΠΌΠΎΠ³Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π°, Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΠΈ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ΅. Π― ΠΌΠΎΠ³Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ Π² ΠΌΠΎΠ΅ΠΌ Π»ΡΠ±ΠΈΠΌΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΈ ΠΈΡΠΊΠ°ΡΡ ΡΠΎ, ΡΡΠΎ Ρ ΠΎΠΆΠΈΠ΄Π°Ρ, ΠΈ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎ, ΡΠ΅Π³ΠΎ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π». ΠΠΎΠ³Π΄Π° Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΈΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊ, Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠΆΡ Π² ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ Π΄Π»Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠΎΡ Π²ΠΈΠ΄ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ ΡΠΊΡΠΈΠΏΡ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ-ΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠΉ ΠΏΠΎΠ²ΠΎΡΠΎΡ. Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ²ΠΎΡΠΎΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌΠΈ.
5.1.3 ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Π²Π°Ρ ΠΊΠΎΠ΄
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ²ΠΎΠΈ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ, ΡΠΎΠ²Π΅ΡΡΠ°Ρ Π²ΡΠ·ΠΎΠ²Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° log ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ myfirst.cc, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π² Β«ΡΠΈΡΡΠΎΠΉΒ» Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² ΡΡΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
ΠΠ°ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ NS_LOG Π½Π° ΡΠ°Π·Π½ΡΡ
ΡΡΠΎΠ²Π½ΡΡ
. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠΊΡΠΈΠΏΡ. ΠΠ°ΠΊΡΠΎΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π² ΠΆΡΡΠ½Π°Π» ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ β NS_LOG_INFO. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ (Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ·Π»Ρ), ΠΊΠΎΡΠΎΡΠΎΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ Π²Π°ΠΌ, ΡΡΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ ("Creating Topology"). ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π°,
ΠΡΠΊΡΠΎΠΉΡΠ΅ scratch/myfirst.cc Π² Π²Π°ΡΠ΅ΠΌ Π»ΡΠ±ΠΈΠΌΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΡΠΎΠΊΡ,
NS_LOG_INFO ("Creating Topology");
ΠΏΡΡΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ,
NodeContainer nodes;
nodes.Create (2);
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ waf, ΠΈ ΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ NS_LOG, ΡΡΠΎΠ±Ρ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π²ΠΊΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅:
$ ./waf
$ export NS_LOG=
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ,
$ ./waf --run scratch/myfirst
Π²Ρ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (FirstScriptExample) Π½Π΅ Π±ΡΠ» Π²ΠΊΠ»ΡΡΠ΅Π½. Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²Π°ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π° FirstScriptExample Ρ ΡΡΠΎΠ²Π½Π΅ΠΌ Π½Π΅ Π½ΠΈΠΆΠ΅ NS_LOG_INFO. ΠΡΠ»ΠΈ Π²Ρ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΠ°ΠΊ,
$ export NS_LOG=FirstScriptExample=info
ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΠΉΡΠ°Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Β«Creating TopologyΒ»,
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
Creating Topology
Sent 1024 bytes to 10.1.1.2
Received 1024 bytes from 10.1.1.1
Received 1024 bytes from 10.1.1.2
5.2 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
5.2.1 ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² nsβ3 Π±Π΅Π· ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ±ΠΎΡΠΊΠΈ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ (Π² Π²Π°ΡΠ΅ΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅), ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅,
int
main (int argc, char *argv[])
{
...
CommandLine cmd;
cmd.Parse (argc, argv);
...
}
ΠΡΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π²ΡΡ ΡΡΡΠΎΡΠ½ΡΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅. ΠΠ½ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄Π²Π΅ΡΡ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ nsβ3 ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° Π² Π½Π°ΡΠ°Π»ΠΎ Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΊΡΠΈΠΏΡΠ° scratch/myfirst.cc. ΠΠ²ΠΈΠ³Π°ΡΡΡ Π΄Π°Π»ΡΡΠ΅, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π΅Π³ΠΎ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ ΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ,
$ ./waf --run "scratch/myfirst --PrintHelp"
ΠΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΏΡΠΎΡΠΈΡ Waf Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ scratch/myfirst ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅ΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ —PrintHelp. ΠΠ°Π²ΡΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, Π΄Π»Ρ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. ΠΠ°ΡΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ —PrintHelp ΠΈ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΎΡΠ²Π΅Ρ,
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.413s)
TcpL4Protocol:TcpStateMachine()
CommandLine:HandleArgument(): Handle arg name=PrintHelp value=
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠΏΡΠΈΡ —PrintAttributes. ΠΡ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² nsβ3, ΠΏΡΠΈ ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ ΡΠΊΡΠΈΠΏΡΠ° first.cc. ΠΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°,
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));
ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ, ΡΡΠΎ DataRate Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ PointToPointNetDevice. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ² PointToPointNetDevice. Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠΌΠΎΡΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ TypeId. ΠΡΠΎ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ns3::PointToPointNetDevice. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ Π²ΠΏΠ΅ΡΠ΅Π΄, Π²Π²Π΅Π΄ΠΈΡΠ΅,
$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointNetDevice"
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΡΡΠ΅Π΄ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ Π΅ΡΡΡ,
--ns3::PointToPointNetDevice::DataRate=[32768bps]:
The default data rate for point to point links
ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° PointToPointNetDevice. ΠΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Attribute Π² PointToPointHelper Π²ΡΡΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ° ΡΡΡΡΠΎΠΉΡΡΠ² ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π°Π»ΠΈΠΌ Π²ΡΠ·ΠΎΠ²Ρ SetDeviceAttribute ΠΈ SetChannelAttribute ΠΈΠ· myfirst.cc, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π² ΡΠΈΡΡΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ.
ΠΠ°Ρ ΡΠΊΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ PointToPointHelper ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½ΠΈΠΆΠ΅,
...
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
...
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΡΠΊΡΠΈΠΏΡ Ρ Waf (./waf) ΠΈ Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½Π΅ΠΌΡΡ Π½Π°Π·Π°Π΄ ΠΈ Π²ΠΊΠ»ΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΠΈΡΡ ΠΈΠ· UDP ΡΡ ΠΎ-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π²ΠΊΠ»ΡΡΠΈΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'
ΠΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ, ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.405s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π² ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ, ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΡ ΠΎ-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠ»ΠΎ Π² 2,00369 ΡΠ΅ΠΊΡΠ½Π΄.
2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΏΠ°ΠΊΠ΅Ρ Π² 2.25732 ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΡΠ±ΡΠΎΡΠΈΠ»ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ PointToPointNetDevice Ρ ΠΏΡΡΠΈ ΠΌΠ΅Π³Π°Π±ΠΈΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ Π΄ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 32768 Π±ΠΈΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΡΠ»ΠΈ Π±Ρ ΠΌΡ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ DataRate Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ½ΠΎΠ²Π° ΡΡΠΊΠΎΡΠΈΡΡ Π½Π°ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΡΠΎΡΠΌΡΠ»Π΅, ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΠΌΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΡΠ°Π²ΠΊΠΈ:
$ ./waf --run "scratch/myfirst --ns3::PointToPointNetDevice::DataRate=5Mbps"
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° DataRate ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²Π΅ΡΠ½Π΅ΡΡΡ ΠΊ ΠΏΡΡΠΈ ΠΌΠ΅Π³Π°Π±ΠΈΡΠ°ΠΌ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΡ ΡΠ΄ΠΈΠ²Π»Π΅Π½Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ? ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΊΠ°Π½Π°Π»Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ²Π΅ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΏΡΠΎΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΊΠ°Π½Π°Π»Π°, ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°:
$ ./waf --run "scratch/myfirst --PrintAttributes=ns3::PointToPointChannel"
ΠΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ, ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΊΠ°Π½Π°Π»Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
--ns3::PointToPointChannel::Delay=[0ns]:
Transmission delay through the channel
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΠ±Π° ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ,
$ ./waf --run "scratch/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms"
Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ Π½Π°Ρ Π±ΡΠ»ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ²Π½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ DataRate ΠΈ Delay Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ:
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.417s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.00369s Received 1024 bytes from 10.1.1.1
2.00369s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· 2,00369 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² MaxPackets UdpEchoClient.
ΠΠ°ΠΊ Π±Ρ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠΎ? ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅. ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ ΡΠ²Π½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ MaxPackets Π² ΡΡΠ΅Π½Π°ΡΠΈΠΈ. ΠΠ°ΡΠ΅ΠΌ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΡΠ°Π²ΠΊΡ ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π Π°Π·ΠΎΠ±ΡΠ°Π²ΡΠΈΡΡ Π² ΡΡΠΎΠΌ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΏΡΠΈΠ»Π΅ΠΆΠ½ΡΠ΅ Π»ΡΠ΄ΠΈ, ΡΠΎ Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
$ ./waf --run "scratch/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms
--ns3::UdpEchoClient::MaxPackets=2"
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π² ΡΡΠΎΠΉ ΠΌΠ΅ΡΡΠ΅, ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΠ΅Ρ ΡΡΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ². ΠΠΏΡΡΡ ΠΆΠ΅, ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΌΠΎΡΠΈ Π² ΡΡΠΎΠΌ Π²ΠΎΠΏΡΠΎΡΠ΅. ΠΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΠΎΡΠΈΠΌ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ:
$ ./waf --run "scratch/myfirst --PrintHelp"
myfirst [Program Arguments] [General Arguments]
General Arguments:
--PrintGlobals: Print the list of globals.
--PrintGroups: Print the list of groups.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintTypeIds: Print all TypeIds.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintHelp: Print this help message.
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ±Π΅ΡΠ΅ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Β«PrintGroupsΒ», ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π³ΡΡΠΏΠΏ TypeId. ΠΠΌΠ΅Π½Π° Π³ΡΡΠΏΠΏ ΡΠΎΠ³Π»Π°ΡΡΡΡΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ (Ρ ΠΎΡΡ ΠΈ Ρ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡΠΊΠ²Ρ). Π Π°ΡΠΏΠ΅ΡΠ°ΡΠΊΠ° Π²ΡΠ΅ΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΡΠ°Π·Ρ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ½ΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ°ΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ Π³ΡΡΠΏΠΏΠ°ΠΌ. Π’Π°ΠΊ, ΡΠ½ΠΎΠ²Π° ΡΠΎΠΊΡΡΠΈΡΡΡΡΡ Π½Π° ΠΌΠΎΠ΄ΡΠ»Π΅ Β«ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ°Β»:
./waf --run "scratch/myfirst --PrintGroup=PointToPoint"
TypeIds in group PointToPoint:
ns3::PointToPointChannel
ns3::PointToPointNetDevice
ns3::PointToPointRemoteChannel
ns3::PppHeader
ΠΠ΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° TypeId Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²
--PrintAttributes = ns3 :: PointToPointChannel
, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π²ΡΡΠ΅.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΡΠ·Π½Π°ΡΡ ΠΎΠ± Π°ΡΡΠΈΠ±ΡΡΠ°Ρ β ΡΠ΅ΡΠ΅Π· Doxygen nsβ3. Π’Π°ΠΌ Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΠ΅Ρ Π²ΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ.
5.2.2 ΠΠ°Ρ Π²Π°Ρ Π²Π°ΡΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ Ρ
ΡΠΊΠΈ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠ°ΡΡΠ΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ AddValue.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ, ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ nPackets Π² ΡΡΠ½ΠΊΡΠΈΡ main. ΠΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π΅Ρ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π°ΡΠ΅ΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠ°ΡΡΠ΅ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°Ρ
Π²Π°ΡΠΈΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΡΡΠ΅Ρ. ΠΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π²ΡΠ·ΠΎΠ² AddValue. ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ scratch/myfirst.cc ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°,
int
main (int argc, char *argv[])
{
uint32_t nPackets = 1;
CommandLine cmd;
cmd.AddValue("nPackets", "Number of packets to echo", nPackets);
cmd.Parse (argc, argv);
...
ΠΡΠΎΠΊΡΡΡΠΈΡΠ΅ Π²Π½ΠΈΠ· Π΄ΠΎ ΡΠΎΡΠΊΠΈ Π² ΡΠΊΡΠΈΠΏΡΠ΅, Π³Π΄Π΅ ΠΌΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡ MaxPackets ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π³ΠΎ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π±ΡΠ» Π½Π°ΡΡΡΠΎΠ΅Π½ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ nPackets Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ 1, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
echoClient.SetAttribute ("MaxPackets", UintegerValue (nPackets));
Π’Π΅ΠΏΠ΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ —PrintHelp, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½ΠΎΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ Π½Π° Π΄ΠΈΡΠΏΠ»Π΅Π΅ ΡΠΏΡΠ°Π²ΠΊΠΈ. ΠΠ²Π΅Π΄ΠΈΡΠ΅,
$ ./waf --run "scratch/myfirst --PrintHelp"
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.403s)
--PrintHelp: Print this help message.
--PrintGroups: Print the list of groups.
--PrintTypeIds: Print all TypeIds.
--PrintGroup=[group]: Print all TypeIds of group.
--PrintAttributes=[typeid]: Print all attributes of typeid.
--PrintGlobals: Print the list of globals.
User Arguments:
--nPackets: Number of packets to echo
ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ -β-nPackets,
$ ./waf --run "scratch/myfirst --nPackets=2"
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ
Waf: Entering directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: Leaving directory `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' finished successfully (0.404s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Sent 1024 bytes to 10.1.1.2
2.25732s Received 1024 bytes from 10.1.1.1
2.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
Sent 1024 bytes to 10.1.1.2
3.25732s Received 1024 bytes from 10.1.1.1
3.25732s Echoing packet
Received 1024 bytes from 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()
ΠΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π΄Π²Π° ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ, Π½Π΅ ΠΏΡΠ°Π²Π΄Π° Π»ΠΈ?
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ nsβ3, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π°Π²ΡΠΎΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΊ Π²Π°ΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ, ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²Π°ΡΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ Π²Ρ Π°Π²ΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π²Π°ΡΠΈ ΡΠΊΡΠΈΠΏΡΡ ΠΈ Π±Π΅Π·Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ ΠΈΡ
ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ.
5.3 ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ
ΠΠ΅ΡΡ ΡΠΌΡΡΠ» ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ, Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ nsβ3 ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ nsβ3 β ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° C++, ΡΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° C++ :
#include <iostream>
...
int main ()
{
...
std::cout << "The value of x is " << x << std::endl;
...
}
ΠΡ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΆΡΡΠ½Π°Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ Π² Π²Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΠΎΠ±ΡΡΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ΅Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ nsβ3:
-
ΠΠ»Ρ Π±Π°Π·ΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ², ΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ;
-
ΠΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΈΠ»ΠΈ Π΄Π»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ Π½ΠΎΠ²ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΄ΡΠ° ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ°;
-
ΠΠΏΡΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΄ΡΠΎ ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ nsβ3 ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ², Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΊ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΌ.
Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ns-3 ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° Π½Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΊ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°ΠΌ. ΠΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎ ΡΠΎΠ±ΡΡΠΈΡΡ , ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ Π² ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠΌ Π±Π°Π·ΠΎΠ²ΡΠΌ Π΄Π°Π½Π½ΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ΅Π²ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄Π»Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
ΠΡΡΠΎΡΠ½ΠΈΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Β«ΡΠ²ΡΠ·Π°Π½ΡΒ» Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°ΡΡΡΠΌΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄Π΅Π»Π°ΡΡ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠΌ, ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅. Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ (ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΊ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ) Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΏΠ΅ΡΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°.
Π Π°Π·ΡΠΌΠ½ΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΎΠ² ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΄ΡΠ° ΡΠΈΠΌΡΠ»ΡΡΠΎΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊ Π² ΡΠ²ΠΎΠ΅ΠΌ ΡΠΊΡΠΈΠΏΡΠ΅ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΊ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ Π² ΡΠ΄ΡΠ΅ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠΊΡΠΈΠΏΡ.
Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΠΏΡΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌ ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°ΠΌ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠΌΠΈ ΡΡΠΈΠ»ΠΈΡΠΌΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π‘ΠΌ. Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ nsβ3 ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»Ρ Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
5.3.1 ASCII Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
nsβ3 ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΌΠΎΡΡ Π²Π°ΠΌ Ρ Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ, ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΡΠ»ΠΈ Π²Ρ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠ°ΠΉΠ»Π°Ρ ASCII. ΠΠ»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ns-2, ΡΡΠΎΡ ΡΠΈΠΏ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ out.tr, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠ².
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π΄Π΅Π»Ρ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ASCII ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π² Π½Π°Ρ ΡΠΊΡΠΈΠΏΡ scratch/myfirst.cc. ΠΡΡΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Simulator :: Run ()
, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°:
AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("myfirst.tr"));
ΠΠ°ΠΊ ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ nsβ3, ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ ASCII. ΠΡΠΎΡΠ°Ρ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π²Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ΅ΡΠΎΠ΄ Β«Π²Π½ΡΡΡΠΈΒ» CreateFileStream () ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ΄ΠΈΠΎΠΌΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΡΠ΅ΠΊΠ΅ (Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΡ ΡΠ³Π»ΡΠ±ΠΈΠΌΡΡ Π² ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, Π½ΠΎ Π²ΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ Π½Π° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅, ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ myfirst.tr ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ Π² nsβ3. ΠΡ Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΠΌ Π½Π° nsβ3, Π·Π°Π±ΠΎΡΡ ΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π½Π° Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΠΆΠΈΠ·Π½ΠΈ, Π² Ρ ΠΎΠ΄Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΡΠ·Π²Π°Π½Π½ΡΡ ΠΌΠ°Π»ΠΎΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ (ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ) ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΌ Ρ ΠΊΠΎΠΏΠΈΡΡΡΡΠΈΠΌΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² C++.
ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΡΠ·ΠΎΠ² EnableAsciiAll() ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΡ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ ASCII ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΡ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ° ΠΈ ΡΠΎ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅, ΡΡΠΎΠ±Ρ (ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅) ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π»ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² ΡΠΎΡΠΌΠ°ΡΠ΅ ASCII.
ΠΠ»Ρ ΡΠ΅Ρ
, ΠΊΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ Ρ ns-2, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ ΡΠΎΡΠΊΠ°ΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΆΡΡΠ½Π°Π»ΠΈΡΡΡΡ ΡΠΎΠ±ΡΡΠΈΡ Β«+Β», Β«-Β», Β«dΒ» ΠΈ Β«rΒ».
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
$ ./waf --run scratch/myfirst
ΠΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· Π΄ΠΎ ΡΡΠΎΠ³ΠΎ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ Waf, Π° Π·Π°ΡΠ΅ΠΌ ββbuildβ finished successfullyβ (ΡΠ±ΠΎΡΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ) Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ myfirst.tr. ΠΠ·-Π·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ Waf, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°ΠΉΠ» ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½Π΅ Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΡΡ, Π³Π΄Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΡΡΡΡ ΡΡΠ°ΡΡΡ, ΡΠΎ ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ Π΅Π³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Waf ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ --cwd
. ΠΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΡΠΎ ΡΡΠΎΠ±Ρ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΠ°ΠΉΠ» ASCII ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ myfirst.tr Π² Π²Π°ΡΠ΅ΠΌ Π»ΡΠ±ΠΈΠΌΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅, Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
ΠΠ°ΡΡΠΈΠ½Π³ ASCII ΡΡΠ°ΡΡ
Π’Π°ΠΌ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠ»ΠΎΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅, Π½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅, Π½Π° ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ°ΠΊ ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊ. ΠΡΠΎ ΡΡΠ°Π½Π΅Ρ ΠΎΡΡΠ΅ΡΠ»ΠΈΠ²ΠΎ Π²ΠΈΠ΄Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°Π·Π²Π΅ΡΠ½Π΅ΡΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΏΠΎΡΠΈΡΠ΅.
ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΡΡΠ°ΡΡΠΈΡΡΠ΅ΠΌ ΡΠΎΠ±ΡΡΠΈΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ, ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠ΅ΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ΅ΡΠ΅Π²ΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ° Π² ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ. ΠΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ β ΡΡΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΠΉΡΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΠΊΠ°Π½Π°Π»Π° ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ°. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° (ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠ±Π΅Π» ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ). ΠΡΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ» Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
+: Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ;
-: Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°;
d: ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ» ΠΎΡΠ±ΡΠΎΡΠ΅Π½, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π°;
r: ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ ΡΠ΅ΡΠ΅Π²ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΡ ΡΡΡΠΎΠΊΡ Π² ΡΠ°ΠΉΠ»Π΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π― ΡΠ°Π·ΠΎΠ±ΡΡ Π΅Ρ Π½Π° ΡΠ°ΡΡΠΈ (Ρ ΠΎΡΡΡΡΠΏΠ°ΠΌΠΈ Π΄Π»Ρ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΡΡΠΈ) ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΡΡΡΠΎΠΊΠΈ ΡΠ»Π΅Π²Π°:
0 +
1 2
2 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue
3 ns3::PppHeader (
4 Point-to-Point Protocol: IP (0x0021))
6 ns3::Ipv4Header (
7 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
8 length: 1052 10.1.1.1 > 10.1.1.2)
9 ns3::UdpHeader (
10 length: 1032 49153 > 9)
11 Payload (size=1024)
ΠΠ΅ΡΠ²ΡΠΉ ΡΠ°Π·Π΄Π΅Π» ΡΡΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ (ΡΡΡΠΎΠΊΠ° 0) β ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. Π£ Π½Π°Ρ Π·Π΄Π΅ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» +, ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ. ΠΡΠΎΡΠΎΠΉ ΡΠ°Π·Π΄Π΅Π» (ΡΡΡΠΎΠΊΠ° 1) β Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΡΡΠ°ΠΆΠ΅Π½Π½ΠΎΠ΅ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ . ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ UdpEchoClientApplication Π½Π°ΡΠ°ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΡΠ΅ΡΠ΅Π· Π΄Π²Π΅ ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠ΄Π΅ΡΡ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ (ΡΠΎ ΡΡΡΠΎΠΊΠΈ 2) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΡΠΎΠ΄ΠΈΠ» ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ (ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½). ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΡΠ²Π»ΡΠ΅ΡΡΡ NodeList. ΠΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ, ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΠΎΠΌΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ nsβ3. Π Π½Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π²ΡΠ΅ ΡΠ·Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΡΠΊΡΠΈΠΏΡΠ΅. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π² ΠΊΠΎΡΠ½Π΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π² NodeList Ρ Π½Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΡΠΎΠΊΠ° /NodeList/0 ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΠ·Π΅Π» Π² NodeList, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ°ΠΊ Β«ΡΠ·Π΅Π» 0Β». Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ·Π»Π΅ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΡΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ. ΠΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΠ΅Π½. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· DeviceList/0, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ Π½ΡΠ»Π΅Π²ΡΠΌ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ Π² ΡΠ·Π»Π΅.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠ°, $ ns3 :: PointToPointNetDevice
, ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² Π½ΡΠ»Π΅Π²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ: ΡΠΏΠΈΡΠΊΠ° ΡΡΡΡΠΎΠΉΡΡΠ² Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ +, Π½Π°Ρ
ΠΎΠ΄ΡΡΠ°ΡΡΡ Π² ΡΡΡΠΎΠΊΠ΅ 0, ΠΎΠ·Π½Π°ΡΠ°Π»Π°, ΡΡΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡΠΎ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΎ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°Ρ
Β«ΠΏΡΡΠΈ ΡΡΠ°ΡΡΡΒ»: TxQueue/Enqueue.
ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Ρ Π² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΠ½Ρ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ. Π‘ΡΡΠΎΠΊΠΈ 3-4 ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠΎΠ²Π°Π½ Π² ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π΅ ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ°. Π‘ΡΡΠΎΠΊΠΈ 5-7 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠΌΠ΅Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π²Π΅ΡΡΠΈΠΈ IP4 ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊ Π² IP-Π°Π΄ΡΠ΅ΡΠ΅ 10.1.1.1
ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ 10.1.1.2
. Π‘ΡΡΠΎΠΊΠΈ 8-9 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠΌΠ΅Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ UDP ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΡΡΠΎΠΊΠ° 10 ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° β ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠ΅ 1024 Π±Π°ΠΉΡΠ°.
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΡΡΡΠΎΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΡΠΎΡ ΠΆΠ΅ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ» ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠ·Π»Π΅.
Π’ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΈΠ½ΡΡ ΡΠ΅ΡΠ΅Π²ΡΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ Π½Π° ΡΠ·Π»Π΅ Ρ ΡΡ ΠΎ-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. Π― Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π» ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½ΠΈΠΆΠ΅.
0 r
1 2.25732
2 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx
3 ns3::Ipv4Header (
4 tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]
5 length: 1052 10.1.1.1 > 10.1.1.2)
6 ns3::UdpHeader (
7 length: 1032 49153 > 9)
8 Payload (size=1024)
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΏΠ΅ΡΡ r, Π° Π²ΡΠ΅ΠΌΡ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΎ Π΄ΠΎ 2,25732 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠ»ΠΈ Π²Ρ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ ΡΡΠ΅Π±Π½ΠΈΠΊΠ°, ΡΠΎ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ DataRate ΡΠ΅ΡΠ΅Π²ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΡ ΠΊΠ°Π½Π°Π»Π° Π² ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π·Π½Π°ΠΊΠΎΠΌΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
ΠΠ°ΠΏΠΈΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ (ΡΡΡΠΎΠΊΠ° 2) Π±ΡΠ»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°, ΡΡΠΎΠ±Ρ ΠΎΡΡΠ°Π·ΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡ ΡΠ·Π»Π° 1 (/NodeList/1) ΠΈ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΈΠ½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ (/MacRx). ΠΠ°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ΅ΡΠ΅Π· ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ΡΡΠ°ΡΡΡ.
5.3.2 Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° PCAP
ΠΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΈ ΡΡΡΡΠΎΠΉΡΡΠ² nsβ3 ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ .pcap. ΠΠΊΡΠΎΠ½ΠΈΠΌ pcap (ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠΈΡΠ΅ΡΡΡ Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅) ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π·Π°Ρ Π²Π°Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² ΠΈ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ API, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΠΌΠ°ΡΠ° ΡΠ°ΠΉΠ»Π° .pcap. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ ΡΡΠΎΡ ΡΠΎΡΠΌΠ°Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Wireshark (ΡΠ°Π½Π΅Π΅ Π½Π°Π·ΡΠ²Π°Π²ΡΠ°ΡΡΡ Ethereal). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ°ΡΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΎΡ ΡΠΎΡΠΌΠ°Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° pcap ΡΡΠ°ΡΡ. Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠΌΡΡ Π½Π° ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ pcap ΡΡΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ tcpdump.
ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ pcap ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΠΊΠΎΠ΄Π°.
pointToPoint.EnablePcapAll ("myfirst");
ΠΡΡΠ°Π²ΡΡΠ΅ ΡΡΡ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΠ΄Π° ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ASCII, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² scratch/myfirst.cc. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊΡ Β«myfirstΒ», Π° Π½Π΅ Β«myfirst.pcapΒ» ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡ, Π° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΎΡΠΊΠ°-ΡΠΎΡΠΊΠ°. ΠΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² Π±ΡΠ΄ΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°, Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ·Π»Π°, Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΈ ΡΡΡΡΠΈΠΊΡΠ° Β«.pcapΒ».
ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΌΡ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ°ΠΉΠ»Ρ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Β«myfirst-0-0.pcapΒ» ΠΈ Β«myfirst-1-0.pcapΒ», ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ pcap ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ·Π»Π° 0-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ 0 ΠΈ ΡΠ·Π»Π° 1-ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ 0 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ pcap ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ:
$ ./waf --run scratch/myfirst
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ Π²Π°ΡΠ΅Π³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π°, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΈ ΡΠ°ΠΉΠ»Π°: ΡΠ°ΠΉΠ» ASCII ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ myfirst.tr, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ ΠΈΠ·ΡΡΠΈΠ»ΠΈ, ΡΠ°ΠΉΠ»Ρ myfirst-0-0.pcap ΠΈ myfirst-1-0.pcap β Π½ΠΎΠ²ΡΠ΅ pcap ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈ.
Π§ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ tcpdump
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ°ΠΉΠ»ΠΎΠ² pcap ΠΏΡΠΎΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ tcpdump.
$ tcpdump -nn -tt -r myfirst-0-0.pcap
reading from file myfirst-0-0.pcap, link-type PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
tcpdump -nn -tt -r myfirst-1-0.pcap
reading from file myfirst-1-0.pcap, link-type PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, length 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, length 1024
Π Π΄Π°ΠΌΠΏΠ΅ myfirst-0-0.pcap (ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ) Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΡ ΠΎ-ΠΏΠ°ΠΊΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ ΡΠΈΠΌΡΠ»ΡΡΠΈΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Π²ΡΠΎΡΠΎΠΉ Π΄Π°ΠΌΠΏ (myfirst-1-0.pcap), Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ 2,257324 ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ Π΄Π°ΠΌΠΏΠ΅, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ 2.257324 ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ Π΄Π°ΠΌΠΏΠ΅ Π² ΠΌΠΎΠΌΠ΅Π½Ρ 2.514648 ΡΠ΅ΠΊΡΠ½Π΄.
Π§ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Wireshark
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Wireshark, Π΅ΡΡΡ Π²Π΅Π±-ΡΠ°ΠΉΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°ΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ:
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com