Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатор Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ns-3. Π“Π»Π°Π²Π° 5

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ симулатор Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ns-3. Π“Π»Π°Π²Π° 5
Π³Π»Π°Π²ΠΈ 1,2
Π³Π»Π°Π²Π° 3
Π³Π»Π°Π²Π° 4

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Много Π³ΠΎΠ»Π΅ΠΌΠΈ систСми ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ срСдства Π·Π° рСгистриранС Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΈ ns‑3 Π½Π΅ Π΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ някои случаи, Π² 'ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°' (която ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ stderr Π² Unix-Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ систСми) сС записват само ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’ Π΄Ρ€ΡƒΠ³ΠΈ систСми ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°Π²Π°Ρ‰ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° информация. Π’ някои случаи, срСдствата Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π±ΡŠΡ€Π·ΠΎ Π΄Π° 'размият' ΠΈΠ·Ρ…ΠΎΠ΄Π°.

5.1.1 ΠŸΡ€Π΅Π³Π»Π΅Π΄ Π½Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ΡŠΡ‚, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ns‑3, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°, Ρ‡Π΅ всички Ρ‚Π΅Π·ΠΈ Π½ΠΈΠ²Π° Π½Π° информативност са ΠΏΠΎΠ»Π΅Π·Π½ΠΈ, ΠΈ прСдоставямС сСлСктивСн, многослоСн ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π° рСгистрация Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Π›ΠΎΠ³ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС напълно ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π·Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΈΠ»ΠΈ Π² Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΌΠ°Ρ‰Π°Π±. Π—Π° Ρ‚ΠΎΠ²Π° слуТат настраиваСмитС Π½ΠΈΠ²Π° Π½Π° информативност. ΠœΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ Π½Π° ns‑3 осигурява относитСлно прост Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Π° информация ΠΎΡ‚ симулацията Π²ΠΈ.

Врябва Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ прСдоставямС унивСрсалСн ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ β€” прослСдяванС β€” Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ Π²ΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ трябва Π΄Π° бъдС ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π½ Π·Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ ΠΏΡ€ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π½Π΅ (Π·Π° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π° информация относно Π½Π°ΡˆΠ°Ρ‚Π° систСма Π·Π° прослСдяванС Π²ΠΈΠΆΡ‚Π΅ част 5.3). Π›ΠΎΠ³ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ трябва Π΄Π° бъдС прСдпочитаният ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΎΡ‚Π»Π°Π΄ΡŠΡ‡Π½Π° информация, прСдупрСТдСния, ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈΠ»ΠΈ Π·Π° Π±ΡŠΡ€Π·ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ сцСнарии ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎ всяко Π²Ρ€Π΅ΠΌΠ΅.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π² систСмата са ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ сСдСм Π½ΠΈΠ²Π° (Ρ‚ΠΈΠΏΠΎΠ²Π΅) ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π»ΠΎΠ³ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ Π²ΡŠΠ·Ρ…ΠΎΠ΄ΡΡ‰Π° информативност.

LOG_ERROR β€” рСгистриранС Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ (ΡΠ²ΡŠΡ€Π·Π°Π½ макрос: NS_LOG_ERROR);

  • 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: Π’Π»ΠΈΠ·Π°ΠΌ Π² дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\nWaf: Излизам ΠΎΡ‚ дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build' 'build'\nΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ (0.413s)\nΠ˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2\nΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1\nΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.2

Оказва сС, Ρ‡Π΅ Β«ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈΡ‚Π΅Β» ΠΈ Β«ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡ‚Π΅Β» ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈΠΆΠ΄Π°Ρ‚Π΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ са рСгистрирани ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ UdpEchoClientApplication ΠΈ UdpEchoServerApplication. НапримСр, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠΌΠΎΠ»ΠΈΠΌ клиСнтското ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π° ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° информация, ΠΊΠ°Ρ‚ΠΎ Π·Π°Π΄Π°Π΄Π΅ΠΌ Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° Π»ΠΎΠ³Π²Π°Π½Π΅ Ρ‡Ρ€Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π½Π° срСдата NS_LOG.

