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 ื˜ืจืึทืกืขืก
5.3.2 ืคึผืงืึทืคึผ ื˜ืจื™ื™ืก

Chapter 5

Customize

5.1 ื ื™ืฆืŸ ื“ื™ ืœืึธื’ื™ื ื’ ืžืึธื“ื•ืœืข

ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื‘ืขืงื™ืฆืขืจ ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ื“ื™ ns-3 ืœืึธื’ื™ื ื’ ืžืึธื“ื•ืœืข ื“ื•ืจืš ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืฉืจื™ืคื˜ first.cc. ืื™ืŸ ื“ืขื ืงืึทืคึผื™ื˜ืœ, ืžื™ืจ ื•ื•ืขืœืŸ ื ืขืžืขืŸ ืึท ื ืขืขื ื˜ืขืจ ืงื•ืง ืื™ืŸ ืžืขื’ืœืขืš ื ื™ืฆื˜ ืคึฟืึทืจ ื“ื™ ืœืึธื’ื™ื ื’ ืกืึทื‘ืกื™ืกื˜ืึทื.

5.1.1 ืœืึธื’ื™ื ื’ ืื™ื‘ืขืจื‘ืœื™ืง

ืคื™ืœืข ื’ืจื•ื™ืก ืกื™ืกื˜ืขืžืขืŸ ืฉื˜ื™ืฆืŸ ืขื˜ืœืขื›ืข ืžื™ืŸ ืคื•ืŸ ืึธื ื–ืึธื’ ืœืึธื’ื™ื ื’ ืžืขื›ื™ืจืขืก, ืื•ืŸ ns-3 ืื™ื– ืงื™ื™ืŸ ื•ื™ืกื ืขื. ืื™ืŸ ืขื˜ืœืขื›ืข ืงืึทืกืขืก, ื‘ืœื•ื™ื– ื˜ืขื•ืช ืึทืจื˜ื™ืงืœืขืŸ ื–ืขื ืขืŸ ื’ืขืฉืจื™ื‘ืŸ ืฆื• ื“ื™ "ืึธืคึผืขืจืึทื˜ืึธืจ ืงืึทื ืกืึธื•ืœ" (ื•ื•ืึธืก ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ืกื˜ื“ืขืจืจ ืื•ื™ืฃ ื™ื•ื ื™ืงืก-ื‘ืื–ื™ืจื˜ ืกื™ืกื˜ืขืžืขืŸ). ืื•ื™ืฃ ืื ื“ืขืจืข ืกื™ืกื˜ืขืžืขืŸ, ื•ื•ืืจืขื ื•ื ื’ ืึทืจื˜ื™ืงืœืขืŸ ืงืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื–ืŸ ืื•ืŸ ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข. ืื™ืŸ ืขื˜ืœืขื›ืข ืงืึทืกืขืก, ืœืึธื’ื™ื ื’ ืžื›ืฉื™ืจื™ื ื–ืขื ืขืŸ ื’ืขื ื™ืฆื˜ ืฆื• ืจืขื–ื•ืœื˜ืึทื˜ ื“ื™ื‘ืึทื’ ืึทืจื˜ื™ืงืœืขืŸ ื•ื•ืึธืก ืงืขื ืขืŸ ื’ืขืฉื•ื•ื™ื ื“ ื‘ืœืขืจ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜.

ื“ื™ ืกื•ื‘ื”ืจื“ ื’ืขื ื™ืฆื˜ ืื™ืŸ 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 ื•ื•ืขื˜ ืื•ื™ืš ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืึทืจื˜ื™ืงืœืขืŸ ืฆื•ื’ืขืฉื˜ืขืœื˜ ื“ื•ืจืš ื“ื™ ืžืึทืงืจืึธืก _LOG_RN.

ืžื™ืจ ืื•ื™ืš ืฆื•ืฉื˜ืขืœืŸ ืึท ื•ืžื‘ืึทื“ื™ื ื’ื˜ ืœืึธื’ื™ื ื’ ืžืึทืงืจืึธื• ื•ื•ืึธืก ืื™ื– ืฉื˜ืขื ื“ื™ืง ื’ืขื•ื•ื™ื–ืŸ, ืจืึทื’ืึทืจื“ืœืึทืก ืคื•ืŸ ื“ื™ ืœืึธื’ื™ื ื’ ืžื“ืจื’ื” ืึธื“ืขืจ ื“ื™ ืกืขืœืขืงืฆื™ืข ืงืึธืžืคึผืึธื ืขื ื˜.

  • NS_LOG_UNCOND - ื•ืžื‘ืึทื“ื™ื ื’ื˜ ืœืึธื’ื™ื ื’ ืคื•ืŸ ื“ื™ ืคึฟืึทืจื‘ื•ื ื“ืŸ ืึธื ื–ืึธื’ (ืงื™ื™ืŸ ืคึฟืึทืจื‘ื•ื ื“ืŸ ืœืึธื’ื™ื ื’ ืžื“ืจื’ื”).

ื™ืขื“ืขืจ ืžื“ืจื’ื” ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงื•ื•ืขืจื“ ื™ื ื“ื™ื•ื•ื™ื“ื–ืฉื•ืึทืœื™ ืึธื“ืขืจ ืงื™ื•ืžื™ืึทืœืึทื˜ื™ื•ื•. ืœืึธื’ื™ื ื’ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ืžื™ื˜ ื“ื™ sh ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง NS_LOG ืึธื“ืขืจ ื“ื•ืจืš ืœืึธื’ื™ื ื’ ืึท ืกื™ืกื˜ืขื ืคื•ื ืงืฆื™ืข ืจื•ืคืŸ. ื•ื•ื™ ื’ืขื•ื•ื™ื–ืŸ ืคืจื™ืขืจ, ื“ื™ ืœืึธื’ื™ื ื’ ืกื™ืกื˜ืขื ื”ืื˜ ื“ืึธืงืกื™ื’ืขืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื•ืŸ ืื™ืฆื˜ ืื™ื– ืึท ื’ื•ื˜ ืฆื™ื™ึทื˜ ืฆื• ืึธืคึผืฉืึทืฆืŸ ืขืก ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ื ื™ืฉื˜ ืฉื•ื™ืŸ.

ืื™ืฆื˜ ืึทื– ืื™ืจ ื”ืึธื˜ ืœื™ื™ืขื ืขืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืื™ืŸ ื’ืจื•ื™ืก ื“ืขื˜ืึทืœ, ืœืึธื–ืŸ ืื•ื ื“ื– ื ื•ืฆืŸ ื“ื™ ื•ื•ื™ืกืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืขื˜ืœืขื›ืข ื˜ืฉื™ืงืึทื•ื•ืข ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืคึฟื•ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืฉืจื™ืคื˜ 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

ืขืก ื˜ื•ืจื ืก ืื•ื™ืก ืึทื– ื“ื™ "ื’ืขืฉื™ืงื˜" ืื•ืŸ "ื‘ืืงื•ืžืขืŸ" ืึทืจื˜ื™ืงืœืขืŸ ืื™ืจ ื–ืขืŸ ืื•ื™ื‘ืŸ ื–ืขื ืขืŸ ืคืืงื˜ื™ืฉ ืœืึธื’ื“ ืึทืจื˜ื™ืงืœืขืŸ ืคื•ืŸ UdpEchoClient ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ะธ UdpEchoServer ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ืงืขื ืขืŸ ืคืจืขื’ืŸ ื“ืขื ืงืœื™ืขื ื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืฆื• ื“ืจื•ืงืŸ ื ืึธืš ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื“ื•ืจืš ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื–ื™ื™ึทืŸ ืœืึธื’ื™ื ื’ ืžื“ืจื’ื” ื“ื•ืจืš ื“ื™ NS_LOG ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง.

ืคึฟื•ืŸ ืื™ืฆื˜ ืื•ื™ืฃ, ืื™ืš ื‘ื™ืŸ ื’ืขื’ืื ื’ืขืŸ ืฆื• ื™ื‘ืขืจื ืขืžืขืŸ ืึทื– ืื™ืจ ื ื•ืฆืŸ ืึท ืฉ-ื•ื•ื™ ืฉืึธืœ ื•ื•ืึธืก ื ื™ืฆื˜ ื“ื™ "VARIABLE = ื•ื•ืขืจื˜" ืกื™ื ื˜ืึทืงืก. ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ ืึท csh-ื•ื•ื™ ืฉืึธืœ, ืื™ืจ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื• ื’ืขืจ ืžื™ื™ืŸ ื‘ื™ื™ืฉืคื™ืœืŸ ืฆื• ื“ื™ "ืกืขื˜ืขื ื•ื• ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ื•ื•ืขืจื˜" ืกื™ื ื˜ืึทืงืก ืคืืจืœืื ื’ื˜ ื“ื•ืจืš ื“ื™ ืฉืขืœื–.

ื“ืขืจื•ื•ื™ื™ึทืœ, ื“ื™ 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 ืฆื• ื“ื™ ืคืืœื’ืขื ื“ืข ื•ื•ืขืจื˜,

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 ืกื™ืกื˜ืขื ืื™ื– ื ื™ืฉื˜ ืคืืจืœืื ื’ื˜ ืฆื• ืฉื˜ื™ืฆืŸ ืงื™ื™ืŸ ืœืึธื’ื™ื ื’ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™. ื“ืขืจ ื‘ืึทืฉืœื•ืก ื•ื•ืขื’ืŸ ื•ื•ื™ ืคื™ืœ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ื– ืจืขืงืึธืจื“ืขื“ ืื™ื– ืœื™ื ืงืก ืฆื• ื“ืขืจ ื™ื—ื™ื“ ืžืึธื“ืขืœ ื“ืขื•ื•ืขืœืึธืคึผืขืจ. ืื™ืŸ ื“ื™ ืคืึทืœ ืคื•ืŸ ืขืงืึธื• ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–, ืึท ื’ืจื•ื™ืก ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืœืึธื’ื™ื ื’ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ื‘ื ื™ืžืฆื.

ืื™ืจ ืงืขื ื˜ ืื™ืฆื˜ ื–ืขืŸ ืึท ืงืœืึธืฅ ืคื•ืŸ ืคื•ื ืงืฆื™ืข ืงืึทืœืœืก ื•ื•ืึธืก ื–ืขื ืขืŸ ื’ืขืžืื›ื˜ ื“ื•ืจืš ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืื•ื™ื‘ ืื™ืจ ืงื•ืง ืขื ื’, ืื™ืจ ื•ื•ืขื˜ ื‘ืึทืžืขืจืงืŸ ืึท ืฆื•ื•ื™ื™ืคึผื™ื ื˜ืœ ืฆื•ื•ื™ืฉืŸ ื“ื™ ืฉื•ืจื” UdpEchoClient ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืื•ืŸ ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ืขื ืื•ืคึฟืŸ, ื•ื•ื• ืื™ืจ ืงืขืŸ ื“ืขืจื•ื•ืึทืจื˜ืŸ ืฆื• ื–ืขืŸ ื“ื™ C ++ ืคืึทืจื ืขื ืึธืคึผืขืจืึทื˜ืึธืจ (: :). ื“ืืก ืื™ื– ื‘ื›ื•ื•ื ื”.

ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืงืœืึทืก, ืึธื‘ืขืจ ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืœืึธื’ื™ื ื’ ืงืึธืžืคึผืึธื ืขื ื˜. ื•ื•ืขืŸ ืขืก ืื™ื– ืึท ื’ืœื™ื™ึทื›ืŸ ืฆื•ื•ื™ืฉืŸ ืึท ืžืงื•ืจ ื˜ืขืงืข ืื•ืŸ ืึท ืงืœืึทืก, ืขืก ืื™ื– ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื“ืขืจ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืงืœืึทืก, ืึธื‘ืขืจ ืื™ืจ ื–ืึธืœ ืคืึทืจืฉื˜ื™ื™ืŸ ืึทื– ืขืก ืื™ื– ื ื™ืฉื˜ ื“ื™ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืงืœืึทืก, ืื•ืŸ ืขืก ืื™ื– ืึท ืื™ื™ืŸ ืฆื•ื•ื™ื™ืคึผื™ื ื˜ืœ ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืึท ื˜ืึธืคึผืœ ืฆื•ื•ื™ื™ืคึผื™ื ื˜ืœ. ื“ืึธืก ืื™ื– ืึท ื•ื•ืขื’ ืฆื• ื”ืขืœืคึฟืŸ ืื™ืจ ืงืึทื ืกืขืคึผื˜ืฉื•ืึทืœื™ ื‘ืึทื–ื•ื ื“ืขืจ ื“ื™ ืœืึธื’ื™ื ื’ ื‘ืขื‘ืœ ื ืึธืžืขืŸ ืคื•ืŸ ื“ื™ ืงืœืึทืก ื ืึธืžืขืŸ ืื•ื™ืฃ ืึท ืœืขืคื™ืขืจืขืš ืกืึทื˜ืึทืœ ื•ื•ืขื’.

ืึธื‘ืขืจ, ืื™ืŸ ืขื˜ืœืขื›ืข ืงืึทืกืขืก, ืขืก ืงืขืŸ ื–ื™ื™ืŸ ืฉื•ื•ืขืจ ืฆื• ื‘ืึทืฉืœื™ืกืŸ ื•ื•ืึธืก ืื•ืคึฟืŸ ืื™ื– ืึทืงืฉืœื™ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื“ื™ ืงืœืึธืฅ ืึธื ื–ืึธื’. ืื•ื™ื‘ ืื™ืจ ืงื•ืง ืื™ืŸ ื“ืขื ื˜ืขืงืกื˜ ืื•ื™ื‘ืŸ, ืื™ืจ ืงืขืŸ ื–ื™ื™ืŸ ื•ื•ืึทื ื“ืขืจื™ื ื’ ื•ื•ื• ื“ื™ ืฉื•ืจื” "Received 1024 bytes from 10.1.1.2" ืื™ืจ ืงืขื ืขืŸ ืกืึธืœื•ื•ืข ื“ืขื ืคึผืจืึธื‘ืœืขื ื“ื•ืจืš ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ ืžื“ืจื’ื” prefix_func ืฆื• ื“ื™ NS_LOG ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง. ืคึผืจื•ึผื•ื•ื˜ ื“ื™ ืคืืœื’ืขื ื“ืข:

$ export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func'

ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– ื“ื™ ืฆื™ื˜ืึทื˜ ืžืึทืจืงืก ื–ืขื ืขืŸ ื ื™ื™ื˜ื™ืง ื•ื•ื™ื™ึทืœ ื“ื™ ื•ื•ืขืจื˜ื™ืงืึทืœ ื‘ืึทืจ ื•ื•ืึธืก ืžื™ืจ ื ื•ืฆืŸ ืฆื• ืคืึธืจืฉื˜ืขืœืŸ ื“ื™ OR ืึธืคึผืขืจืึทืฆื™ืข ืื™ื– ืื•ื™ืš ืึท ื™ื•ื ื™ืงืก ืจืขืจ ืงืึทื ืขืงื˜ืขืจ. ืื™ืฆื˜ ืื•ื™ื‘ ืื™ืจ ืœื•ื™ืคืŸ ื“ืขื ืฉืจื™ืคื˜, ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ืึทื– ื“ื™ ืœืึธื’ื™ื ื’ ืกื™ืกื˜ืขื ื™ื ืฉื•ืจื– ืึทื– ื™ืขื“ืขืจ ืึธื ื–ืึธื’ ืื™ืŸ ืึท ื’ืขื’ืขื‘ืŸ ืงืœืึธืฅ ืื™ื– ืคึผืจืขืคื™ืงืกื˜ ืžื™ื˜ ื“ื™ ืงืึธืžืคึผืึธื ืขื ื˜ ื ืึธืžืขืŸ.

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()

ืขืก ืื™ื– ืื•ื™ืš ืžืืœ ื ื•ืฆื™ืง ืฆื• ื–ืขืŸ ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ ืฆื™ื™ื˜ ืื™ืŸ ื•ื•ืึธืก ื“ื™ ืงืœืึธืฅ ืึธื ื–ืึธื’ ืื™ื– ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“. ืื™ืจ ืงืขื ืขืŸ ื˜ืึธืŸ ื“ืึธืก ื“ื•ืจืš ืึทื“ื™ื ื’ ื“ื™ OR ื‘ื™ืกืœ 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 ืกื˜ืึทืจื˜ืขื“ ื“ื™ ืขืงืึธื• ืกืขืจื•ื•ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื™ืŸ ืจื’ืข ืื™ื™ื“ืขืจ ื“ื™ ืึธื ื”ื™ื™ื‘ ืคื•ืŸ ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ. ืื™ืฆื˜ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืึทื– ื“ืขืจ ืื•ืคึฟืŸ ืึธื ื”ื™ื™ื‘ ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ื“ืขืจ ืกืขืจื•ื•ืขืจ ืื™ื– ืคืืงื˜ื™ืฉ ื’ืขืจื•ืคืŸ ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืจื’ืข. ืื™ืจ ืงืขืŸ ืื•ื™ืš ื‘ืึทืžืขืจืงืŸ ืึทื– ื“ืขืจ ื•ื•ื™ื“ืขืจืงืึธืœ ืงืœื™ืขื ื˜ ืกื˜ืึทืจืฅ ืื™ืŸ ื“ื™ ืจื’ืข ืจื’ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ, ื•ื•ื™ ืžื™ืจ ื’ืขื‘ืขื˜ืŸ ืื™ืŸ ื“ื™ ืฉืจื™ืคื˜.

ืื™ืจ ืงืขื ื˜ ืื™ืฆื˜ ื ืึธื›ื’ื™ื™ืŸ ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ ืคึผืจืึธื’ืจืขืก ืื•ื™ืฃ ืจื•ืคืŸ ืกืงืขื“ื–ืฉื•ืœื˜ืจืึทื ืกืžื™ื˜ ืื™ืŸ ื“ืขื ืงืœื™ืขื ื˜ ื•ื•ืึธืก ืจื•ืคื˜ ื“ื™ 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 ืึทื“ื™ื ื’ ืœืึธื’ื™ื ื’ ืฆื• ื“ื™ื™ืŸ ืงืึธื“

ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ื ื™ื™ึทืข ืื™ื™ื ืกืŸ ืฆื• ื“ื™ื™ืŸ ืกื™ืžื™ืึทืœื™ื™ืฉืึทื ื– ื“ื•ืจืš ืจื•ืคืŸ ื“ื™ ืงืœืึธืฅ ืงืึธืžืคึผืึธื ืขื ื˜ ืคึฟื•ืŸ ืงื™ื™ืคืœ ืžืึทืงืจืึธืก. ื–ืืœ ืก ื˜ืึธืŸ ืขืก ืื™ืŸ ืึท ืฉืจื™ืคื˜ myfirst.cc, ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ืื™ืŸ ื“ื™ "ืจื™ื™ืŸ" ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ. ืฆื•ืจื™ืงืจื•ืคืŸ ืึทื– ืžื™ืจ ื“ื™ืคื™ื™ื ื“ ืึท ืœืึธื’ื™ื ื’ ืงืึธืžืคึผืึธื ืขื ื˜ ืื™ืŸ ื“ืขื ืกืฆืขื ืึทืจ:

NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");

ืื™ืจ ื–ืขื ื˜ ืึทื•ื•ืขืจ ืึทื– ืื™ืจ ืงืขื ืขืŸ ื’ืขื‘ืŸ ืœืึธื’ื™ื ื’ ืคื•ืŸ ืึทืœืข ืึทืจื˜ื™ืงืœืขืŸ ืคื•ืŸ ื“ืขื ืงืึธืžืคึผืึธื ืขื ื˜ ื“ื•ืจืš ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ื™ NS_LOG ืกื•ื•ื™ื•ื•ืข ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืœืขื•ื•ืขืœืก. ื–ืืœ ืก ื’ื™ื™ืŸ ืคืึธืจื•ื™ืก ืื•ืŸ ืœื™ื™ื’ืŸ ืขื˜ืœืขื›ืข ืื™ื™ื ืกืŸ ืฆื• ื“ื™ ืฉืจื™ืคื˜. ื“ืขืจ ืžืึทืงืจืึธื• ื’ืขื ื™ืฆื˜ ืฆื• ืœื™ื™ื’ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืžื“ืจื’ื” ืึทืจื˜ื™ืงืœืขืŸ ืฆื• ื“ื™ ืงืœืึธืฅ ืื™ื– NS_LOG_INFO. ืœืึธืžื™ืจ ืœื™ื™ื’ืŸ ืึท ืึธื ื–ืึธื’ (ื ืึธืจ ืื™ื™ื“ืขืจ ืžื™ืจ ืึธื ื”ื™ื™ื‘ืŸ ืงืจื™ื™ื™ื˜ื™ื ื’ ื ืึธื•ื“ื–) ื•ื•ืึธืก ื“ืขืจืฆื™ื™ืœื˜ ืื™ืจ ืึทื– ื“ื™ ืฉืจื™ืคื˜ ืื™ื– ืื™ืŸ ื“ื™ "ืงืจืขืึทื˜ื™ื ื’ ื˜ืึธืคึผืึธืœืึธื’ื™" ืคืึทืกืข. ื“ืึธืก ืื™ื– ื’ืขื˜ืืŸ ืื™ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ืงืึธื“ ืกื ื™ืคึผืึทื˜,
Open up 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 ืžื™ื˜ ืึท ืžื“ืจื’ื” ื ื™ื˜ ื ื™ื“ืขืจื™ืงืขืจ ื•ื•ื™ 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 ืœื•ื™ืคืŸ ืฉืจื™ืคื˜ ืงืจืึทืฆืŸ / ืžื™ื™ืŸ ืขืจืฉื˜ืขืจ ืื•ืŸ ืคืึธืจืŸ ืขืก ืึท ื‘ืึทืคึฟืขืœ ืฉื•ืจื” ืึทืจื’ื•ืžืขื ื˜ - ืคึผืจื™ื ื˜ ื”ื™ืœืฃ. ื“ื™ ืฆื™ื˜ืึทื˜ ืžืึทืจืงืก ื–ืขื ืขืŸ ืคืืจืœืื ื’ื˜ ืฆื• ืึธื ื•ื•ื™ื™ึทื–ืŸ ื•ื•ืึธืก ืคึผืจืึธื’ืจืึทื ื“ื™ ืึทืจื’ื•ืžืขื ื˜ ืื™ื– ื‘ื“ืขื” ืคึฟืึทืจ. ื“ืขืจ ื‘ืึทืคึฟืขืœ ืฉื•ืจื” ืคึผืึทืจืกืขืจ ื•ื•ืขื˜ ื“ืขื˜ืขืงื˜ ื“ืขื ืึทืจื’ื•ืžืขื ื˜ - ืคึผืจื™ื ื˜ ื”ื™ืœืฃ ืื•ืŸ ื•ื•ืขื˜ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืขื ื˜ืคืขืจ,

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.

ืื™ืฆื˜ ืœืึธื–ืŸ ืก ืงื•ืง ืื™ืŸ ื“ื™ ืึธืคึผืฆื™ืข - ืคึผืจื™ื ื˜ ืึทื˜ืจื™ื‘ื™ื•ืฅ. ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื“ืขืจืžืื ื˜ ื“ื™ 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. ืžื™ืจ ื•ื•ืขืœืŸ ืึธื•ื•ื•ืขืจืจื™ื™ื“ ื“ืขื ืคืขืœื™ืงื™ื™ึทื˜ ื•ื•ืขืจื˜ ื ื™ืฆืŸ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ ืึทื˜ืจื™ื‘ื™ื•ื˜ ะฒ PointToPointHelper ื”ืขื›ืขืจ. ืœืึธืžื™ืจ ื ื•ืฆืŸ ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ื•ื•ืึทืœื•ืขืก ืคึฟืึทืจ ืคื•ื ื˜-ืฆื•-ืคื•ื ื˜ ื“ืขื•ื•ื™ืกืขืก ืื•ืŸ ื˜ืฉืึทื ืึทืœื–. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื•ื•ืขืœืŸ ื•ื™ืกืžืขืงืŸ ืงืึทืœืœืก SetDeviceAttribute ะธ SetChannelAttribute ืคื•ืŸ myfirst.cc, ื•ื•ืึธืก ืžื™ืจ ื”ืึธื‘ืŸ ืื™ืŸ ืึท ืจื™ื™ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ.

ื“ื™ื™ืŸ ืฉืจื™ืคื˜ ื–ืึธืœ ืื™ืฆื˜ ืคืฉื•ื˜ ื“ืขืจืงืœืขืจืŸ PointToPointHelper ืื•ืŸ ื˜ืึธืŸ ื ื™ื˜ ื“ื•ืจื›ืคื™ืจืŸ ืงื™ื™ืŸ ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืึทืคึผืขืจื™ื™ืฉืึทื ื– ื•ื•ื™ ื’ืขื•ื•ื™ื–ืŸ ืื™ืŸ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ืื•ื ื˜ืŸ,

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

ื’ื™ื™ืŸ ืคืึธืจื•ื™ืก ืื•ืŸ ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืฉืจื™ืคื˜ ืžื™ื˜ 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.

ืื•ื™ื‘ ืื™ืจ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื“ื™ "ืคึผืจื™ื ื˜ื’ืจื•ืคึผืก" ืึทืจื’ื•ืžืขื ื˜ ืื™ืจ ื–ืึธืœ ื–ืขืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ืึทืœืข ืจืขื’ื™ืกื˜ืจื™ืจื˜ ื’ืจื•ืคึผืขืก 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 ืื™ืŸ ืึท ืคึฟื•ื ืงืฆื™ืข ื”ื•ื™ืคึผื˜. ืžื™ืจ ืฉื˜ืขืœืŸ ืขืก ืฆื• ืื™ื™ืŸ ืฆื• ื’ืœื™ื™ึทื›ืŸ ืื•ื ื“ื–ืขืจ ืคืจื™ืขืจื“ื™ืงืŸ ืคืขืœื™ืงื™ื™ึทื˜ ื ืึทื˜ื•ืจ. ืฆื• ืœืึธื–ืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืคึผืึทืจืกืขืจ ืฆื• ื˜ื•ื™ืฉืŸ ื“ืขื ื•ื•ืขืจื˜, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื›ืึทืคึผืŸ ื“ืขื ื•ื•ืขืจื˜ ืื™ืŸ ื“ื™ ืคึผืึทืจืกืขืจ. ืžื™ืจ ื˜ืึธืŸ ื“ืึธืก ื“ื•ืจืš ืึทื“ื™ื ื’ ืึท ืจื•ืคืŸ 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 ืึทืกืงื™ ื˜ืจื™ื™ืกื™ื ื’

ns-3 ื’ื™ื˜ ื”ืขืœืคึผืขืจ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ื•ื•ืึธืก ื’ื™ื˜ ืึท ื ื™ื“ืขืจื™ืง-ืžื“ืจื’ื” ื˜ืจื™ื™ืกื™ื ื’ ืกื™ืกื˜ืขื ืฆื• ื”ืขืœืคึฟืŸ ืื™ืจ ืžื™ื˜ ื“ื™ ื“ืขื˜ืึทื™ืœืก ื•ื•ืขืŸ ืื™ืจ ืฉื˜ืขืœืŸ ืคึผืฉื•ื˜ ืคึผืึทืงืึทื˜ ื˜ืจืึทืกืขืก. ืื•ื™ื‘ ืื™ืจ ื’ืขื‘ืŸ ื“ืขื ืฉื˜ืจื™ืš, ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ืŸ ASCII ื˜ืขืงืขืก. ืคึฟืึทืจ ื™ืขื ืข ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ns-2 ืจืขื–ื•ืœื˜ืึทื˜, ื“ืขื ื˜ื™ืคึผ ืคื•ืŸ ืฉืคึผื•ืจ ืื™ื– ืขื ืœืขืš ืฆื• out.tr, ื•ื•ืึธืก ืื™ื– ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“ ื“ื•ืจืš ืคื™ืœืข ืกืงืจื™ืคึผืก.

ืœืึธืžื™ืจ ื’ื™ื™ืŸ ืฆื• ื’ืขืฉืขืคื˜ ืื•ืŸ ืœื™ื™ื’ืŸ ืขื˜ืœืขื›ืข ASCII ื˜ืจื™ื™ืกื™ื ื’ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืฆื• ืื•ื ื“ื–ืขืจ ืงืจืึทืฆืŸ/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, ื˜ืจืึทืงื˜ events ื–ืขื ืขืŸ ืขืงื•ื•ื™ื•ื•ืึทืœืขื ื˜ ืฆื• ื“ื™ ื‘ืึทื•ื•ื•ืกื˜ ื˜ืจืึทืกืขืคึผืึธื™ื ืฅ ื•ื•ืึธืก ืงืœืึธืฅ ื’ืขืฉืขืขื ื™ืฉืŸ "+", "-", "ื“" ืื•ืŸ "ืจ".
ืื™ืฆื˜ ืื™ืจ ืงืขื ืขืŸ ื‘ื•ื™ืขืŸ ื“ืขื ืฉืจื™ืคื˜ ืื•ืŸ ืœื•ื™ืคืŸ ืขืก ืคึฟื•ืŸ ื“ื™ ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื”:

$ ./waf --run scratch/myfirst

ื•ื•ื™ ืคื™ืœืข ืžืึธืœ ืคืจื™ืขืจ, ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ืขื˜ืœืขื›ืข ืึทืจื˜ื™ืงืœืขืŸ ืคึฟื•ืŸ ื•ื•ืึทืฃ, ืื•ืŸ ื“ืขืจื ืึธืš "ื‘ื•ื™ืขืŸ" ื”ืฆืœื—ื” ื’ืขืขื ื“ื™ืงื˜ ืžื™ื˜ ืขื˜ืœืขื›ืข ืึทืจื˜ื™ืงืœืขืŸ ืคึฟื•ืŸ ื“ื™ ืคืœื™ืกื ื“ื™ืง ืคึผืจืึธื’ืจืึทื.

ื•ื•ืขืŸ ืคืœื™ืกื ื“ื™ืง, ื“ื™ ืคึผืจืึธื’ืจืึทื ื•ื•ืขื˜ ืžืึทื›ืŸ ืึท ื˜ืขืงืข ื’ืขื”ื™ื™ืกืŸ myfirst.tr. ืจืขื›ื˜ ืฆื• ื“ืขืจ ื ืึทื˜ื•ืจ ืคื•ืŸ ื“ืขืจ ืึทืจื‘ืขื˜ Waf, ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ื“ื™ ื˜ืขืงืข ืื™ื– ื‘ืืฉืืคืŸ ื ื™ืฉื˜ ืื™ืŸ ื“ื™ ื”ื™ื’ืข ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ, ืึธื‘ืขืจ ืื™ืŸ ื“ื™ ืฉืคึผื™ืฅ-ืžื“ืจื’ื” ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคื•ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื˜ื•ื™ืฉืŸ ื“ืขื ื“ืจืš ื•ื•ื• ื˜ืจืึทืกืขืก ื–ืขื ืขืŸ ื’ืขืจืื˜ืขื•ื•ืขื˜, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ Waf ืคึผืึทืจืึทืžืขื˜ืขืจ ืฆื• ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ืขืก --cwd. ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื’ืขื˜ืืŸ ื“ืขื, ืึทื–ื•ื™ ืฆื• ืงื•ืงืŸ ืื™ืŸ ื“ื™ ASCII ืฉืคึผื•ืจ ื˜ืขืงืข myfirst.tr ืื™ืŸ ื“ื™ื™ืŸ ื‘ืึทืœื™ื‘ืกื˜ืข ืจืขื“ืึทืงื˜ืึธืจ, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื ืึทื•ื•ื™ื’ื™ืจืŸ ืฆื• ื“ื™ ืฉืคึผื™ืฅ-ืžื“ืจื’ื” ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™.

ืคึผืึทืจืกื™ื ื’ ASCII ื˜ืจืึทืกืขืก

ืขืก ืื™ื– ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื™ืŸ ืึท ืคืขืจืœื™ ื’ืขื“ื™ื›ื˜ ืคืึธืจืขื, ืึธื‘ืขืจ ื“ืขืจ ืขืจืฉื˜ืขืจ ื–ืึทืš ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทืžืขืจืงืŸ ืื™ื– ืึทื– ื“ื™ ื˜ืขืงืข ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ ื™ื—ื™ื“ ืฉื•ืจื•ืช. ื“ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืœืืจ ืงืขื ื˜ื™ืง ืื•ื™ื‘ ืื™ืจ ื™ืงืกืคึผืึทื ื“ ื“ื™ ื•ื•ื™ื•ื™ื ื’ ืคึฟืขื ืฆื˜ืขืจ ื•ื•ื™ื“ืขืจ.

ื™ืขื“ืขืจ ืฉื•ืจื” ืื™ืŸ ื“ืขืจ ื˜ืขืงืข ืงืึธืจืึทืกืคึผืึทื ื“ื– ืฆื• ืึท ืฉืคึผื•ืจ ื’ืขืฉืขืขื ื™ืฉ. ืื™ืŸ ื“ืขื ืคืึทืœ, ืžื™ืจ ืฉืคึผื•ืจ ื’ืขืฉืขืขื ื™ืฉืŸ ืื™ืŸ ื“ื™ ื˜ืจืึทื ืกืžื™ืกื™ืข ืจื™ื™ ืคืึธืจืฉื˜ืขืœืŸ ืื™ืŸ ื™ืขื“ืขืจ ืคื•ื ื˜-ืฆื•-ืคื•ื ื˜ ื ืขืฅ ืžื™ื˜ืœ ืื™ืŸ ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ. ื“ื™ ื˜ืจืึทื ืกืžื™ืกื™ืข ืจื™ื™ ืื™ื– ื“ื™ ืจื™ื™ ื“ื•ืจืš ื•ื•ืึธืก ื™ืขื“ืขืจ ืคึผืึทืงืึทื˜ ืžื•ื–ืŸ ืคืึธืจืŸ ืคึฟืึทืจ ืึท ืคื•ื ื˜-ืฆื•-ืคื•ื ื˜ ืœื™ื ืง. ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– ื™ืขื“ืขืจ ืฉื•ืจื” ืื™ืŸ ื“ื™ ืฉืคึผื•ืจ ื˜ืขืงืข ืกื˜ืึทืจืฅ ืžื™ื˜ ืึท ืื™ื™ืŸ ื›ืึทืจืึทืงื˜ืขืจ (ืื•ืŸ ื”ืื˜ ืึท ืคึผืœืึทืฅ ื ืึธืš ืขืก). ื“ืขืจ ืกื™ืžื‘ืึธืœ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ื“ื™ ืคืืœื’ืขื ื“ืข ื˜ื™ื™ึทื˜ืฉ:

+: ืึท ืจื™ื™ ืึธืคึผืขืจืึทืฆื™ืข ืื™ื– ืคืืจื’ืขืงื•ืžืขืŸ ืื•ื™ืฃ ื“ื™ ืžื™ื˜ืœ ืจื™ื™;
-: ืึทืŸ ืขืœืขืžืขื ื˜ ืจื™ื˜ืจื™ื•ื•ืึทืœ ืึธืคึผืขืจืึทืฆื™ืข ืื™ื– ืคืืจื’ืขืงื•ืžืขืŸ ืื™ืŸ ื“ื™ ืžื™ื˜ืœ ืจื™ื™;
ื“: ื“ื™ ืคึผืึทืงืึทื˜ ืื™ื– ื’ืขืคืืœืŸ, ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื•ื•ื™ื™ึทืœ ื“ื™ ืจื™ื™ ืื™ื– ื’ืขื•ื•ืขืŸ ืคื•ืœ;
ืจ: ื“ื™ ืคึผืึทืงืึทื˜ ืื™ื– ื‘ืืงื•ืžืขืŸ ื“ื•ืจืš ืึท ื ืขืฅ ืžื™ื˜ืœ.

ื–ืืœ ืก ื ืขืžืขืŸ ืึท ื ืขืขื ื˜ืขืจ ืงื•ืง ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ืฉื•ืจื” ืื™ืŸ ื“ื™ ืฉืคึผื•ืจ ื˜ืขืงืข. ืื™ืš ื•ื•ืขื˜ ื‘ืจืขื›ืŸ ืขืก ืึทืจืึธืคึผ ืื™ืŸ ืคึผืึทืจืฅ (ืžื™ื˜ ื™ื ื“ืขื ื˜ื™ื™ืฉืึทื ื– ืคึฟืึทืจ ืงืœืขืจื™ื˜ื™) ืื•ืŸ ื“ื™ ืฉื•ืจื” ื ื•ืžืขืจ ืื•ื™ืฃ ื“ื™ ืœื™ื ืงืก:

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) ืื™ื– ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ ืฆื™ื™ื˜, ืื•ื™ืกื’ืขื“ืจื™ืงื˜ ืื™ืŸ ืกืขืงื•ื ื“ืขืก. ืื™ืจ ืงืขืŸ ื’ืขื“ืขื ืงืขืŸ ื•ื•ืึธืก ืžื™ืจ ื’ืขื‘ืขื˜ืŸ UdpEchoClient ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืึธื ื”ื™ื™ื‘ ืฉื™ืงืŸ ืคึผืึทืงื™ืฅ ืื™ืŸ ืฆื•ื•ื™ื™ ืกืขืงื•ื ื“ืขืก. ื“ืึธ ืžื™ืจ ื–ืขืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงื•ื ื’ ืึทื– ื“ืึธืก ืื™ื– ื˜ืึทืงืข ื’ืขืฉืขืขื ื™ืฉ.

ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึธืคึผื˜ื™ื™ืœื•ื ื’ ืคื•ืŸ ื“ื™ ืฉืคึผื•ืจ ื‘ื™ื™ืฉืคึผื™ืœ (ืคึฟื•ืŸ ืฉื•ืจื” 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)

ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– ื“ื™ ืฉืคึผื•ืจ ืึธืคึผืขืจืึทืฆื™ืข ืื™ื– ืื™ืฆื˜ ืจ ืื•ืŸ ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ ืฆื™ื™ื˜ ืื™ื– ื’ืขื•ื•ืืงืกืŸ ืฆื• 2,25732 ืกืขืงื•ื ื“ืขืก. ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ื ืื›ื’ืขื’ืื ื’ืขืŸ ื“ื™ ื˜ื•ื˜ืึธืจื™ืึทืœ ืงืขืจืคืึทืœื™, ื“ืึธืก ืžื™ื˜ืœ ืึทื– ืื™ืจ ืœื™ื ืงืก ื“ื™ ื“ืึทื˜ืึทืจืึทื˜ืข ืื•ืŸ ืœื™ื ืง ืคืึทืจื”ืึทืœื˜ืŸ ืคื•ืŸ ื“ื™ ื ืขืฅ ื“ืขื•ื•ื™ืกืขืก ืื™ืŸ ื–ื™ื™ืขืจ ืคืขืœื™ืงื™ื™ึทื˜ ื•ื•ืึทืœื•ืขืก. ื“ืขื ื’ืขืฉืคึผืึทื ื˜ ื–ืึธืœ ื–ื™ื™ืŸ ื‘ืึทืงืึทื ื˜, ื•ื•ื™ ืื™ืจ ื”ืึธื˜ ื’ืขื–ืขืŸ ืื™ืŸ ื“ื™ ืคืจื™ืขืจื“ื™ืงืข ืึธืคึผื˜ื™ื™ืœื•ื ื’.

ื“ื™ ืฉืคึผื•ืจ ืžืงื•ืจ ื ืึทืžืขืกืคึผื™ื™ืก ืคึผืึธื–ื™ืฆื™ืข (ืฉื•ืจื” 2) ืื™ื– ืžืึทื“ืึทืคื™ื™ื“ ืฆื• ืคืึทืจื˜ืจืึทื›ื˜ื  ื–ื™ืš ืึทื– ื“ื™ ื’ืขืฉืขืขื ื™ืฉ ืขืจื™ื“ื–ืฉืึทื ื™ื™ืฅ ืคื•ืŸ ื ืึธื“ืข 1 (/NodeList/1) ืื•ืŸ ื“ื™ ืคึผืึทืงืึทื˜ ืื™ื– ื‘ืืงื•ืžืขืŸ ื“ื•ืจืš ื“ื™ ืฉืคึผื•ืจ ืžืงื•ืจ (/MacRx). ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ื’ืึทื ืฅ ื’ืจื™ื ื’ ืคึฟืึทืจ ืื™ืจ ืฆื• ื ืึธื›ืคืึธืœื’ืŸ ื“ื™ ื‘ืึทื•ื•ืขื’ื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืึทืงืึทื˜ ื“ื•ืจืš ื“ื™ ื˜ืึธืคึผืึธืœืึธื’ื™ ื“ื•ืจืš ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืจื•ืขืŸ ื˜ืจืึทืกืขืก ืื™ืŸ ื“ืขืจ ื˜ืขืงืข.

5.3.2 ืคึผืงืึทืคึผ ื˜ืจื™ื™ืก

ื“ื™ ns-3 ื“ื™ื•ื•ื™ื™ืก ื”ืขืœืคึผืขืจืก ืงืขื ืขืŸ ืื•ื™ืš ื–ื™ื™ืŸ ื’ืขื ื™ืฆื˜ ืฆื• ืฉืึทืคึฟืŸ ืฉืคึผื•ืจ ื˜ืขืงืขืก ืื™ืŸ .ืคึผืงืึทืคึผ ืคึฟืึธืจืžืึทื˜. ืึทืงืจืึทื ื™ื pcap (ื™ื•ื–ืฉืึทื•ื•ืึทืœื™ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ืœืึธื•ื•ืขืจืงืึทืกืข) ืฉื˜ื™ื™ื˜ ืคึฟืึทืจ ืคึผืึทืงืึทื˜ ื›ืึทืคึผืŸ ืื•ืŸ ืื™ื– ืคืืงื˜ื™ืฉ ืึทืŸ ืึทืคึผื™ ื•ื•ืึธืก ื›ื•ืœืœ ื“ื™ืคื™ื™ื ื™ื ื’ ื“ื™ .ืคึผืงืึทืคึผ ื˜ืขืงืข ืคึฟืึธืจืžืึทื˜. ื“ื™ ืžืขืจืกื˜ ืคืึธืœืงืก ืคึผืจืึธื’ืจืึทื ื•ื•ืึธืก ืงืขื ืขืŸ ืœื™ื™ืขื ืขืŸ ืื•ืŸ ืึทืจื•ื™ืกื•ื•ื™ื™ึทื–ืŸ ื“ืขื ืคึฟืึธืจืžืึทื˜ ืื™ื– ื•ื•ื™ืจืขืฉืึทืจืง (ืคืจื™ืขืจ ื’ืขืจื•ืคืŸ ืขื˜ื”ืขืจืขืึทืœ). ืึธื‘ืขืจ, ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืคืึทืจืงืขืจ ืฉืคึผื•ืจ ืึทื ืึทืœื™ื–ืขืจื– ื•ื•ืึธืก ื ื•ืฆืŸ ื“ืขื ืคึผืึทืงืึทื˜ ืคึฟืึธืจืžืึทื˜. ืžื™ืจ ืžื•ื˜ื™ืงืŸ ื™ื•ื–ืขืจื– ืฆื• ื ื•ืฆืŸ ื“ื™ ืคื™ืœืข ืžื›ืฉื™ืจื™ื ื‘ื ื™ืžืฆื ืฆื• ืคื•ื ืึทื ื“ืขืจืงืœื™ื™ึทื‘ืŸ ืคึผืงืึทืคึผ ื˜ืจืึทืกืขืก. ืื™ืŸ ื“ืขื ื˜ื•ื˜ืึธืจื™ืึทืœ ืžื™ืจ ื•ื•ืขืœืŸ ืคืึธืงื•ืก ืื•ื™ืฃ ื•ื•ื™ื•ื™ื ื’ ืคึผืงืึทืคึผ ื˜ืจืึทืกืขืก ื ื™ืฆืŸ ื˜ืงืคึผื“ื•ืžืคึผ.

ื’ืขื‘ืŸ ืคึผืงืึทืคึผ ื˜ืจื™ื™ืกื™ื ื’ ืื™ื– ื’ืขื˜ืืŸ ืžื™ื˜ ืื™ื™ืŸ ืฉื•ืจื” ืคื•ืŸ ืงืึธื“.

pointToPoint.EnablePcapAll ("myfirst");

ืคึผืึทืคึผ ื“ื™ ืฉื•ืจื” ืคื•ืŸ ืงืึธื“ ื ืึธืš ื“ื™ ASCII ืฉืคึผื•ืจ ืงืึธื“ ื•ื•ืึธืก ืžื™ืจ ื ืึธืจ ืฆื•ื’ืขื’ืขื‘ืŸ scratch/myfirst.cc. ื‘ืึทืžืขืจืงื•ื ื’ ืึทื– ืžื™ืจ ื ืึธืจ ื“ื•ืจื›ื’ืขื’ืื ื’ืขืŸ ื“ื™ ืฉื˜ืจื™ืงืœ "myfirst", ื ื™ืฉื˜ "myfirst.pcap" ืึธื“ืขืจ ืขืคึผืขืก ืขื ืœืขืš. ื“ืึธืก ืื™ื– ื•ื•ื™ื™ึทืœ ื“ืขืจ ืคึผืึทืจืึทืžืขื˜ืขืจ ืื™ื– ืึท ืคึผืจืขืคื™ืงืก, ื ื™ืฉื˜ ืึท ืคื•ืœ ื˜ืขืงืข ื ืึธืžืขืŸ. ื‘ืขืฉืึทืก ื“ื™ ืกื™ืžื™ืึทืœื™ื™ืฉืึทืŸ, ื“ืขืจ ืึทืกื™ืกื˜ืึทื ื˜ ื•ื•ืขื˜ ืึทืงืฉืœื™ ืžืึทื›ืŸ ืึท ืฉืคึผื•ืจ ื˜ืขืงืข ืคึฟืึทืจ ื™ืขื“ืขืจ ืคื•ื ื˜-ืฆื•-ืคื•ื ื˜ ืžื™ื˜ืœ. ื˜ืขืงืข ื ืขืžืขืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืงืึทื ืกื˜ืจืึทืงื˜ืึทื“ ืžื™ื˜ ื“ื™ ืคึผืจืขืคื™ืงืก, ื ืึธื“ืข ื ื•ืžืขืจ, ืžื™ื˜ืœ ื ื•ืžืขืจ ืื•ืŸ ืกืึทืคื™ืงืก ".pcap'.

ืคึฟืึทืจ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ืฉืคึผื™ืœ ืฉืจื™ืคื˜, ืžื™ืจ ื•ื•ืขืœืŸ ืกื•ืฃ ืึทืจื•ื™ืฃ ื–ืขืŸ ื˜ืขืงืขืก ื’ืขื”ื™ื™ืกืŸ "myfirst-0-0.pcap"ืื•ืŸ"myfirst-1-0.pcap", ื•ื•ืึธืก ื–ืขื ืขืŸ ืคึผืงืึทืคึผ ื˜ืจืึทืกืขืก ืคึฟืึทืจ ื ืึธื“ืข 0-ืžื™ื˜ืœ 0 ืื•ืŸ ื ืึธื“ืข 1-ืžื™ื˜ืœ 0 ืจื™ืกืคึผืขืงื˜ื™ื•ื•ืœื™. ืึทืžืึธืœ ืื™ืจ ื”ืึธื˜ ืฆื•ื’ืขืœื™ื™ื’ื˜ ื“ื™ ืฉื•ืจื” ืคื•ืŸ ืงืึธื“ ืฆื• ื’ืขื‘ืŸ ืคึผืงืึทืคึผ ื˜ืจื™ื™ืกื™ื ื’, ืื™ืจ ืงืขื ืขืŸ ืœื•ื™ืคืŸ ื“ื™ ืฉืจื™ืคื˜ ืื•ื™ืฃ ื“ื™ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ื•ื•ืขื’:

$ ./waf --run scratch/myfirst

ืื•ื™ื‘ ืื™ืจ ืงื•ืง ืื™ืŸ ื“ื™ ืฉืคึผื™ืฅ-ืžื“ืจื’ื” ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืคื•ืŸ ื“ื™ื™ืŸ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’, ืื™ืจ ื–ืึธืœ ื–ืขืŸ ื“ืจื™ื™ ื˜ืขืงืขืก: ืึท ASCII ืฉืคึผื•ืจ ื˜ืขืงืข myfirst.tr, ืฐืขืœื› ืข ืžื™ ืจ ื”ืื‘ ืŸ ืคืจื™ืข ืจ ืฉื˜ื•ื“ื™ืจื˜ , ืคื™ื™ืœืก myfirst-0-0.pcap ะธ myfirst-1-0.pcap - ื ื™ื™ึท ืคึผืงืึทืคึผ ื˜ืขืงืขืก ืึทื– ืžื™ืจ ืคึผื•ื ืงื˜ ื“ื–ืฉืขื ืขืจื™ื™ื˜ืึทื“.

ืœื™ื™ืขื ืขืŸ ืจืขื–ื•ืœื˜ืึทื˜ ืžื™ื˜ tcpdump

ืคึฟืึทืจ ืื™ืฆื˜, ื“ื™ ื™ื–ื™ืึทืกื˜ ื•ื•ืขื’ ืฆื• ื–ืขืŸ ืคึผืงืึทืคึผ ื˜ืขืงืขืก ืื™ื– ืฆื• ื ื•ืฆืŸ 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

ืื•ื™ื‘ ืื™ืจ ื–ืขื ื˜ ื ื™ืฉื˜ ื‘ืึทืงืึทื ื˜ ืžื™ื˜ ื•ื•ื™ืจืขืฉืึทืจืง, ืขืก ืื™ื– ืึท ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ืคื•ืŸ ื•ื•ืึธืก ืื™ืจ ืงืขื ืขืŸ ืืจืืคืงืืคื™ืข ืžื’ื™ืœื” ืื•ืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ: http://www.wireshark.org/. ื•ื•ื™ืจืขืฉืึทืจืง ืื™ื– ืึท GUI ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืฉืคึผื•ืจ ื˜ืขืงืขืก. ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ Wireshark, ืื™ืจ ืงืขื ืขืŸ ืขืคึฟืขื ืขืŸ ืงื™ื™ืŸ ืคื•ืŸ ื“ื™ ืฉืคึผื•ืจ ื˜ืขืงืขืก ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ืื™ื ื”ืึทืœื˜ ื•ื•ื™ ืื•ื™ื‘ ืื™ืจ ื”ืึธื˜ ืงืึทืคึผื˜ืฉืขืจื“ ื“ื™ ืคึผืึทืงื™ืฅ ืžื™ื˜ ืึท ืคึผืึทืงืึทื˜ ืกื ื™ืคืขืจ.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’