ΠžΡ‚ Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°Ρ‚Π°Ρ‚ΡŠΠΊ Ρ‰Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ°, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ shell, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° sh, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° синтаксиса Β«VARIABLE = valueΒ». Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ shell, ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° csh, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‰Π΅ трябва Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚Π΅ ΠΌΠΎΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π² синтаксиса Β«setenv VARIABLE valueΒ», изискуван ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ shell.

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ UDP echo-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отговаря Π½Π° слСдния Ρ€Π΅Π΄ ΠΊΠΎΠ΄ Π² 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-shell-Π°,

UdpEchoClientApplication=level_all

Лявата част Π½Π° присвояванСто Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ искамС Π΄Π° рСгистрирамС, Π° дясната част Π΅ Ρ„Π»Π°Π³ΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ искамС Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΠΌ Π·Π° Π½Π΅Π³ΠΎ. Π’ Ρ‚ΠΎΠ·ΠΈ случай Ρ‰Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°ΠΌΠ΅ всички Π½ΠΈΠ²Π° Π½Π° отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Ако стартиратС скрипта с Π·Π°Π΄Π°Π΄Π΅Π½Π° ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ NS_LOG, систСмата Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ ns-3 Ρ‰Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΈ трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ слСдния ΠΈΠ·Ρ…ΠΎΠ΄:

Waf: Π’Π»ΠΈΠ·Π°ΠΌ Π² дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\nWaf: Излизам ΠΎΡ‚ дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'\n'build' ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ (0.404s)\nUdpEchoClientApplication:UdpEchoClient()\nUdpEchoClientApplication:SetDataSize(1024)\nUdpEchoClientApplication:StartApplication()\nUdpEchoClientApplication:ScheduleTransmit()\nUdpEchoClientApplication:Send()\nΠ˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2\nΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1\nUdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)\nΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.2\nUdpEchoClientApplication:StopApplication()\nUdpEchoClientApplication:DoDispose()\nUdpEchoClientApplication:~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: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
Waf: ИзлизанС ΠΎΡ‚ дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
'build' Π·Π°Π²ΡŠΡ€ΡˆΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (0.417s)
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1
UdpEchoClientApplication:HandleRead(0x6241e0, 0x624a20)
UdpEchoClientApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 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: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
Waf: ИзлизанС ΠΎΡ‚ дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
'build' Π·Π°Π²ΡŠΡ€ΡˆΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (0.406s)
UdpEchoServerApplication:UdpEchoServer()
UdpEchoClientApplication:UdpEchoClient()
UdpEchoClientApplication:SetDataSize(1024)
UdpEchoServerApplication:StartApplication()
UdpEchoClientApplication:StartApplication()
UdpEchoClientApplication:ScheduleTransmit()
UdpEchoClientApplication:Send()
UdpEchoClientApplication:Send(): Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2
UdpEchoServerApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1
UdpEchoServerApplication:HandleRead(): Π•Ρ…ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°
UdpEchoClientApplication:HandleRead(0x624920, 0x625160)
UdpEchoClientApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 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: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСкторията `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build` 
Waf: ИзлизанС ΠΎΡ‚ дирСкторията `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build` 
`build` ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (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(): Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2 
2.00369s UdpEchoServerApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1 
2.00369s UdpEchoServerApplication:HandleRead(): ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° 
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0) 
2.00737s UdpEchoClientApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.2 
10s UdpEchoServerApplication:StopApplication() 
10s UdpEchoClientApplication:StopApplication() 
UdpEchoClientApplication:DoDispose() 
UdpEchoServerApplication:DoDispose() 
UdpEchoClientApplication:~UdpEchoClient() 
UdpEchoServerApplication:~UdpEchoServer()

ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ΡŠΡ‚ Π·Π° UdpEchoServer Π΅ Π±ΠΈΠ» ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° симулацията 0 сСкунди. Π’ΠΎΠ²Π° Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС случва ΠΏΡ€Π΅Π΄ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° симулацията, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ сС ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ Π½ΡƒΠ»Π° сСкунди. Π‘ΡŠΡ‰ΠΎΡ‚ΠΎ Π²Π°ΠΆΠΈ ΠΈ Π·Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° конструктора UdpEchoClient.

Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСкторията `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build` 
Waf: ИзлизанС ΠΎΡ‚ дирСкторията `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build` 
`build` ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (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(): Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2 
2.00369s UdpEchoServerApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1 
2.00369s UdpEchoServerApplication:HandleRead(): ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° 
2.00737s UdpEchoClientApplication:HandleRead(0x624290, 0x624ad0) 
2.00737s UdpEchoClientApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.2 
10s UdpEchoServerApplication:StopApplication() 
10s UdpEchoClientApplication:StopApplication() 
UdpEchoClientApplication:DoDispose() 
UdpEchoServerApplication:DoDispose() 
UdpEchoClientApplication:~UdpEchoClient() 
UdpEchoServerApplication:~UdpEchoServer()

НСка ΠΏΡ€ΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, Ρ‡Π΅ ΡΠΊΡ€ΠΈΠΏΡ‚ΡŠΡ‚ scratch/first.cc стартира ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π·Π° Π΅Ρ…ΠΎ-ΡΡŠΡ€Π²ΡŠΡ€ Π΅Π΄Π½Π° сСкунда ΠΏΡ€Π΅Π΄ΠΈ Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° симулацията. Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ StartApplication Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π² ΠΏΡŠΡ€Π²Π°Ρ‚Π° сСкунда. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅, Ρ‡Π΅ Π΅Ρ…ΠΎ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ сС стартира във Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° сСкунда Π½Π° симулацията, ΠΊΠ°ΠΊΡ‚ΠΎ поискахмС Π² скрипта.

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° слСдитС Ρ…ΠΎΠ΄Π° Π½Π° симулацията ΠΏΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ScheduleTransmit Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅ 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

Ако Π²ΠΈΠ΅ сСга стартиратС скрипта, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½ΠΎΠ²ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ «БъздаванС Π½Π° топология»

Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
Waf: ИзлизанС ΠΎΡ‚ дирСктория `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
`build` ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠΈ (0.404s)
БъздаванС Π½Π° топология
Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 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: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
Waf: ИзлизанС ΠΎΡ‚ дирСктория `/home/craigdo/repos/ns-3-allinone/ns-3-dev/build`
`build` ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠΈ (0.413s)
TcpL4Protocol:TcpStateMachine()
CommandLine:HandleArgument(): ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠΌΠ΅=PrintHelp стойност=
--PrintHelp: ΠŸΠ΅Ρ‡Π°Ρ‚Π° Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π·Π° ΠΏΠΎΠΌΠΎΡ‰.
--PrintGroups: ΠŸΠ΅Ρ‡Π°Ρ‚Π° списъка с Π³Ρ€ΡƒΠΏΠΈ.
--PrintTypeIds: ΠŸΠ΅Ρ‡Π°Ρ‚Π° всички TypeIds.
--PrintGroup=[group]: ΠŸΠ΅Ρ‡Π°Ρ‚Π° всички TypeIds Π½Π° Π³Ρ€ΡƒΠΏΠ°Ρ‚Π°.
--PrintAttributes=[typeid]: ΠŸΠ΅Ρ‡Π°Ρ‚Π° всички Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈ Π½Π° typeid.
--PrintGlobals: ΠŸΠ΅Ρ‡Π°Ρ‚Π° списъка с Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ.

Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ опцията --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]:
Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Π°Ρ‚Π° скорост Π½Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π·Π° Ρ‚ΠΎΡ‡ΠΊΠΎΠ²ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ

Π’ΠΎΠ²Π° Π΅ стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, която Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² систСмата ΠΏΡ€ΠΈ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚. PointToPointNetDevice. НиС Ρ‰Π΅ ΠΏΡ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚Π°Π·ΠΈ стойност ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° Атрибут Π² PointToPointHelper ΠΏΠΎ-Π³ΠΎΡ€Π΅. НСка Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ стойноститС ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° Ρ‚ΠΎΡ‡ΠΊΠΎΠ²ΠΈΡ‚Π΅ устройства ΠΈ ΠΊΠ°Π½Π°Π»ΠΈ. Π—Π° Ρ†Π΅Π»Ρ‚Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ΠΌ извикванията Π½Π° SetDeviceAttribute ΠΈ SetChannelAttribute ΠΎΡ‚ myfirst.cc, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² чистата дирСктория.

Π’Π°ΡˆΠΈΡΡ‚ скрипт трябва сСга просто Π΄Π° Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π° PointToPointHelper ΠΈ Π΄Π° Π½Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ настройка, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ,

...
NodeContainer nodes;
nodes.Create (2);
PointToPointHelper pointToPoint;
NetDeviceContainer devices;
devices = pointToPoint.Install (nodes);
...

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Ρ‚Π΅ ΠΈ ΡΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ² скрипт с Waf (. /waf) ΠΈ Π½Π΅ΠΊΠ° Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ Π½Π°Π·Π°Π΄ ΠΈ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ запис ΠΎΡ‚ UDP echo ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ врСмСвия прСфикс.

$ export 'NS_LOG=UdpEchoServerApplication=level_all|prefix_time'

Ако стартиратС скрипта, трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ слСдния ΠΈΠ·Ρ…ΠΎΠ΄:

Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория ` /home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
Waf: ИзлизанС ΠΎΡ‚ дирСктория ` /home/craigdo/repos/ns-3-allinone/ns-3-dev/build'
'build' ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (0.405s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2
2.25732s ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1
2.25732s Echoing packet
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.2
10s UdpEchoServerApplication:StopApplication()
UdpEchoServerApplication:DoDispose()
UdpEchoServerApplication:~UdpEchoServer()

Π‘ΠΏΠΎΠΌΠ½Π΅Ρ‚Π΅ си, Ρ‡Π΅ миналия ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Ρ…ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° симулация, ΠΌΠΎΠΌΠ΅Π½Ρ‚ΡŠΡ‚ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΎΡ‚ echo ΡΡŠΡ€Π²ΡŠΡ€Π° бСшС Π½Π° 2.00369 сСкунди.

2.00369s UdpEchoServerApplication:HandleRead(): ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 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]:
ЗабавянСто Π½Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ ΠΏΡ€Π΅Π· ΠΊΠ°Π½Π°Π»Π°

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π· систСмата Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ Ρ€Π΅Π΄ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ стойности ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅,

$ .\/waf --run "scratch\/myfirst
--ns3::PointToPointNetDevice::DataRate=5Mbps
--ns3::PointToPointChannel::Delay=2ms"

Π² Ρ‚ΠΎΠ·ΠΈ случай Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°Ρ…ΠΌΠ΅, ΠΊΠΎΠ³Π°Ρ‚ΠΎ явно Π·Π°Π΄Π°Π»ΠΈ DataRate ΠΈ Delay Π² сцСнария:

Waf: Π’Π»ΠΈΠ·Π°Π½Π΅ Π² дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
Waf: ИзлизанС ΠΎΡ‚ дирСктория `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
'build' Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (0.417s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
Π˜Π·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° Π΄ΠΎ 10.1.1.2
2.00369s ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1
2.00369s ΠžΡ‚Ρ€Π°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π°
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 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: Π’Ρ…ΠΎΠ΄ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
Waf: Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
'build' Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (0.403s)
--PrintHelp: ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ этого сообщСния ΠΏΠΎΠΌΠΎΡ‰ΠΈ.
--PrintGroups: ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ списка Π³Ρ€ΡƒΠΏΠΏ.
--PrintTypeIds: ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ всСх TypeIds.
--PrintGroup=[group]: ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ всСх TypeIds Π³Ρ€ΡƒΠΏΠΏΡ‹.
--PrintAttributes=[typeid]: ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ всСх Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² typeid.
--PrintGlobals: ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ списка Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:
--nPackets: ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для эха

Ако искатС Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ количСството ΠΏΡ€Π΅Π΄Π°Π²Π°Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, ΠΊΠ°Ρ‚ΠΎ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ - -nPackets Π² командния Ρ€Π΅Π΄,

$ .\/waf --run "scratch\/myfirst --nPackets=2"

Π‘Π΅Π³Π° трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅

Waf: Π’Ρ…ΠΎΠ΄ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
Waf: Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ `\/home\/craigdo\/repos\/ns-3-allinone\/ns-3-dev\/build'
'build' Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ (0.404s)
0s UdpEchoServerApplication:UdpEchoServer()
1s UdpEchoServerApplication:StartApplication()
ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ 1024 Π±Π°ΠΉΡ‚Π° Π½Π° 10.1.1.2
2.25732s ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1
2.25732s Π­Ρ…ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.2
ΠžΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ 1024 Π±Π°ΠΉΡ‚Π° Π½Π° 10.1.1.2
3.25732s ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 10.1.1.1
3.25732s Π­Ρ…ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ 1024 Π±Π°ΠΉΡ‚Π° ΠΎΡ‚ 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 (\n4   Point-to-Point Protocol: IP (0x0021))\n6   ns3::Ipv4Header (\n7     tos 0x0 ttl 64 id 0 protocol 17 offset 0 flags [none]\n8     length: 1052 10.1.1.1 > 10.1.1.2)\n9     ns3::UdpHeader (\n10      length: 1032 49153 > 9)\n11      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β€œ ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ. Π’ΠΎΠ²Π° Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ Π΅ прСфикс, Π° Π½Π΅ пълно ΠΈΠΌΠ΅ Π½Π° Ρ„Π°ΠΉΠ». По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° симулацията ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΡŠΡ‚ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Ρ‰Π΅ създадС Ρ„Π°ΠΉΠ» Π·Π° трасировка Π·Π° всяко устройство point-to-point. Π˜ΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° прСфикса, Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° възСла, Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° устройството ΠΈ суфикса β€ž.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

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°ΠΉ-лСсно Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° tcpdump Π·Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° pcap Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅.

$ tcpdump -nn -tt -r myfirst-0-0.pcap
Ρ‡Π΅Ρ‚Π° ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π° myfirst-0-0.pcap, Ρ‚ΠΈΠΏ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° PPP (PPP)
2.000000 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, дълТина 1024
2.514648 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, дълТина 1024
tcpdump -nn -tt -r myfirst-1-0.pcap
Ρ‡Π΅Ρ‚Π° ΠΎΡ‚ Ρ„Π°ΠΉΠ»Π° myfirst-1-0.pcap, Ρ‚ΠΈΠΏ Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° PPP (PPP)
2.257324 IP 10.1.1.1.49153 > 10.1.1.2.9: UDP, дълТина 1024
2.257324 IP 10.1.1.2.9 > 10.1.1.1.49153: UDP, дълТина 1024

Π’ Π΄Π°ΠΌΠΏΠ° myfirst-0-0.pcap (клиСнтско устройство) ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ Π΅Ρ…ΠΎ-ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° слСд 2 сСкунди симулация. Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ втория Π΄Π°ΠΌΠΏ (myfirst-1-0.pcap), Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ 2.257324 сСкунди. Π©Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ във втория Π΄Π°ΠΌΠΏ, Ρ‡Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ сС Π²Ρ€ΡŠΡ‰Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ 2.257324 сСкунди ΠΈ, накрая, Ρ‡Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΡŠΡ‚ Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΏΡŠΡ€Π²ΠΈΡ Π΄Π°ΠΌΠΏ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ 2.514648 сСкунди.

Π§Π΅Ρ‚Π΅Π½Π΅ Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° с Wireshark

Ако Π½Π΅ стС Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ с Wireshark, ΠΈΠΌΠ° уСбсайт, ΠΎΡ‚ ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΈ докумСнтация: http://www.wireshark.org/. Wireshark β€” Ρ‚ΠΎΠ²Π° Π΅ Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ потрСбитСлски интСрфСйс, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π·Π° Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° трасировка. Ако ΠΈΠΌΠ°Ρ‚Π΅ Wireshark, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ ΠΊΠΎΠΉΡ‚ΠΎ ΠΈ Π΄Π° Π΅ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π·Π° трасировка ΠΈ Π΄Π° Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Π°ΠΊΠΎ стС Π·Π°Ρ…Π²Π°Π½Π°Π»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster